commit 6366331f551736d6c7d8b720da59cfa2b8bdf9a9 Author: xuanchen <122383162@qq.com> Date: Thu Sep 17 09:00:08 2020 +0800 first diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0f40cee --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +/storage +/vendor +/.idea +/test +.env diff --git a/README.md b/README.md new file mode 100644 index 0000000..81f2f62 --- /dev/null +++ b/README.md @@ -0,0 +1,78 @@ +

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 1500 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell). + +- **[Vehikl](https://vehikl.com/)** +- **[Tighten Co.](https://tighten.co)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Cubet Techno Labs](https://cubettech.com)** +- **[Cyber-Duck](https://cyber-duck.co.uk)** +- **[British Software Development](https://www.britishsoftware.co)** +- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** +- **[DevSquad](https://devsquad.com)** +- [UserInsights](https://userinsights.com) +- [Fragrantica](https://www.fragrantica.com) +- [SOFTonSOFA](https://softonsofa.com/) +- [User10](https://user10.com) +- [Soumettre.fr](https://soumettre.fr/) +- [CodeBrisk](https://codebrisk.com) +- [1Forge](https://1forge.com) +- [TECPRESSO](https://tecpresso.co.jp/) +- [Runtime Converter](http://runtimeconverter.com/) +- [WebL'Agence](https://weblagence.com/) +- [Invoice Ninja](https://www.invoiceninja.com) +- [iMi digital](https://www.imi-digital.de/) +- [Earthlink](https://www.earthlink.ro/) +- [Steadfast Collective](https://steadfastcollective.com/) +- [We Are The Robots Inc.](https://watr.mx/) +- [Understand.io](https://www.understand.io/) +- [Abdel Elrafa](https://abdelelrafa.com) +- [Hyper Host](https://hyper.host) +- [Appoly](https://www.appoly.co.uk) +- [OP.GG](https://op.gg) + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/app/Admin/Controllers/Advert/IndexController.php b/app/Admin/Controllers/Advert/IndexController.php new file mode 100644 index 0000000..4664171 --- /dev/null +++ b/app/Admin/Controllers/Advert/IndexController.php @@ -0,0 +1,81 @@ +actions(function ($actions) { + $actions->disableView(); + }); + + $grid->filter(function ($filter) { + $filter->column(1 / 2, function ($filter) { + $filter->like('title', '广告名称'); + $filter->like('category.id', '分类名称')->select(Category::selectOptions(function ($model) { + return $model->where('status', 1)->where('type', Category::TYPE_ADVERT); + }, '所有分类')); + }); + $filter->disableIdFilter(); + }); + + $grid->column('id'); + $grid->column('cover', '图片')->image('', 60, 60); + $grid->column('category.title', '分类名称'); + $grid->column('title', '广告名称'); + $grid->column('url', '地址'); + $grid->column('sort', '排序'); + + return $grid; + } + + /** + * Make a form builder. + * @return Form + */ + protected function form() + { + $form = new Form(new Advert); + + $form->text('title', '广告名称')->required(); + $form->select('category_id', '所属分类') + ->options(Category::selectOptions(function ($model) { + return $model->where('status', 1)->where('type', Category::TYPE_ADVERT); + }, '选择分类')) + ->rules('required|min:1', [ + 'required' => '必须选择所属分类', + 'min' => '必须选择所属分类', + ]); + $form->image('cover', '封面图片') + ->rules(function ($form) { + if ($form->model()->cover != []) { + return 'nullable|image'; + } else { + return 'required'; + } + }) + ->move('images/' . date('Y/m/d')) + ->removable() + ->uniqueName(); + $form->text('url', '链接地址'); + $form->number('sort', '排序') + ->default(1) + ->required() + ->help('数字越大越靠前'); + + return $form; + } + +} diff --git a/app/Admin/Controllers/Article/IndexController.php b/app/Admin/Controllers/Article/IndexController.php new file mode 100644 index 0000000..0d117dd --- /dev/null +++ b/app/Admin/Controllers/Article/IndexController.php @@ -0,0 +1,70 @@ +model()->orderBy('id', 'desc'); + $grid->filter(function ($filter) { + $filter->column(1 / 2, function ($filter) { + $filter->like('title', '文章标题'); + $filter->equal('category.id', '所属分类')->select(Category::selectOptions(function ($model) { + return $model->where('status', 1)->whereIn('type', [Category::TYPE_ARTICLE, Category::TYPE_SHOW]); + }, '所有分类')); + }); + + $filter->disableIdFilter(); + }); + + $grid->column('id', '#ID#'); + $grid->column('cover', '封面图片')->image('', 100); + $grid->column('category.title', '所属分类'); + $grid->column('title', '文章标题'); + $grid->column('sort', '序号'); + $states = [ + 'on' => ['value' => 1, 'text' => '打开', 'color' => 'primary'], + 'off' => ['value' => 2, 'text' => '关闭', 'color' => 'default'], + ]; + $grid->column('status', '状态')->switch($states); + $grid->column('created_at', '创建时间'); + + return $grid; + } + + public function form() + { + $form = new Form(new Article); + + $form->text('title', '文章标题')->rules('min:2'); + $form->select('category_id', '所属分类') + ->options(Category::selectOptions(function ($model) { + return $model->where('status', 1)->whereIn('type', [Category::TYPE_ARTICLE, Category::TYPE_SHOW]); + }, '选择分类')) + ->rules('required|min:1', [ + 'required' => '必须选择所属分类', + 'min' => '必须选择所属分类', + ]); + $form->textarea('description', '内容简介')->rules('max:350'); + $form->image('cover', '封面') + ->move('images/' . date('Y/m/d')) + ->removable() + ->uniqueName(); + $form->ueditor('content', '文章内容')->rules('required', ['required' => '详情不能为空']); + $form->number('sort', '序号')->default(0)->rules('required', ['required' => '序号必须填写'])->help('倒序优先'); + + return $form; + } + +} diff --git a/app/Admin/Controllers/AuthController.php b/app/Admin/Controllers/AuthController.php new file mode 100644 index 0000000..3488577 --- /dev/null +++ b/app/Admin/Controllers/AuthController.php @@ -0,0 +1,10 @@ +column(6, $this->treeView()); + + $row->column(6, function (Column $column) { + $form = new WidgetsForm(); + + $form->select('parent_id', '上级分类')->options(Category::selectOptions(function ($model) { + return $model->where('status', 1); + }, '一级分类')); + $form->text('title', '分类名称')->rules('required'); + $form->select('type', '分类类型') + ->options(Category::TYPES) + ->when('show', function (WidgetsForm $form) { + $form->select('article_id', '关联文章') + ->options(function ($option, $info) { + return Article::whereHas('category', function ($q) { + $q->where('type', 'show'); + })->pluck('title', 'id'); + })->help('当分类类型是文章详情的时候需要选择关联文章'); + }) + ->required(); + $form->textarea('description', '分类简介') + ->rules('nullable'); + $form->image('cover', 'Logo') + ->move('images/' . date('Y/m/d')) + ->removable() + ->uniqueName(); + $form->number('order', '排序')->default(0); + $form->switch('top_show', '顶部导航显示')->states()->default(0); + $form->switch('status', '显示')->states()->default(1); + $form->action(admin_url('categories')); + + $column->append((new Box('新增分类', $form))->style('success')); + }); + }; + } + + /** + * @return Tree + */ + protected function treeView() + { + return Category::tree(function (Tree $tree) { + $tree->disableCreate(); + + $tree->branch(function ($branch) { + if ($branch['status'] == 1) { + $payload = " "; + } else { + $payload = " "; + } + $payload .= " [ID:{$branch['id']}] - "; + $payload .= " {$branch['title']} "; + $payload .= " {$branch['type']} "; + $payload .= " {$branch['description']}"; + + return $payload; + }); + }); + } + + /** + * Make a form builder. + * @return Form + */ + protected function form() + { + $form = new Form(new Category); + + $form->select('parent_id', '上级分类')->options(Category::selectOptions(function ($model) { + return $model->where('status', 1); + }, '一级分类')); + $form->text('title', '分类名称')->rules('required'); + $form->select('type', '分类类型') + ->options(Category::TYPES) + ->when('show', function (Form $form) { + $form->select('article_id', '关联文章') + ->options(function ($option, $info) { + return Article::whereHas('category', function ($q) { + $q->where('type', 'show'); + })->pluck('title', 'id'); + })->help('当分类类型是文章详情的时候需要选择关联文章'); + }) + ->required() + ->rules('required'); + $form->textarea('description', '分类简介')->rows(4)->rules('nullable'); + $form->image('cover', 'Logo') + ->move('images/' . date('Y/m/d')) + ->removable() + ->uniqueName(); + $form->number('order', '排序')->default(0)->help('正序优先'); + + $form->switch('status', '显示')->states()->default(1); + $form->switch('top_show', '顶部导航显示')->states()->default(0); + + $form->saving(function (Form $form) { + + if (request()->has('title')) { + if (request()->type == Category::TYPE_SHOW && empty(request()->article_id)) { + // $error = new MessageBag([ + // 'title' => '错误', + // 'message' => '文章类型是文章详情的时候需要选择关联文章', + // ]); + // + // return back()->withInput()->with(compact('error')); + } + } + + }); + + return $form; + } + + public function destroy($id) + { + return $this->form()->destroy($id); + } + +} diff --git a/app/Admin/Controllers/ExampleController.php b/app/Admin/Controllers/ExampleController.php new file mode 100644 index 0000000..b45a92c --- /dev/null +++ b/app/Admin/Controllers/ExampleController.php @@ -0,0 +1,67 @@ +column('id', __('ID'))->sortable(); + $grid->column('created_at', __('Created at')); + $grid->column('updated_at', __('Updated at')); + + return $grid; + } + + /** + * Make a show builder. + * + * @param mixed $id + * @return Show + */ + protected function detail($id) + { + $show = new Show(ExampleModel::findOrFail($id)); + + $show->field('id', __('ID')); + $show->field('created_at', __('Created at')); + $show->field('updated_at', __('Updated at')); + + return $show; + } + + /** + * Make a form builder. + * + * @return Form + */ + protected function form() + { + $form = new Form(new ExampleModel); + + $form->display('id', __('ID')); + $form->display('created_at', __('Created At')); + $form->display('updated_at', __('Updated At')); + + return $form; + } +} diff --git a/app/Admin/Controllers/HomeController.php b/app/Admin/Controllers/HomeController.php new file mode 100644 index 0000000..12b80f3 --- /dev/null +++ b/app/Admin/Controllers/HomeController.php @@ -0,0 +1,34 @@ +title('Dashboard') + ->description('Description...') + ->row(Dashboard::title()) + ->row(function (Row $row) { + + $row->column(4, function (Column $column) { + $column->append(Dashboard::environment()); + }); + + $row->column(4, function (Column $column) { + $column->append(Dashboard::extensions()); + }); + + $row->column(4, function (Column $column) { + $column->append(Dashboard::dependencies()); + }); + }); + } +} diff --git a/app/Admin/Controllers/Link/IndexController.php b/app/Admin/Controllers/Link/IndexController.php new file mode 100644 index 0000000..91814fe --- /dev/null +++ b/app/Admin/Controllers/Link/IndexController.php @@ -0,0 +1,37 @@ +column('id', '#ID#'); + $grid->column('title', '标题'); + $grid->column('url', '地址'); + $grid->column('created_at', '创建时间'); + + return $grid; + } + + public function form() + { + $form = new Form(new Link); + + $form->text('title', '标题')->required(); + $form->text('url', '地址')->required(); + + return $form; + } + +} diff --git a/app/Admin/Routes/advert.php b/app/Admin/Routes/advert.php new file mode 100644 index 0000000..db2a0b4 --- /dev/null +++ b/app/Admin/Routes/advert.php @@ -0,0 +1,12 @@ + config('admin.route.prefix'), + 'namespace' => config('admin.route.namespace') . '\\Advert', + 'middleware' => config('admin.route.middleware'), +], function (Router $router) { + $router->resource('adverts', 'IndexController'); + +}); diff --git a/app/Admin/Routes/article.php b/app/Admin/Routes/article.php new file mode 100644 index 0000000..7fe5f11 --- /dev/null +++ b/app/Admin/Routes/article.php @@ -0,0 +1,12 @@ + config('admin.route.prefix'), + 'namespace' => config('admin.route.namespace') . '\\Article', + 'middleware' => config('admin.route.middleware'), +], function (Router $router) { + $router->resource('articles', 'IndexController'); + +}); diff --git a/app/Admin/Routes/category.php b/app/Admin/Routes/category.php new file mode 100644 index 0000000..2f4c852 --- /dev/null +++ b/app/Admin/Routes/category.php @@ -0,0 +1,12 @@ + config('admin.route.prefix'), + 'namespace' => config('admin.route.namespace') . '\\Category', + 'middleware' => config('admin.route.middleware'), +], function (Router $router) { + $router->resource('categories', 'IndexController'); + +}); diff --git a/app/Admin/Routes/link.php b/app/Admin/Routes/link.php new file mode 100644 index 0000000..001dd73 --- /dev/null +++ b/app/Admin/Routes/link.php @@ -0,0 +1,12 @@ + config('admin.route.prefix'), + 'namespace' => config('admin.route.namespace') . '\\Link', + 'middleware' => config('admin.route.middleware'), +], function (Router $router) { + $router->resource('links', 'IndexController'); + +}); diff --git a/app/Admin/bootstrap.php b/app/Admin/bootstrap.php new file mode 100644 index 0000000..f3c4742 --- /dev/null +++ b/app/Admin/bootstrap.php @@ -0,0 +1,29 @@ +disableEditingCheck(); + $form->disableCreatingCheck(); + $form->disableViewCheck(); + $form->tools(function (Form\Tools $tools) { + $tools->disableDelete(); + $tools->disableView(); + $tools->disableList(); + }); +}); + +Grid::init(function (Grid $grid) { + $grid->disableExport(); + $grid->actions(function (Grid\Displayers\Actions $actions) { + $actions->disableView(); + }); + $grid->disableBatchActions(); + $grid->filter(function ($filter) { + $filter->disableIdFilter(); + }); + // $grid->expandFilter(); +}); diff --git a/app/Admin/routes.php b/app/Admin/routes.php new file mode 100644 index 0000000..5f8cc68 --- /dev/null +++ b/app/Admin/routes.php @@ -0,0 +1,21 @@ + config('admin.route.prefix'), + 'namespace' => config('admin.route.namespace'), + 'middleware' => config('admin.route.middleware'), + 'as' => config('admin.route.prefix') . '.', +], function (Router $router) { + + $router->get('/', 'HomeController@index')->name('home'); + +}); + +require __DIR__ . '/Routes/article.php'; +require __DIR__ . '/Routes/category.php'; +require __DIR__ . '/Routes/link.php'; +require __DIR__ . '/Routes/advert.php'; diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 0000000..a8c5158 --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,42 @@ +command('inspire') + // ->hourly(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__.'/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php new file mode 100644 index 0000000..8a912c1 --- /dev/null +++ b/app/Exceptions/Handler.php @@ -0,0 +1,57 @@ +{$return}; + } + + return $category; + } + + return new Category; +} + +/** + * Notes: 获取文章分类详情 + * @Author: 玄尘 + * @Date : 2020/9/10 13:21 + * @param $categoryId + * @param string $result + * @return \App\Models\Article + */ +function getOneArticleBYCate($categoryId, $result = '') +{ + $info = Article::where('category_id', $categoryId)->latest('sort')->latest()->first(); + + if ($info) { + if ($result) { + return $info->{$result}; + } + + return $info; + } else { + return ''; + } + + return new Article; +} + +/** + * Notes: 获取分类下的文章 + * @Author: 玄尘 + * @Date : 2020/9/10 10:05 + * @param $categoryId + * @param $take + * @return \App\Models\Article + */ +function getArticlesBYCate($categoryId, $take = 8, $mark = 'one') +{ + if ($mark == 'one') { + $articles = Article::where('category_id', $categoryId) + ->where('status', 1) + ->latest('sort') + ->latest() + ->take($take) + ->get(); + } else { + $cate = Category::find($categoryId); + $ids = $cate->getAllChildrenId(); + + $articles = Article::whereIn('category_id', $ids) + ->where('status', 1) + ->latest('sort') + ->latest() + ->take($take) + ->get(); + } + + return $articles; +} + +//获取子分类 +function getCateChild($categoryId) +{ + return Category::where('status', 1) + ->where('parent_id', $categoryId) + ->orderBy('order', 'asc') + ->get(); +} + +//获取顶级分类 +function getTopCate($categoryId) +{ + $parent = Category::find($categoryId); + + while ($parent->parent_id != 0) { + $parent = $parent->parent; + } + + return $parent; +} + +//获取一个广告 +function getOneAdvertByCate($categoryId, $result = '') +{ + $info = Advert::where('category_id', $categoryId) + ->latest('sort') + ->latest() + ->first(); + if ($info) { + if ($result) { + return $info->{$result}; + } + + return $info; + } else { + return ''; + } + + return new Advert; +} + +function getAdvertsByCate($categoryId, $take = 8) +{ + return Advert::where('category_id', $categoryId) + ->latest('sort') + ->latest() + ->take($take)->get(); +} + diff --git a/app/Http/Controllers/ArticleController.php b/app/Http/Controllers/ArticleController.php new file mode 100644 index 0000000..f238a04 --- /dev/null +++ b/app/Http/Controllers/ArticleController.php @@ -0,0 +1,22 @@ +url) { + return redirect($article->url); + } + $category = $article->category; + $parent = $category->getTop(); + + return view('articles.show', compact('article', 'category', 'parent')); + } + +} diff --git a/app/Http/Controllers/Auth/ConfirmPasswordController.php b/app/Http/Controllers/Auth/ConfirmPasswordController.php new file mode 100644 index 0000000..138c1f0 --- /dev/null +++ b/app/Http/Controllers/Auth/ConfirmPasswordController.php @@ -0,0 +1,40 @@ +middleware('auth'); + } +} diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php new file mode 100644 index 0000000..465c39c --- /dev/null +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -0,0 +1,22 @@ +middleware('guest')->except('logout'); + } +} diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php new file mode 100644 index 0000000..c6a6de6 --- /dev/null +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -0,0 +1,73 @@ +middleware('guest'); + } + + /** + * Get a validator for an incoming registration request. + * + * @param array $data + * @return \Illuminate\Contracts\Validation\Validator + */ + protected function validator(array $data) + { + return Validator::make($data, [ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], + 'password' => ['required', 'string', 'min:8', 'confirmed'], + ]); + } + + /** + * Create a new user instance after a valid registration. + * + * @param array $data + * @return \App\User + */ + protected function create(array $data) + { + return User::create([ + 'name' => $data['name'], + 'email' => $data['email'], + 'password' => Hash::make($data['password']), + ]); + } +} diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php new file mode 100644 index 0000000..b1726a3 --- /dev/null +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -0,0 +1,30 @@ +middleware('auth'); + $this->middleware('signed')->only('verify'); + $this->middleware('throttle:6,1')->only('verify', 'resend'); + } +} diff --git a/app/Http/Controllers/CategoryController.php b/app/Http/Controllers/CategoryController.php new file mode 100644 index 0000000..4402514 --- /dev/null +++ b/app/Http/Controllers/CategoryController.php @@ -0,0 +1,34 @@ +type == Category::TYPE_SHOW && $category->article_id) { + return redirect("articles/" . $category->article_id); + } else { + $articles = $category->relations(Category::TYPE_ARTICLE)->paginate(8); + $parent = $category; + + if ($category->childrens->isEmpty() && $category->parent) { + $parent = $category->parent; + } + + $advert = Advert::where('category_id', 73)->first(); + + return view('category.show', compact('articles', 'category', 'parent', 'advert')); + } + } + +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..29f474f --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,33 @@ +whereIn('type', [Category::TYPE_ARTICLE, Category::TYPE_SHOW]) + ->where('top_show', 1) + ->orderBy('order', 'asc') + ->select('id', 'title') + ->get(); + $links = Link::get(); + + View::share('all_categorys', $categorys); + View::share('links', $links); + } + +} diff --git a/app/Http/Controllers/IndexController.php b/app/Http/Controllers/IndexController.php new file mode 100644 index 0000000..979bd54 --- /dev/null +++ b/app/Http/Controllers/IndexController.php @@ -0,0 +1,33 @@ +get(); + $description = Article::find(255); + $oneNews = Article::where('category_id', 7)->orderBy('created_at', 'desc')->first(); + $news = Article::where('category_id', 7)->where('id', '<', $oneNews->id)->orderBy('created_at', 'desc')->take(4)->get(); + $articles = Article::where('category_id', 19)->orderBy('created_at', 'desc')->take(4)->get(); + $prizes = Article::where('category_id', 20)->orderBy('created_at', 'desc')->take(8)->get(); + $patents = Article::where('category_id', 21)->orderBy('created_at', 'desc')->take(3)->get(); + $leaders = Article::where('category_id', 4)->take(3)->get(); + $simples = Article::where('category_id', 6)->take(6)->get(); + $links = Link::take(6)->get(); + + return view('index.index', compact('adverts', 'description', 'oneNews', 'news', 'articles', 'prizes', 'patents', 'leaders', 'simples', 'links')); + } + +} diff --git a/app/Http/Controllers/TestController.php b/app/Http/Controllers/TestController.php new file mode 100644 index 0000000..748c403 --- /dev/null +++ b/app/Http/Controllers/TestController.php @@ -0,0 +1,157 @@ +', '')->where('type', 'article')->get(); + if ($lists->isEmpty()) { + dd('没有数据'); + } + foreach ($lists as $key => $cate) { + if ($cate->content != ' ') { + $data = [ + 'oldid' => 0, + 'title' => $cate->title, + 'category_id' => $cate->id, + 'writer' => 'admin', + 'source' => '未知', + 'keywords' => '', + 'status' => 1, + 'description' => $cate->description, + 'content' => $cate->content, + ]; + + $info = Article::create($data); + $cate->article_id = $info->id; + $cate->type = Category::TYPE_SHOW; + $cate->save(); + $article[] = $info->id; + } + + } + dump(count($article)); + } + + public function checkArticle() + { + $articleids = Article::where('oldid', '>', 0)->pluck('oldid'); + $oldids = DedeArchive::pluck('id'); + $diffids = array_diff($oldids->toArray(), $articleids->toArray()); + dump(count($articleids)); + dump(count($oldids)); + dump($diffids); + die(); + $map = [ + 'id' => ['in', $diffids], + ]; + $list = DedeArchive::whereIn('id', $diffids)->get(); + foreach ($list as $key => $article) { + $data = [ + 'oldid' => $article->id, + 'title' => $article->title, + 'category_id' => $category->id ?? '0', + 'writer' => $article->writer, + 'cover' => $article->litpic, + 'source' => $article->source, + 'keywords' => $article->keywords, + 'description' => $article->description, + 'status' => 1, + 'content' => $article->info->body ?? '', + 'created_at' => date('Y-m-d H:i:s', $article->pubdate), + ]; + Article::create($data); + } + } + + //导入文章 + public function set_article() + { + $articles = Article::get(); + if ($articles->count() > 4) { + dd('已经导入过数据'); + } + $categorys = Category::get(); + $error = $success = []; + DedeArchive::whereNotNull('litpic')->chunk(200, function ($articles) use ($categorys) { + + foreach ($articles as $article) { + + $category = $categorys->where('oldid', $article->typeid)->first(); + $data = [ + 'oldid' => $article->id, + 'title' => $article->title, + 'category_id' => $category->id ?? '0', + 'writer' => $article->writer, + 'source' => $article->source, + 'cover' => $article->litpic, + 'keywords' => $article->keywords, + 'description' => $article->description, + 'status' => 1, + 'content' => $article->info->body ?? '', + 'created_at' => date('Y-m-d H:i:s', $article->pubdate), + ]; + + $res = Article::create($data); + if (!$res) { + $error[] = $article->id; + } else { + $success[] = $article->id; + } + } + }); + + dump($error); + dump($success); + } + + //导入分类 + public function set_category() + { + $categorys = Category::get(); + if ($categorys->count()) { + dd('已经导入过数据'); + } + $lists = DedeArctype::where('ishidden', 0)->select('id', 'reid as parent_id', 'typename as title', 'content')->get(); + $list = Tree::list2tree($lists->toArray(), 'id', 'parent_id', 'children', 0); + + foreach ($list as $key => $value) { + $info = Category::create($this->getData($value)); + if (isset($value['children']) && count($value['children']) > 0) { + foreach ($value['children'] as $key => $children) { + $info->children()->create($this->getData($children)); + } + } + } + } + + //格式化分类数据 + public function getData($category) + { + $data = [ + 'oldid' => $category['id'], + 'parent_id' => $category['parent_id'], + 'title' => $category['title'], + 'content' => $category['content'], + 'status' => 1, + ]; + return $data; + } + +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php new file mode 100644 index 0000000..deb65e8 --- /dev/null +++ b/app/Http/Kernel.php @@ -0,0 +1,82 @@ + [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + // \Illuminate\Session\Middleware\AuthenticateSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + 'throttle:60,1', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + ]; + + /** + * The priority-sorted list of middleware. + * + * This forces non-global middleware to always be in the given order. + * + * @var array + */ + protected $middlewarePriority = [ + \Illuminate\Session\Middleware\StartSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\Authenticate::class, + \Illuminate\Routing\Middleware\ThrottleRequests::class, + \Illuminate\Session\Middleware\AuthenticateSession::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + \Illuminate\Auth\Middleware\Authorize::class, + ]; +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..704089a --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,21 @@ +expectsJson()) { + return route('login'); + } + } +} diff --git a/app/Http/Middleware/CheckForMaintenanceMode.php b/app/Http/Middleware/CheckForMaintenanceMode.php new file mode 100644 index 0000000..35b9824 --- /dev/null +++ b/app/Http/Middleware/CheckForMaintenanceMode.php @@ -0,0 +1,17 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..5a50e7b --- /dev/null +++ b/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,18 @@ + '文章列表', + self::TYPE_SHOW => '文章详情', + self::TYPE_ADVERT => '图片', + ]; + + public function getLinkAttribute() + { + return route('category.show', $this); + } + + /** + * 关联的数据 + * @return [type] [description] + */ + public function relations() + { + switch ($this->type) { + case self::TYPE_SHOW: + return $this->belongsTo(Article::class); + break; + case self::TYPE_ARTICLE: + return $this->hasMany(Article::class); + break; + case self::TYPE_ADVERT: + return $this->hasMany(Advert::class); + break; + default: + return null; + } + } + + public function childrens() + { + return $this->hasMany(self::class, 'parent_id'); + } + + public function parent() + { + return $this->hasOne(self::class, 'id', 'parent_id'); + } + + public function article() + { + return $this->belongsTo(Article::class); + } + + /** + * Notes: 获取当前分类及子分类ID + * @Author: + * @Date : 2020/4/6 3:12 下午 + * @return array + */ + public function getAllChildrenId() + { + $ids = array_keys($this->buildSelectOptions([], $this->id)); + array_unshift($ids, $this->id); + + return $ids; + } + + //查找顶级分类 + public function getTop() + { + $parent = $this; + + while ($parent->parent_id != 0) { + $parent = $parent->parent; + } + + return $parent; + } + +} diff --git a/app/Models/DedeAddonarticle.php b/app/Models/DedeAddonarticle.php new file mode 100644 index 0000000..07d16f0 --- /dev/null +++ b/app/Models/DedeAddonarticle.php @@ -0,0 +1,7 @@ +hasOne(DedeAddonarticle::class, 'aid'); + } +} diff --git a/app/Models/DedeArctype.php b/app/Models/DedeArctype.php new file mode 100644 index 0000000..01baa1c --- /dev/null +++ b/app/Models/DedeArctype.php @@ -0,0 +1,11 @@ +format($this->dateFormat ?: 'Y-m-d H:i:s'); + } + +} diff --git a/app/Models/Traits/BelongsToCategory.php b/app/Models/Traits/BelongsToCategory.php new file mode 100644 index 0000000..0e1e70e --- /dev/null +++ b/app/Models/Traits/BelongsToCategory.php @@ -0,0 +1,21 @@ +belongsTo(Category::class)->withDefault(); + } + +} diff --git a/app/Models/Traits/HasOneCover.php b/app/Models/Traits/HasOneCover.php new file mode 100644 index 0000000..e1d1818 --- /dev/null +++ b/app/Models/Traits/HasOneCover.php @@ -0,0 +1,24 @@ +cover) { + return Storage::url($this->cover); + } else { + return ''; + } + } + +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..652728f --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,36 @@ + 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..395c518 --- /dev/null +++ b/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ + [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + parent::boot(); + + // + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..527eee3 --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,80 @@ +mapApiRoutes(); + + $this->mapWebRoutes(); + + // + } + + /** + * Define the "web" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + * + * @return void + */ + protected function mapWebRoutes() + { + Route::middleware('web') + ->namespace($this->namespace) + ->group(base_path('routes/web.php')); + } + + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + * + * @return void + */ + protected function mapApiRoutes() + { + Route::prefix('api') + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/api.php')); + } +} diff --git a/app/Traits/Tree.php b/app/Traits/Tree.php new file mode 100644 index 0000000..163799a --- /dev/null +++ b/app/Traits/Tree.php @@ -0,0 +1,90 @@ + | +// +------------------------------------------------+ +namespace App\Traits; + +/** + * 生成多层树状下拉选框的工具 + */ +trait Tree +{ + + /** + * 用于树型数组完成递归格式的全局变量 + */ + private static $formatTree; + + /** + * 生成多层树,供下拉选框使用 + */ + public static function toFormatTree($list, $title = 'title', $pk = 'id', $pid = 'pid', $root = 0) + { + $list = self::list2tree($list, $pk, $pid, '_child', $root); + + self::$formatTree = []; + self::_toFormatTree($list, 0, $title); + return self::$formatTree; + } + + /** + * 把数据集转换成Tree + * @param array $list 要转换的数据集 + * @param string $pk [description] + * @param string $pid [description] + * @param string $child [description] + * @param integer $root [description] + * @return array + */ + public static function list2tree($list, $pk = 'id', $pid = 'pid', $child = 'children', $root = 0) + { + $tree = []; + if (is_array($list)) { + $refer = []; + foreach ($list as $key => $data) { + $refer[$data[$pk]] = &$list[$key]; + } + foreach ($list as $key => $data) { + $parentId = $data[$pid]; + if ($root == $parentId) { + $tree[] = &$list[$key]; + } else { + if (isset($refer[$parentId])) { + $parent = &$refer[$parentId]; + $parent[$child][] = &$list[$key]; + } + } + } + } + return $tree; + } + + /** + * 将格式数组转换为树 + * @param array $list + * @param integer $level 进行递归时传递用的参数 + * @author 小陈叔叔 + */ + private static function _toFormatTree($list, $level = 0, $title = 'title') + { + foreach ($list as $key => $val) { + $tmp_str = str_repeat(" ", $level * 4); + $tmp_str .= "└ "; + $val['level'] = $level; + $val['title_show'] = $level == 0 ? $val[$title] . " " : $tmp_str . $val[$title]; + if (!array_key_exists('_child', $val)) { + array_push(self::$formatTree, $val); + } else { + $tmp_ary = $val['_child']; + unset($val['_child']); + array_push(self::$formatTree, $val); + self::_toFormatTree($tmp_ary, $level + 1, $title); //进行下一层递归 + } + } + return; + } +} diff --git a/app/User.php b/app/User.php new file mode 100644 index 0000000..e79dab7 --- /dev/null +++ b/app/User.php @@ -0,0 +1,39 @@ + 'datetime', + ]; +} diff --git a/artisan b/artisan new file mode 100644 index 0000000..5c23e2e --- /dev/null +++ b/artisan @@ -0,0 +1,53 @@ +#!/usr/bin/env php +make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running, we will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..037e17d --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..44f74db --- /dev/null +++ b/composer.json @@ -0,0 +1,67 @@ +{ + "name": "laravel/laravel", + "type": "project", + "description": "The Laravel Framework.", + "keywords": [ + "framework", + "laravel" + ], + "license": "MIT", + "require": { + "php": "^7.2", + "codingyu/ueditor": "^3.0", + "encore/laravel-admin": "^1.8", + "fideloper/proxy": "^4.0", + "laravel-admin-ext/config": "^1.1", + "laravel/framework": "^7.0", + "laravel/tinker": "^2.0" + }, + "require-dev": { + "facade/ignition": "^2.0", + "fzaninotto/faker": "^1.9.1", + "mockery/mockery": "^1.0", + "nunomaduro/collision": "^4.1", + "phpunit/phpunit": "^8.5" + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true + }, + "extra": { + "laravel": { + "dont-discover": [] + } + }, + "autoload": { + "psr-4": { + "App\\": "app/" + }, + "classmap": [ + "database/seeds", + "database/factories" + ], + "files": [ + "app/Helpers/function.php" + ] + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "minimum-stability": "dev", + "prefer-stable": true, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..065207f --- /dev/null +++ b/composer.lock @@ -0,0 +1,6627 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "aeacf51f830126e28cd15a04993c81f6", + "packages": [ + { + "name": "brick/math", + "version": "0.8.15", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "9b08d412b9da9455b210459ff71414de7e6241cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/9b08d412b9da9455b210459ff71414de7e6241cd", + "reference": "9b08d412b9da9455b210459ff71414de7e6241cd", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "php": "^7.1|^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15|^8.5", + "vimeo/psalm": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/brick/math", + "type": "tidelift" + } + ], + "time": "2020-04-15T15:59:35+00:00" + }, + { + "name": "codingyu/laravel-ueditor", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/codingyu/laravel-ueditor.git", + "reference": "aec2ab21426cb7fe580ca6d78ba785c436f27ac5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/codingyu/laravel-ueditor/zipball/aec2ab21426cb7fe580ca6d78ba785c436f27ac5", + "reference": "aec2ab21426cb7fe580ca6d78ba785c436f27ac5", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "laravel/framework": "~5.5|~6.0|~7.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "^1.10" + }, + "suggest": { + "overtrue/laravel-filesystem-qiniu": "如果你想要使用七牛云存储,也许你需要安装它哦~" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Codingyu\\LaravelUEditor\\UEditorServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Codingyu\\LaravelUEditor\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "codingyu", + "email": "everceyu@gmail.com" + } + ], + "description": "UEditor integration for Laravel.", + "time": "2020-03-05T13:10:58+00:00" + }, + { + "name": "codingyu/ueditor", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/laravel-admin-extensions/UEditor.git", + "reference": "9ba2d209317b1f396a846a6b202e7a0fdd722c12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel-admin-extensions/UEditor/zipball/9ba2d209317b1f396a846a6b202e7a0fdd722c12", + "reference": "9ba2d209317b1f396a846a6b202e7a0fdd722c12", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "codingyu/laravel-ueditor": "~2.0", + "encore/laravel-admin": "~1.6", + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Codingyu\\Ueditor\\UeditorServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Codingyu\\Ueditor\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "codingyu", + "email": "everceyu@gmail.com" + } + ], + "description": "UEditor extension for laravel-admin", + "homepage": "https://github.com/codingyu/UEditor", + "keywords": [ + "extension", + "laravel-admin", + "ueditor" + ], + "time": "2019-10-02T14:48:14+00:00" + }, + { + "name": "dnoegel/php-xdg-base-dir", + "version": "v0.1.1", + "source": { + "type": "git", + "url": "https://github.com/dnoegel/php-xdg-base-dir.git", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "XdgBaseDir\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "implementation of xdg base directory specification for php", + "time": "2019-12-04T15:06:13+00:00" + }, + { + "name": "doctrine/cache", + "version": "1.10.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3", + "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "~7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "alcaeus/mongo-php-adapter": "^1.1", + "doctrine/coding-standard": "^6.0", + "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^7.0", + "predis/predis": "~1.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", + "keywords": [ + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } + ], + "time": "2020-05-27T16:24:54+00:00" + }, + { + "name": "doctrine/dbal", + "version": "2.10.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/aab745e7b6b2de3b47019da81e7225e14dcfdac8", + "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "doctrine/cache": "^1.0", + "doctrine/event-manager": "^1.0", + "ext-pdo": "*", + "php": "^7.2" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "jetbrains/phpstorm-stubs": "^2019.1", + "nikic/php-parser": "^4.4", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^8.4.1", + "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", + "vimeo/psalm": "^3.11" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlanywhere", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", + "type": "tidelift" + } + ], + "time": "2020-04-20T17:19:26+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "629572819973f13486371cb611386eb17851e85c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c", + "reference": "629572819973f13486371cb611386eb17851e85c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1" + }, + "conflict": { + "doctrine/common": "<2.9@dev" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "time": "2019-11-10T09:48:07+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "3fc171224a316569faad2df6b18a1fd8cce5a56d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/3fc171224a316569faad2df6b18a1fd8cce5a56d", + "reference": "3fc171224a316569faad2df6b18a1fd8cce5a56d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^7.0", + "phpstan/phpstan": "^0.11", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-strict-rules": "^0.11", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2020-05-25T20:08:47+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11.8", + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2020-05-25T17:44:05+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.4|^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "time": "2019-03-31T00:38:28+00:00" + }, + { + "name": "egulias/email-validator", + "version": "2.1.17", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "ade6887fd9bd74177769645ab5c474824f8a418a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a", + "reference": "ade6887fd9bd74177769645ab5c474824f8a418a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" + }, + "require-dev": { + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "EmailValidator" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "time": "2020-02-13T22:36:52+00:00" + }, + { + "name": "encore/laravel-admin", + "version": "v1.8.1", + "source": { + "type": "git", + "url": "https://github.com/z-song/laravel-admin.git", + "reference": "86e937333c1a593c5384d31836534e79a499edc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/z-song/laravel-admin/zipball/86e937333c1a593c5384d31836534e79a499edc4", + "reference": "86e937333c1a593c5384d31836534e79a499edc4", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "doctrine/dbal": "2.*", + "laravel/framework": ">=5.5", + "php": ">=7.0.0", + "symfony/dom-crawler": "~3.1|~4.0|~5.0" + }, + "require-dev": { + "fzaninotto/faker": "~1.4", + "intervention/image": "~2.3", + "laravel/browser-kit-testing": "^6.0", + "laravel/laravel": ">=5.5" + }, + "suggest": { + "intervention/image": "Required to handling and manipulation upload images (~2.3).", + "spatie/eloquent-sortable": "Required to built orderable gird." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Encore\\Admin\\AdminServiceProvider" + ], + "aliases": { + "Admin": "Encore\\Admin\\Facades\\Admin" + } + } + }, + "autoload": { + "psr-4": { + "Encore\\Admin\\": "src/" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "zsong", + "email": "zosong@126.com" + } + ], + "description": "laravel admin", + "homepage": "https://github.com/z-song/laravel-admin", + "keywords": [ + "admin", + "form", + "grid", + "laravel" + ], + "time": "2020-05-28T02:24:56+00:00" + }, + { + "name": "fideloper/proxy", + "version": "4.3.0", + "source": { + "type": "git", + "url": "https://github.com/fideloper/TrustedProxy.git", + "reference": "ec38ad69ee378a1eec04fb0e417a97cfaf7ed11a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/ec38ad69ee378a1eec04fb0e417a97cfaf7ed11a", + "reference": "ec38ad69ee378a1eec04fb0e417a97cfaf7ed11a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0", + "php": ">=5.4.0" + }, + "require-dev": { + "illuminate/http": "^5.0|^6.0|^7.0|^8.0", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Fideloper\\Proxy\\TrustedProxyServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Fideloper\\Proxy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Fidao", + "email": "fideloper@gmail.com" + } + ], + "description": "Set trusted proxies for Laravel", + "keywords": [ + "load balancing", + "proxy", + "trusted proxy" + ], + "time": "2020-02-22T01:51:47+00:00" + }, + { + "name": "laravel-admin-ext/config", + "version": "v1.1", + "source": { + "type": "git", + "url": "https://github.com/laravel-admin-extensions/config.git", + "reference": "5fe99f56758adfd8436ac5d02e83e72a6388dfc2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel-admin-extensions/config/zipball/5fe99f56758adfd8436ac5d02e83e72a6388dfc2", + "reference": "5fe99f56758adfd8436ac5d02e83e72a6388dfc2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "encore/laravel-admin": ">=1.6", + "laravel/framework": ">=5.5", + "php": ">=7.0.0" + }, + "require-dev": { + "laravel/laravel": "~5.5", + "phpunit/phpunit": "~6.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Encore\\Admin\\Config\\ConfigServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Encore\\Admin\\Config\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "z-song", + "email": "zosong@126.com" + } + ], + "description": "Config extension for laravel-admin", + "homepage": "https://github.com/laravel-admin-extensions/config", + "keywords": [ + "laravel-admin", + "setting" + ], + "time": "2019-12-11T02:31:22+00:00" + }, + { + "name": "laravel/framework", + "version": "v7.13.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "6fa69bfbd57744a5bbec5538ce483919b3fd625f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/6fa69bfbd57744a5bbec5538ce483919b3fd625f", + "reference": "6fa69bfbd57744a5bbec5538ce483919b3fd625f", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "doctrine/inflector": "^1.4|^2.0", + "dragonmantank/cron-expression": "^2.0", + "egulias/email-validator": "^2.1.10", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "league/commonmark": "^1.3", + "league/flysystem": "^1.0.8", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.17", + "opis/closure": "^3.1", + "php": "^7.2.5", + "psr/container": "^1.0", + "psr/simple-cache": "^1.0", + "ramsey/uuid": "^3.7|^4.0", + "swiftmailer/swiftmailer": "^6.0", + "symfony/console": "^5.0", + "symfony/error-handler": "^5.0", + "symfony/finder": "^5.0", + "symfony/http-foundation": "^5.0", + "symfony/http-kernel": "^5.0", + "symfony/mime": "^5.0", + "symfony/polyfill-php73": "^1.17", + "symfony/process": "^5.0", + "symfony/routing": "^5.0", + "symfony/var-dumper": "^5.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "vlucas/phpdotenv": "^4.0", + "voku/portable-ascii": "^1.4.8" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/dbal": "^2.6", + "filp/whoops": "^2.4", + "guzzlehttp/guzzle": "^6.3.1|^7.0", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "^1.3.1", + "moontoast/math": "^1.1", + "orchestra/testbench-core": "^5.0", + "pda/pheanstalk": "^4.0", + "phpunit/phpunit": "^8.4|^9.0", + "predis/predis": "^1.1.1", + "symfony/cache": "^5.0" + }, + "suggest": { + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "filp/whoops": "Required for friendly error pages in development (^2.4).", + "fzaninotto/faker": "Required to use the eloquent factory builder (^1.9.1).", + "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.3.1|^7.0).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "mockery/mockery": "Required to use mocking (^1.3.1).", + "moontoast/math": "Required to use ordered UUIDs (^1.1).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.4|^9.0).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.0).", + "symfony/filesystem": "Required to create relative storage directory symbolic links (^5.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", + "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "time": "2020-05-26T14:32:43+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "cde90a7335a2130a4488beb68f4b2141869241db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/cde90a7335a2130a4488beb68f4b2141869241db", + "reference": "cde90a7335a2130a4488beb68f4b2141869241db", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0", + "illuminate/contracts": "^6.0|^7.0|^8.0", + "illuminate/support": "^6.0|^7.0|^8.0", + "php": "^7.2", + "psy/psysh": "^0.10.3", + "symfony/var-dumper": "^4.3|^5.0" + }, + "require-dev": { + "mockery/mockery": "^1.3.1", + "phpunit/phpunit": "^8.4|^9.0" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "time": "2020-04-07T15:01:31+00:00" + }, + { + "name": "league/commonmark", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "412639f7cfbc0b31ad2455b2fe965095f66ae505" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/412639f7cfbc0b31ad2455b2fe965095f66ae505", + "reference": "412639f7cfbc0b31ad2455b2fe965095f66ae505", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1" + }, + "conflict": { + "scrutinizer/ocular": "1.7.*" + }, + "require-dev": { + "cebe/markdown": "~1.0", + "commonmark/commonmark.js": "0.29.1", + "erusev/parsedown": "~1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "~1.4", + "mikehaertl/php-shellcommand": "^1.4", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5", + "scrutinizer/ocular": "^1.5", + "symfony/finder": "^4.2" + }, + "bin": [ + "bin/commonmark" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "funding": [ + { + "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark", + "type": "custom" + }, + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://www.patreon.com/colinodell", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2020-05-04T22:15:21+00:00" + }, + { + "name": "league/flysystem", + "version": "1.0.69", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "7106f78428a344bc4f643c233a94e48795f10967" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/7106f78428a344bc4f643c233a94e48795f10967", + "reference": "7106f78428a344bc4f643c233a94e48795f10967", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-fileinfo": "*", + "php": ">=5.5.9" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" + }, + "require-dev": { + "phpspec/phpspec": "^3.4", + "phpunit/phpunit": "^5.7.26" + }, + "suggest": { + "ext-fileinfo": "Required for MimeType", + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Filesystem abstraction: Many filesystems, one API.", + "keywords": [ + "Cloud Files", + "WebDAV", + "abstraction", + "aws", + "cloud", + "copy.com", + "dropbox", + "file systems", + "files", + "filesystem", + "filesystems", + "ftp", + "rackspace", + "remote", + "s3", + "sftp", + "storage" + ], + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], + "time": "2020-05-18T15:13:39+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/38914429aac460e8e4616c8cb486ecb40ec90bb1", + "reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^6.0", + "graylog2/gelf-php": "^1.4.2", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "php-parallel-lint/php-parallel-lint": "^1.0", + "phpspec/prophecy": "^1.6.1", + "phpunit/phpunit": "^8.5", + "predis/predis": "^1.1", + "rollbar/rollbar": "^1.3", + "ruflin/elastica": ">=0.90 <3.0", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2020-05-22T08:12:19+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.35.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "4b9bd835261ef23d36397a46a76b496a458305e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4b9bd835261ef23d36397a46a76b496a458305e5", + "reference": "4b9bd835261ef23d36397a46a76b496a458305e5", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^3.4 || ^4.0 || ^5.0" + }, + "require-dev": { + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", + "kylekatarnls/multi-tester": "^1.1", + "phpmd/phpmd": "^2.8", + "phpstan/phpstan": "^0.11", + "phpunit/phpunit": "^7.5 || ^8.0", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev", + "dev-3.x": "3.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "http://nesbot.com" + }, + { + "name": "kylekatarnls", + "homepage": "http://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "http://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "funding": [ + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2020-05-24T18:27:52+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.4.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120", + "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "0.0.5", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2020-04-10T16:34:50+00:00" + }, + { + "name": "opis/closure", + "version": "3.5.3", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "cac47092144043d5d676e2e7cf8d0d2f83fc89ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/cac47092144043d5d676e2e7cf8d0d2f83fc89ca", + "reference": "cac47092144043d5d676e2e7cf8d0d2f83fc89ca", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.4 || ^7.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "time": "2020-05-25T09:32:45+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "4acfd6a4b33a509d8c88f50e5222f734b6aeebae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/4acfd6a4b33a509d8c88f50e5222f734b6aeebae", + "reference": "4acfd6a4b33a509d8c88f50e5222f734b6aeebae", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.3", + "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "time": "2020-03-21T18:07:53+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2020-03-23T09:12:05+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.10.4", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a8aec1b2981ab66882a01cce36a49b6317dc3560", + "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "dnoegel/php-xdg-base-dir": "0.1.*", + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3", + "php": "^8.0 || ^7.0 || ^5.5.9", + "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10", + "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "hoa/console": "3.17.*" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", + "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.10.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "time": "2020-05-03T19:32:03+00:00" + }, + { + "name": "ramsey/collection", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "925ad8cf55ba7a3fc92e332c58fd0478ace3e1ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/925ad8cf55ba7a3fc92e332c58fd0478ace3e1ca", + "reference": "925ad8cf55ba7a3fc92e332c58fd0478ace3e1ca", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", + "fzaninotto/faker": "^1.5", + "jakub-onderka/php-parallel-lint": "^1", + "jangregor/phpstan-prophecy": "^0.6", + "mockery/mockery": "^1.3", + "phpstan/extension-installer": "^1", + "phpstan/phpdoc-parser": "0.4.1", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5", + "slevomat/coding-standard": "^6.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP 7.2+ library for representing and manipulating collections.", + "homepage": "https://github.com/ramsey/collection", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "time": "2020-01-05T00:22:59+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "ba8fff1d3abb8bb4d35a135ed22a31c6ef3ede3d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/ba8fff1d3abb8bb4d35a135ed22a31c6ef3ede3d", + "reference": "ba8fff1d3abb8bb4d35a135ed22a31c6ef3ede3d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "brick/math": "^0.8", + "ext-json": "*", + "php": "^7.2 || ^8", + "ramsey/collection": "^1.0", + "symfony/polyfill-ctype": "^1.8" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "codeception/aspect-mock": "^3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2", + "doctrine/annotations": "^1.8", + "goaop/framework": "^2", + "mockery/mockery": "^1.3", + "moontoast/math": "^1.1", + "paragonie/random-lib": "^2", + "php-mock/php-mock-mockery": "^1.3", + "php-mock/php-mock-phpunit": "^2.5", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpstan/extension-installer": "^1.0", + "phpstan/phpdoc-parser": "0.4.3", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5", + "psy/psysh": "^0.10.0", + "slevomat/coding-standard": "^6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "3.9.4" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Uuid\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + } + ], + "time": "2020-03-29T20:13:32+00:00" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v6.2.3", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/149cfdf118b169f7840bbe3ef0d4bc795d1780c9", + "reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "egulias/email-validator": "~2.0", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "mockery/mockery": "~0.9.1", + "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses", + "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ], + "time": "2019-11-12T09:31:26+00:00" + }, + { + "name": "symfony/console", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", + "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "symfony/dependency-injection": "<4.4", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-30T11:42:42+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "5f8d5271303dad260692ba73dfa21777d38e124e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/5f8d5271303dad260692ba73dfa21777d38e124e", + "reference": "5f8d5271303dad260692ba73dfa21777d38e124e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "892311d23066844a267ac1a903d8a9d79968a1a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/892311d23066844a267ac1a903d8a9d79968a1a7", + "reference": "892311d23066844a267ac1a903d8a9d79968a1a7", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "masterminds/html5": "<2.6" + }, + "require-dev": { + "masterminds/html5": "^2.6", + "symfony/css-selector": "^4.4|^5.0" + }, + "suggest": { + "symfony/css-selector": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DomCrawler Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-30T11:42:42+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "949ffc17c3ac3a9f8e6232220e2da33913c04ea4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/949ffc17c3ac3a9f8e6232220e2da33913c04ea4", + "reference": "949ffc17c3ac3a9f8e6232220e2da33913c04ea4", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5", + "psr/log": "^1.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "require-dev": { + "symfony/http-kernel": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony ErrorHandler Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-30T14:14:32+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/24f40d95385774ed5c71dbf014edd047e2f2f3dc", + "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5", + "symfony/event-dispatcher-contracts": "^2" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^4.4|^5.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "405952c4e90941a17e52ef7489a2bd94870bb290" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/405952c4e90941a17e52ef7489a2bd94870bb290", + "reference": "405952c4e90941a17e52ef7489a2bd94870bb290", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/600a52c29afc0d1caa74acbec8d3095ca7e9910d", + "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "e47fdf8b24edc12022ba52923150ec6484d7f57d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e47fdf8b24edc12022ba52923150ec6484d7f57d", + "reference": "e47fdf8b24edc12022ba52923150ec6484d7f57d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5", + "symfony/mime": "^4.4|^5.0", + "symfony/polyfill-mbstring": "~1.1" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/expression-language": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpFoundation Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-18T20:50:06+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "3565e51eecd06106304baba5ccb7ba89db2d7d2b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3565e51eecd06106304baba5ccb7ba89db2d7d2b", + "reference": "3565e51eecd06106304baba5ccb7ba89db2d7d2b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5", + "psr/log": "~1.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/event-dispatcher": "^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9" + }, + "conflict": { + "symfony/browser-kit": "<4.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<4.4", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.4" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/cache": "~1.0", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/config": "^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^2.4|^3.0" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpKernel Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-28T18:53:25+00:00" + }, + { + "name": "symfony/mime", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "5d6c81c39225a750f3f43bee15f03093fb9aaa0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/5d6c81c39225a750f3f43bee15f03093fb9aaa0b", + "reference": "5d6c81c39225a750f3f43bee15f03093fb9aaa0b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "symfony/mailer": "<4.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10", + "symfony/dependency-injection": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A library to manipulate MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-17T03:29:44+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:14:59+00:00" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c4de7601eefbf25f9d47190abe07f79fe0a27424", + "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a", + "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c", + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "f048e612a3905f34931127360bdd2def19a5e582" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", + "reference": "f048e612a3905f34931127360bdd2def19a5e582", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a760d8964ff79ab9bf057613a5808284ec852ccc", + "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/process", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "3179f68dff5bad14d38c4114a1dab98030801fd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/3179f68dff5bad14d38c4114a1dab98030801fd7", + "reference": "3179f68dff5bad14d38c4114a1dab98030801fd7", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-15T15:59:10+00:00" + }, + { + "name": "symfony/routing", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "9b18480a6e101f8d9ab7c483ace7c19441be5111" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/9b18480a6e101f8d9ab7c483ace7c19441be5111", + "reference": "9b18480a6e101f8d9ab7c483ace7c19441be5111", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5" + }, + "conflict": { + "symfony/config": "<5.0", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "~1.2", + "psr/log": "~1.0", + "symfony/config": "^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Routing Component", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-21T21:02:50+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/66a8f0957a3ca54e4f724e49028ab19d75a8918b", + "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" + }, + { + "name": "symfony/translation", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "c3879db7a68fe3e12b41263b05879412c87b27fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/c3879db7a68fe3e12b41263b05879412c87b27fd", + "reference": "c3879db7a68fe3e12b41263b05879412c87b27fd", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-12T16:45:47+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v2.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e5ca07c8f817f865f618aa072c2fe8e0e637340e", + "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "09de28632f16f81058a85fcf318397218272a07b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/09de28632f16f81058a85fcf318397218272a07b", + "reference": "09de28632f16f81058a85fcf318397218272a07b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^2.4|^3.0" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony mechanism for exploring and dumping PHP variables", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-12T16:45:47+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.2", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "dda2ee426acd6d801d5b7fd1001cde9b5f790e15" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/dda2ee426acd6d801d5b7fd1001cde9b5f790e15", + "reference": "dda2ee426acd6d801d5b7fd1001cde9b5f790e15", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "time": "2019-10-24T08:53:34+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v4.1.6", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "0b32505d67c1abbfa829283c86bfc0642a661bf6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/0b32505d67c1abbfa829283c86bfc0642a661bf6", + "reference": "0b32505d67c1abbfa829283c86bfc0642a661bf6", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "phpoption/phpoption": "^1.7.2", + "symfony/polyfill-ctype": "^1.9" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.3", + "ext-filter": "*", + "ext-pcre": "*", + "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator.", + "ext-pcre": "Required to use most of the library." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "homepage": "https://gjcampbell.co.uk/" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://vancelucas.com/" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2020-05-23T09:43:32+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "e7f9bd5deff09a57318f9b900ab33a05acfcf4d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/e7f9bd5deff09a57318f9b900ab33a05acfcf4d3", + "reference": "e7f9bd5deff09a57318f9b900ab33a05acfcf4d3", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2020-05-26T06:40:44+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2019-10-21T16:45:58+00:00" + }, + { + "name": "facade/flare-client-php", + "version": "1.3.2", + "source": { + "type": "git", + "url": "https://github.com/facade/flare-client-php.git", + "reference": "db1e03426e7f9472c9ecd1092aff00f56aa6c004" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/flare-client-php/zipball/db1e03426e7f9472c9ecd1092aff00f56aa6c004", + "reference": "db1e03426e7f9472c9ecd1092aff00f56aa6c004", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "facade/ignition-contracts": "~1.0", + "illuminate/pipeline": "^5.5|^6.0|^7.0", + "php": "^7.1", + "symfony/http-foundation": "^3.3|^4.1|^5.0", + "symfony/var-dumper": "^3.4|^4.0|^5.0" + }, + "require-dev": { + "larapack/dd": "^1.1", + "phpunit/phpunit": "^7.5.16", + "spatie/phpunit-snapshot-assertions": "^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Facade\\FlareClient\\": "src" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/facade/flare-client-php", + "keywords": [ + "exception", + "facade", + "flare", + "reporting" + ], + "funding": [ + { + "url": "https://www.patreon.com/spatie", + "type": "patreon" + } + ], + "time": "2020-03-02T15:52:04+00:00" + }, + { + "name": "facade/ignition", + "version": "2.0.5", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition.git", + "reference": "38e1b180544bfefebe37e0f65980792ea78a534a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition/zipball/38e1b180544bfefebe37e0f65980792ea78a534a", + "reference": "38e1b180544bfefebe37e0f65980792ea78a534a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "facade/flare-client-php": "^1.0", + "facade/ignition-contracts": "^1.0", + "filp/whoops": "^2.4", + "illuminate/support": "^7.0|^8.0", + "monolog/monolog": "^2.0", + "php": "^7.2.5", + "scrivo/highlight.php": "^9.15", + "symfony/console": "^5.0", + "symfony/var-dumper": "^5.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.14", + "mockery/mockery": "^1.3", + "orchestra/testbench": "5.0" + }, + "suggest": { + "laravel/telescope": "^3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Facade\\Ignition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Facade\\Ignition\\Facades\\Flare" + } + } + }, + "autoload": { + "psr-4": { + "Facade\\Ignition\\": "src" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://github.com/facade/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "time": "2020-05-28T22:49:07+00:00" + }, + { + "name": "facade/ignition-contracts", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition-contracts.git", + "reference": "f445db0fb86f48e205787b2592840dd9c80ded28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/f445db0fb86f48e205787b2592840dd9c80ded28", + "reference": "f445db0fb86f48e205787b2592840dd9c80ded28", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" + } + ], + "description": "Solution contracts for Ignition", + "homepage": "https://github.com/facade/ignition-contracts", + "keywords": [ + "contracts", + "flare", + "ignition" + ], + "time": "2019-08-30T14:06:08+00:00" + }, + { + "name": "filp/whoops", + "version": "2.7.2", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "17d0d3f266c8f925ebd035cd36f83cf802b47d4a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/17d0d3f266c8f925ebd035cd36f83cf802b47d4a", + "reference": "17d0d3f266c8f925ebd035cd36f83cf802b47d4a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.5.9 || ^7.0", + "psr/log": "^1.0.1" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "time": "2020-05-05T12:28:07+00:00" + }, + { + "name": "fzaninotto/faker", + "version": "v1.9.1", + "source": { + "type": "git", + "url": "https://github.com/fzaninotto/Faker.git", + "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/fc10d778e4b84d5bd315dad194661e091d307c6f", + "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "ext-intl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "squizlabs/php_codesniffer": "^2.9.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "time": "2019-12-12T13:22:17+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/776503d3a8e85d4f9a1148614f95b7a608b046ad", + "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.3|^7.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "1.3.3", + "phpunit/phpunit": "~4.0", + "satooshi/php-coveralls": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "time": "2016-01-20T08:20:44+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "6c6a7c533469873deacf998237e7649fc6b36223" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/6c6a7c533469873deacf998237e7649fc6b36223", + "reference": "6c6a7c533469873deacf998237e7649fc6b36223", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "hamcrest/hamcrest-php": "~2.0", + "lib-pcre": ">=7.0", + "php": "^7.3.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.0.0 || ^9.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Mockery": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "time": "2020-05-19T14:25:16+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.9.5", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", + "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2020-01-17T21:11:47+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v4.2.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "d50490417eded97be300a92cd7df7badc37a9018" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/d50490417eded97be300a92cd7df7badc37a9018", + "reference": "d50490417eded97be300a92cd7df7badc37a9018", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "facade/ignition-contracts": "^1.0", + "filp/whoops": "^2.4", + "php": "^7.2.5", + "symfony/console": "^5.0" + }, + "require-dev": { + "facade/ignition": "^2.0", + "fideloper/proxy": "^4.2", + "friendsofphp/php-cs-fixer": "^2.16", + "fruitcake/laravel-cors": "^1.0", + "laravel/framework": "^7.0", + "laravel/tinker": "^2.0", + "nunomaduro/larastan": "^0.5", + "orchestra/testbench": "^5.0", + "phpstan/phpstan": "^0.12.3", + "phpunit/phpunit": "^8.5.1 || ^9.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2020-04-04T19:56:08+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2018-07-08T19:23:20+00:00" + }, + { + "name": "phar-io/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "time": "2018-07-08T19:19:57+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2020-04-27T09:25:28+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-filter": "^7.1", + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0", + "phpdocumentor/type-resolver": "^1.0", + "webmozart/assert": "^1" + }, + "require-dev": { + "doctrine/instantiator": "^1", + "mockery/mockery": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2020-02-22T12:28:44+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "^7.2", + "mockery/mockery": "~1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "time": "2020-02-18T18:59:58+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.10.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "451c3cd1418cf640de218914901e51b064abb093" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5 || ^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2020-03-05T15:02:03+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "7.0.10", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1884187926fbb755a9aaf0b3836ad3165b478bf", + "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.2", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.1.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^4.2.2", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1.3" + }, + "require-dev": { + "phpunit/phpunit": "^8.2.2" + }, + "suggest": { + "ext-xdebug": "^2.7.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2019-11-20T13:55:58+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "050bedf145a257b1ff02746c31894800e5122946" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", + "reference": "050bedf145a257b1ff02746c31894800e5122946", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2018-09-13T20:33:42+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "2.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2019-06-07T04:22:29+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2019-09-17T06:23:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "8.5.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "63dda3b212a0025d380a745f91bdb4d8c985adb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/63dda3b212a0025d380a745f91bdb4d8c985adb7", + "reference": "63dda3b212a0025d380a745f91bdb4d8c985adb7", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "doctrine/instantiator": "^1.2.0", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.9.1", + "phar-io/manifest": "^1.0.3", + "phar-io/version": "^2.0.1", + "php": "^7.2", + "phpspec/prophecy": "^1.8.1", + "phpunit/php-code-coverage": "^7.0.7", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1.2", + "sebastian/comparator": "^3.0.2", + "sebastian/diff": "^3.0.2", + "sebastian/environment": "^4.2.2", + "sebastian/exporter": "^3.1.1", + "sebastian/global-state": "^3.0.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0.1", + "sebastian/type": "^1.1.3", + "sebastian/version": "^2.0.1" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "^2.0.0" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-05-22T13:51:52+00:00" + }, + { + "name": "scrivo/highlight.php", + "version": "v9.18.1.1", + "source": { + "type": "git", + "url": "https://github.com/scrivo/highlight.php.git", + "reference": "52fc21c99fd888e33aed4879e55a3646f8d40558" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scrivo/highlight.php/zipball/52fc21c99fd888e33aed4879e55a3646f8d40558", + "reference": "52fc21c99fd888e33aed4879e55a3646f8d40558", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8|^5.7", + "sabberworm/php-css-parser": "^8.3", + "symfony/finder": "^2.8|^3.4", + "symfony/var-dumper": "^2.8|^3.4" + }, + "suggest": { + "ext-dom": "Needed to make use of the features in the utilities namespace" + }, + "type": "library", + "autoload": { + "psr-0": { + "Highlight\\": "", + "HighlightUtilities\\": "" + }, + "files": [ + "HighlightUtilities/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Geert Bergman", + "homepage": "http://www.scrivo.org/", + "role": "Project Author" + }, + { + "name": "Vladimir Jimenez", + "homepage": "https://allejo.io", + "role": "Maintainer" + }, + { + "name": "Martin Folkers", + "homepage": "https://twobrain.io", + "role": "Contributor" + } + ], + "description": "Server side syntax highlighter that supports 185 languages. It's a PHP port of highlight.js", + "keywords": [ + "code", + "highlight", + "highlight.js", + "highlight.php", + "syntax" + ], + "funding": [ + { + "url": "https://github.com/allejo", + "type": "github" + } + ], + "time": "2020-03-02T05:59:21+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" + }, + { + "name": "sebastian/comparator", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-07-12T15:12:46+00:00" + }, + { + "name": "sebastian/diff", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "time": "2019-02-04T06:01:07+00:00" + }, + { + "name": "sebastian/environment", + "version": "4.2.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2019-11-20T08:46:58+00:00" + }, + { + "name": "sebastian/exporter", + "version": "3.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2019-09-14T09:02:43+00:00" + }, + { + "name": "sebastian/global-state", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^8.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2019-02-01T05:30:01+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-08-03T12:35:26+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29T09:07:27+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2018-10-04T04:07:39+00:00" + }, + { + "name": "sebastian/type", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3", + "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "time": "2019-07-02T08:10:15+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2019-06-13T22:48:21+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6", + "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "vimeo/psalm": "<3.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2020-04-18T12:12:48+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^7.2" + }, + "platform-dev": [], + "plugin-api-version": "1.1.0" +} diff --git a/config/admin.php b/config/admin.php new file mode 100644 index 0000000..bc93be7 --- /dev/null +++ b/config/admin.php @@ -0,0 +1,409 @@ + '能源院', + + /* + |-------------------------------------------------------------------------- + | Laravel-admin logo + |-------------------------------------------------------------------------- + | + | The logo of all admin pages. You can also set it as an image by using a + | `img` tag, eg 'Admin logo'. + | + */ + 'logo' => '能源院', + + /* + |-------------------------------------------------------------------------- + | Laravel-admin mini logo + |-------------------------------------------------------------------------- + | + | The logo of all admin pages when the sidebar menu is collapsed. You can + | also set it as an image by using a `img` tag, eg + | 'Admin logo'. + | + */ + 'logo-mini' => 'nyfh', + + /* + |-------------------------------------------------------------------------- + | Laravel-admin bootstrap setting + |-------------------------------------------------------------------------- + | + | This value is the path of laravel-admin bootstrap file. + | + */ + 'bootstrap' => app_path('Admin/bootstrap.php'), + + /* + |-------------------------------------------------------------------------- + | Laravel-admin route settings + |-------------------------------------------------------------------------- + | + | The routing configuration of the admin page, including the path prefix, + | the controller namespace, and the default middleware. If you want to + | access through the root path, just set the prefix to empty string. + | + */ + 'route' => [ + + 'prefix' => env('ADMIN_ROUTE_PREFIX', 'admin'), + + 'namespace' => 'App\\Admin\\Controllers', + + 'middleware' => ['web', 'admin'], + ], + + /* + |-------------------------------------------------------------------------- + | Laravel-admin install directory + |-------------------------------------------------------------------------- + | + | The installation directory of the controller and routing configuration + | files of the administration page. The default is `app/Admin`, which must + | be set before running `artisan admin::install` to take effect. + | + */ + 'directory' => app_path('Admin'), + + /* + |-------------------------------------------------------------------------- + | Laravel-admin html title + |-------------------------------------------------------------------------- + | + | Html title for all pages. + | + */ + 'title' => '管理平台', + + /* + |-------------------------------------------------------------------------- + | Access via `https` + |-------------------------------------------------------------------------- + | + | If your page is going to be accessed via https, set it to `true`. + | + */ + 'https' => env('ADMIN_HTTPS', false), + + /* + |-------------------------------------------------------------------------- + | Laravel-admin auth setting + |-------------------------------------------------------------------------- + | + | Authentication settings for all admin pages. Include an authentication + | guard and a user provider setting of authentication driver. + | + | You can specify a controller for `login` `logout` and other auth routes. + | + */ + 'auth' => [ + + 'controller' => App\Admin\Controllers\AuthController::class, + + 'guard' => 'admin', + + 'guards' => [ + 'admin' => [ + 'driver' => 'session', + 'provider' => 'admin', + ], + ], + + 'providers' => [ + 'admin' => [ + 'driver' => 'eloquent', + 'model' => Encore\Admin\Auth\Database\Administrator::class, + ], + ], + + // Add "remember me" to login form + 'remember' => true, + + // Redirect to the specified URI when user is not authorized. + 'redirect_to' => 'auth/login', + + // The URIs that should be excluded from authorization. + 'excepts' => [ + 'auth/login', + 'auth/logout', + '_handle_action_', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Laravel-admin upload setting + |-------------------------------------------------------------------------- + | + | File system configuration for form upload files and images, including + | disk and upload path. + | + */ + 'upload' => [ + + // Disk in `config/filesystem.php`. + 'disk' => 'admin', + + // Image and file upload path under the disk above. + 'directory' => [ + 'image' => 'images', + 'file' => 'files', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Laravel-admin database settings + |-------------------------------------------------------------------------- + | + | Here are database settings for laravel-admin builtin model & tables. + | + */ + 'database' => [ + + // Database connection for following tables. + 'connection' => '', + + // User tables and model. + 'users_table' => 'admin_users', + 'users_model' => Encore\Admin\Auth\Database\Administrator::class, + + // Role table and model. + 'roles_table' => 'admin_roles', + 'roles_model' => Encore\Admin\Auth\Database\Role::class, + + // Permission table and model. + 'permissions_table' => 'admin_permissions', + 'permissions_model' => Encore\Admin\Auth\Database\Permission::class, + + // Menu table and model. + 'menu_table' => 'admin_menu', + 'menu_model' => Encore\Admin\Auth\Database\Menu::class, + + // Pivot table for table above. + 'operation_log_table' => 'admin_operation_log', + 'user_permissions_table' => 'admin_user_permissions', + 'role_users_table' => 'admin_role_users', + 'role_permissions_table' => 'admin_role_permissions', + 'role_menu_table' => 'admin_role_menu', + ], + + /* + |-------------------------------------------------------------------------- + | User operation log setting + |-------------------------------------------------------------------------- + | + | By setting this option to open or close operation log in laravel-admin. + | + */ + 'operation_log' => [ + + 'enable' => true, + + /* + * Only logging allowed methods in the list + */ + 'allowed_methods' => ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH'], + + /* + * Routes that will not log to database. + * + * All method to path like: admin/auth/logs + * or specific method to path like: get:admin/auth/logs. + */ + 'except' => [ + 'admin/auth/logs*', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Indicates whether to check route permission. + |-------------------------------------------------------------------------- + */ + 'check_route_permission' => true, + + /* + |-------------------------------------------------------------------------- + | Indicates whether to check menu roles. + |-------------------------------------------------------------------------- + */ + 'check_menu_roles' => true, + + /* + |-------------------------------------------------------------------------- + | User default avatar + |-------------------------------------------------------------------------- + | + | Set a default avatar for newly created users. + | + */ + 'default_avatar' => '/vendor/laravel-admin/AdminLTE/dist/img/user2-160x160.jpg', + + /* + |-------------------------------------------------------------------------- + | Admin map field provider + |-------------------------------------------------------------------------- + | + | Supported: "tencent", "google", "yandex". + | + */ + 'map_provider' => 'google', + + /* + |-------------------------------------------------------------------------- + | Application Skin + |-------------------------------------------------------------------------- + | + | This value is the skin of admin pages. + | @see https://adminlte.io/docs/2.4/layout + | + | Supported: + | "skin-blue", "skin-blue-light", "skin-yellow", "skin-yellow-light", + | "skin-green", "skin-green-light", "skin-purple", "skin-purple-light", + | "skin-red", "skin-red-light", "skin-black", "skin-black-light". + | + */ + 'skin' => 'skin-blue-light', + + /* + |-------------------------------------------------------------------------- + | Application layout + |-------------------------------------------------------------------------- + | + | This value is the layout of admin pages. + | @see https://adminlte.io/docs/2.4/layout + | + | Supported: "fixed", "layout-boxed", "layout-top-nav", "sidebar-collapse", + | "sidebar-mini". + | + */ + 'layout' => ['fixed', 'sidebar-mini'], + + /* + |-------------------------------------------------------------------------- + | Login page background image + |-------------------------------------------------------------------------- + | + | This value is used to set the background image of login page. + | + */ + 'login_background_image' => '', + + /* + |-------------------------------------------------------------------------- + | Show version at footer + |-------------------------------------------------------------------------- + | + | Whether to display the version number of laravel-admin at the footer of + | each page + | + */ + 'show_version' => true, + + /* + |-------------------------------------------------------------------------- + | Show environment at footer + |-------------------------------------------------------------------------- + | + | Whether to display the environment at the footer of each page + | + */ + 'show_environment' => true, + + /* + |-------------------------------------------------------------------------- + | Menu bind to permission + |-------------------------------------------------------------------------- + | + | whether enable menu bind to a permission + */ + 'menu_bind_permission' => true, + + /* + |-------------------------------------------------------------------------- + | Enable default breadcrumb + |-------------------------------------------------------------------------- + | + | Whether enable default breadcrumb for every page content. + */ + 'enable_default_breadcrumb' => true, + + /* + |-------------------------------------------------------------------------- + | Enable/Disable assets minify + |-------------------------------------------------------------------------- + */ + 'minify_assets' => [ + + // Assets will not be minified. + 'excepts' => [ + + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Enable/Disable sidebar menu search + |-------------------------------------------------------------------------- + */ + 'enable_menu_search' => true, + + /* + |-------------------------------------------------------------------------- + | Alert message that will displayed on top of the page. + |-------------------------------------------------------------------------- + */ + 'top_alert' => '', + + /* + |-------------------------------------------------------------------------- + | The global Grid action display class. + |-------------------------------------------------------------------------- + */ + 'grid_action_class' => \Encore\Admin\Grid\Displayers\DropdownActions::class, + + /* + |-------------------------------------------------------------------------- + | Extension Directory + |-------------------------------------------------------------------------- + | + | When you use command `php artisan admin:extend` to generate extensions, + | the extension files will be generated in this directory. + */ + 'extension_dir' => app_path('Admin/Extensions'), + + /* + |-------------------------------------------------------------------------- + | Settings for extensions. + |-------------------------------------------------------------------------- + | + | You can find all available extensions here + | https://github.com/laravel-admin-extensions. + | + */ + 'extensions' => [ + 'ueditor' => [ + // 如果要关掉这个扩展,设置为false + 'enable' => true, + // 编辑器的前端配置 参考:http://fex.baidu.com/ueditor/#start-config + 'config' => [ + 'initialFrameHeight' => 400, // 例如初始化高度 + ], + 'field_type' => 'ueditor', + ], + ], +]; diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..3fe2039 --- /dev/null +++ b/config/app.php @@ -0,0 +1,231 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + 'asset_url' => env('ASSET_URL', null), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'PRC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'zh-CN', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Faker Locale + |-------------------------------------------------------------------------- + | + | This locale will be used by the Faker PHP library when generating fake + | data for your database seeds. For example, this will be used to get + | localized telephone numbers, street address information and more. + | + */ + + 'faker_locale' => 'en_US', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + + /* + * Package Service Providers... + */ + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + // App\Providers\BroadcastServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => [ + + 'App' => Illuminate\Support\Facades\App::class, + 'Arr' => Illuminate\Support\Arr::class, + 'Artisan' => Illuminate\Support\Facades\Artisan::class, + 'Auth' => Illuminate\Support\Facades\Auth::class, + 'Blade' => Illuminate\Support\Facades\Blade::class, + 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, + 'Bus' => Illuminate\Support\Facades\Bus::class, + 'Cache' => Illuminate\Support\Facades\Cache::class, + 'Config' => Illuminate\Support\Facades\Config::class, + 'Cookie' => Illuminate\Support\Facades\Cookie::class, + 'Crypt' => Illuminate\Support\Facades\Crypt::class, + 'DB' => Illuminate\Support\Facades\DB::class, + 'Eloquent' => Illuminate\Database\Eloquent\Model::class, + 'Event' => Illuminate\Support\Facades\Event::class, + 'File' => Illuminate\Support\Facades\File::class, + 'Gate' => Illuminate\Support\Facades\Gate::class, + 'Hash' => Illuminate\Support\Facades\Hash::class, + 'Lang' => Illuminate\Support\Facades\Lang::class, + 'Log' => Illuminate\Support\Facades\Log::class, + 'Mail' => Illuminate\Support\Facades\Mail::class, + 'Notification' => Illuminate\Support\Facades\Notification::class, + 'Password' => Illuminate\Support\Facades\Password::class, + 'Queue' => Illuminate\Support\Facades\Queue::class, + 'Redirect' => Illuminate\Support\Facades\Redirect::class, + 'Redis' => Illuminate\Support\Facades\Redis::class, + 'Request' => Illuminate\Support\Facades\Request::class, + 'Response' => Illuminate\Support\Facades\Response::class, + 'Route' => Illuminate\Support\Facades\Route::class, + 'Schema' => Illuminate\Support\Facades\Schema::class, + 'Session' => Illuminate\Support\Facades\Session::class, + 'Storage' => Illuminate\Support\Facades\Storage::class, + 'Str' => Illuminate\Support\Str::class, + 'URL' => Illuminate\Support\Facades\URL::class, + 'Validator' => Illuminate\Support\Facades\Validator::class, + 'View' => Illuminate\Support\Facades\View::class, + + ], + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 0000000..aaf982b --- /dev/null +++ b/config/auth.php @@ -0,0 +1,117 @@ + [ + 'guard' => 'web', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session", "token" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + + 'api' => [ + 'driver' => 'token', + 'provider' => 'users', + 'hash' => false, + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => App\User::class, + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire time is the number of minutes that the reset token should be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'password_resets', + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the amount of seconds before a password confirmation + | times out and the user is prompted to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => 10800, + +]; diff --git a/config/broadcasting.php b/config/broadcasting.php new file mode 100644 index 0000000..3bba110 --- /dev/null +++ b/config/broadcasting.php @@ -0,0 +1,59 @@ + env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'cluster' => env('PUSHER_APP_CLUSTER'), + 'useTLS' => true, + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..46751e6 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,103 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'cache', + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing a RAM based store such as APC or Memcached, there might + | be other applications utilizing the same cache. So, we'll specify a + | value to get prefixed to all our keys so we can avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'), + +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..b42d9b3 --- /dev/null +++ b/config/database.php @@ -0,0 +1,147 @@ + env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DATABASE_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + 'schema' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + ], + + ], + +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100644 index 0000000..c6e2ff6 --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,77 @@ + env('FILESYSTEM_DRIVER', 'local'), + + /* + |-------------------------------------------------------------------------- + | Default Cloud Filesystem Disk + |-------------------------------------------------------------------------- + | + | Many applications store files both locally and in the cloud. For this + | reason, you may specify a default "cloud" driver here. This driver + | will be bound as the Cloud disk implementation in the container. + | + */ + + 'cloud' => env('FILESYSTEM_CLOUD', 's3'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been setup for each driver as an example of the required options. + | + | Supported Drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'admin' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL') . '/storage', + 'visibility' => 'public', + ], + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL') . '/storage', + 'visibility' => 'public', + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + ], + + ], + +]; diff --git a/config/hashing.php b/config/hashing.php new file mode 100644 index 0000000..8425770 --- /dev/null +++ b/config/hashing.php @@ -0,0 +1,52 @@ + 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 1024, + 'threads' => 2, + 'time' => 2, + ], + +]; diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 0000000..088c204 --- /dev/null +++ b/config/logging.php @@ -0,0 +1,104 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => 'debug', + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => 'debug', + 'days' => 14, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => 'critical', + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => 'debug', + 'handler' => SyslogUdpHandler::class, + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + ], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => 'debug', + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => 'debug', + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100644 index 0000000..3c65eb3 --- /dev/null +++ b/config/mail.php @@ -0,0 +1,136 @@ + env('MAIL_DRIVER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | SMTP Host Address + |-------------------------------------------------------------------------- + | + | Here you may provide the host address of the SMTP server used by your + | applications. A default option is provided that is compatible with + | the Mailgun mail service which will provide reliable deliveries. + | + */ + + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + + /* + |-------------------------------------------------------------------------- + | SMTP Host Port + |-------------------------------------------------------------------------- + | + | This is the SMTP port used by your application to deliver e-mails to + | users of the application. Like the host we have set this value to + | stay compatible with the Mailgun e-mail application by default. + | + */ + + 'port' => env('MAIL_PORT', 587), + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + + /* + |-------------------------------------------------------------------------- + | E-Mail Encryption Protocol + |-------------------------------------------------------------------------- + | + | Here you may specify the encryption protocol that should be used when + | the application send e-mail messages. A sensible default using the + | transport layer security protocol should provide great security. + | + */ + + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + + /* + |-------------------------------------------------------------------------- + | SMTP Server Username + |-------------------------------------------------------------------------- + | + | If your SMTP server requires a username for authentication, you should + | set it here. This will get used to authenticate with your server on + | connection. You may also set the "password" value below this one. + | + */ + + 'username' => env('MAIL_USERNAME'), + + 'password' => env('MAIL_PASSWORD'), + + /* + |-------------------------------------------------------------------------- + | Sendmail System Path + |-------------------------------------------------------------------------- + | + | When using the "sendmail" driver to send e-mails, we will need to know + | the path to where Sendmail lives on this server. A default path has + | been provided here, which will work well on most of your systems. + | + */ + + 'sendmail' => '/usr/sbin/sendmail -bs', + + /* + |-------------------------------------------------------------------------- + | Markdown Mail Settings + |-------------------------------------------------------------------------- + | + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! + | + */ + + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + + /* + |-------------------------------------------------------------------------- + | Log Channel + |-------------------------------------------------------------------------- + | + | If you are using the "log" driver, you may specify the logging channel + | if you prefer to keep mail messages separate from other log entries + | for simpler reading. Otherwise, the default channel will be used. + | + */ + + 'log_channel' => env('MAIL_LOG_CHANNEL'), + +]; diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 0000000..3a30d6c --- /dev/null +++ b/config/queue.php @@ -0,0 +1,88 @@ + env('QUEUE_CONNECTION', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + 'block_for' => 0, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'your-queue-name'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => 90, + 'block_for' => null, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database'), + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 0000000..2a1d616 --- /dev/null +++ b/config/services.php @@ -0,0 +1,33 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + ], + + 'postmark' => [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..175ac49 --- /dev/null +++ b/config/session.php @@ -0,0 +1,199 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION', null), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | When using the "apc", "memcached", or "dynamodb" session drivers you may + | list a cache store that should be used for these sessions. This value + | must match with one of the application's configured cache "stores". + | + */ + + 'store' => env('SESSION_STORE', null), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_') . '_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN', null), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you if it can not be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE', null), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | do not enable this as other CSRF protection services are in place. + | + | Supported: "lax", "strict", "none" + | + */ + + 'same_site' => 'lax', + +]; diff --git a/config/ueditor.php b/config/ueditor.php new file mode 100644 index 0000000..8411b9c --- /dev/null +++ b/config/ueditor.php @@ -0,0 +1,116 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +return [ + // 存储引擎: config/filesystem.php 中 disks, public 或 qiniu + 'disk' => 'public', + 'route' => [ + 'name' => '/ueditor/server', + 'options' => [ + // middleware => 'auth', + ], + ], + + // 上传 配置 + 'upload' => [ + /* 前后端通信相关的配置,注释只允许使用多行方式 */ + /* 上传图片配置项 */ + 'imageActionName' => 'upload-image', /* 执行上传图片的action名称 */ + 'imageFieldName' => 'upfile', /* 提交的图片表单名称 */ + 'imageMaxSize' => 2 * 1024 * 1024, /* 上传大小限制,单位B */ + 'imageAllowFiles' => ['.png', '.jpg', '.jpeg', '.gif', '.bmp'], /* 上传图片格式显示 */ + 'imageCompressEnable' => true, /* 是否压缩图片,默认是true */ + 'imageCompressBorder' => 1600, /* 图片压缩最长边限制 */ + 'imageInsertAlign' => 'none', /* 插入的图片浮动方式 */ + 'imageUrlPrefix' => '', /* 图片访问路径前缀 */ + 'imagePathFormat' => '/uploads/image/{yyyy}/{mm}/{dd}/', /* 上传保存路径,可以自定义保存路径和文件名格式 */ + /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */ + /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */ + /* {time} 会替换成时间戳 */ + /* {yyyy} 会替换成四位年份 */ + /* {yy} 会替换成两位年份 */ + /* {mm} 会替换成两位月份 */ + /* {dd} 会替换成两位日期 */ + /* {hh} 会替换成两位小时 */ + /* {ii} 会替换成两位分钟 */ + /* {ss} 会替换成两位秒 */ + /* 非法字符 \ => * ? " < > | */ + /* 具请体看线上文档 => fex.baidu.com/assets/#use-format_upload_filename */ + + /* 涂鸦图片上传配置项 */ + 'scrawlActionName' => 'upload-scrawl', /* 执行上传涂鸦的action名称 */ + 'scrawlFieldName' => 'upfile', /* 提交的图片表单名称 */ + 'scrawlPathFormat' => '/uploads/image/{yyyy}/{mm}/{dd}/', /* 上传保存路径,可以自定义保存路径和文件名格式 */ + 'scrawlMaxSize' => 2048000, /* 上传大小限制,单位B */ + 'scrawlUrlPrefix' => '', /* 图片访问路径前缀 */ + 'scrawlInsertAlign' => 'none', + + /* 截图工具上传 */ + 'snapscreenActionName' => 'upload-image', /* 执行上传截图的action名称 */ + 'snapscreenPathFormat' => '/uploads/image/{yyyy}/{mm}/{dd}/', /* 上传保存路径,可以自定义保存路径和文件名格式 */ + 'snapscreenUrlPrefix' => '', /* 图片访问路径前缀 */ + 'snapscreenInsertAlign' => 'none', /* 插入的图片浮动方式 */ + + /* 抓取远程图片配置 */ + 'catcherLocalDomain' => ['127.0.0.1', 'localhost', 'img.baidu.com'], + 'catcherActionName' => 'catch-image', /* 执行抓取远程图片的action名称 */ + 'catcherFieldName' => 'source', /* 提交的图片列表表单名称 */ + 'catcherPathFormat' => '/uploads/image/{yyyy}/{mm}/{dd}/', /* 上传保存路径,可以自定义保存路径和文件名格式 */ + 'catcherUrlPrefix' => '', /* 图片访问路径前缀 */ + 'catcherMaxSize' => 2048000, /* 上传大小限制,单位B */ + 'catcherAllowFiles' => ['.png', '.jpg', '.jpeg', '.gif', '.bmp'], /* 抓取图片格式显示 */ + + /* 上传视频配置 */ + 'videoActionName' => 'upload-video', /* 执行上传视频的action名称 */ + 'videoFieldName' => 'upfile', /* 提交的视频表单名称 */ + 'videoPathFormat' => '/uploads/video/{yyyy}/{mm}/{dd}/', /* 上传保存路径,可以自定义保存路径和文件名格式 */ + 'videoUrlPrefix' => '', /* 视频访问路径前缀 */ + 'videoMaxSize' => 102400000, /* 上传大小限制,单位B,默认100MB */ + 'videoAllowFiles' => [ + '.flv', '.swf', '.mkv', '.avi', '.rm', '.rmvb', '.mpeg', '.mpg', + '.ogg', '.ogv', '.mov', '.wmv', '.mp4', '.webm', '.mp3', '.wav', '.mid', ], /* 上传视频格式显示 */ + + /* 上传文件配置 */ + 'fileActionName' => 'upload-file', /* controller里,执行上传视频的action名称 */ + 'fileFieldName' => 'upfile', /* 提交的文件表单名称 */ + 'filePathFormat' => '/uploads/file/{yyyy}/{mm}/{dd}/', /* 上传保存路径,可以自定义保存路径和文件名格式 */ + 'fileUrlPrefix' => '', /* 文件访问路径前缀 */ + 'fileMaxSize' => 51200000, /* 上传大小限制,单位B,默认50MB */ + 'fileAllowFiles' => [ + '.png', '.jpg', '.jpeg', '.gif', '.bmp', + '.flv', '.swf', '.mkv', '.avi', '.rm', '.rmvb', '.mpeg', '.mpg', + '.ogg', '.ogv', '.mov', '.wmv', '.mp4', '.webm', '.mp3', '.wav', '.mid', + '.rar', '.zip', '.tar', '.gz', '.7z', '.bz2', '.cab', '.iso', + '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.pdf', '.txt', '.md', '.xml', + ], /* 上传文件格式显示 */ + + /* 列出指定目录下的图片 */ + 'imageManagerActionName' => 'list-image', /* 执行图片管理的action名称 */ + 'imageManagerListPath' => '/uploads/image/', /* 指定要列出图片的目录 */ + 'imageManagerListSize' => 20, /* 每次列出文件数量 */ + 'imageManagerUrlPrefix' => '', /* 图片访问路径前缀 */ + 'imageManagerInsertAlign' => 'none', /* 插入的图片浮动方式 */ + 'imageManagerAllowFiles' => ['.png', '.jpg', '.jpeg', '.gif', '.bmp'], /* 列出的文件类型 */ + + /* 列出指定目录下的文件 */ + 'fileManagerActionName' => 'list-file', /* 执行文件管理的action名称 */ + 'fileManagerListPath' => '/uploads/file/', /* 指定要列出文件的目录 */ + 'fileManagerUrlPrefix' => '', /* 文件访问路径前缀 */ + 'fileManagerListSize' => 20, /* 每次列出文件数量 */ + 'fileManagerAllowFiles' => [ + '.png', '.jpg', '.jpeg', '.gif', '.bmp', + '.flv', '.swf', '.mkv', '.avi', '.rm', '.rmvb', '.mpeg', '.mpg', + '.ogg', '.ogv', '.mov', '.wmv', '.mp4', '.webm', '.mp3', '.wav', '.mid', + '.rar', '.zip', '.tar', '.gz', '.7z', '.bz2', '.cab', '.iso', + '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.pdf', '.txt', '.md', '.xml', + ], /* 列出的文件类型 */ + ], +]; diff --git a/config/view.php b/config/view.php new file mode 100644 index 0000000..22b8a18 --- /dev/null +++ b/config/view.php @@ -0,0 +1,36 @@ + [ + resource_path('views'), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => env( + 'VIEW_COMPILED_PATH', + realpath(storage_path('framework/views')) + ), + +]; diff --git a/database/.gitignore b/database/.gitignore new file mode 100644 index 0000000..97fc976 --- /dev/null +++ b/database/.gitignore @@ -0,0 +1,2 @@ +*.sqlite +*.sqlite-journal diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php new file mode 100644 index 0000000..741edea --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,28 @@ +define(User::class, function (Faker $faker) { + return [ + 'name' => $faker->name, + 'email' => $faker->unique()->safeEmail, + 'email_verified_at' => now(), + 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'remember_token' => Str::random(10), + ]; +}); diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php new file mode 100644 index 0000000..a91e1d3 --- /dev/null +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -0,0 +1,36 @@ +bigIncrements('id'); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users'); + } +} diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php new file mode 100644 index 0000000..0ee0a36 --- /dev/null +++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->index(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('password_resets'); + } +} diff --git a/database/migrations/2016_01_04_173148_create_admin_tables.php b/database/migrations/2016_01_04_173148_create_admin_tables.php new file mode 100644 index 0000000..450847e --- /dev/null +++ b/database/migrations/2016_01_04_173148_create_admin_tables.php @@ -0,0 +1,119 @@ +increments('id'); + $table->string('username', 190)->unique(); + $table->string('password', 60); + $table->string('name'); + $table->string('avatar')->nullable(); + $table->string('remember_token', 100)->nullable(); + $table->timestamps(); + }); + + Schema::create(config('admin.database.roles_table'), function (Blueprint $table) { + $table->increments('id'); + $table->string('name', 50)->unique(); + $table->string('slug', 50)->unique(); + $table->timestamps(); + }); + + Schema::create(config('admin.database.permissions_table'), function (Blueprint $table) { + $table->increments('id'); + $table->string('name', 50)->unique(); + $table->string('slug', 50)->unique(); + $table->string('http_method')->nullable(); + $table->text('http_path')->nullable(); + $table->timestamps(); + }); + + Schema::create(config('admin.database.menu_table'), function (Blueprint $table) { + $table->increments('id'); + $table->integer('parent_id')->default(0); + $table->integer('order')->default(0); + $table->string('title', 50); + $table->string('icon', 50); + $table->string('uri')->nullable(); + $table->string('permission')->nullable(); + + $table->timestamps(); + }); + + Schema::create(config('admin.database.role_users_table'), function (Blueprint $table) { + $table->integer('role_id'); + $table->integer('user_id'); + $table->index(['role_id', 'user_id']); + $table->timestamps(); + }); + + Schema::create(config('admin.database.role_permissions_table'), function (Blueprint $table) { + $table->integer('role_id'); + $table->integer('permission_id'); + $table->index(['role_id', 'permission_id']); + $table->timestamps(); + }); + + Schema::create(config('admin.database.user_permissions_table'), function (Blueprint $table) { + $table->integer('user_id'); + $table->integer('permission_id'); + $table->index(['user_id', 'permission_id']); + $table->timestamps(); + }); + + Schema::create(config('admin.database.role_menu_table'), function (Blueprint $table) { + $table->integer('role_id'); + $table->integer('menu_id'); + $table->index(['role_id', 'menu_id']); + $table->timestamps(); + }); + + Schema::create(config('admin.database.operation_log_table'), function (Blueprint $table) { + $table->increments('id'); + $table->integer('user_id'); + $table->string('path'); + $table->string('method', 10); + $table->string('ip'); + $table->text('input'); + $table->index('user_id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists(config('admin.database.users_table')); + Schema::dropIfExists(config('admin.database.roles_table')); + Schema::dropIfExists(config('admin.database.permissions_table')); + Schema::dropIfExists(config('admin.database.menu_table')); + Schema::dropIfExists(config('admin.database.user_permissions_table')); + Schema::dropIfExists(config('admin.database.role_users_table')); + Schema::dropIfExists(config('admin.database.role_permissions_table')); + Schema::dropIfExists(config('admin.database.role_menu_table')); + Schema::dropIfExists(config('admin.database.operation_log_table')); + } +} diff --git a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php new file mode 100644 index 0000000..389bdf7 --- /dev/null +++ b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php @@ -0,0 +1,35 @@ +bigIncrements('id'); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('failed_jobs'); + } +} diff --git a/database/migrations/2020_05_28_153525_create_articles_table.php b/database/migrations/2020_05_28_153525_create_articles_table.php new file mode 100644 index 0000000..fe889a9 --- /dev/null +++ b/database/migrations/2020_05_28_153525_create_articles_table.php @@ -0,0 +1,31 @@ +bigIncrements('id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('articles'); + } +} diff --git a/database/migrations/2020_05_28_153536_create_categories_table.php b/database/migrations/2020_05_28_153536_create_categories_table.php new file mode 100644 index 0000000..3820dbd --- /dev/null +++ b/database/migrations/2020_05_28_153536_create_categories_table.php @@ -0,0 +1,31 @@ +bigIncrements('id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('categories'); + } +} diff --git a/database/migrations/2020_05_28_163818_create_links_table.php b/database/migrations/2020_05_28_163818_create_links_table.php new file mode 100644 index 0000000..ee8de29 --- /dev/null +++ b/database/migrations/2020_05_28_163818_create_links_table.php @@ -0,0 +1,31 @@ +bigIncrements('id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('links'); + } +} diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php new file mode 100644 index 0000000..91cb6d1 --- /dev/null +++ b/database/seeds/DatabaseSeeder.php @@ -0,0 +1,16 @@ +call(UsersTableSeeder::class); + } +} diff --git a/newnyfh.sql b/newnyfh.sql new file mode 100644 index 0000000..72d3f43 --- /dev/null +++ b/newnyfh.sql @@ -0,0 +1,2252 @@ +-- phpMyAdmin SQL Dump +-- version 4.8.5 +-- https://www.phpmyadmin.net/ +-- +-- 主机: localhost +-- 生成日期: 2020-09-14 15:34:40 +-- 服务器版本: 5.5.48-log +-- PHP 版本: 7.3.18 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET AUTOCOMMIT = 0; +START TRANSACTION; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- 数据库: `newnyfh` +-- + +-- -------------------------------------------------------- + +-- +-- 表的结构 `admin_config` +-- + +CREATE TABLE `admin_config` ( + `id` int(10) UNSIGNED NOT NULL, + `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `value` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `description` text COLLATE utf8mb4_unicode_ci, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `admin_menu` +-- + +CREATE TABLE `admin_menu` ( + `id` int(10) UNSIGNED NOT NULL, + `parent_id` int(11) NOT NULL DEFAULT '0', + `order` int(11) NOT NULL DEFAULT '0', + `title` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, + `icon` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, + `uri` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `permission` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- 转存表中的数据 `admin_menu` +-- + +INSERT INTO `admin_menu` (`id`, `parent_id`, `order`, `title`, `icon`, `uri`, `permission`, `created_at`, `updated_at`) VALUES +(1, 0, 1, '看板', 'fa-bar-chart', '/', NULL, NULL, '2020-05-28 07:27:25'), +(2, 0, 10, '系统管理', 'fa-tasks', NULL, NULL, NULL, '2020-05-29 06:14:41'), +(3, 2, 12, '用户', 'fa-users', 'auth/users', NULL, NULL, '2020-06-02 01:58:11'), +(4, 2, 13, '角色', 'fa-user', 'auth/roles', NULL, NULL, '2020-06-02 01:58:11'), +(5, 2, 14, '权限', 'fa-ban', 'auth/permissions', NULL, NULL, '2020-06-02 01:58:11'), +(6, 2, 15, '菜单', 'fa-bars', 'auth/menu', NULL, NULL, '2020-06-02 01:58:11'), +(7, 2, 16, '操作日志', 'fa-history', 'auth/logs', NULL, NULL, '2020-06-02 01:58:11'), +(8, 0, 6, '资讯管理', 'fa-bank', 'articles', NULL, '2020-05-28 07:27:59', '2020-05-29 09:15:00'), +(9, 8, 7, '资讯列表', 'fa-book', 'articles', NULL, '2020-05-28 07:28:16', '2020-05-29 09:16:23'), +(10, 0, 8, '分类管理', 'fa-bars', NULL, NULL, '2020-05-28 07:28:28', '2020-05-29 06:14:41'), +(11, 10, 9, '分类列表', 'fa-bars', 'categories', NULL, '2020-05-28 07:28:36', '2020-05-29 06:14:41'), +(12, 0, 4, '友情链接', 'fa-amazon', NULL, NULL, '2020-05-28 08:45:01', '2020-05-29 09:14:37'), +(13, 12, 5, '友情链接列表', 'fa-at', 'links', NULL, '2020-05-28 08:45:07', '2020-05-29 09:15:48'), +(14, 0, 2, '广告管理', 'fa-500px', NULL, NULL, '2020-05-29 06:14:27', '2020-05-29 09:14:23'), +(15, 14, 3, '广告列表', 'fa-500px', 'adverts', NULL, '2020-05-29 06:14:37', '2020-05-29 09:15:32'), +(16, 2, 11, '配置项', 'fa-toggle-on', 'config', NULL, '2020-06-02 01:57:49', '2020-06-02 01:58:11'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `admin_operation_log` +-- + +CREATE TABLE `admin_operation_log` ( + `id` int(10) UNSIGNED NOT NULL, + `user_id` int(11) NOT NULL, + `path` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `method` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL, + `ip` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `input` text COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- 转存表中的数据 `admin_operation_log` +-- + +INSERT INTO `admin_operation_log` (`id`, `user_id`, `path`, `method`, `ip`, `input`, `created_at`, `updated_at`) VALUES +(1, 1, 'admin', 'GET', '1.190.203.218', '[]', '2020-05-28 07:25:07', '2020-05-28 07:25:07'), +(2, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:25:24', '2020-05-28 07:25:24'), +(3, 1, 'admin/auth/menu/2/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:25:51', '2020-05-28 07:25:51'), +(4, 1, 'admin/auth/menu/2', 'PUT', '1.190.203.218', '{\"parent_id\":\"0\",\"title\":\"\\u7cfb\\u7edf\\u7ba1\\u7406\",\"icon\":\"fa-tasks\",\"uri\":null,\"roles\":[\"1\",null],\"permission\":null,\"_token\":\"KoqE953b9jVm0UEB3UaWJ9qMx8yRPnWWeGjFxuCf\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/auth\\/menu\"}', '2020-05-28 07:25:58', '2020-05-28 07:25:58'), +(5, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-05-28 07:25:58', '2020-05-28 07:25:58'), +(6, 1, 'admin/auth/menu/3/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:26:01', '2020-05-28 07:26:01'), +(7, 1, 'admin/auth/menu/3', 'PUT', '1.190.203.218', '{\"parent_id\":\"2\",\"title\":\"\\u7528\\u6237\",\"icon\":\"fa-users\",\"uri\":\"auth\\/users\",\"roles\":[null],\"permission\":null,\"_token\":\"KoqE953b9jVm0UEB3UaWJ9qMx8yRPnWWeGjFxuCf\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/auth\\/menu\"}', '2020-05-28 07:26:09', '2020-05-28 07:26:09'), +(8, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-05-28 07:26:09', '2020-05-28 07:26:09'), +(9, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-05-28 07:27:00', '2020-05-28 07:27:00'), +(10, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:27:06', '2020-05-28 07:27:06'), +(11, 1, 'admin/auth/users', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:27:10', '2020-05-28 07:27:10'), +(12, 1, 'admin/auth/roles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:27:10', '2020-05-28 07:27:10'), +(13, 1, 'admin/auth/permissions', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:27:11', '2020-05-28 07:27:11'), +(14, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:27:11', '2020-05-28 07:27:11'), +(15, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:27:17', '2020-05-28 07:27:17'), +(16, 1, 'admin/auth/menu/1/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:27:20', '2020-05-28 07:27:20'), +(17, 1, 'admin/auth/menu/1', 'PUT', '1.190.203.218', '{\"parent_id\":\"0\",\"title\":\"\\u770b\\u677f\",\"icon\":\"fa-bar-chart\",\"uri\":\"\\/\",\"roles\":[null],\"permission\":null,\"_token\":\"KoqE953b9jVm0UEB3UaWJ9qMx8yRPnWWeGjFxuCf\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/auth\\/menu\"}', '2020-05-28 07:27:25', '2020-05-28 07:27:25'), +(18, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-05-28 07:27:25', '2020-05-28 07:27:25'), +(19, 1, 'admin/auth/menu', 'POST', '1.190.203.218', '{\"parent_id\":\"0\",\"title\":\"\\u8d44\\u8baf\\u7ba1\\u7406\",\"icon\":\"fa-bars\",\"uri\":\"articles\",\"roles\":[null],\"permission\":null,\"_token\":\"KoqE953b9jVm0UEB3UaWJ9qMx8yRPnWWeGjFxuCf\"}', '2020-05-28 07:27:59', '2020-05-28 07:27:59'), +(20, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-05-28 07:27:59', '2020-05-28 07:27:59'), +(21, 1, 'admin/auth/menu', 'POST', '1.190.203.218', '{\"parent_id\":\"8\",\"title\":\"\\u8d44\\u8baf\\u5217\\u8868\",\"icon\":\"fa-bars\",\"uri\":\"articles\",\"roles\":[null],\"permission\":null,\"_token\":\"KoqE953b9jVm0UEB3UaWJ9qMx8yRPnWWeGjFxuCf\"}', '2020-05-28 07:28:16', '2020-05-28 07:28:16'), +(22, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-05-28 07:28:16', '2020-05-28 07:28:16'), +(23, 1, 'admin/auth/menu', 'POST', '1.190.203.218', '{\"parent_id\":\"0\",\"title\":\"\\u5206\\u7c7b\\u7ba1\\u7406\",\"icon\":\"fa-bars\",\"uri\":null,\"roles\":[null],\"permission\":null,\"_token\":\"KoqE953b9jVm0UEB3UaWJ9qMx8yRPnWWeGjFxuCf\"}', '2020-05-28 07:28:28', '2020-05-28 07:28:28'), +(24, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-05-28 07:28:28', '2020-05-28 07:28:28'), +(25, 1, 'admin/auth/menu', 'POST', '1.190.203.218', '{\"parent_id\":\"10\",\"title\":\"\\u5206\\u7c7b\\u5217\\u8868\",\"icon\":\"fa-bars\",\"uri\":null,\"roles\":[null],\"permission\":null,\"_token\":\"KoqE953b9jVm0UEB3UaWJ9qMx8yRPnWWeGjFxuCf\"}', '2020-05-28 07:28:36', '2020-05-28 07:28:36'), +(26, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-05-28 07:28:37', '2020-05-28 07:28:37'), +(27, 1, 'admin/auth/menu/11/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:28:40', '2020-05-28 07:28:40'), +(28, 1, 'admin/auth/menu/11', 'PUT', '1.190.203.218', '{\"parent_id\":\"10\",\"title\":\"\\u5206\\u7c7b\\u5217\\u8868\",\"icon\":\"fa-bars\",\"uri\":\"categories\",\"roles\":[null],\"permission\":null,\"_token\":\"KoqE953b9jVm0UEB3UaWJ9qMx8yRPnWWeGjFxuCf\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/auth\\/menu\"}', '2020-05-28 07:29:07', '2020-05-28 07:29:07'), +(29, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-05-28 07:29:07', '2020-05-28 07:29:07'), +(30, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-05-28 07:29:10', '2020-05-28 07:29:10'), +(31, 1, 'admin/auth/menu', 'POST', '1.190.203.218', '{\"_token\":\"KoqE953b9jVm0UEB3UaWJ9qMx8yRPnWWeGjFxuCf\",\"_order\":\"[{\\\"id\\\":1},{\\\"id\\\":8,\\\"children\\\":[{\\\"id\\\":9}]},{\\\"id\\\":10,\\\"children\\\":[{\\\"id\\\":11}]},{\\\"id\\\":2,\\\"children\\\":[{\\\"id\\\":3},{\\\"id\\\":4},{\\\"id\\\":5},{\\\"id\\\":6},{\\\"id\\\":7}]}]\"}', '2020-05-28 07:29:32', '2020-05-28 07:29:32'), +(32, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:29:32', '2020-05-28 07:29:32'), +(33, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-05-28 07:29:33', '2020-05-28 07:29:33'), +(34, 1, 'admin/auth/menu/11/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:31:42', '2020-05-28 07:31:42'), +(35, 1, 'admin/auth/menu/11/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 07:34:07', '2020-05-28 07:34:07'), +(36, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-05-28 07:34:55', '2020-05-28 07:34:55'), +(37, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-05-28 07:38:07', '2020-05-28 07:38:07'), +(38, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-05-28 07:38:11', '2020-05-28 07:38:11'), +(39, 1, 'admin', 'GET', '1.190.203.218', '[]', '2020-05-28 07:42:07', '2020-05-28 07:42:07'), +(40, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:42:12', '2020-05-28 07:42:12'), +(41, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-05-28 07:43:24', '2020-05-28 07:43:24'), +(42, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-05-28 07:43:40', '2020-05-28 07:43:40'), +(43, 1, 'admin/articles/1/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:43:47', '2020-05-28 07:43:47'), +(44, 1, 'admin/categories', 'GET', '1.190.203.218', '[]', '2020-05-28 07:44:37', '2020-05-28 07:44:37'), +(45, 1, 'admin/categories', 'GET', '1.190.203.218', '[]', '2020-05-28 07:45:30', '2020-05-28 07:45:30'), +(46, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:46:26', '2020-05-28 07:46:26'), +(47, 1, 'admin/categories', 'GET', '1.190.203.218', '[]', '2020-05-28 07:46:54', '2020-05-28 07:46:54'), +(48, 1, 'admin/categories', 'GET', '1.190.203.218', '[]', '2020-05-28 07:47:02', '2020-05-28 07:47:02'), +(49, 1, 'admin/categories', 'GET', '1.190.203.218', '[]', '2020-05-28 07:47:03', '2020-05-28 07:47:03'), +(50, 1, 'admin/categories', 'GET', '1.190.203.218', '[]', '2020-05-28 07:47:04', '2020-05-28 07:47:04'), +(51, 1, 'admin/categories', 'GET', '1.190.203.218', '[]', '2020-05-28 07:47:12', '2020-05-28 07:47:12'), +(52, 1, 'admin/categories', 'GET', '1.190.203.218', '[]', '2020-05-28 07:47:44', '2020-05-28 07:47:44'), +(53, 1, 'admin/categories/1/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:48:11', '2020-05-28 07:48:11'), +(54, 1, 'admin/categories/1', 'PUT', '1.190.203.218', '{\"parent_id\":\"0\",\"title\":\"\\u6982\\u51b5\\u7b80\\u4ecb\",\"type\":\"article\",\"description\":null,\"order\":\"0\",\"status\":\"on\",\"_token\":\"KoqE953b9jVm0UEB3UaWJ9qMx8yRPnWWeGjFxuCf\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/categories\"}', '2020-05-28 07:48:16', '2020-05-28 07:48:16'), +(55, 1, 'admin/categories/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 07:48:16', '2020-05-28 07:48:16'), +(56, 1, 'admin/categories/1', 'PUT', '1.190.203.218', '{\"parent_id\":\"0\",\"title\":\"\\u6982\\u51b5\\u7b80\\u4ecb\",\"type\":\"article\",\"description\":null,\"order\":\"0\",\"status\":\"on\",\"_token\":\"KoqE953b9jVm0UEB3UaWJ9qMx8yRPnWWeGjFxuCf\",\"_method\":\"PUT\"}', '2020-05-28 07:49:03', '2020-05-28 07:49:03'), +(57, 1, 'admin/categories', 'GET', '1.190.203.218', '[]', '2020-05-28 07:49:03', '2020-05-28 07:49:03'), +(58, 1, 'admin/categories/1/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:49:08', '2020-05-28 07:49:08'), +(59, 1, 'admin/categories/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 07:49:14', '2020-05-28 07:49:14'), +(60, 1, 'admin/categories/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 07:50:05', '2020-05-28 07:50:05'), +(61, 1, 'admin/categories/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 07:52:36', '2020-05-28 07:52:36'), +(62, 1, 'admin/categories/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 07:52:39', '2020-05-28 07:52:39'), +(63, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:52:46', '2020-05-28 07:52:46'), +(64, 1, 'admin/articles/1', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:52:55', '2020-05-28 07:52:55'), +(65, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-05-28 07:52:55', '2020-05-28 07:52:55'), +(66, 1, 'admin/articles/1/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:53:00', '2020-05-28 07:53:00'), +(67, 1, 'admin/articles/1', 'PUT', '1.190.203.218', '{\"title\":\"\\u5173\\u7231\\u5973\\u6027 \\u5173\\u7231\\u5065\\u5eb7\",\"category_id\":\"16\",\"description\":\"\\u5927\\u5e86\\u5206\\u9662\\u4e09\\u516b\\u8282\\u5065\\u5eb7\\u8bb2\\u5ea7 \\u4e3a\\u5e86\\u795d\\u56fd\\u9645\\u5987\\u5973\\u52b3\\u52a8\\u8282\\uff0c\\u63d0\\u9ad8\\u5973\\u804c\\u5de5\\u7684\\u8eab\\u4f53\\u7d20\\u8d28\\uff0c\\u5173\\u7231\\u5973\\u804c\\u5de5\\u7684\\u8eab\\u5fc3\\u5065\\u5eb7\\uff0c\\u5927\\u5e86\\u5206\\u9662\\u4e8e3\\u67087\\u65e5\\u4e0b\\u5348\\u4e3e\\u529e\",\"sort\":\"10\",\"_token\":\"KoqE953b9jVm0UEB3UaWJ9qMx8yRPnWWeGjFxuCf\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/articles\"}', '2020-05-28 07:53:08', '2020-05-28 07:53:08'), +(68, 1, 'admin/articles/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 07:53:08', '2020-05-28 07:53:08'), +(69, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-05-28 07:54:01', '2020-05-28 07:54:01'), +(70, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:54:03', '2020-05-28 07:54:03'), +(71, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:54:05', '2020-05-28 07:54:05'), +(72, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:54:09', '2020-05-28 07:54:09'), +(73, 1, 'admin/articles/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 07:54:43', '2020-05-28 07:54:43'), +(74, 1, 'admin/articles/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 07:54:45', '2020-05-28 07:54:45'), +(75, 1, 'admin/articles/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 07:54:45', '2020-05-28 07:54:45'), +(76, 1, 'admin/articles/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 07:54:45', '2020-05-28 07:54:45'), +(77, 1, 'admin/articles/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 07:54:45', '2020-05-28 07:54:45'), +(78, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:54:52', '2020-05-28 07:54:52'), +(79, 1, 'admin/categories', 'GET', '1.190.203.218', '[]', '2020-05-28 07:54:55', '2020-05-28 07:54:55'), +(80, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:54:59', '2020-05-28 07:54:59'), +(81, 1, 'admin/articles/create', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 07:55:00', '2020-05-28 07:55:00'), +(82, 1, 'admin/articles/create', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:00:08', '2020-05-28 08:00:08'), +(83, 1, 'admin/articles/create', 'GET', '1.190.203.218', '[]', '2020-05-28 08:00:09', '2020-05-28 08:00:09'), +(84, 1, 'admin/articles/create', 'GET', '1.190.203.218', '[]', '2020-05-28 08:00:10', '2020-05-28 08:00:10'), +(85, 1, 'admin/articles/create', 'GET', '1.190.203.218', '[]', '2020-05-28 08:00:10', '2020-05-28 08:00:10'), +(86, 1, 'admin/articles/create', 'GET', '1.190.203.218', '[]', '2020-05-28 08:00:11', '2020-05-28 08:00:11'), +(87, 1, 'admin/articles/create', 'GET', '1.190.203.218', '[]', '2020-05-28 08:00:11', '2020-05-28 08:00:11'), +(88, 1, 'admin/articles/create', 'GET', '1.190.203.218', '[]', '2020-05-28 08:00:11', '2020-05-28 08:00:11'), +(89, 1, 'admin/articles/create', 'GET', '1.190.203.218', '[]', '2020-05-28 08:00:14', '2020-05-28 08:00:14'), +(90, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:00:16', '2020-05-28 08:00:16'), +(91, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:00:17', '2020-05-28 08:00:17'), +(92, 1, 'admin/articles/create', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:00:20', '2020-05-28 08:00:20'), +(93, 1, 'admin/articles/create', 'GET', '1.190.203.218', '[]', '2020-05-28 08:01:56', '2020-05-28 08:01:56'), +(94, 1, 'admin/articles/create', 'GET', '1.190.203.218', '[]', '2020-05-28 08:01:58', '2020-05-28 08:01:58'), +(95, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:02:02', '2020-05-28 08:02:02'), +(96, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:02:05', '2020-05-28 08:02:05'), +(97, 1, 'admin/articles/create', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:02:08', '2020-05-28 08:02:08'), +(98, 1, 'admin/articles/create', 'GET', '1.190.203.218', '[]', '2020-05-28 08:02:54', '2020-05-28 08:02:54'), +(99, 1, 'admin/articles/create', 'GET', '1.190.203.218', '[]', '2020-05-28 08:02:56', '2020-05-28 08:02:56'), +(100, 1, 'admin/articles/create', 'GET', '1.190.203.218', '[]', '2020-05-28 08:03:45', '2020-05-28 08:03:45'), +(101, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:03:48', '2020-05-28 08:03:48'), +(102, 1, 'admin/articles/1/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:03:50', '2020-05-28 08:03:50'), +(103, 1, 'admin/articles/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 08:04:01', '2020-05-28 08:04:01'), +(104, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:05:15', '2020-05-28 08:05:15'), +(105, 1, 'admin/categories/1/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:05:18', '2020-05-28 08:05:18'), +(106, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:06:59', '2020-05-28 08:06:59'), +(107, 1, 'admin/articles/1/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:07:02', '2020-05-28 08:07:02'), +(108, 1, 'admin/articles/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 08:13:18', '2020-05-28 08:13:18'), +(109, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:14:40', '2020-05-28 08:14:40'), +(110, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"title\":\"\\u5927\\u5e86\\u5206\\u9662\\u7ec4\\u7ec7\\u804c\\u5de5\\u53c2\\u52a0\\u201c\\u6025\\u6551\\u5065\\u5eb7\\u201d\\u4e13\\u9898\\u8bb2\\u5ea7\",\"category\":{\"id\":null}}', '2020-05-28 08:14:44', '2020-05-28 08:14:44'), +(111, 1, 'admin/articles/719/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:14:46', '2020-05-28 08:14:46'), +(112, 1, 'admin/articles/719/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 08:15:25', '2020-05-28 08:15:25'), +(113, 1, 'admin/articles/719/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 08:17:15', '2020-05-28 08:17:15'), +(114, 1, 'admin/articles/719', 'PUT', '1.190.203.218', '{\"title\":\"\\u5927\\u5e86\\u5206\\u9662\\u7ec4\\u7ec7\\u804c\\u5de5\\u53c2\\u52a0\\u201c\\u6025\\u6551\\u5065\\u5eb7\\u201d\\u4e13\\u9898\\u8bb2\\u5ea7\",\"category_id\":\"16\",\"description\":\"3\\u670821\\u65e5\\uff0c\\u5206\\u9662\\u5de5\\u4f1a\\u9080\\u8bf7\\u4e86\\u9ed1\\u9f99\\u6c5f\\u7701\\u5b89\\u5168\\u5065\\u5eb7\\u6559\\u80b2\\u4e2d\\u5fc3\\u725b\\u5a49\\u8fb0\\u4e3b\\u4efb\\u505a\\u9898\\u4e3a\\u6025\\u6551\\u5065\\u5eb7\\u4e13\\u4e1a\\u77e5\\u8bc6\\u8bb2\\u5ea7\\u3002\\u725b\\u5a49\\u8fb0\\u4e3b\\u4efb\\u8be6\\u7ec6\\u8bb2\\u89e3\\u4e86\\u751f\\u6d3b\\u4e2d\\u7a81\\u53d1\\u75be\\u75c5\\u60c5\\u51b5\\u7684\\u6025\\u6551\\u65b9\\u5f0f\\uff0c\\u5e76\\u793a\\u8303\\u6559\\u5b66\\u4eba\\u5de5\\u547c\\u5438\\u3001\\u5fc3\\u80ba\\u590d\\u82cf\",\"content\":\"

        3\\u670821\\u65e5\\uff0c\\u5206\\u9662\\u5de5\\u4f1a\\u9080\\u8bf7\\u4e86\\u9ed1\\u9f99\\u6c5f\\u7701\\u5b89\\u5168\\u5065\\u5eb7\\u6559\\u80b2\\u4e2d\\u5fc3\\u725b\\u5a49\\u8fb0\\u4e3b\\u4efb\\u505a\\u9898\\u4e3a\\u201c\\u6025\\u6551\\u5065\\u5eb7\\u201d\\u4e13\\u4e1a\\u77e5\\u8bc6\\u8bb2\\u5ea7\\u3002\\u725b\\u5a49\\u8fb0\\u4e3b\\u4efb\\u8be6\\u7ec6\\u8bb2\\u89e3\\u4e86\\u751f\\u6d3b\\u4e2d\\u7a81\\u53d1\\u75be\\u75c5\\u60c5\\u51b5\\u7684\\u6025\\u6551\\u65b9\\u5f0f\\uff0c\\u5e76\\u793a\\u8303\\u6559\\u5b66\\u4eba\\u5de5\\u547c\\u5438\\u3001\\u5fc3\\u80ba\\u590d\\u82cf\\u7b49\\u7684\\u6807\\u51c6\\u64cd\\u4f5c\\uff0c\\u540c\\u65f6\\uff0c\\u5bf9\\u5e38\\u89c1\\u7684\\u80a9\\u9888\\u75be\\u75c5\\u3001\\u8170\\u690e\\u75c5\\u3001\\u5973\\u6027\\u75be\\u75c5\\u9884\\u9632\\u548c\\u7b80\\u5355\\u7684\\u7a74\\u4f4d\\u6309\\u6469\\u5eb7\\u590d\\u624b\\u6cd5\\u8fdb\\u884c\\u8bb2\\u89e3\\u548c\\u6307\\u5bfc\\uff0c\\u901a\\u8fc7\\u6b64\\u6b21\\u8bb2\\u5ea7\\uff0c\\u63d0\\u9ad8\\u4e86\\u5927\\u5bb6\\u5065\\u5eb7\\u610f\\u8bc6\\uff0c\\u666e\\u53ca\\u4e86\\u804c\\u5de5\\u7684\\u6025\\u6551\\u5e38\\u8bc6\\uff0c\\u8ba9\\u804c\\u5de5\\u80fd\\u591f\\u201c\\u4f1a\\u6025\\u6551\\u3001\\u61c2\\u517b\\u751f\\u201d\\uff0c\\u4ee5\\u597d\\u7684\\u8eab\\u4f53\\u72b6\\u6001\\u548c\\u7cbe\\u795e\\u9762\\u8c8c\\u6295\\u5165\\u5230\\u79d1\\u6280\\u521b\\u65b0\\u5de5\\u4f5c\\u4e2d\\u53bb\\u3002<\\/p>

\\\"\\\"\\\"\\\"<\\/p>\",\"sort\":\"0\",\"_token\":\"QaZ1pBby28MyYDXSPVb90D9nfxzhSAwv3dEuDT0B\",\"_method\":\"PUT\"}', '2020-05-28 08:17:32', '2020-05-28 08:17:32'), +(115, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-05-28 08:17:32', '2020-05-28 08:17:32'), +(116, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u5927\\u5e86\\u5206\\u9662\\u7ec4\\u7ec7\\u804c\\u5de5\\u53c2\\u52a0\\u201c\\u6025\\u6551\\u5065\\u5eb7\\u201d\\u4e13\\u9898\\u8bb2\\u5ea7\",\"category\":{\"id\":null},\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:17:39', '2020-05-28 08:17:39'), +(117, 1, 'admin/articles/719/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:17:41', '2020-05-28 08:17:41'), +(118, 1, 'admin/articles/719/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 08:20:43', '2020-05-28 08:20:43'), +(119, 1, 'admin/articles/719', 'PUT', '1.190.203.218', '{\"key\":\"0\",\"cover\":\"_file_del_\",\"_file_del_\":null,\"_token\":\"QaZ1pBby28MyYDXSPVb90D9nfxzhSAwv3dEuDT0B\",\"_method\":\"PUT\"}', '2020-05-28 08:21:32', '2020-05-28 08:21:32'), +(120, 1, 'admin/articles/719', 'PUT', '1.190.203.218', '{\"title\":\"\\u5927\\u5e86\\u5206\\u9662\\u7ec4\\u7ec7\\u804c\\u5de5\\u53c2\\u52a0\\u201c\\u6025\\u6551\\u5065\\u5eb7\\u201d\\u4e13\\u9898\\u8bb2\\u5ea7\",\"category_id\":\"16\",\"description\":\"3\\u670821\\u65e5\\uff0c\\u5206\\u9662\\u5de5\\u4f1a\\u9080\\u8bf7\\u4e86\\u9ed1\\u9f99\\u6c5f\\u7701\\u5b89\\u5168\\u5065\\u5eb7\\u6559\\u80b2\\u4e2d\\u5fc3\\u725b\\u5a49\\u8fb0\\u4e3b\\u4efb\\u505a\\u9898\\u4e3a\\u6025\\u6551\\u5065\\u5eb7\\u4e13\\u4e1a\\u77e5\\u8bc6\\u8bb2\\u5ea7\\u3002\\u725b\\u5a49\\u8fb0\\u4e3b\\u4efb\\u8be6\\u7ec6\\u8bb2\\u89e3\\u4e86\\u751f\\u6d3b\\u4e2d\\u7a81\\u53d1\\u75be\\u75c5\\u60c5\\u51b5\\u7684\\u6025\\u6551\\u65b9\\u5f0f\\uff0c\\u5e76\\u793a\\u8303\\u6559\\u5b66\\u4eba\\u5de5\\u547c\\u5438\\u3001\\u5fc3\\u80ba\\u590d\\u82cf\",\"content\":\"

        3\\u670821\\u65e5\\uff0c\\u5206\\u9662\\u5de5\\u4f1a\\u9080\\u8bf7\\u4e86\\u9ed1\\u9f99\\u6c5f\\u7701\\u5b89\\u5168\\u5065\\u5eb7\\u6559\\u80b2\\u4e2d\\u5fc3\\u725b\\u5a49\\u8fb0\\u4e3b\\u4efb\\u505a\\u9898\\u4e3a\\u201c\\u6025\\u6551\\u5065\\u5eb7\\u201d\\u4e13\\u4e1a\\u77e5\\u8bc6\\u8bb2\\u5ea7\\u3002\\u725b\\u5a49\\u8fb0\\u4e3b\\u4efb\\u8be6\\u7ec6\\u8bb2\\u89e3\\u4e86\\u751f\\u6d3b\\u4e2d\\u7a81\\u53d1\\u75be\\u75c5\\u60c5\\u51b5\\u7684\\u6025\\u6551\\u65b9\\u5f0f\\uff0c\\u5e76\\u793a\\u8303\\u6559\\u5b66\\u4eba\\u5de5\\u547c\\u5438\\u3001\\u5fc3\\u80ba\\u590d\\u82cf\\u7b49\\u7684\\u6807\\u51c6\\u64cd\\u4f5c\\uff0c\\u540c\\u65f6\\uff0c\\u5bf9\\u5e38\\u89c1\\u7684\\u80a9\\u9888\\u75be\\u75c5\\u3001\\u8170\\u690e\\u75c5\\u3001\\u5973\\u6027\\u75be\\u75c5\\u9884\\u9632\\u548c\\u7b80\\u5355\\u7684\\u7a74\\u4f4d\\u6309\\u6469\\u5eb7\\u590d\\u624b\\u6cd5\\u8fdb\\u884c\\u8bb2\\u89e3\\u548c\\u6307\\u5bfc\\uff0c\\u901a\\u8fc7\\u6b64\\u6b21\\u8bb2\\u5ea7\\uff0c\\u63d0\\u9ad8\\u4e86\\u5927\\u5bb6\\u5065\\u5eb7\\u610f\\u8bc6\\uff0c\\u666e\\u53ca\\u4e86\\u804c\\u5de5\\u7684\\u6025\\u6551\\u5e38\\u8bc6\\uff0c\\u8ba9\\u804c\\u5de5\\u80fd\\u591f\\u201c\\u4f1a\\u6025\\u6551\\u3001\\u61c2\\u517b\\u751f\\u201d\\uff0c\\u4ee5\\u597d\\u7684\\u8eab\\u4f53\\u72b6\\u6001\\u548c\\u7cbe\\u795e\\u9762\\u8c8c\\u6295\\u5165\\u5230\\u79d1\\u6280\\u521b\\u65b0\\u5de5\\u4f5c\\u4e2d\\u53bb\\u3002<\\/p>

\\\"\\\"\\\"\\\"<\\/p>\",\"sort\":\"0\",\"_token\":\"QaZ1pBby28MyYDXSPVb90D9nfxzhSAwv3dEuDT0B\",\"_method\":\"PUT\"}', '2020-05-28 08:21:35', '2020-05-28 08:21:35'), +(121, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-05-28 08:21:35', '2020-05-28 08:21:35'), +(122, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u5927\\u5e86\\u5206\\u9662\\u7ec4\\u7ec7\\u804c\\u5de5\\u53c2\\u52a0\\u201c\\u6025\\u6551\\u5065\\u5eb7\\u201d\\u4e13\\u9898\\u8bb2\\u5ea7\",\"category\":{\"id\":null},\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:21:40', '2020-05-28 08:21:40'), +(123, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:23:10', '2020-05-28 08:23:10'), +(124, 1, 'admin/categories/2/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:23:23', '2020-05-28 08:23:23'), +(125, 1, 'admin/categories/2/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 08:24:01', '2020-05-28 08:24:01'), +(126, 1, 'admin/categories/2/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 08:27:53', '2020-05-28 08:27:53'), +(127, 1, 'admin/categories/2/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 08:28:10', '2020-05-28 08:28:10'), +(128, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:29:50', '2020-05-28 08:29:50'), +(129, 1, 'admin/categories/1/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:30:06', '2020-05-28 08:30:06'), +(130, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:30:52', '2020-05-28 08:30:52'), +(131, 1, 'admin/categories/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 08:30:52', '2020-05-28 08:30:52'), +(132, 1, 'admin/categories/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 08:30:54', '2020-05-28 08:30:54'), +(133, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:30:57', '2020-05-28 08:30:57'), +(134, 1, 'admin/categories/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 08:30:57', '2020-05-28 08:30:57'), +(135, 1, 'admin/categories/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 08:31:39', '2020-05-28 08:31:39'), +(136, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:31:41', '2020-05-28 08:31:41'), +(137, 1, 'admin/categories/2/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:31:46', '2020-05-28 08:31:46'), +(138, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:31:51', '2020-05-28 08:31:51'), +(139, 1, 'admin/categories/4/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:31:53', '2020-05-28 08:31:53'), +(140, 1, 'admin/categories/4/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 08:32:14', '2020-05-28 08:32:14'), +(141, 1, 'admin/categories/4', 'PUT', '1.190.203.218', '{\"parent_id\":\"1\",\"title\":\"\\u79d1\\u6280\\u4eba\\u624d\",\"type\":\"article\",\"description\":null,\"order\":\"0\",\"article_id\":null,\"status\":\"on\",\"_token\":\"QaZ1pBby28MyYDXSPVb90D9nfxzhSAwv3dEuDT0B\",\"_method\":\"PUT\"}', '2020-05-28 08:32:17', '2020-05-28 08:32:17'), +(142, 1, 'admin/categories/4/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 08:32:17', '2020-05-28 08:32:17'), +(143, 1, 'admin/categories/4', 'PUT', '1.190.203.218', '{\"parent_id\":\"1\",\"title\":\"\\u79d1\\u6280\\u4eba\\u624d\",\"type\":\"article\",\"description\":null,\"order\":\"0\",\"article_id\":null,\"status\":\"on\",\"_token\":\"QaZ1pBby28MyYDXSPVb90D9nfxzhSAwv3dEuDT0B\",\"_method\":\"PUT\"}', '2020-05-28 08:32:54', '2020-05-28 08:32:54'), +(144, 1, 'admin/categories', 'GET', '1.190.203.218', '[]', '2020-05-28 08:32:54', '2020-05-28 08:32:54'), +(145, 1, 'admin/categories/3/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:32:59', '2020-05-28 08:32:59'), +(146, 1, 'admin/categories/3/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 08:34:27', '2020-05-28 08:34:27'), +(147, 1, 'admin/categories/3/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 08:37:43', '2020-05-28 08:37:43'), +(148, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:37:54', '2020-05-28 08:37:54'), +(149, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:37:58', '2020-05-28 08:37:58'), +(150, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:38:01', '2020-05-28 08:38:01'), +(151, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:44:53', '2020-05-28 08:44:53'), +(152, 1, 'admin/auth/menu', 'POST', '1.190.203.218', '{\"parent_id\":\"0\",\"title\":\"\\u53cb\\u60c5\\u94fe\\u63a5\",\"icon\":\"fa-bars\",\"uri\":null,\"roles\":[null],\"permission\":null,\"_token\":\"QaZ1pBby28MyYDXSPVb90D9nfxzhSAwv3dEuDT0B\"}', '2020-05-28 08:45:01', '2020-05-28 08:45:01'), +(153, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-05-28 08:45:01', '2020-05-28 08:45:01'), +(154, 1, 'admin/auth/menu', 'POST', '1.190.203.218', '{\"parent_id\":\"12\",\"title\":\"\\u53cb\\u60c5\\u94fe\\u63a5\\u5217\\u8868\",\"icon\":\"fa-bars\",\"uri\":\"links\",\"roles\":[null],\"permission\":null,\"_token\":\"QaZ1pBby28MyYDXSPVb90D9nfxzhSAwv3dEuDT0B\"}', '2020-05-28 08:45:07', '2020-05-28 08:45:07'), +(155, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-05-28 08:45:07', '2020-05-28 08:45:07'), +(156, 1, 'admin/auth/menu', 'POST', '1.190.203.218', '{\"_token\":\"QaZ1pBby28MyYDXSPVb90D9nfxzhSAwv3dEuDT0B\",\"_order\":\"[{\\\"id\\\":1},{\\\"id\\\":12,\\\"children\\\":[{\\\"id\\\":13}]},{\\\"id\\\":8,\\\"children\\\":[{\\\"id\\\":9}]},{\\\"id\\\":10,\\\"children\\\":[{\\\"id\\\":11}]},{\\\"id\\\":2,\\\"children\\\":[{\\\"id\\\":3},{\\\"id\\\":4},{\\\"id\\\":5},{\\\"id\\\":6},{\\\"id\\\":7}]}]\"}', '2020-05-28 08:45:10', '2020-05-28 08:45:10'), +(157, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:45:10', '2020-05-28 08:45:10'), +(158, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-05-28 08:45:12', '2020-05-28 08:45:12'), +(159, 1, 'admin/links', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:45:14', '2020-05-28 08:45:14'), +(160, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-05-28 08:45:14', '2020-05-28 08:45:14'), +(161, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-05-28 08:45:50', '2020-05-28 08:45:50'), +(162, 1, 'admin/links', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:45:53', '2020-05-28 08:45:53'), +(163, 1, 'admin/links/create', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:45:57', '2020-05-28 08:45:57'), +(164, 1, 'admin/links', 'POST', '1.190.203.218', '{\"title\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\",\"url\":\"http:\\/\\/www.has.ac.cn\\/\",\"_token\":\"QaZ1pBby28MyYDXSPVb90D9nfxzhSAwv3dEuDT0B\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/links\"}', '2020-05-28 08:46:27', '2020-05-28 08:46:27'), +(165, 1, 'admin/links', 'GET', '1.190.203.218', '[]', '2020-05-28 08:46:27', '2020-05-28 08:46:27'), +(166, 1, 'admin/links/1/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:46:32', '2020-05-28 08:46:32'), +(167, 1, 'admin/links/1', 'PUT', '1.190.203.218', '{\"title\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\",\"url\":\"http:\\/\\/www.has.ac.cn\",\"_token\":\"QaZ1pBby28MyYDXSPVb90D9nfxzhSAwv3dEuDT0B\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/links\"}', '2020-05-28 08:46:36', '2020-05-28 08:46:36'), +(168, 1, 'admin/links', 'GET', '1.190.203.218', '[]', '2020-05-28 08:46:36', '2020-05-28 08:46:36'), +(169, 1, 'admin/links', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:46:40', '2020-05-28 08:46:40'), +(170, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:46:42', '2020-05-28 08:46:42'), +(171, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:46:44', '2020-05-28 08:46:44'), +(172, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:47:17', '2020-05-28 08:47:17'), +(173, 1, 'admin/links', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:47:20', '2020-05-28 08:47:20'), +(174, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:47:21', '2020-05-28 08:47:21'), +(175, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:47:24', '2020-05-28 08:47:24'), +(176, 1, 'admin/auth/users', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:47:26', '2020-05-28 08:47:26'), +(177, 1, 'admin/auth/roles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:47:28', '2020-05-28 08:47:28'), +(178, 1, 'admin/auth/permissions', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:47:28', '2020-05-28 08:47:28'), +(179, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:47:31', '2020-05-28 08:47:31'), +(180, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:48:00', '2020-05-28 08:48:00'), +(181, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"title\":null,\"category\":{\"id\":\"22\"}}', '2020-05-28 08:48:08', '2020-05-28 08:48:08'), +(182, 1, 'admin/articles/177/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:48:13', '2020-05-28 08:48:13'), +(183, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:57:20', '2020-05-28 08:57:20'), +(184, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-05-28 08:57:25', '2020-05-28 08:57:25'), +(185, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-05-28 08:58:23', '2020-05-28 08:58:23'), +(186, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-05-28 08:58:55', '2020-05-28 08:58:55'), +(187, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"page\":\"2\",\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:59:02', '2020-05-28 08:59:02'), +(188, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"4\"}', '2020-05-28 08:59:04', '2020-05-28 08:59:04'), +(189, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"6\"}', '2020-05-28 08:59:06', '2020-05-28 08:59:06'), +(190, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"8\"}', '2020-05-28 08:59:09', '2020-05-28 08:59:09'), +(191, 1, 'admin/articles/142/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 08:59:12', '2020-05-28 08:59:12'), +(192, 1, 'admin/articles/142/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 09:00:59', '2020-05-28 09:00:59'), +(193, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 09:01:56', '2020-05-28 09:01:56'), +(194, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"title\":\"\\u5927\\u5e86\\u5206\\u9662\\u53ec\\u5f002012\\u5e74\\u5e74\\u7ec8\\u603b\\u7ed3\\u5927\\u4f1a\",\"category\":{\"id\":null}}', '2020-05-28 09:01:59', '2020-05-28 09:01:59'), +(195, 1, 'admin/articles/203/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 09:02:01', '2020-05-28 09:02:01'), +(196, 1, 'admin/articles/203/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 09:02:03', '2020-05-28 09:02:03'), +(197, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 09:03:21', '2020-05-28 09:03:21'), +(198, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-05-28 09:03:24', '2020-05-28 09:03:24'), +(199, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-05-28 09:03:55', '2020-05-28 09:03:55'), +(200, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-05-28 09:06:50', '2020-05-28 09:06:50'), +(201, 1, 'admin/articles/1/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 09:06:54', '2020-05-28 09:06:54'), +(202, 1, 'admin/articles/1/edit', 'GET', '1.190.203.218', '[]', '2020-05-28 09:07:44', '2020-05-28 09:07:44'), +(203, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 09:08:35', '2020-05-28 09:08:35'), +(204, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"40\"}', '2020-05-28 09:08:50', '2020-05-28 09:08:50'), +(205, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-05-28 09:12:12', '2020-05-28 09:12:12'), +(206, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"3\"}', '2020-05-28 09:12:14', '2020-05-28 09:12:14'), +(207, 1, 'admin', 'GET', '113.0.162.52', '[]', '2020-05-29 05:53:20', '2020-05-29 05:53:20'), +(208, 1, 'admin', 'GET', '113.0.162.52', '[]', '2020-05-29 06:06:43', '2020-05-29 06:06:43'), +(209, 1, 'admin/links', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:07:59', '2020-05-29 06:07:59'), +(210, 1, 'admin', 'GET', '113.0.162.52', '[]', '2020-05-29 06:07:59', '2020-05-29 06:07:59'), +(211, 1, 'admin/links', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:09:11', '2020-05-29 06:09:11'), +(212, 1, 'admin/links/1/edit', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:09:15', '2020-05-29 06:09:15'), +(213, 1, 'admin/links/1', 'PUT', '113.0.162.52', '{\"title\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u96621\",\"url\":\"http:\\/\\/www.has.ac.cn\",\"_token\":\"56AtNUoOtMw7BT0vYBqf7xBotQUhTyA5BhTBkuMS\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/links\"}', '2020-05-29 06:09:17', '2020-05-29 06:09:17'), +(214, 1, 'admin/links', 'GET', '113.0.162.52', '[]', '2020-05-29 06:09:17', '2020-05-29 06:09:17'), +(215, 1, 'admin/links/1/edit', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:09:21', '2020-05-29 06:09:21'), +(216, 1, 'admin/links/1', 'PUT', '113.0.162.52', '{\"title\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\",\"url\":\"http:\\/\\/www.has.ac.cn\",\"_token\":\"56AtNUoOtMw7BT0vYBqf7xBotQUhTyA5BhTBkuMS\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/links\"}', '2020-05-29 06:09:24', '2020-05-29 06:09:24'), +(217, 1, 'admin/links', 'GET', '113.0.162.52', '[]', '2020-05-29 06:09:24', '2020-05-29 06:09:24'), +(218, 1, 'admin/articles', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:09:26', '2020-05-29 06:09:26'), +(219, 1, 'admin/articles', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\",\"page\":\"4\"}', '2020-05-29 06:09:30', '2020-05-29 06:09:30'), +(220, 1, 'admin/articles', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\",\"page\":\"7\"}', '2020-05-29 06:09:33', '2020-05-29 06:09:33'), +(221, 1, 'admin/articles', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\",\"page\":\"9\"}', '2020-05-29 06:09:38', '2020-05-29 06:09:38'), +(222, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:09:55', '2020-05-29 06:09:55'), +(223, 1, 'admin/categories/7/edit', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:10:04', '2020-05-29 06:10:04'), +(224, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:14:11', '2020-05-29 06:14:11'), +(225, 1, 'admin/auth/menu', 'POST', '113.0.162.52', '{\"parent_id\":\"0\",\"title\":\"\\u5e7f\\u544a\\u7ba1\\u7406\",\"icon\":\"fa-bars\",\"uri\":null,\"roles\":[null],\"permission\":null,\"_token\":\"56AtNUoOtMw7BT0vYBqf7xBotQUhTyA5BhTBkuMS\"}', '2020-05-29 06:14:27', '2020-05-29 06:14:27'), +(226, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 06:14:27', '2020-05-29 06:14:27'), +(227, 1, 'admin/auth/menu', 'POST', '113.0.162.52', '{\"parent_id\":\"14\",\"title\":\"\\u5e7f\\u544a\\u5217\\u8868\",\"icon\":\"fa-bars\",\"uri\":null,\"roles\":[null],\"permission\":null,\"_token\":\"56AtNUoOtMw7BT0vYBqf7xBotQUhTyA5BhTBkuMS\"}', '2020-05-29 06:14:37', '2020-05-29 06:14:37'), +(228, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 06:14:37', '2020-05-29 06:14:37'), +(229, 1, 'admin/auth/menu', 'POST', '113.0.162.52', '{\"_token\":\"56AtNUoOtMw7BT0vYBqf7xBotQUhTyA5BhTBkuMS\",\"_order\":\"[{\\\"id\\\":1},{\\\"id\\\":14,\\\"children\\\":[{\\\"id\\\":15}]},{\\\"id\\\":12,\\\"children\\\":[{\\\"id\\\":13}]},{\\\"id\\\":8,\\\"children\\\":[{\\\"id\\\":9}]},{\\\"id\\\":10,\\\"children\\\":[{\\\"id\\\":11}]},{\\\"id\\\":2,\\\"children\\\":[{\\\"id\\\":3},{\\\"id\\\":4},{\\\"id\\\":5},{\\\"id\\\":6},{\\\"id\\\":7}]}]\"}', '2020-05-29 06:14:41', '2020-05-29 06:14:41'), +(230, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:14:41', '2020-05-29 06:14:41'), +(231, 1, 'admin/auth/menu/15/edit', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:14:44', '2020-05-29 06:14:44'), +(232, 1, 'admin/auth/menu/15', 'PUT', '113.0.162.52', '{\"parent_id\":\"14\",\"title\":\"\\u5e7f\\u544a\\u5217\\u8868\",\"icon\":\"fa-bars\",\"uri\":\"adverts\",\"roles\":[null],\"permission\":null,\"_token\":\"56AtNUoOtMw7BT0vYBqf7xBotQUhTyA5BhTBkuMS\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/auth\\/menu\"}', '2020-05-29 06:14:49', '2020-05-29 06:14:49'), +(233, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 06:14:49', '2020-05-29 06:14:49'), +(234, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 06:14:51', '2020-05-29 06:14:51'), +(235, 1, 'admin/adverts', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:14:53', '2020-05-29 06:14:53'), +(236, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 06:14:54', '2020-05-29 06:14:54'), +(237, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 06:16:06', '2020-05-29 06:16:06'), +(238, 1, 'admin/adverts', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:16:09', '2020-05-29 06:16:09'), +(239, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 06:16:10', '2020-05-29 06:16:10'), +(240, 1, 'admin/adverts', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:16:13', '2020-05-29 06:16:13'), +(241, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 06:16:13', '2020-05-29 06:16:13'), +(242, 1, 'admin/links', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:16:20', '2020-05-29 06:16:20'), +(243, 1, 'admin/adverts', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:16:25', '2020-05-29 06:16:25'), +(244, 1, 'admin/links', 'GET', '113.0.162.52', '[]', '2020-05-29 06:16:25', '2020-05-29 06:16:25'), +(245, 1, 'admin/adverts', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:16:43', '2020-05-29 06:16:43'), +(246, 1, 'admin/adverts', 'GET', '113.0.162.52', '[]', '2020-05-29 06:18:05', '2020-05-29 06:18:05'), +(247, 1, 'admin/adverts', 'GET', '113.0.162.52', '[]', '2020-05-29 06:18:07', '2020-05-29 06:18:07'), +(248, 1, 'admin/adverts', 'GET', '113.0.162.52', '[]', '2020-05-29 06:20:41', '2020-05-29 06:20:41'), +(249, 1, 'admin/adverts/create', 'GET', '113.0.162.52', '[]', '2020-05-29 06:20:43', '2020-05-29 06:20:43'), +(250, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 06:20:58', '2020-05-29 06:20:58'), +(251, 1, 'admin/categories', 'POST', '113.0.162.52', '{\"parent_id\":\"0\",\"title\":\"\\u6587\\u7ae0\\u5206\\u7c7b\",\"type\":\"article\",\"description\":null,\"order\":\"0\",\"status\":\"on\",\"_token\":\"56AtNUoOtMw7BT0vYBqf7xBotQUhTyA5BhTBkuMS\"}', '2020-05-29 06:21:37', '2020-05-29 06:21:37'), +(252, 1, 'admin/categories', 'GET', '113.0.162.52', '[]', '2020-05-29 06:21:37', '2020-05-29 06:21:37'), +(253, 1, 'admin/categories', 'POST', '113.0.162.52', '{\"parent_id\":\"0\",\"title\":\"\\u6587\\u7ae0\\u5206\\u7c7b\",\"type\":\"article\",\"description\":null,\"order\":\"0\",\"status\":\"on\",\"_token\":\"56AtNUoOtMw7BT0vYBqf7xBotQUhTyA5BhTBkuMS\"}', '2020-05-29 06:22:14', '2020-05-29 06:22:14'), +(254, 1, 'admin/categories', 'GET', '113.0.162.52', '[]', '2020-05-29 06:22:14', '2020-05-29 06:22:14'), +(255, 1, 'admin/categories', 'POST', '113.0.162.52', '{\"parent_id\":\"0\",\"title\":\"\\u5e7f\\u544a\",\"type\":\"advert\",\"description\":null,\"order\":\"0\",\"status\":\"on\",\"_token\":\"56AtNUoOtMw7BT0vYBqf7xBotQUhTyA5BhTBkuMS\"}', '2020-05-29 06:22:33', '2020-05-29 06:22:33'), +(256, 1, 'admin/categories', 'GET', '113.0.162.52', '[]', '2020-05-29 06:22:33', '2020-05-29 06:22:33'), +(257, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 07:03:46', '2020-05-29 07:03:46'), +(258, 1, 'admin/categories/25', 'DELETE', '113.0.162.52', '{\"_method\":\"delete\",\"_token\":\"56AtNUoOtMw7BT0vYBqf7xBotQUhTyA5BhTBkuMS\"}', '2020-05-29 07:04:44', '2020-05-29 07:04:44'), +(259, 1, 'admin/categories', 'GET', '113.0.162.52', '[]', '2020-05-29 07:04:51', '2020-05-29 07:04:51'), +(260, 1, 'admin/categories/25', 'DELETE', '113.0.162.52', '{\"_method\":\"delete\",\"_token\":\"56AtNUoOtMw7BT0vYBqf7xBotQUhTyA5BhTBkuMS\"}', '2020-05-29 07:05:01', '2020-05-29 07:05:01'), +(261, 1, 'admin/categories', 'GET', '113.0.162.52', '[]', '2020-05-29 07:07:03', '2020-05-29 07:07:03'), +(262, 1, 'admin/categories/25', 'DELETE', '113.0.162.52', '{\"_method\":\"delete\",\"_token\":\"56AtNUoOtMw7BT0vYBqf7xBotQUhTyA5BhTBkuMS\"}', '2020-05-29 07:07:10', '2020-05-29 07:07:10'), +(263, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 07:07:10', '2020-05-29 07:07:10'), +(264, 1, 'admin/categories/26', 'DELETE', '113.0.162.52', '{\"_method\":\"delete\",\"_token\":\"56AtNUoOtMw7BT0vYBqf7xBotQUhTyA5BhTBkuMS\"}', '2020-05-29 07:07:13', '2020-05-29 07:07:13'), +(265, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 07:07:13', '2020-05-29 07:07:13'), +(266, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 07:07:34', '2020-05-29 07:07:34'), +(267, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 07:07:35', '2020-05-29 07:07:35'), +(268, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 07:07:38', '2020-05-29 07:07:38'), +(269, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 07:07:40', '2020-05-29 07:07:40'), +(270, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 07:07:40', '2020-05-29 07:07:40'), +(271, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 07:07:40', '2020-05-29 07:07:40'), +(272, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 07:07:41', '2020-05-29 07:07:41'), +(273, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 07:07:41', '2020-05-29 07:07:41'), +(274, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 07:07:41', '2020-05-29 07:07:41'), +(275, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 07:07:42', '2020-05-29 07:07:42'), +(276, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 07:07:42', '2020-05-29 07:07:42'), +(277, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 07:07:42', '2020-05-29 07:07:42'), +(278, 1, 'admin/categories', 'POST', '113.0.162.52', '{\"parent_id\":\"0\",\"title\":\"\\u9996\\u9875\\u9876\\u90e8\\u5e7f\\u544a\",\"type\":\"advert\",\"description\":null,\"order\":\"0\",\"status\":\"on\",\"_token\":\"56AtNUoOtMw7BT0vYBqf7xBotQUhTyA5BhTBkuMS\"}', '2020-05-29 07:12:15', '2020-05-29 07:12:15'), +(279, 1, 'admin/categories', 'GET', '113.0.162.52', '[]', '2020-05-29 07:12:15', '2020-05-29 07:12:15'), +(280, 1, 'admin/adverts', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 07:12:17', '2020-05-29 07:12:17'), +(281, 1, 'admin/adverts/create', 'GET', '113.0.162.52', '[]', '2020-05-29 07:12:19', '2020-05-29 07:12:19'), +(282, 1, 'admin/adverts', 'POST', '113.0.162.52', '{\"title\":\"\\u9996\\u9875\\u9876\\u90e8\\u5e7f\\u544a\",\"category_id\":\"27\",\"url\":null,\"sort\":\"1\",\"_token\":\"56AtNUoOtMw7BT0vYBqf7xBotQUhTyA5BhTBkuMS\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/adverts\"}', '2020-05-29 07:12:56', '2020-05-29 07:12:56'), +(283, 1, 'admin/adverts', 'GET', '113.0.162.52', '[]', '2020-05-29 07:12:56', '2020-05-29 07:12:56'), +(284, 1, 'admin/adverts/1/edit', 'GET', '113.0.162.52', '[]', '2020-05-29 07:13:02', '2020-05-29 07:13:02'), +(285, 1, 'admin', 'GET', '113.0.162.52', '[]', '2020-05-29 09:13:45', '2020-05-29 09:13:45'), +(286, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 09:14:09', '2020-05-29 09:14:09'), +(287, 1, 'admin/auth/menu/14/edit', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 09:14:16', '2020-05-29 09:14:16'), +(288, 1, 'admin/auth/menu/14', 'PUT', '113.0.162.52', '{\"parent_id\":\"0\",\"title\":\"\\u5e7f\\u544a\\u7ba1\\u7406\",\"icon\":\"fa-500px\",\"uri\":null,\"roles\":[null],\"permission\":null,\"_token\":\"TremzAgwSTwtETdAb1QNtbsVlldMAiuaspAVv2wO\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/auth\\/menu\"}', '2020-05-29 09:14:23', '2020-05-29 09:14:23'), +(289, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 09:14:23', '2020-05-29 09:14:23'), +(290, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 09:14:24', '2020-05-29 09:14:24'), +(291, 1, 'admin/auth/menu/12/edit', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 09:14:31', '2020-05-29 09:14:31'), +(292, 1, 'admin/auth/menu/12', 'PUT', '113.0.162.52', '{\"parent_id\":\"0\",\"title\":\"\\u53cb\\u60c5\\u94fe\\u63a5\",\"icon\":\"fa-amazon\",\"uri\":null,\"roles\":[null],\"permission\":null,\"_token\":\"TremzAgwSTwtETdAb1QNtbsVlldMAiuaspAVv2wO\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/auth\\/menu\"}', '2020-05-29 09:14:37', '2020-05-29 09:14:37'), +(293, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 09:14:37', '2020-05-29 09:14:37'), +(294, 1, 'admin/auth/menu/8/edit', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 09:14:41', '2020-05-29 09:14:41'), +(295, 1, 'admin/auth/menu/8', 'PUT', '113.0.162.52', '{\"parent_id\":\"0\",\"title\":\"\\u8d44\\u8baf\\u7ba1\\u7406\",\"icon\":\"fa-bank\",\"uri\":\"articles\",\"roles\":[null],\"permission\":null,\"_token\":\"TremzAgwSTwtETdAb1QNtbsVlldMAiuaspAVv2wO\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/auth\\/menu\"}', '2020-05-29 09:15:00', '2020-05-29 09:15:00'), +(296, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 09:15:00', '2020-05-29 09:15:00'), +(297, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 09:15:01', '2020-05-29 09:15:01'), +(298, 1, 'admin/auth/menu/15/edit', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 09:15:17', '2020-05-29 09:15:17'); +INSERT INTO `admin_operation_log` (`id`, `user_id`, `path`, `method`, `ip`, `input`, `created_at`, `updated_at`) VALUES +(299, 1, 'admin/auth/menu/15', 'PUT', '113.0.162.52', '{\"parent_id\":\"14\",\"title\":\"\\u5e7f\\u544a\\u5217\\u8868\",\"icon\":\"fa-500px\",\"uri\":\"adverts\",\"roles\":[null],\"permission\":null,\"_token\":\"TremzAgwSTwtETdAb1QNtbsVlldMAiuaspAVv2wO\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/auth\\/menu\"}', '2020-05-29 09:15:32', '2020-05-29 09:15:32'), +(300, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 09:15:33', '2020-05-29 09:15:33'), +(301, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 09:15:34', '2020-05-29 09:15:34'), +(302, 1, 'admin/auth/menu/13/edit', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 09:15:41', '2020-05-29 09:15:41'), +(303, 1, 'admin/auth/menu/13', 'PUT', '113.0.162.52', '{\"parent_id\":\"12\",\"title\":\"\\u53cb\\u60c5\\u94fe\\u63a5\\u5217\\u8868\",\"icon\":\"fa-at\",\"uri\":\"links\",\"roles\":[null],\"permission\":null,\"_token\":\"TremzAgwSTwtETdAb1QNtbsVlldMAiuaspAVv2wO\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/auth\\/menu\"}', '2020-05-29 09:15:48', '2020-05-29 09:15:48'), +(304, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 09:15:48', '2020-05-29 09:15:48'), +(305, 1, 'admin/auth/menu/9/edit', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 09:15:52', '2020-05-29 09:15:52'), +(306, 1, 'admin/auth/menu/9', 'PUT', '113.0.162.52', '{\"parent_id\":\"8\",\"title\":\"\\u8d44\\u8baf\\u5217\\u8868\",\"icon\":\"fa-book\",\"uri\":\"articles\",\"roles\":[null],\"permission\":null,\"_token\":\"TremzAgwSTwtETdAb1QNtbsVlldMAiuaspAVv2wO\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/dqb.cnskl.com\\/admin\\/auth\\/menu\"}', '2020-05-29 09:16:23', '2020-05-29 09:16:23'), +(307, 1, 'admin/auth/menu', 'GET', '113.0.162.52', '[]', '2020-05-29 09:16:23', '2020-05-29 09:16:23'), +(308, 1, 'admin/auth/menu/10/edit', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 09:16:26', '2020-05-29 09:16:26'), +(309, 1, 'admin/auth/menu/10/edit', 'GET', '113.0.162.52', '[]', '2020-05-29 09:16:48', '2020-05-29 09:16:48'), +(310, 1, 'admin/auth/permissions', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-05-29 09:16:57', '2020-05-29 09:16:57'), +(311, 1, 'admin', 'GET', '113.0.162.52', '[]', '2020-06-01 01:12:22', '2020-06-01 01:12:22'), +(312, 1, 'admin/adverts', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-06-01 01:12:26', '2020-06-01 01:12:26'), +(313, 1, 'admin/categories', 'GET', '113.0.162.52', '{\"_pjax\":\"#pjax-container\"}', '2020-06-01 01:12:33', '2020-06-01 01:12:33'), +(314, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"page\":\"3\"}', '2020-06-02 00:58:43', '2020-06-02 00:58:43'), +(315, 1, 'admin', 'GET', '1.190.203.218', '[]', '2020-06-02 01:18:53', '2020-06-02 01:18:53'), +(316, 1, 'admin', 'GET', '1.190.203.218', '[]', '2020-06-02 01:41:52', '2020-06-02 01:41:52'), +(317, 1, 'admin', 'GET', '1.190.203.218', '[]', '2020-06-02 01:41:53', '2020-06-02 01:41:53'), +(318, 1, 'admin/adverts', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:41:55', '2020-06-02 01:41:55'), +(319, 1, 'admin/links', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:41:56', '2020-06-02 01:41:56'), +(320, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:41:58', '2020-06-02 01:41:58'), +(321, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:41:59', '2020-06-02 01:41:59'), +(322, 1, 'admin/auth/users', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:42:01', '2020-06-02 01:42:01'), +(323, 1, 'admin/auth/roles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:42:02', '2020-06-02 01:42:02'), +(324, 1, 'admin/auth/permissions', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:42:03', '2020-06-02 01:42:03'), +(325, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:42:04', '2020-06-02 01:42:04'), +(326, 1, 'admin', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:42:06', '2020-06-02 01:42:06'), +(327, 1, 'admin', 'GET', '1.190.203.218', '[]', '2020-06-02 01:42:07', '2020-06-02 01:42:07'), +(328, 1, 'admin/links', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:46:08', '2020-06-02 01:46:08'), +(329, 1, 'admin/adverts', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:46:10', '2020-06-02 01:46:10'), +(330, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:46:55', '2020-06-02 01:46:55'), +(331, 1, 'admin/categories', 'GET', '1.190.203.218', '[]', '2020-06-02 01:52:12', '2020-06-02 01:52:12'), +(332, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:52:28', '2020-06-02 01:52:28'), +(333, 1, 'admin/config/create', 'GET', '1.190.203.218', '[]', '2020-06-02 01:57:33', '2020-06-02 01:57:33'), +(334, 1, 'admin/config/create', 'GET', '1.190.203.218', '[]', '2020-06-02 01:57:51', '2020-06-02 01:57:51'), +(335, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:57:54', '2020-06-02 01:57:54'), +(336, 1, 'admin/auth/menu/16/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:57:56', '2020-06-02 01:57:56'), +(337, 1, 'admin/auth/menu/16', 'PUT', '1.190.203.218', '{\"parent_id\":\"0\",\"title\":\"\\u914d\\u7f6e\\u9879\",\"icon\":\"fa-toggle-on\",\"uri\":\"config\",\"roles\":[null],\"permission\":null,\"_token\":\"kM2vwE1RRyfWAvsLqlpjx1uyxanM4Q2mrNxvVr71\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/auth\\/menu\"}', '2020-06-02 01:58:04', '2020-06-02 01:58:04'), +(338, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-06-02 01:58:04', '2020-06-02 01:58:04'), +(339, 1, 'admin/config', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:58:06', '2020-06-02 01:58:06'), +(340, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:58:08', '2020-06-02 01:58:08'), +(341, 1, 'admin/auth/menu', 'POST', '1.190.203.218', '{\"_token\":\"kM2vwE1RRyfWAvsLqlpjx1uyxanM4Q2mrNxvVr71\",\"_order\":\"[{\\\"id\\\":1},{\\\"id\\\":14,\\\"children\\\":[{\\\"id\\\":15}]},{\\\"id\\\":12,\\\"children\\\":[{\\\"id\\\":13}]},{\\\"id\\\":8,\\\"children\\\":[{\\\"id\\\":9}]},{\\\"id\\\":10,\\\"children\\\":[{\\\"id\\\":11}]},{\\\"id\\\":2,\\\"children\\\":[{\\\"id\\\":16},{\\\"id\\\":3},{\\\"id\\\":4},{\\\"id\\\":5},{\\\"id\\\":6},{\\\"id\\\":7}]}]\"}', '2020-06-02 01:58:11', '2020-06-02 01:58:11'), +(342, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:58:11', '2020-06-02 01:58:11'), +(343, 1, 'admin/auth/menu', 'GET', '1.190.203.218', '[]', '2020-06-02 01:58:12', '2020-06-02 01:58:12'), +(344, 1, 'admin/config', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 01:58:14', '2020-06-02 01:58:14'), +(345, 1, 'admin/categories', 'GET', '1.190.203.218', '[]', '2020-06-02 02:13:22', '2020-06-02 02:13:22'), +(346, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 02:13:25', '2020-06-02 02:13:25'), +(347, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"13\"}', '2020-06-02 02:13:36', '2020-06-02 02:13:36'), +(348, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"5\"}', '2020-06-02 02:13:38', '2020-06-02 02:13:38'), +(349, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"2\"}', '2020-06-02 02:13:41', '2020-06-02 02:13:41'), +(350, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"1\"}', '2020-06-02 02:13:45', '2020-06-02 02:13:45'), +(351, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"page\":\"1\"}', '2020-06-02 02:16:13', '2020-06-02 02:16:13'), +(352, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"page\":\"1\"}', '2020-06-02 02:16:14', '2020-06-02 02:16:14'), +(353, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 02:16:33', '2020-06-02 02:16:33'), +(354, 1, 'admin/categories/2/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 02:16:36', '2020-06-02 02:16:36'), +(355, 1, 'admin/categories/2/edit', 'GET', '1.190.203.218', '[]', '2020-06-02 02:16:54', '2020-06-02 02:16:54'), +(356, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 02:16:57', '2020-06-02 02:16:57'), +(357, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-02 02:16:58', '2020-06-02 02:16:58'), +(358, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-02 02:22:25', '2020-06-02 02:22:25'), +(359, 1, 'admin/articles/249/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 02:22:38', '2020-06-02 02:22:38'), +(360, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 02:22:47', '2020-06-02 02:22:47'), +(361, 1, 'admin/articles/253/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 02:22:51', '2020-06-02 02:22:51'), +(362, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 02:22:54', '2020-06-02 02:22:54'), +(363, 1, 'admin/articles/251/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 02:22:56', '2020-06-02 02:22:56'), +(364, 1, 'admin/articles/251/edit', 'GET', '1.190.203.218', '[]', '2020-06-02 02:24:59', '2020-06-02 02:24:59'), +(365, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 02:25:13', '2020-06-02 02:25:13'), +(366, 1, 'admin/articles/249/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 02:25:16', '2020-06-02 02:25:16'), +(367, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 02:25:19', '2020-06-02 02:25:19'), +(368, 1, 'admin/articles/250/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 02:25:21', '2020-06-02 02:25:21'), +(369, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 02:25:37', '2020-06-02 02:25:37'), +(370, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-02 02:25:38', '2020-06-02 02:25:38'), +(371, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 02:25:58', '2020-06-02 02:25:58'), +(372, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-02 02:27:01', '2020-06-02 02:27:01'), +(373, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-02 02:27:03', '2020-06-02 02:27:03'), +(374, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 02:43:39', '2020-06-02 02:43:39'), +(375, 1, 'admin/adverts', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 03:09:57', '2020-06-02 03:09:57'), +(376, 1, 'admin/adverts', 'GET', '1.190.203.218', '[]', '2020-06-02 03:11:55', '2020-06-02 03:11:55'), +(377, 1, 'admin/adverts/create', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 03:11:56', '2020-06-02 03:11:56'), +(378, 1, 'admin/adverts/create', 'GET', '1.190.203.218', '[]', '2020-06-02 03:12:21', '2020-06-02 03:12:21'), +(379, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 03:13:02', '2020-06-02 03:13:02'), +(380, 1, 'admin/categories', 'POST', '1.190.203.218', '{\"parent_id\":\"0\",\"title\":\"\\u9996\\u9875\\u5e7f\\u544a\\u4f4d\",\"type\":\"advert\",\"description\":\"\\u9996\\u9875\\u5e7f\\u544a\\u4f4d\",\"order\":\"0\",\"status\":\"on\",\"_token\":\"UmgnLFvG2OCTuSRoTVcWv4lUdovKz6N8LVDgomkh\"}', '2020-06-02 03:13:54', '2020-06-02 03:13:54'), +(381, 1, 'admin/categories', 'GET', '1.190.203.218', '[]', '2020-06-02 03:13:54', '2020-06-02 03:13:54'), +(382, 1, 'admin/categories', 'GET', '1.190.203.218', '[]', '2020-06-02 03:13:57', '2020-06-02 03:13:57'), +(383, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 03:18:22', '2020-06-02 03:18:22'), +(384, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 03:18:29', '2020-06-02 03:18:29'), +(385, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\",\"category_id\":null,\"description\":null,\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"UmgnLFvG2OCTuSRoTVcWv4lUdovKz6N8LVDgomkh\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-02 03:19:16', '2020-06-02 03:19:16'), +(386, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '[]', '2020-06-02 03:19:16', '2020-06-02 03:19:16'), +(387, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 03:20:38', '2020-06-02 03:20:38'), +(388, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 03:20:55', '2020-06-02 03:20:55'), +(389, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"2\"}', '2020-06-02 03:21:00', '2020-06-02 03:21:00'), +(390, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"14\"}', '2020-06-02 03:21:03', '2020-06-02 03:21:03'), +(391, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"13\"}', '2020-06-02 03:21:05', '2020-06-02 03:21:05'), +(392, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"9\"}', '2020-06-02 03:21:08', '2020-06-02 03:21:08'), +(393, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"5\"}', '2020-06-02 03:21:12', '2020-06-02 03:21:12'), +(394, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"6\"}', '2020-06-02 03:21:20', '2020-06-02 03:21:20'), +(395, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"7\"}', '2020-06-02 03:21:24', '2020-06-02 03:21:24'), +(396, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"8\"}', '2020-06-02 03:21:27', '2020-06-02 03:21:27'), +(397, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"9\"}', '2020-06-02 03:21:31', '2020-06-02 03:21:31'), +(398, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"10\"}', '2020-06-02 03:21:36', '2020-06-02 03:21:36'), +(399, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"11\"}', '2020-06-02 03:21:40', '2020-06-02 03:21:40'), +(400, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"12\"}', '2020-06-02 03:21:44', '2020-06-02 03:21:44'), +(401, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"13\"}', '2020-06-02 03:21:47', '2020-06-02 03:21:47'), +(402, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"14\"}', '2020-06-02 03:21:49', '2020-06-02 03:21:49'), +(403, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"13\"}', '2020-06-02 03:21:51', '2020-06-02 03:21:51'), +(404, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"12\"}', '2020-06-02 03:22:07', '2020-06-02 03:22:07'), +(405, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"1\"}', '2020-06-02 03:22:09', '2020-06-02 03:22:09'), +(406, 1, 'admin/articles/257/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 03:22:14', '2020-06-02 03:22:14'), +(407, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 03:30:45', '2020-06-02 03:30:45'), +(408, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 03:34:13', '2020-06-02 03:34:13'), +(409, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 03:40:09', '2020-06-02 03:40:09'), +(410, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 03:45:00', '2020-06-02 03:45:00'), +(411, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 03:45:03', '2020-06-02 03:45:03'), +(412, 1, 'admin/articles/258/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 03:45:08', '2020-06-02 03:45:08'), +(413, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 03:45:14', '2020-06-02 03:45:14'), +(414, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"title\":\"\\u65b0\\u578b\\u7164\\u5316\\u5de5\\u4e94\\u8def\\u5f84\\uff1a\\u8c01\\u80fd\\u8d70\\u5f97\\u66f4\\u8fdc\\uff1f\",\"category\":{\"id\":null}}', '2020-06-02 04:10:12', '2020-06-02 04:10:12'), +(415, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u65b0\\u578b\\u7164\\u5316\\u5de5\\u4e94\\u8def\\u5f84\\uff1a\\u8c01\\u80fd\\u8d70\\u5f97\\u66f4\\u8fdc\\uff1f\",\"category\":{\"id\":null}}', '2020-06-02 05:20:48', '2020-06-02 05:20:48'), +(416, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 05:20:50', '2020-06-02 05:20:50'), +(417, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"14\"}', '2020-06-02 05:20:53', '2020-06-02 05:20:53'), +(418, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"10\"}', '2020-06-02 05:20:55', '2020-06-02 05:20:55'), +(419, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 06:18:52', '2020-06-02 06:18:52'), +(420, 1, 'admin/articles/257/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 06:18:57', '2020-06-02 06:18:57'), +(421, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-02 06:19:25', '2020-06-02 06:19:25'), +(422, 1, 'admin/articles/253/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 06:19:29', '2020-06-02 06:19:29'), +(423, 1, 'admin/articles/257', 'PUT', '1.190.203.218', '{\"title\":\"\\u9886\\u5bfc\\u73ed\\u5b50\",\"category_id\":null,\"description\":null,\"content\":\"

 <\\/p>
\\\"\\\"<\\/td>\\r\\n\\t\\t\\t\\t <\\/td>\\r\\n\\t\\t\\t\\t <\\/td><\\/tr><\\/tbody><\\/table>
\\r\\n\\t\\t\\t\\t                  \\u5f90 \\u6653 \\u79cb<\\/strong><\\/span>\\r\\n\\t\\t\\t\\t       \\u4e2d\\u5171\\u515a\\u5458\\r\\n\\t\\t\\t\\t       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u9662\\u957f\\u3001\\u515a\\u59d4\\u4e66\\u8bb0\\r\\n\\t\\t\\t\\t       \\u7814\\u7a76\\u5458\\u7ea7\\u9ad8\\u7ea7\\u5de5\\u7a0b\\u5e08<\\/span><\\/span>\\r\\n\\t\\t\\t\\t <\\/td><\\/tr><\\/tbody><\\/table>

 <\\/p>
\\\"\\\"<\\/td>\\r\\n\\t\\t\\t\\t <\\/td>\\r\\n\\t\\t\\t\\t <\\/td><\\/tr><\\/tbody><\\/table>
\\r\\n\\t\\t\\t\\t                  \\u5173 \\u6625 \\u73b2<\\/strong><\\/span>\\r\\n\\t\\t\\t\\t       \\u4e2d\\u5171\\u515a\\u5458\\r\\n\\t\\t\\t\\t       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u526f\\u9662\\u957f\\u3001\\u515a\\u59d4\\u59d4\\u5458\\r\\n\\t\\t\\t\\t       \\u9ad8\\u7ea7\\u4f1a\\u8ba1\\u5e08<\\/span><\\/span>\\r\\n\\t\\t\\t\\t <\\/td><\\/tr><\\/tbody><\\/table>

 <\\/p>
\\\"\\\"<\\/td>\\r\\n\\t\\t\\t\\t <\\/td>\\r\\n\\t\\t\\t\\t <\\/td><\\/tr><\\/tbody><\\/table>
\\r\\n\\t\\t\\t\\t                  \\u5218    \\u4f1f<\\/strong><\\/span>\\r\\n\\t\\t\\t\\t       \\u4e2d\\u5171\\u515a\\u5458\\r\\n\\t\\t\\t\\t       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u526f\\u9662\\u957f\\u3001\\u515a\\u59d4\\u59d4\\u5458\\r\\n\\t\\t\\t\\t       \\u526f\\u7814\\u7a76\\u5458<\\/span><\\/span>\\r\\n\\t\\t\\t\\t <\\/td><\\/tr><\\/tbody><\\/table>

 <\\/p>\",\"sort\":\"0\",\"_token\":\"UmgnLFvG2OCTuSRoTVcWv4lUdovKz6N8LVDgomkh\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-02 06:20:10', '2020-06-02 06:20:10'), +(424, 1, 'admin/articles/257/edit', 'GET', '1.190.203.218', '[]', '2020-06-02 06:20:11', '2020-06-02 06:20:11'), +(425, 1, 'admin/articles/253/edit', 'GET', '1.190.203.218', '[]', '2020-06-02 06:21:21', '2020-06-02 06:21:21'), +(426, 1, 'admin/articles/257/edit', 'GET', '1.190.203.218', '[]', '2020-06-02 06:21:25', '2020-06-02 06:21:25'), +(427, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 06:22:23', '2020-06-02 06:22:23'), +(428, 1, 'admin/articles/create', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 06:22:25', '2020-06-02 06:22:25'), +(429, 1, 'admin/config', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 06:25:38', '2020-06-02 06:25:38'), +(430, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 06:25:44', '2020-06-02 06:25:44'), +(431, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 06:45:39', '2020-06-02 06:45:39'), +(432, 1, 'admin/articles/253/edit', 'GET', '1.190.203.218', '[]', '2020-06-02 06:46:30', '2020-06-02 06:46:30'), +(433, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 06:51:15', '2020-06-02 06:51:15'), +(434, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u9662\\u6240\\u7b80\\u4ecb\",\"category_id\":\"2\",\"description\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\",\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"UmgnLFvG2OCTuSRoTVcWv4lUdovKz6N8LVDgomkh\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-02 06:51:34', '2020-06-02 06:51:34'), +(435, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '[]', '2020-06-02 06:51:34', '2020-06-02 06:51:34'), +(436, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u9662\\u6240\\u7b80\\u4ecb1\",\"category_id\":\"2\",\"description\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\",\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"UmgnLFvG2OCTuSRoTVcWv4lUdovKz6N8LVDgomkh\",\"_method\":\"PUT\"}', '2020-06-02 06:51:41', '2020-06-02 06:51:41'), +(437, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-02 06:51:41', '2020-06-02 06:51:41'), +(438, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-02 06:52:12', '2020-06-02 06:52:12'), +(439, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 06:52:14', '2020-06-02 06:52:14'); +INSERT INTO `admin_operation_log` (`id`, `user_id`, `path`, `method`, `ip`, `input`, `created_at`, `updated_at`) VALUES +(440, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u9662\\u6240\\u7b80\\u4ecb1\",\"category_id\":\"2\",\"description\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002\",\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"UmgnLFvG2OCTuSRoTVcWv4lUdovKz6N8LVDgomkh\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-02 06:55:03', '2020-06-02 06:55:03'), +(441, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '[]', '2020-06-02 06:55:04', '2020-06-02 06:55:04'), +(442, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u9662\\u6240\\u7b80\\u4ecb1\",\"category_id\":\"2\",\"description\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\",\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"UmgnLFvG2OCTuSRoTVcWv4lUdovKz6N8LVDgomkh\",\"_method\":\"PUT\"}', '2020-06-02 06:55:19', '2020-06-02 06:55:19'), +(443, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-02 06:55:19', '2020-06-02 06:55:19'), +(444, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 07:09:12', '2020-06-02 07:09:12'), +(445, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 07:34:30', '2020-06-02 07:34:30'), +(446, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"page\":\"2\"}', '2020-06-02 07:34:35', '2020-06-02 07:34:35'), +(447, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"title\":null,\"category\":{\"id\":\"19\"}}', '2020-06-02 07:34:44', '2020-06-02 07:34:44'), +(448, 1, 'admin/links', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 08:00:16', '2020-06-02 08:00:16'), +(449, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 08:00:21', '2020-06-02 08:00:21'), +(450, 1, 'admin/categories', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-02 08:00:25', '2020-06-02 08:00:25'), +(451, 1, 'admin', 'GET', '112.102.243.66', '[]', '2020-06-03 01:58:09', '2020-06-03 01:58:09'), +(452, 1, 'admin/links', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 01:58:13', '2020-06-03 01:58:13'), +(453, 1, 'admin/articles', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 01:58:15', '2020-06-03 01:58:15'), +(454, 1, 'admin/categories', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 01:58:21', '2020-06-03 01:58:21'), +(455, 1, 'admin/adverts', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 02:30:31', '2020-06-03 02:30:31'), +(456, 1, 'admin/adverts/create', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 02:30:33', '2020-06-03 02:30:33'), +(457, 1, 'admin/adverts', 'POST', '112.102.243.66', '{\"title\":\"\\u5e7f\\u544a1\",\"category_id\":\"22\",\"url\":null,\"sort\":\"1\",\"_token\":\"xDXLaB8YLrwXCrXT6HXVh8O8mb0MJ9DR7wzvqFHy\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/adverts\"}', '2020-06-03 02:31:56', '2020-06-03 02:31:56'), +(458, 1, 'admin/adverts', 'GET', '112.102.243.66', '[]', '2020-06-03 02:31:56', '2020-06-03 02:31:56'), +(459, 1, 'admin/adverts/1/edit', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 02:32:29', '2020-06-03 02:32:29'), +(460, 1, 'admin/adverts/1', 'PUT', '112.102.243.66', '{\"title\":\"\\u5e7f\\u544a1\",\"category_id\":\"22\",\"url\":null,\"sort\":\"1\",\"_token\":\"xDXLaB8YLrwXCrXT6HXVh8O8mb0MJ9DR7wzvqFHy\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/adverts\"}', '2020-06-03 02:32:42', '2020-06-03 02:32:42'), +(461, 1, 'admin/adverts', 'GET', '112.102.243.66', '[]', '2020-06-03 02:32:42', '2020-06-03 02:32:42'), +(462, 1, 'admin/articles', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 02:36:04', '2020-06-03 02:36:04'), +(463, 1, 'admin/articles/create', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 02:36:06', '2020-06-03 02:36:06'), +(464, 1, 'admin/articles', 'POST', '112.102.243.66', '{\"title\":\"\\u5f90 \\u6653 \\u79cb\",\"category_id\":\"4\",\"description\":\"\\u4e2d\\u5171\\u515a\\u5458\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u9662\\u957f\\u3001\\u515a\\u59d4\\u4e66\\u8bb0\\r\\n\\u7814\\u7a76\\u5458\\u7ea7\\u9ad8\\u7ea7\\u5de5\\u7a0b\\u5e08\",\"content\":\"

\\u4e2d\\u5171\\u515a\\u5458<\\/span>
\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u9662\\u957f\\u3001\\u515a\\u59d4\\u4e66\\u8bb0<\\/span>
\\u7814\\u7a76\\u5458\\u7ea7\\u9ad8\\u7ea7\\u5de5\\u7a0b\\u5e08<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"xDXLaB8YLrwXCrXT6HXVh8O8mb0MJ9DR7wzvqFHy\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 02:37:21', '2020-06-03 02:37:21'), +(465, 1, 'admin/articles/create', 'GET', '112.102.243.66', '[]', '2020-06-03 02:37:22', '2020-06-03 02:37:22'), +(466, 1, 'admin/articles', 'POST', '112.102.243.66', '{\"title\":\"\\u5f90 \\u6653 \\u79cb\",\"category_id\":\"4\",\"description\":\"\\u4e2d\\u5171\\u515a\\u5458\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u9662\\u957f\\u3001\\u515a\\u59d4\\u4e66\\u8bb0\\r\\n\\u7814\\u7a76\\u5458\\u7ea7\\u9ad8\\u7ea7\\u5de5\\u7a0b\\u5e08\",\"content\":\"

\\u4e2d\\u5171\\u515a\\u5458<\\/span>
\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u9662\\u957f\\u3001\\u515a\\u59d4\\u4e66\\u8bb0<\\/span>
\\u7814\\u7a76\\u5458\\u7ea7\\u9ad8\\u7ea7\\u5de5\\u7a0b\\u5e08<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"xDXLaB8YLrwXCrXT6HXVh8O8mb0MJ9DR7wzvqFHy\"}', '2020-06-03 02:40:08', '2020-06-03 02:40:08'), +(467, 1, 'admin/articles', 'GET', '112.102.243.66', '[]', '2020-06-03 02:40:08', '2020-06-03 02:40:08'), +(468, 1, 'admin/articles/create', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 02:40:42', '2020-06-03 02:40:42'), +(469, 1, 'admin/articles', 'POST', '112.102.243.66', '{\"title\":\"\\u5173 \\u6625 \\u73b2\",\"category_id\":\"4\",\"description\":\"\\u4e2d\\u5171\\u515a\\u5458\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u526f\\u9662\\u957f\\u3001\\u515a\\u59d4\\u59d4\\u5458\\r\\n\\u9ad8\\u7ea7\\u4f1a\\u8ba1\\u5e08\",\"content\":\"

\\u4e2d\\u5171\\u515a\\u5458<\\/span>
\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u526f\\u9662\\u957f\\u3001\\u515a\\u59d4\\u59d4\\u5458<\\/span>
\\u9ad8\\u7ea7\\u4f1a\\u8ba1\\u5e08<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"xDXLaB8YLrwXCrXT6HXVh8O8mb0MJ9DR7wzvqFHy\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 02:41:37', '2020-06-03 02:41:37'), +(470, 1, 'admin/articles', 'GET', '112.102.243.66', '[]', '2020-06-03 02:41:37', '2020-06-03 02:41:37'), +(471, 1, 'admin/articles/create', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 02:41:41', '2020-06-03 02:41:41'), +(472, 1, 'admin/articles', 'POST', '112.102.243.66', '{\"title\":\"\\u5218 \\u4f1f\",\"category_id\":\"4\",\"description\":\"\\u4e2d\\u5171\\u515a\\u5458\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u526f\\u9662\\u957f\\u3001\\u515a\\u59d4\\u59d4\\u5458\\r\\n\\u526f\\u7814\\u7a76\\u5458\",\"content\":\"

\\u4e2d\\u5171\\u515a\\u5458<\\/span>
\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u526f\\u9662\\u957f\\u3001\\u515a\\u59d4\\u59d4\\u5458<\\/span>
\\u526f\\u7814\\u7a76\\u5458<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"xDXLaB8YLrwXCrXT6HXVh8O8mb0MJ9DR7wzvqFHy\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 02:43:38', '2020-06-03 02:43:38'), +(473, 1, 'admin/articles', 'GET', '112.102.243.66', '[]', '2020-06-03 02:43:38', '2020-06-03 02:43:38'), +(474, 1, 'admin/categories', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 02:44:12', '2020-06-03 02:44:12'), +(475, 1, 'admin/categories/4/edit', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 02:44:14', '2020-06-03 02:44:14'), +(476, 1, 'admin/categories/4', 'PUT', '112.102.243.66', '{\"parent_id\":\"1\",\"title\":\"\\u9886\\u5bfc\\u73ed\\u5b50\",\"type\":\"article\",\"description\":null,\"order\":\"0\",\"article_id\":\"257\",\"status\":\"on\",\"_token\":\"xDXLaB8YLrwXCrXT6HXVh8O8mb0MJ9DR7wzvqFHy\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/categories\"}', '2020-06-03 02:44:18', '2020-06-03 02:44:18'), +(477, 1, 'admin/categories', 'GET', '112.102.243.66', '[]', '2020-06-03 02:44:18', '2020-06-03 02:44:18'), +(478, 1, 'admin/articles', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 02:45:28', '2020-06-03 02:45:28'), +(479, 1, 'admin/_handle_action_', 'POST', '112.102.243.66', '{\"_key\":\"257\",\"_model\":\"App_Models_Article\",\"_token\":\"xDXLaB8YLrwXCrXT6HXVh8O8mb0MJ9DR7wzvqFHy\",\"_action\":\"Encore_Admin_Grid_Actions_Delete\",\"_input\":\"true\"}', '2020-06-03 02:45:34', '2020-06-03 02:45:34'), +(480, 1, 'admin/articles', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 02:45:34', '2020-06-03 02:45:34'), +(481, 1, 'admin/categories', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 02:46:08', '2020-06-03 02:46:08'), +(482, 1, 'admin/articles', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 03:25:20', '2020-06-03 03:25:20'), +(483, 1, 'admin/articles/268/edit', 'GET', '112.102.243.66', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 03:25:23', '2020-06-03 03:25:23'), +(484, 1, 'admin/articles/268', 'PUT', '112.102.243.66', '{\"title\":\"\\u5218 \\u4f1f\",\"category_id\":\"4\",\"description\":\"\\u4e2d\\u5171\\u515a\\u5458\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u526f\\u9662\\u957f\\u3001\\u515a\\u59d4\\u59d4\\u5458\\r\\n\\u526f\\u7814\\u7a76\\u5458\",\"content\":\"

\\u4e2d\\u5171\\u515a\\u5458<\\/span>
\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u526f\\u9662\\u957f\\u3001\\u515a\\u59d4\\u59d4\\u5458<\\/span>
\\u526f\\u7814\\u7a76\\u5458<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"xDXLaB8YLrwXCrXT6HXVh8O8mb0MJ9DR7wzvqFHy\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 03:25:28', '2020-06-03 03:25:28'), +(485, 1, 'admin/articles', 'GET', '112.102.243.66', '[]', '2020-06-03 03:25:29', '2020-06-03 03:25:29'), +(486, 1, 'admin', 'GET', '1.190.203.218', '[]', '2020-06-03 03:43:59', '2020-06-03 03:43:59'), +(487, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 03:45:23', '2020-06-03 03:45:23'), +(488, 1, 'admin/articles/create', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 03:45:26', '2020-06-03 03:45:26'), +(489, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 07:45:43', '2020-06-03 07:45:43'), +(490, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-03 08:16:07', '2020-06-03 08:16:07'), +(491, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 08:32:05', '2020-06-03 08:32:05'), +(492, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u9662\\u6240\\u7b80\\u4ecb\",\"category_id\":\"2\",\"description\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\",\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 09:00:06', '2020-06-03 09:00:06'), +(493, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '[]', '2020-06-03 09:00:06', '2020-06-03 09:00:06'), +(494, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u9662\\u6240\\u7b80\\u4ecb\",\"category_id\":\"2\",\"description\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\",\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\"}', '2020-06-03 09:02:21', '2020-06-03 09:02:21'), +(495, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '[]', '2020-06-03 09:02:21', '2020-06-03 09:02:21'); +INSERT INTO `admin_operation_log` (`id`, `user_id`, `path`, `method`, `ip`, `input`, `created_at`, `updated_at`) VALUES +(496, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u80fd\\u6e90\\u9662\\u7b80\\u4ecb\",\"category_id\":\"2\",\"description\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\",\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\"}', '2020-06-03 09:02:37', '2020-06-03 09:02:37'), +(497, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-03 09:02:37', '2020-06-03 09:02:37'), +(498, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:03:13', '2020-06-03 09:03:13'), +(499, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u80fd\\u6e90\\u9662\\u7b80\\u4ecb\",\"category_id\":\"2\",\"description\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\",\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 09:03:20', '2020-06-03 09:03:20'), +(500, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-03 09:03:21', '2020-06-03 09:03:21'), +(501, 1, 'admin/articles/268/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:04:45', '2020-06-03 09:04:45'), +(502, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:05:58', '2020-06-03 09:05:58'), +(503, 1, 'admin/articles/265/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:06:27', '2020-06-03 09:06:27'), +(504, 1, 'admin/articles/265', 'PUT', '1.190.203.218', '{\"title\":\"\\u63a7\\u5236\\u5b9e\\u9a8c\\u5ba4\",\"category_id\":\"17\",\"description\":null,\"content\":\"

\\u63a7\\u5236\\u5b9e\\u9a8c\\u5ba4\\u7b80\\u4ecb<\\/span><\\/h1>

        \\u63a7\\u5236\\u5b9e\\u9a8c\\u5ba4\\u4e3b\\u8981\\u8fdb\\u884c<\\/span><\\/strong>\\u7535\\u6c14\\u8bbe\\u8ba1\\u3001\\u81ea\\u63a7\\u8bbe\\u8ba1\\u3001\\u4eea\\u8868\\u5b89\\u88c5\\u8c03\\u8bd5\\u53ca\\u63a7\\u5236\\u7cfb\\u7edf\\u7684\\u8bbe\\u8ba1\\u548c\\u7f16\\u5236\\u5de5\\u4f5c\\uff0c\\u5de5\\u4f5c\\u4e2d\\u5584\\u4e8e\\u63d0\\u51fa\\u6539\\u8fdb\\u63aa\\u65bd\\uff0c\\u89e3\\u51b3\\u9879\\u76ee\\u4e2d\\u9047\\u5230\\u7684\\u5173\\u952e\\u6027\\u7684\\u6280\\u672f\\u96be\\u9898\\u3002<\\/span><\\/strong>        <\\/span><\\/strong>\\u63a7\\u5236\\u5b9e\\u9a8c\\u5ba4<\\/span><\\/strong>\\u53c2\\u4e0e\\u7814\\u5236\\u5efa\\u8bbe\\u7684\\u56fd\\u5bb6\\u7ea7\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee\\u300a\\u5de5\\u4e1a\\u5316\\u5c01\\u95ed\\u73af\\u5f0f\\u6cbc\\u6c14\\u3001\\u53d1\\u7535\\u7cfb\\u7edf\\u300b\\u4ee5\\u53ca\\u7701\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee\\u300a\\u52a0\\u62ff\\u5927\\u76f4\\u8d2e\\u70ed\\u592a\\u9633\\u80fd\\u6280\\u672f\\u300b\\u63d0\\u5347\\u4e86\\u6211\\u7701\\u9ad8\\u5bd2\\u5730\\u533a\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u548c\\u5149\\u4f0f\\u53d1\\u9175\\u6e29\\u5ba4\\u63a7\\u5236\\u9886\\u57df\\u5728\\u56fd\\u9645\\u4e0a\\u7684\\u77e5\\u540d\\u5ea6\\uff0c\\u8be5\\u9879\\u76ee\\u5f97\\u5230\\u4e86\\u52a0\\u62ff\\u5927\\u963f\\u5c14\\u4f2f\\u5854\\u7814\\u7a76\\u9662\\u4e1a\\u5185\\u4e13\\u5bb6\\u7684\\u4e00\\u81f4\\u597d\\u8bc4\\u3002<\\/span><\\/strong><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 09:06:33', '2020-06-03 09:06:33'), +(505, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-03 09:06:34', '2020-06-03 09:06:34'), +(506, 1, 'admin/articles/264/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:06:55', '2020-06-03 09:06:55'), +(507, 1, 'admin/articles/264', 'PUT', '1.190.203.218', '{\"title\":\"\\u80fd\\u6e90\\u5fae\\u751f\\u7269\\u7814\\u7a76\\u5ba4\",\"category_id\":\"16\",\"description\":null,\"content\":\"

\\u80fd\\u6e90\\u5fae\\u751f\\u7269\\u7814\\u7a76\\u5ba4\\u7b80\\u4ecb<\\/span><\\/span>\\r\\n\\t <\\/strong><\\/p>

        \\u80fd\\u6e90\\u5fae\\u751f\\u7269\\u7814\\u7a76\\u5ba4\\u81f4\\u529b\\u4e8e\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u6280\\u672f\\u548c\\u751f\\u7269\\u5de5\\u7a0b\\u4e09\\u5927\\u5b66\\u79d1\\u4ea4\\u53c9\\u9886\\u57df\\u7684\\u5e94\\u7528\\u57fa\\u7840\\u7814\\u7a76\\u3002\\u4e3b\\u8981\\u7814\\u7a76\\u65b9\\u5411\\u662f\\uff1a\\r\\n\\t        1\\u3001\\u755c\\u79bd\\u7caa\\u4fbf\\u8d44\\u6e90\\u5316\\u6280\\u672f\\uff1b\\r\\n\\t        2\\u3001\\u79f8\\u79c6\\u8d44\\u6e90\\u5316\\u6280\\u672f\\u3002<\\/span>\\r\\n\\t <\\/strong><\\/p>

\\\"\\\"\\r\\n\\t <\\/strong><\\/p>

        <\\/span><\\/strong>\\u8fd1\\u5e74\\u6765\\uff0c<\\/span><\\/strong>\\u80fd\\u6e90\\u5fae\\u751f\\u7269\\u7814\\u7a76\\u5ba4<\\/span><\\/strong>\\u627f\\u62c5\\u56fd\\u5bb6\\u7ea7\\u3001\\u7701\\u5e02\\u7ea7\\u3001\\u9662\\u57fa\\u91d1\\u9879\\u76ee20\\u4f59\\u9879\\uff0c\\u591a\\u9879\\u6210\\u679c\\u83b7\\u5956\\u3002\\u5176\\u4e2d\\u755c\\u79bd\\u7caa\\u4fbf\\u9ad8\\u6e29\\u538c\\u6c27\\u6d88\\u5316\\u6280\\u672f\\u4e0e\\u725b\\u7caa\\u6cbc\\u6db2\\u79f8\\u79c6\\u8054\\u7528\\u6280\\u672f\\u662f\\u6211\\u56fd\\u552f\\u4e00\\u6210\\u529f\\u5e94\\u7528\\u4e8e\\u9ad8\\u5bd2\\u5730\\u533a\\u8fde\\u7eed\\u4f5c\\u4e1a\\u7684\\u6280\\u672f\\uff0c\\u5e76\\u53d6\\u5f97\\u4e86\\u663e\\u8457\\u7684\\u793e\\u4f1a\\u6548\\u76ca\\u3002<\\/span><\\/strong><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 09:07:13', '2020-06-03 09:07:13'), +(508, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-03 09:07:13', '2020-06-03 09:07:13'), +(509, 1, 'admin/articles/263/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:07:15', '2020-06-03 09:07:15'), +(510, 1, 'admin/articles/263', 'PUT', '1.190.203.218', '{\"title\":\"\\u751f\\u7269\\u8d28\\u80fd\\u6e90\\u5b9e\\u9a8c\\u5ba4\",\"category_id\":\"15\",\"description\":null,\"content\":\"

\\u751f\\u7269\\u8d28\\u80fd\\u6e90\\u5b9e\\u9a8c\\u5ba4\\u7b80\\u4ecb<\\/span><\\/strong><\\/p>

         \\u751f\\u7269\\u8d28\\u80fd\\u6e90\\u5b9e\\u9a8c\\u5ba4\\u4e3b\\u8981\\u4ece\\u4e8b\\u5bd2\\u533a\\u6cbc\\u6c14\\u5de5\\u7a0b\\u3001\\u56fa\\u4f53\\u5e9f\\u5f03\\u7269\\u5229\\u7528\\u3001\\u519c\\u6751\\u751f\\u7269\\u8d28\\u8d44\\u6e90\\u3001\\u538c\\u6c27\\u5fae\\u751f\\u7269\\u673a\\u7406\\u3001\\u538c\\u6c27\\u6d88\\u5316\\u6280\\u672f\\u4ee5\\u53ca\\u519c\\u6751\\u8d44\\u6e90\\u4e0e\\u73af\\u5883\\u7efc\\u5408\\u7814\\u7a76\\u4e0e\\u5f00\\u53d1\\u7b49\\u5de5\\u4f5c\\uff0c\\u6d89\\u53ca\\u5fae\\u751f\\u7269\\u5b66\\u3001\\u751f\\u7269\\u5316\\u5b66\\u4e0e\\u5206\\u5b50\\u751f\\u7269\\u5b66\\u3001\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u80fd\\u6e90\\u5de5\\u7a0b\\u3001\\u519c\\u4e1a\\u8d44\\u6e90\\u4e0e\\u73af\\u5883\\u7b49\\u5b66\\u79d1\\u3002\\u62e5\\u6709\\u5148\\u8fdb\\u79d1\\u7814\\u4eea\\u5668\\u8bbe\\u590740\\u4f59\\u53f0\\uff0c\\u5177\\u6709\\u8f83\\u5b8c\\u5907\\u7684\\u7814\\u7a76\\u5e73\\u53f0\\u548c\\u5b9e\\u9a8c\\u6761\\u4ef6\\u3002\\u5b9e\\u9a8c\\u5ba4\\u5df2\\u627f\\u62c5\\u548c\\u5728\\u7814\\u7684\\u6709\\u56fd\\u5bb6\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u4e13\\u9879\\u8bfe\\u9898\\u3001\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u8ba1\\u5212\\u3001\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u5b66\\u7814\\u7a76\\u57fa\\u91d1\\u3001\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\u9752\\u5e74\\u521b\\u65b0\\u57fa\\u91d1\\u7b49\\u5341\\u4f59\\u9879\\u8bfe\\u9898\\u3002\\u5df2\\u7ecf\\u5728\\u9ad8\\u6e29\\u538c\\u6c27\\u6d88\\u5316\\u6280\\u672f\\u3001\\u5bd2\\u533a\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\u7814\\u7a76\\u7b49\\u5bd2\\u533a\\u751f\\u7269\\u8d28\\u8d44\\u6e90\\u80fd\\u6e90\\u5316\\u5229\\u7528\\u6280\\u672f\\u65b9\\u9762\\u53d6\\u5f97\\u4e86\\u7a81\\u7834\\u6027\\u7814\\u7a76\\u8fdb\\u5c55\\uff1b\\u53e6\\u5916\\u8fd8\\u5f00\\u5c55\\u4e86\\u9ad8\\u6548\\u4ea7\\u7532\\u70f7\\u83cc\\u7684\\u5206\\u5b50\\u751f\\u7269\\u5b66\\u3001\\u6cbc\\u6db2\\u9ad8\\u6548\\u56de\\u7528\\u3001\\u538c\\u6c27\\u83cc\\u5f71\\u54cd\\u56e0\\u7d20\\u7b49\\u7814\\u7a76\\uff0c\\u4e3a\\u5728\\u6211\\u56fd\\u5bd2\\u533a\\u5174\\u5efa\\u5927\\u578b\\u6cbc\\u6c14\\u5de5\\u7a0b\\u5960\\u5b9a\\u4e86\\u7406\\u8bba\\u53ca\\u6280\\u672f\\u57fa\\u7840\\u3002\\u76ee\\u524d\\u5df2\\u53d1\\u8868\\u7814\\u7a76\\u8bba\\u658710\\u4f59\\u7bc7\\uff0c\\u7533\\u62a5\\u4e13\\u522910\\u9879\\u3002<\\/span><\\/strong><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 09:07:22', '2020-06-03 09:07:22'), +(511, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-03 09:07:22', '2020-06-03 09:07:22'), +(512, 1, 'admin/articles/262/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:07:25', '2020-06-03 09:07:25'), +(513, 1, 'admin/articles/262', 'PUT', '1.190.203.218', '{\"title\":\"\\u8282\\u80fd\\u6280\\u672f\\u7814\\u7a76\\u5ba4\",\"category_id\":\"14\",\"description\":null,\"content\":\"

\\u8282\\u80fd\\u6280\\u672f\\u7814\\u7a76\\u5ba4\\u7b80\\u4ecb<\\/span><\\/strong>\\r\\n\\t <\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u8282\\u80fd\\u6280\\u672f\\u7814\\u7a76\\u5ba4\\u5148\\u540e\\u627f\\u62c5\\u548c\\u53c2\\u4e0e\\u627f\\u62c5\\u5b8c\\u6210\\u4e86\\u56fd\\u5bb6\\u201c\\u4e5d\\u4e94\\u201d\\u91cd\\u70b9\\u79d1\\u6280\\u653b\\u5173\\u8ba1\\u5212\\u9879\\u76ee\\uff0c\\u56fd\\u5bb6\\u201c\\u5341\\u4e94\\u201d\\u91cd\\u70b9\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee\\uff0c\\u83b7\\u5f97\\u4e86\\u56fd\\u5bb6\\u7ea7\\u3001\\u7701\\u7ea7\\u79d1\\u7814\\u6210\\u679c20\\u591a\\u9879\\u3002\\u83b7\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u5956\\u4e00\\u9879\\u3002\\u83b7\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u5956\\u4e00\\u9879\\u3001\\u83b7\\u5f97\\u4e86\\u5168\\u56fd\\u77f3\\u6cb9\\u5316\\u5de5\\u7cfb\\u7edf\\u4e8c\\u7b49\\u5956\\u4e00\\u9879\\uff0c\\u83b7\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u4e00\\u9879\\u5956\\u7b49\\u3002        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662<\\/span><\\/strong>\\u8282\\u80fd\\u6280\\u672f\\u7814\\u7a76\\u5ba4<\\/span><\\/strong>\\u79c9\\u627f\\u201c\\u5d07\\u5c1a\\u79d1\\u5b66\\uff0c\\u6c42\\u5b9e\\u521b\\u65b0\\u201d\\u7684\\u6307\\u5bfc\\u65b9\\u9488,\\u5177\\u6709\\u4eba\\u5458\\u7d20\\u8d28\\u9ad8\\u3001\\u4eea\\u5668\\u79cd\\u7c7b\\u9f50\\u5168\\u3001\\u6d4b\\u8bd5\\u624b\\u6bb5\\u6807\\u51c6\\u53ef\\u9760\\u548c\\u53ef\\u8fbe\\u5230\\u6d4b\\u8bd5\\u8981\\u6c42\\u7684\\u5de5\\u4f5c\\u73af\\u5883\\u7b49\\u7279\\u70b9\\u3002        <\\/span><\\/strong><\\/p>

\\r\\n\\t <\\/p>

 <\\/p>

\\\"\\\"<\\/p>

 <\\/p>

\\r\\n\\t <\\/p>

 <\\/p>

\\r\\n\\t <\\/p>

 <\\/p>

\\r\\n\\t <\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 09:07:33', '2020-06-03 09:07:33'), +(514, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-03 09:07:33', '2020-06-03 09:07:33'), +(515, 1, 'admin/articles/261/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:07:36', '2020-06-03 09:07:36'), +(516, 1, 'admin/articles/261', 'PUT', '1.190.203.218', '{\"title\":\"\\u80fd\\u6e90\\u5316\\u5b66\\u7814\\u7a76\\u5ba4\",\"category_id\":\"13\",\"description\":null,\"content\":\"

\\u80fd\\u6e90\\u5316\\u5b66\\u7814\\u7a76\\u5ba4\\u7b80\\u4ecb<\\/span><\\/strong><\\/p>

        \\u80fd\\u6e90\\u5316\\u5b66\\u7814\\u7a76\\u5ba4\\u4e3b\\u8981\\u4ece\\u4e8b\\u5e38\\u89c4\\u80fd\\u6e90\\u3001\\u975e\\u5e38\\u89c4\\u80fd\\u6e90\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u53ca\\u6e05\\u6d01\\u80fd\\u6e90\\u6280\\u672f\\u7684\\u7814\\u7a76\\uff0c\\u7814\\u7a76\\u8303\\u56f4\\u6d89\\u53ca\\u77f3\\u6cb9\\u5316\\u5de5\\u3001\\u7164\\u5316\\u5de5\\u3001\\u751f\\u7269\\u5316\\u5de5\\u548c\\u71c3\\u6599\\u5316\\u5de5\\u7b49\\u9886\\u57df\\u3002\\u8fd1\\u4e09\\u5e74\\uff0c\\u5148\\u540e\\u627f\\u62c5\\u7701\\u7ea7\\u3001\\u5e02\\uff08\\u5730\\uff09\\u7ea7\\u5404\\u7c7b\\u79d1\\u6280\\u5f00\\u53d1\\u9879\\u76ee10\\u4f59\\u9879\\uff0c\\u53d6\\u5f97\\u4e86\\u4e00\\u6279\\u8fbe\\u5230\\u56fd\\u5185\\u5148\\u8fdb\\u6c34\\u5e73\\u7684\\u6807\\u5fd7\\u6027\\u6210\\u679c\\u3002\\u76ee\\u524d\\uff0c\\u8be5\\u7814\\u7a76\\u5ba4\\u5728\\u79d1\\u7814\\u9886\\u57df\\u5df2\\u521d\\u6b65\\u5f62\\u6210\\u56db\\u6761\\u6280\\u672f\\u5f00\\u53d1\\u94fe\\u6761\\uff0c\\u5373\\uff1a\\u9875\\u5ca9\\u6cb9\\u52a0\\u6c22\\u63d0\\u8d28\\u8f6c\\u5316\\u6280\\u672f\\uff1b\\u9875\\u5ca9\\u6cb9\\u5236\\u53d6\\u6cb9\\u7802\\u5206\\u79bb\\u5242\\u6280\\u672f\\uff1b\\u7164\\u4e0e\\u5e9f\\u5f03\\u6709\\u673a\\u5236\\u54c1\\u5171\\u7126\\u5316\\u6280\\u672f\\uff1b\\u6728\\u7126\\u6cb9\\u52a0\\u6c22\\u63d0\\u8d28\\u8f6c\\u5316\\u6280\\u672f\\u3002\\r\\n\\t        \\u80fd\\u6e90\\u5316\\u5b66\\u7814\\u7a76\\u5ba4\\u7ecf\\u8fc7\\u591a\\u5e74\\u7684\\u5b9e\\u8df5\\uff0c\\u9010\\u6b65\\u5f62\\u6210\\u4e00\\u652f\\u7ed3\\u6784\\u5408\\u7406\\u3001\\u81ea\\u4e3b\\u7814\\u53d1\\u80fd\\u529b\\u5f3a\\u7684\\u521b\\u65b0\\u578b\\u79d1\\u7814\\u68af\\u961f\\u3002\\u4e0e\\u4e2d\\u79d1\\u9662\\u5927\\u8fde\\u7269\\u5316\\u6240\\u3001\\u5927\\u5e86\\u77f3\\u5316\\u7814\\u7a76\\u9662\\u3001\\u5927\\u8fde\\u7406\\u5de5\\u5927\\u5b66\\u3001\\u54c8\\u5c14\\u6ee8\\u5de5\\u4e1a\\u5927\\u5b66\\u7b49\\u591a\\u5bb6\\u79d1\\u7814\\u9662\\u6240\\u548c\\u9ad8\\u6821\\u5728\\u57fa\\u7840\\u7814\\u7a76\\u3001\\u4fe1\\u606f\\u4ea4\\u6d41\\u3001\\u8d44\\u6e90\\u5171\\u4eab\\u7b49\\u65b9\\u9762\\u5efa\\u7acb\\u4e86\\u826f\\u597d\\u7684\\u79d1\\u7814\\u4e92\\u8054\\u5173\\u7cfb\\u3002<\\/span>        \\u7814\\u7a76\\u5ba4\\u4e3b\\u4efb\\u4ecb\\u7ecd\\uff1a\\r\\n\\t        \\u9648\\u677e\\uff0c1969\\u5e74\\u51fa\\u751f\\uff0c\\u9ad8\\u7ea7\\u5de5\\u7a0b\\u5e08\\uff0c\\u73b0\\u4efb\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u80fd\\u6e90\\u5316\\u5b66\\u7814\\u7a76\\u5ba4\\u4e3b\\u4efb\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u80fd\\u8bc4\\u4f30\\u5ba1\\u67e5\\u4e2d\\u5fc3\\u5316\\u5de5\\u4e13\\u5bb6\\uff0c\\u9ed1\\u9f99\\u6c5f\\u79d1\\u6280\\u5927\\u5b66\\u6821\\u5916\\u7814\\u7a76\\u751f\\u5bfc\\u5e08\\u3002\\u4e3b\\u8981\\u4ece\\u4e8b\\u80fd\\u6e90\\u5316\\u5b66\\u9886\\u57df\\u524d\\u6cbf\\u6280\\u672f\\u7684\\u7814\\u7a76\\uff0c\\u7814\\u7a76\\u8303\\u56f4\\u5305\\u62ec\\uff1a\\u5e38\\u89c4\\u3001\\u975e\\u5e38\\u89c4\\u80fd\\u6e90\\u7684\\u52a0\\u5de5\\u5de5\\u827a\\u548c\\u5de5\\u7a0b\\u7684\\u7814\\u7a76\\uff1b\\u9ad8\\u786b\\u9ad8\\u9178\\u539f\\u6cb9\\u3001\\u7a20\\u6cb9\\u7684\\u6539\\u8d28\\u53ca\\u8f6c\\u5316\\u5de5\\u827a\\u7684\\u7814\\u7a76\\u3002\\u5176\\u6210\\u679c\\u5728\\u77f3\\u6cb9\\u5316\\u5de5\\u3001\\u7164\\u5316\\u5de5\\u3001\\u6cb9\\u9875\\u5ca9\\u8d44\\u6e90\\u7efc\\u5408\\u5229\\u7528\\u7b49\\u65b9\\u9762\\u5177\\u6709\\u8f83\\u9ad8\\u7406\\u8bba\\u6307\\u5bfc\\u610f\\u4e49\\u548c\\u5b9e\\u7528\\u4ef7\\u503c\\u3002<\\/span><\\/strong><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 09:07:42', '2020-06-03 09:07:42'), +(517, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-03 09:07:42', '2020-06-03 09:07:42'), +(518, 1, 'admin/articles/260/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:07:45', '2020-06-03 09:07:45'), +(519, 1, 'admin/articles/260', 'PUT', '1.190.203.218', '{\"title\":\"\\u73af\\u5883\\u79d1\\u5b66\\u7814\\u7a76\\u5ba4\",\"category_id\":\"12\",\"description\":null,\"content\":\"

\\u73af\\u5883\\u79d1\\u5b66\\u7814\\u7a76\\u5ba4\\u7b80\\u4ecb<\\/strong><\\/span><\\/p>

 <\\/p>

        \\u73af\\u5883\\u79d1\\u5b66\\u7814\\u7a76\\u5ba4\\u4e00\\u76f4\\u81f4\\u529b\\u4e8e\\u8282\\u80fd\\u51cf\\u6392\\u6280\\u672f\\u548c\\u5ba4\\u5185\\u73af\\u5883\\u6c61\\u67d3\\u5206\\u6790\\u65b9\\u9762\\u7684\\u7814\\u7a76\\u5de5\\u4f5c\\u3002\\u4e3b\\u8981\\u4ece\\u4e8b\\u751f\\u7269\\u6cd5\\u5904\\u7406\\u751f\\u6d3b\\u3001\\u5de5\\u4e1a\\u6c61\\u6c34\\u548c\\u5ba4\\u5185\\u7a7a\\u6c14\\u4e2d\\u6c61\\u67d3\\u7269\\u7684\\u6e90\\u89e3\\u6790\\u53ca\\u6cbb\\u7406\\u7814\\u7a76\\u3002<\\/strong>\\r\\n\\t        \\u73af\\u5883\\u79d1\\u5b66\\u7814\\u7a76\\u5ba4\\u66fe\\u5b8c\\u6210\\u8fc7\\u591a\\u9879\\u7701\\u90e8\\u7ea7\\u79d1\\u7814\\u9879\\u76ee\\uff0c\\u5982\\uff1a\\u300a\\u5965\\u91cc\\u6cb9\\u8131\\u786b\\u6280\\u672f\\u7814\\u5236\\u53ca\\u5e94\\u7528<\\/strong> \\u300b\\u3001\\u300a\\u71c3\\u7164\\u9505\\u7089\\u50ac\\u5316\\u8131\\u786b\\u6280\\u672f\\u7814\\u7a76\\u300b\\u548c\\u300a\\u5de5\\u4e1a\\u71c3\\u7164\\u9505\\u7089\\u70df\\u6c14\\u51c0\\u5316\\u6280\\u672f<\\/strong> \\u300b\\u7b49\\u9879\\u76ee\\uff0c\\u4e3a\\u6211\\u56fd\\u56fa\\u5b9a\\u6c61\\u67d3\\u6e90\\u51cf\\u6392\\u63d0\\u4f9b\\u65b0\\u6280\\u672f<\\/strong>,<\\/strong>\\u5e76\\u5206\\u522b\\u83b7\\u5f97\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u4e00\\u7b49\\u5956<\\/strong>1<\\/strong>\\u9879\\u3001\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u5de5\\u4e1a\\u79d1\\u6280\\u8fdb\\u6b65\\u7c7b\\u4e8c\\u7b49\\u5956<\\/strong>1<\\/strong>\\u9879\\u3002\\u8fd8\\u5b8c\\u6210\\u4e86\\u57fa\\u4e8e\\u5e9f\\u78b3\\u6e90\\u7684\\u4ea7\\u6cb9\\u5fae\\u85fb\\u63d0\\u53d6\\u751f\\u7269\\u6cb9\\u8102\\u6280\\u672f\\uff0c\\u65e2\\u89e3\\u51b3\\u6c61\\u6c34\\u6392\\u653e\\u95ee\\u9898\\uff0c\\u53c8\\u63d0\\u4f9b\\u751f\\u7269\\u80fd\\u6e90\\uff0c\\u4e3a\\u6392\\u6c61\\u7efc\\u5408\\u5229\\u7528\\u50a8\\u5907\\u4e86\\u57fa\\u7840\\u6280\\u672f\\u3002\\u7814\\u7a76\\u5ba4\\u6b63\\u5728\\u53c2\\u4e0e\\u7f16\\u5236\\u56fd\\u5bb6\\u884c\\u4e1a\\u6807\\u51c6\\u300a\\u4f4f\\u5b85\\u5efa\\u7b51\\u5ba4\\u5185\\u88c5\\u4fee\\u6c61\\u67d3\\u63a7\\u5236\\u6280\\u672f\\u89c4\\u7a0b\\u300b\\uff0c\\u5e76\\u627f\\u62c5\\u5ba4\\u5185\\u73af\\u5883\\u76f8\\u5173\\u8bfe\\u9898\\u4e24\\u9879\\u3002<\\/strong>\\r\\n\\t        \\u73af\\u5883\\u79d1\\u5b66\\u7814\\u7a76\\u5ba4\\u4e0b\\u8bbe\\u751f\\u7269\\u73af\\u5883\\u5b9e\\u9a8c\\u5ba4\\u3001\\u5ba4\\u5185\\u73af\\u5883\\u5b9e\\u9a8c\\u5ba4\\u3001\\u4e73\\u5316\\u5b9e\\u9a8c\\u5ba4\\u7b49\\uff0c\\u5177\\u6709\\u8f83\\u4e3a\\u5b8c\\u5907\\u7684\\u5206\\u6790\\u6d4b\\u8bd5\\u4eea\\u5668\\u8bbe\\u5907\\uff0c\\u5982\\u70ed\\u8131\\u9644\\u4eea\\uff0c\\u7c89\\u5c18\\u68c0\\u6d4b\\u4eea\\uff0c\\u81ed\\u6c27\\u68c0\\u6d4b\\u4eea\\uff0c\\u7532\\u919b\\u4fbf\\u643a\\u68c0\\u6d4b\\u4eea\\uff0c<\\/strong>TVOC<\\/strong>\\u4fbf\\u643a\\u68c0\\u6d4b\\u4eea\\uff0c\\u6d4b\\u6c21\\u4eea\\uff0c<\\/strong>1m3<\\/sup><\\/strong>\\u73af\\u5883\\u6c14\\u5019\\u7bb1\\u7b49\\u3002\\u540c\\u65f6\\uff0c\\u7814\\u7a76\\u5ba4\\u6210\\u5458\\u4e13\\u4e1a\\u4e92\\u8865\\uff0c\\u9ad8\\u4e2d\\u521d\\u7ea7\\u5206\\u5e03\\u5408\\u7406\\uff0c\\u5e76\\u62e5\\u6709\\u591a\\u5e74\\u7684\\u5b9e\\u9a8c\\u5ba4\\u5de5\\u4f5c\\u7ecf\\u9a8c\\uff0c\\u53ef\\u4ee5\\u5904\\u7406\\u5404\\u79cd\\u73af\\u5883\\u3001\\u8282\\u80fd\\u5b9e\\u9a8c\\uff0c\\u79d1\\u7814\\u5b9e\\u529b\\u8f83\\u5f3a\\u3002<\\/strong>\\r\\n\\t        \\u7814\\u7a76\\u5ba4\\u4e3b\\u4efb\\u4ecb\\u7ecd\\uff1a<\\/strong>\\r\\n\\t        \\u738b\\u5fd7\\u6210\\uff0c<\\/strong>1973<\\/strong>\\u5e74\\u51fa\\u751f\\uff0c\\u5b66\\u58eb\\uff0c\\u7814\\u7a76\\u5458\\u7ea7\\u9ad8\\u7ea7\\u5de5\\u7a0b\\u5e08\\uff0c\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u540e\\u5907\\u5e26\\u5934\\u4eba\\uff0c\\u7701\\u7ea7\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u6210\\u5458\\uff0c\\u517c\\u4efb\\uff1a\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u5b66\\u4f1a\\u5e38\\u52a1\\u7406\\u4e8b\\u3001\\u7701\\u5316\\u5b66\\u4f1a\\u7406\\u4e8b\\u3002\\u4ece\\u4e8b\\u65b0\\u578b\\u9187\\u919a\\u71c3\\u6599\\u50ac\\u5316\\u5242\\u548c\\u4e73\\u5316\\u71c3\\u6599\\u50ac\\u5316\\u5242\\u53ca\\u5408\\u6210\\u5de5\\u827a\\u7814\\u7a76\\uff0c\\u4ee5\\u53ca\\u5ba4\\u5185\\u7a7a\\u6c14\\u6c61\\u67d3\\u7814\\u7a76\\u5de5\\u4f5c\\u3002\\u4e3b\\u6301\\u548c\\u4e3b\\u7814\\u79d1\\u7814\\u8bfe\\u9898<\\/strong>22<\\/strong>\\u9879\\uff0c\\u5176\\u4e2d\\u5305\\u62ec\\u56fd\\u5bb6\\u653b\\u5173\\u8ba1\\u5212\\u9879\\u76ee<\\/strong>3<\\/strong>\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d1\\u9879\\u76ee<\\/strong>1<\\/strong>\\u9879\\uff0c\\u56fd\\u5bb6\\u653f\\u5e9c\\u95f4\\u56fd\\u9645\\u5408\\u4f5c\\u9879\\u76ee<\\/strong>1<\\/strong>\\u9879\\uff0c\\u7701\\u653b\\u5173\\u8ba1\\u5212\\u9879\\u76ee<\\/strong>6<\\/strong>\\u9879\\u3002\\u83b7\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u5956<\\/strong>1<\\/strong>\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u5956<\\/strong>2<\\/strong>\\u9879\\uff0c\\u4e09\\u7b49\\u5956<\\/strong>1<\\/strong>\\u9879\\uff0c\\u56fd\\u5bb6\\u77f3\\u5316\\u534f\\u4f1a\\u79d1\\u6280\\u4e8c\\u7b49\\u5956<\\/strong>1<\\/strong>\\u9879\\uff0c\\u53d1\\u8868\\u5b66\\u672f\\u8bba\\u6587<\\/strong>11<\\/strong>\\u7bc7\\u3002<\\/strong><\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 09:07:51', '2020-06-03 09:07:51'), +(520, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-03 09:07:51', '2020-06-03 09:07:51'), +(521, 1, 'admin/articles/259/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:07:54', '2020-06-03 09:07:54'), +(522, 1, 'admin/articles/259', 'PUT', '1.190.203.218', '{\"title\":\"\\u673a\\u6784\\u8bbe\\u7f6e\",\"category_id\":\"11\",\"description\":null,\"content\":\"

 <\\/p>

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7ec4\\u7ec7\\u7ed3\\u6784<\\/span><\\/strong><\\/h1>

\\r\\n\\t <\\/h2>

1\\u3001\\u79d1\\u7814\\u5f00\\u53d1\\u90e8\\u95e8<\\/span><\\/h1>

    \\u00b7<\\/strong><\\/span>\\u73af\\u5883\\u79d1\\u5b66\\u7814\\u7a76\\u5ba4<\\/span><\\/p>

    \\u00b7<\\/strong><\\/span>\\u80fd\\u6e90\\u5316\\u5b66\\u7814\\u7a76\\u5ba4<\\/span><\\/p>

    \\u00b7<\\/strong><\\/span>\\u80fd\\u6e90\\u5fae\\u751f\\u7269\\u7814\\u7a76\\u5ba4<\\/span><\\/p>

    \\u00b7<\\/strong><\\/span>\\u8282\\u80fd\\u6280\\u672f\\u7814\\u7a76\\u5ba4<\\/span><\\/p>

    \\u00b7<\\/strong><\\/span>\\u751f\\u7269\\u8d28\\u80fd\\u6e90\\u5b9e\\u9a8c\\u5ba4<\\/span><\\/p>

    \\u00b7<\\/strong><\\/span>\\u63a7\\u5236\\u5b9e\\u9a8c\\u5ba4<\\/span><\\/p>

2\\u3001\\u884c\\u653f\\u7ba1\\u7406\\u90e8\\u95e8<\\/span><\\/h1>

    \\u00b7<\\/strong><\\/span>\\u79d1\\u7814\\u7ba1\\u7406\\u529e\\u516c\\u5ba4<\\/span><\\/p>

    \\u00b7<\\/strong><\\/span>\\u7efc\\u5408\\u7ba1\\u7406\\u529e\\u516c\\u5ba4<\\/span><\\/p>

    \\u00b7<\\/strong><\\/span>\\u8d22\\u52a1\\u7ba1\\u7406\\u529e\\u516c\\u5ba4<\\/span><\\/p>

3\\u3001<\\/span>\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f<\\/span><\\/h1>

    \\u00b7<\\/strong><\\/span>\\u80fd\\u6e90\\u5316\\u5b66<\\/span><\\/p>

4\\u3001\\u7701\\u91cd\\u70b9\\u5ba4\\u9a8c\\u5ba4<\\/span><\\/h1>

    \\u00b7<\\/span><\\/strong>\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4<\\/span><\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 09:08:00', '2020-06-03 09:08:00'), +(523, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-03 09:08:00', '2020-06-03 09:08:00'), +(524, 1, 'admin/articles/258/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:08:03', '2020-06-03 09:08:03'), +(525, 1, 'admin/articles/258', 'PUT', '1.190.203.218', '{\"title\":\"\\u8054\\u7cfb\\u6211\\u4eec\",\"category_id\":\"10\",\"description\":null,\"content\":\"

\\u90ae\\u7bb1\\uff1ahljnyfh@163.com<\\/a>   hljnyhj@163.com<\\/a><\\/span><\\/h1>

\\u7535\\u8bdd\\uff1a0451-88071351   0451-82387268<\\/span><\\/h1>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 09:08:08', '2020-06-03 09:08:08'), +(526, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-03 09:08:09', '2020-06-03 09:08:09'), +(527, 1, 'admin/articles/254/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:08:12', '2020-06-03 09:08:12'), +(528, 1, 'admin/articles/254', 'PUT', '1.190.203.218', '{\"title\":\"\\u7b80\\u4ecb\",\"category_id\":\"1\",\"description\":null,\"content\":\"

 <\\/p>

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff08\\u5b75\\u5316\\u4e2d\\u5fc3\\uff09\\u7ec4\\u7ec7\\u7ed3\\u6784<\\/span><\\/strong><\\/h1>

\\r\\n\\t <\\/h2>

1\\u3001\\u79d1\\u7814\\u5f00\\u53d1\\u90e8\\u95e8<\\/span><\\/h1>

    \\u00b7<\\/strong><\\/span>\\u73af\\u5883\\u79d1\\u5b66\\u4e0e\\u8282\\u80fd\\u6280\\u672f\\u7814\\u7a76\\u5ba4<\\/span><\\/p>

    \\u00b7<\\/strong><\\/span>\\u80fd\\u6e90\\u5316\\u5b66\\u7814\\u7a76\\u5ba4<\\/span><\\/p>

    \\u00b7<\\/strong><\\/span>\\u6cb9\\u54c1\\u52a9\\u5242\\u7814\\u53d1\\u4e2d\\u5fc3<\\/span><\\/p>

    \\u00b7<\\/strong><\\/span>\\u63a7\\u5236\\u5b9e\\u9a8c\\u5ba4<\\/span><\\/p>

    \\u00b7<\\/strong><\\/span>\\u751f\\u7269\\u8d28\\u80fd\\u6e90\\u5b9e\\u9a8c\\u5ba4<\\/span><\\/p>

    \\u00b7<\\/strong><\\/span>\\u5bd2\\u533a\\u751f\\u7269\\u8d28\\u80fd\\u6e90\\u57fa\\u5730<\\/span><\\/p>

2\\u3001\\u884c\\u653f\\u7ba1\\u7406\\u90e8\\u95e8<\\/span><\\/h1>

    \\u00b7<\\/strong><\\/span>\\u79d1\\u7814\\u4e0e\\u4ea7\\u4e1a\\u5316\\u529e\\u516c\\u5ba4<\\/span><\\/p>

    \\u00b7<\\/strong><\\/span>\\u7efc\\u5408\\u7ba1\\u7406\\u529e\\u516c\\u5ba4<\\/span><\\/p>

    \\u00b7<\\/strong><\\/span>\\u8d22\\u52a1\\u7ba1\\u7406\\u529e\\u516c\\u5ba4<\\/span><\\/p>

3\\u3001<\\/span>\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f<\\/span><\\/h1>

    \\u00b7<\\/strong><\\/span>\\u80fd\\u6e90\\u5316\\u5b66<\\/span><\\/p>

4\\u3001\\u7701\\u91cd\\u70b9\\u5ba4\\u9a8c\\u5ba4<\\/span><\\/h1>

    \\u00b7<\\/span><\\/strong>\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4<\\/span><\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 09:08:18', '2020-06-03 09:08:18'), +(529, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-03 09:08:18', '2020-06-03 09:08:18'), +(530, 1, 'admin/articles/256/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:08:22', '2020-06-03 09:08:22'), +(531, 1, 'admin/articles/256', 'PUT', '1.190.203.218', '{\"title\":\"\\u5386\\u53f2\\u6cbf\\u9769\",\"category_id\":\"3\",\"description\":null,\"content\":\"

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6210\\u7acb\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\uff0c\\u5355\\u4f4d\\u6027\\u8d28\\u4e3a\\u516c\\u76ca\\u4e09\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u6280\\u672f\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c2006\\u5e74\\u5355\\u4f4d\\u6027\\u8d28\\u8f6c\\u53d8\\u4e3a\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\uff0c2010\\u5e74\\u96b6\\u5c5e\\u5173\\u7cfb\\u7531\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u6280\\u672f\\u5385\\u53d8\\u66f4\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c2013\\u5e743\\u6708\\u4e0e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u5b75\\u5316\\u4e2d\\u5fc3\\u5408\\u5e76\\u3002<\\/strong><\\/span><\\/h1>

 <\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 09:08:28', '2020-06-03 09:08:28'), +(532, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-03 09:08:28', '2020-06-03 09:08:28'), +(533, 1, 'admin/articles/249/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:10:37', '2020-06-03 09:10:37'); +INSERT INTO `admin_operation_log` (`id`, `user_id`, `path`, `method`, `ip`, `input`, `created_at`, `updated_at`) VALUES +(534, 1, 'admin/articles/249', 'PUT', '1.190.203.218', '{\"title\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u515a\\u59d4\\u7ec4\\u7ec7\\u5168\\u4f53\\u515a\\u5458\\u548c\\u90e8\\u5206\\u515a\\u5916\\u4eba\\u58eb\\u53c2\\u89c2\\u5317\\u5927\\u8352\\u535a\\u7269\\u9986\",\"category_id\":\"7\",\"description\":\"\\u4e3a\\u8fdb\\u4e00\\u6b65\\u6df1\\u5165\\u5f00\\u5c55\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\u3001\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\u4e3b\\u9898\\u6559\\u80b2\\u6d3b\\u52a8\\uff0c7\\u67084\\u65e5\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u515a\\u59d4\\u7ec4\\u7ec7\\u5168\\u4f53\\u515a\\u5458\\u548c\\u90e8\\u5206\\u515a\\u5916\\u4eba\\u58eb\\u53c2\\u89c2\\u5317\\u5927\\u8352\\u535a\\u7269\\u9986\\uff0c\\u5b66\\u4e60\\u8df5\\u884c\\u201c\\u8270\\u82e6\\u594b\\u6597\\u3001\\u52c7\\u4e8e\\u5f00\\u62d3\\u3001\\u987e\\u5168\",\"content\":\"

         \\u4e3a\\u8fdb\\u4e00\\u6b65\\u6df1\\u5165\\u5f00\\u5c55\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\u3001\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\u4e3b\\u9898\\u6559\\u80b2\\u6d3b\\u52a8\\uff0c7\\u67084\\u65e5\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u515a\\u59d4\\u7ec4\\u7ec7\\u5168\\u4f53\\u515a\\u5458\\u548c\\u90e8\\u5206\\u515a\\u5916\\u4eba\\u58eb\\u53c2\\u89c2\\u5317\\u5927\\u8352\\u535a\\u7269\\u9986\\uff0c\\u5b66\\u4e60\\u8df5\\u884c\\u201c\\u8270\\u82e6\\u594b\\u6597\\u3001\\u52c7\\u4e8e\\u5f00\\u62d3\\u3001\\u987e\\u5168\\u5927\\u5c40\\u3001\\u65e0\\u79c1\\u5949\\u732e\\u201d\\u7684\\u5317\\u5927\\u8352\\u7cbe\\u795e\\u3002       \\u901a\\u8fc7\\u6b64\\u6b21\\u53c2\\u89c2\\u5b66\\u4e60\\uff0c\\u5927\\u5bb6\\u90fd\\u6df1\\u523b\\u4f53\\u4f1a\\u5230\\u51e0\\u4ee3\\u5317\\u5927\\u8352\\u4eba\\u732e\\u9752\\u6625\\u3001\\u732e\\u7ec8\\u8eab\\u7684\\u65e0\\u79c1\\u4f1f\\u5927\\uff0c\\u5927\\u5bb6\\u7eb7\\u7eb7\\u8868\\u793a\\u672c\\u6b21\\u6d3b\\u52a8\\u4e0d\\u4ec5\\u662f\\u4e00\\u6b21\\u5b66\\u4e60\\u6559\\u80b2\\uff0c\\u66f4\\u662f\\u4e00\\u6b21\\u6df1\\u523b\\u7684\\u7cbe\\u795e\\u6d17\\u793c\\uff0c\\u5e94\\u94ed\\u8bb0\\u5386\\u53f2\\uff0c\\u5728\\u4eca\\u540e\\u5de5\\u4f5c\\u751f\\u6d3b\\u4e2d\\u7ee7\\u7eed\\u5f18\\u626c\\u5317\\u5927\\u8352\\u7cbe\\u795e\\uff0c\\u521d\\u5fc3\\u4e0d\\u6539\\uff0c\\u6562\\u62c5\\u5f53\\u3001\\u987e\\u5927\\u5c40\\u3001\\u4e50\\u4e8e\\u5949\\u732e\\u3001\\u594b\\u52c7\\u5411\\u524d\\uff01<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles\"}', '2020-06-03 09:10:42', '2020-06-03 09:10:42'), +(535, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-03 09:10:43', '2020-06-03 09:10:43'), +(536, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"page\":\"2\",\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:10:45', '2020-06-03 09:10:45'), +(537, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"title\":\"\\u8f66\\u7528\",\"category\":{\"id\":null}}', '2020-06-03 09:11:16', '2020-06-03 09:11:16'), +(538, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"title\":\"\\u8f66\\u7528\\u7532\\u9187\",\"category\":{\"id\":null}}', '2020-06-03 09:11:21', '2020-06-03 09:11:21'), +(539, 1, 'admin/articles/12/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:11:26', '2020-06-03 09:11:26'), +(540, 1, 'admin/articles/12', 'PUT', '1.190.203.218', '{\"title\":\"M15\\u8f66\\u7528\\u7532\\u9187\\u6c7d\\u6cb9\\u590d\\u5408\\u6dfb\\u52a0\\u5242\",\"category_id\":\"19\",\"description\":\"\\u300aM15\\u8f66\\u7528\\u7532\\u9187\\u6c7d\\u6cb9\\u590d\\u5408\\u6dfb\\u52a0\\u5242\\u300b\\u662f\\u542b\\u6709\\u8f9b\\u70f7\\u503c\\u589e\\u5f3a\\u5242\\u3001\\u52a8\\u529b\\u589e\\u5f3a\\u5242\\u3001\\u91d1\\u5c5e\\u8150\\u8680\\u6291\\u5236\\u5242\\u3001\\u6a61\\u80f6\\u6eb6\\u80c0\\u6291\\u5236\\u5242\\u3001\\u52a9\\u71c3\\u5242\\u548c\\u52a9\\u6eb6\\u5242\\u7684\\u590d\\u5408\\u6dfb\\u52a0\\u5242\\u3002\\u901a\\u8fc7\\u4e92\\u914d\\u6027\\u8bd5\\u9a8c\\u3001\\u6eb6\\u89e3\\u6027\\u8bd5\\u9a8c\\u3001\\u8f9b\\u70f7\\u503c\\u52a0\\u548c\\u6027\\u548c\",\"content\":\"

        \\u300aM15\\u8f66\\u7528\\u7532\\u9187\\u6c7d\\u6cb9\\u590d\\u5408\\u6dfb\\u52a0\\u5242\\u300b\\u662f\\u542b\\u6709\\u8f9b\\u70f7\\u503c\\u589e\\u5f3a\\u5242\\u3001\\u52a8\\u529b\\u589e\\u5f3a\\u5242\\u3001\\u91d1\\u5c5e\\u8150\\u8680\\u6291\\u5236\\u5242\\u3001\\u6a61\\u80f6\\u6eb6\\u80c0\\u6291\\u5236\\u5242\\u3001\\u52a9\\u71c3\\u5242\\u548c\\u52a9\\u6eb6\\u5242\\u7684\\u590d\\u5408\\u6dfb\\u52a0\\u5242\\u3002\\u901a\\u8fc7\\u4e92\\u914d\\u6027\\u8bd5\\u9a8c\\u3001\\u6eb6\\u89e3\\u6027\\u8bd5\\u9a8c\\u3001\\u8f9b\\u70f7\\u503c\\u52a0\\u548c\\u6027\\u548c\\u8c03\\u548c\\u6b63\\u6548\\u5e94\\u8bd5\\u9a8c\\uff0c\\u89e3\\u51b3\\u4e86\\u6dfb\\u52a0\\u5242\\u590d\\u5408\\u540e\\u4ea7\\u751f\\u7684\\u8f83\\u5927\\u4e92\\u6270\\u6027\\u53ca\\u7ecf\\u6d4e\\u6027\\u7b49\\u95ee\\u9898\\uff0c\\u6700\\u7ec8\\u5f97\\u51fa\\u6dfb\\u52a0\\u5242\\u7684\\u6700\\u4f73\\u914d\\u6bd4\\uff0c\\u5e76\\u5bf9\\u6dfb\\u52a0\\u5242\\u5404\\u9879\\u6307\\u6807\\u8fdb\\u884c\\u68c0\\u6d4b\\uff0c\\u68c0\\u6d4b\\u7ed3\\u679c\\u5747\\u7b26\\u5408\\u6807\\u51c6\\u3002\\u8be5\\u6dfb\\u52a0\\u5242\\u6709\\u6548\\u89e3\\u51b3\\u548c\\u63a7\\u5236\\u4e86M15\\u8f66\\u7528\\u7532\\u9187\\u6c7d\\u6cb9\\uff1a\\u4f4e\\u6e29\\u542f\\u52a8\\u96be\\u3001\\u9ad8\\u6e29\\u6c14\\u963b\\u5927\\u3001\\u52a8\\u529b\\u4e0d\\u8db3\\u3001\\u8150\\u8680\\u6eb6\\u80c0\\u7b49\\u95ee\\u9898\\u3002\\u4f7fM15\\u7532\\u9187\\u6c7d\\u6cb9\\u957f\\u671f\\u5904\\u4e8e\\u7a33\\u5b9a\\u72b6\\u6001\\uff0c\\u4e0d\\u6613\\u5206\\u5c42\\uff0c\\u89e3\\u51b3\\u4e86\\u6c7d\\u6cb9\\u4e0e\\u7532\\u9187\\u4e92\\u6eb6\\u6027\\u5dee\\u7684\\u95ee\\u9898\\u3002\\u5e76\\u4e14\\u53ef\\u4ee5\\u663e\\u8457\\u63d0\\u9ad8\\u6cb9\\u54c1\\u7684\\u8f9b\\u70f7\\u503c\\u548c\\u52a8\\u529b\\u6027\\u80fd\\uff0c\\u540c\\u65f6\\u4f7f\\u7528\\u8be5\\u6dfb\\u52a0\\u5242\\u8c03\\u548c\\u7684M15\\u7532\\u9187\\u6c7d\\u6cb9\\uff0c\\u4e0d\\u9700\\u6539\\u53d8\\u53d1\\u52a8\\u673a\\u7684\\u7ed3\\u6784\\u3002\\u8be5\\u6dfb\\u52a0\\u5242\\u901a\\u8fc7\\u5de5\\u4e1a\\u5e94\\u7528\\u53ca\\u6027\\u80fd\\u8003\\u6838\\uff0c\\u7ecf\\u9ed1\\u9f99\\u6c5f\\u7701\\u7cbe\\u7ec6\\u5316\\u5de5\\u4ea7\\u54c1\\u8d28\\u91cf\\u76d1\\u7763\\u68c0\\u9a8c\\u7ad9\\u68c0\\u9a8c\\u5408\\u683c\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles?&title=%E8%BD%A6%E7%94%A8%E7%94%B2%E9%86%87&category%5Bid%5D=\"}', '2020-06-03 09:11:34', '2020-06-03 09:11:34'), +(541, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u8f66\\u7528\\u7532\\u9187\",\"category\":{\"id\":null}}', '2020-06-03 09:11:34', '2020-06-03 09:11:34'), +(542, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u5de5\\u5382\\u5316\",\"category\":{\"id\":null},\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:11:51', '2020-06-03 09:11:51'), +(543, 1, 'admin/articles/9/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:11:54', '2020-06-03 09:11:54'), +(544, 1, 'admin/articles/9', 'PUT', '1.190.203.218', '{\"title\":\"\\u5de5\\u5382\\u5316\\u538c\\u6c27\\u6cbc\\u6c14\\u53d1\\u7535\\u63a7\\u5236\\u7cfb\\u7edf\\u4eff\\u771f\\u5e73\\u53f0\\u7684\\u5f00\\u53d1\\u7814\\u7a76\",\"category_id\":\"19\",\"description\":\"\\u5de5\\u5382\\u5316\\u538c\\u6c27\\u6cbc\\u6c14\\u53d1\\u7535\\u63a7\\u5236\\u7cfb\\u7edf\\u4eff\\u771f\\u5e73\\u53f0\\u4ee5\\u52a0\\u62ff\\u5927\\u963f\\u5c14\\u4f2f\\u5854\\u7814\\u7a76\\u9662\\u96c6\\u6210\\u7caa\\u4fbf\\u7efc\\u5408\\u5229\\u7528\\u7cfb\\u7edf\\uff08IMUS\\uff09\\u8bbe\\u8ba1\\u5de5\\u827a\\u4e3a\\u57fa\\u7840\\uff0c\\u9488\\u5bf9\\u5de5\\u4e1a\\u5316\\u6cbc\\u6c14\\u53d1\\u7535\\u8fc7\\u7a0b\\u4e2d\\uff0c\\u538c\\u6c27\\u53d1\\u9175\\u5de5\\u827a\\u8fc7\\u7a0b\\u81ea\\u52a8\\u63a7\\u5236\\u7684\\u590d\\u6742\\u6027\\u548c\\u591a\\u6837\",\"content\":\"

        \\u201c\\u5de5\\u5382\\u5316\\u538c\\u6c27\\u6cbc\\u6c14\\u53d1\\u7535\\u63a7\\u5236\\u7cfb\\u7edf\\u4eff\\u771f\\u5e73\\u53f0\\u201d\\u4ee5\\u52a0\\u62ff\\u5927\\u963f\\u5c14\\u4f2f\\u5854\\u7814\\u7a76\\u9662\\u201c\\u96c6\\u6210\\u7caa\\u4fbf\\u7efc\\u5408\\u5229\\u7528\\u7cfb\\u7edf\\uff08IMUS\\uff09\\u201d\\u8bbe\\u8ba1\\u5de5\\u827a\\u4e3a\\u57fa\\u7840\\uff0c\\u9488\\u5bf9\\u5de5\\u4e1a\\u5316\\u6cbc\\u6c14\\u53d1\\u7535\\u8fc7\\u7a0b\\u4e2d\\uff0c\\u538c\\u6c27\\u53d1\\u9175\\u5de5\\u827a\\u8fc7\\u7a0b\\u81ea\\u52a8\\u63a7\\u5236\\u7684\\u590d\\u6742\\u6027\\u548c\\u591a\\u6837\\u6027\\uff0c\\u5efa\\u7acb\\u4e00\\u5957\\u9002\\u7528\\u4e8e\\u5de5\\u4e1a\\u5316\\u6cbc\\u6c14\\u53d1\\u7535\\u63a7\\u5236\\u7cfb\\u7edf\\u7684\\u538c\\u6c27\\u53d1\\u9175\\u8fc7\\u7a0b\\u4eff\\u771f\\u5e73\\u53f0\\u7cfb\\u7edf\\u3002\\u901a\\u8fc7\\u4eff\\u771f\\u5e73\\u53f0\\u7cfb\\u7edf\\u53ef\\u5728\\u5b9e\\u9a8c\\u5ba4\\u5185\\u5b9e\\u73b0\\u5b9e\\u9645\\u751f\\u4ea7\\u4e2d\\u5f88\\u96be\\u83b7\\u5f97\\u7684\\u6280\\u672f\\u6570\\u636e,\\u5e76\\u5bf9\\u5f00\\u53d1\\u9879\\u76ee\\u8fdb\\u884c\\u9884\\u8bc4\\u4f30\\uff0c\\u53ef\\u7f29\\u77ed\\u9879\\u76ee\\u5f00\\u53d1\\u5468\\u671f\\u3001\\u8282\\u7ea6\\u8bd5\\u9a8c\\u548c\\u8bbe\\u8ba1\\u8d39\\u7528\\u3001\\u964d\\u4f4e\\u5f00\\u53d1\\u98ce\\u9669\\u3002<\\/span><\\/p>

        \\u5728\\u8bbe\\u8ba1\\u8fc7\\u7a0b\\u4e2d\\uff0c\\u5c06\\u9488\\u5bf9\\u751f\\u7269\\u53d1\\u9175\\u8fc7\\u7a0b\\u7684\\u65f6\\u53d8\\u6027\\u3001\\u975e\\u7ebf\\u6027\\u4ee5\\u53ca\\u63a7\\u5236\\u8fc7\\u7a0b\\u7684\\u590d\\u6742\\u6027\\uff0c\\u5e94\\u7528\\u5de5\\u5177\\u8f6f\\u4ef6\\u548c\\u6570\\u5b66\\u8ba1\\u7b97\\u65b9\\u6cd5\\u8fdb\\u884c\\u4eff\\u771f\\u5e73\\u53f0\\u7684\\u5f00\\u53d1\\uff0c\\u9879\\u76ee\\u91c7\\u7528LabVIEW\\u548cMATLAB\\u8bed\\u8a00\\u76f8\\u7ed3\\u5408\\u8fdb\\u884c\\u7cfb\\u7edf\\u8bbe\\u8ba1\\uff1b\\u4f9d\\u636e\\u751f\\u4ea7\\u8fc7\\u7a0b\\u4e0d\\u540c\\u63a7\\u5236\\u8282\\u70b9\\uff08\\u8fdb\\u51fa\\u6599\\u7684\\u60c5\\u51b5\\u3001\\u538b\\u529b\\u63a7\\u5236\\u3001\\u4ea7\\u6c14\\u7387\\u3001\\u6e29\\u5ea6\\u3001\\u5e95\\u7269\\u6d53\\u5ea6\\u3001\\u53d1\\u9175\\u53ca\\u6405\\u62cc\\u65f6\\u95f4\\u7b49\\uff09\\u7684\\u6280\\u672f\\u53c2\\u6570\\u8fdb\\u884c\\u66f2\\u7ebf\\u6a21\\u62df\\u4eff\\u771f\\uff0c\\u5e76\\u8bbe\\u8ba1\\u63a7\\u5236\\u6570\\u5b66\\u6a21\\u578b\\uff0c\\u5efa\\u7acb\\u5de5\\u5382\\u5316\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u6cbc\\u6c14\\u53d1\\u7535\\u8fc7\\u7a0b\\u63a7\\u5236\\u4eff\\u771f\\u5e73\\u53f0\\u3002\\u4eff\\u771f\\u5e73\\u53f0\\u901a\\u8fc7\\u5df2\\u77e5\\u7684\\u53c2\\u6570\\uff08\\u53d1\\u9175\\u6599\\u6db2\\u7684\\u4ea7\\u91cf\\u3001\\u73af\\u5883\\u6e29\\u5ea6\\u7684\\u53d8\\u5316\\u7b49\\uff09\\u8fdb\\u884c\\u6cbc\\u6c14\\u53d1\\u7535\\u88c5\\u7f6e\\u7684\\u53d1\\u9175\\u7f50\\u4f53\\u3001\\u53d1\\u7535\\u673a\\u7b49\\u4e3b\\u8981\\u8bbe\\u5907\\u7684\\u8bbe\\u8ba1\\u53c2\\u6570\\u8fdb\\u884c\\u9884\\u4f30\\u4eff\\u771f\\uff0c\\u4e3a\\u65b0\\u5efa\\u201c\\u5de5\\u5382\\u5316\\u538c\\u6c27\\u6cbc\\u6c14\\u53d1\\u7535\\u88c5\\u7f6e\\u201d\\u5efa\\u8bbe\\u63d0\\u4f9b\\u53c2\\u6570\\u4eff\\u771f\\u6a21\\u62df\\uff1b\\u901a\\u8fc7\\u4fee\\u6539\\u63a7\\u5236\\u8fc7\\u7a0b\\u7684\\u53c2\\u6570\\uff08\\u6e29\\u5ea6\\u3001\\u538b\\u529b\\u3001\\u5e95\\u7269\\u6d41\\u91cf\\u3001PH\\u503c\\u53d8\\u5316\\u3001\\u5e95\\u7269\\u6d53\\u5ea6\\u3001\\u53d1\\u9175\\u65f6\\u95f4\\u3001\\u6405\\u62cc\\u65f6\\u95f4\\u7b49\\uff09\\uff0c\\u5b9e\\u73b0\\u6cbc\\u6c14\\u4ea7\\u6c14\\u91cf\\u548c\\u4ea7\\u6c14\\u8d28\\u91cf\\u7684\\u53d8\\u5316\\u60c5\\u51b5\\u6a21\\u62df\\uff0c\\u63d0\\u4f9b\\u4ea7\\u6c14\\u91cf\\u53d8\\u5316\\u8fc7\\u7a0b\\u63a7\\u5236\\u4fee\\u6539\\u65b9\\u6848\\u3002<\\/span><\\/p>

        \\u8be5\\u5e73\\u53f0\\u7cfb\\u7edf\\u4e00\\u65b9\\u9762\\u5b83\\u53ef\\u4ee5\\u4f9b\\u7814\\u7a76\\u8005\\u548c\\u5efa\\u8bbe\\u8005\\u5728\\u5206\\u6790\\u548c\\u6bd4\\u8f83\\u5404\\u79cd\\u63a7\\u5236\\u7b56\\u7565\\u548c\\u8bca\\u65ad\\u65b9\\u6cd5\\u65f6\\u4f7f\\u7528\\uff1b\\u53e6\\u4e00\\u65b9\\u9762\\u53ef\\u4ee5\\u6839\\u636e\\u793a\\u8303\\u5de5\\u7a0b\\u4e2d\\u53d6\\u5f97\\u7684\\u65b0\\u6210\\u679c\\u3001\\u6570\\u636e\\u3001\\u53d1\\u73b0\\u4ee5\\u53ca\\u65b0\\u5de5\\u827a\\u4e0d\\u65ad\\u5b8c\\u5584\\u6570\\u636e\\u5e73\\u53f0\\uff0c\\u4e3a\\u5de5\\u827a\\u8bbe\\u8ba1\\u63d0\\u4f9b\\u5e2e\\u52a9\\uff0c\\u4ee5\\u9002\\u5e94\\u65b0\\u7684\\u5de5\\u4e1a\\u9700\\u6c42\\u3002<\\/span><\\/p>

        \\u8be5\\u4eff\\u771f\\u5e73\\u53f0\\u7cfb\\u7edf\\u91c7\\u7528\\u56fd\\u5916\\u5148\\u8fdb\\u7684\\u6280\\u672f\\u5de5\\u827a\\u8fdb\\u884c\\u8bbe\\u8ba1\\uff0c\\u9488\\u5bf9\\u4e8e\\u5de5\\u5382\\u5316\\u538c\\u6c27\\u6cbc\\u6c14\\u53d1\\u7535\\u88c5\\u7f6e\\u8fdb\\u884c\\u8bbe\\u8ba1\\uff0c\\u5177\\u6709\\u9ad8\\u6548\\u7684\\u70ed\\u7535\\u8054\\u7528\\u70ed\\u56de\\u6536\\u5de5\\u827a\\uff0c\\u4e0d\\u6d88\\u8017\\u65b0\\u7684\\u5316\\u77f3\\u80fd\\u6e90\\uff0c\\u5c24\\u5176\\u9002\\u5408\\u9ad8\\u5bd2\\u5730\\u533a\\u8fdb\\u884c\\uff0c\\u5de5\\u827a\\u6c34\\u5e73\\u5904\\u4e8e\\u56fd\\u9645\\u5148\\u8fdb\\u6c34\\u5e73\\uff0c\\u5f00\\u53d1\\u5b8c\\u6210\\u540e\\u5c06\\u5bf9\\u56fd\\u5185\\u7684\\u5de5\\u5382\\u5316\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\u5efa\\u8bae\\u63d0\\u4f9b\\u501f\\u9274\\u4f9d\\u636e\\u3002\\u63a7\\u5236\\u7cfb\\u7edf\\u5728\\u751f\\u4ea7\\u8fc7\\u7a0b\\u4e2d\\uff0c\\u4e0d\\u4ea7\\u751f\\u4e8c\\u6b21\\u6c61\\u67d3\\uff0c\\u8fdb\\u51fa\\u6599\\u8fde\\u7eed\\u5316\\uff0c\\u63a7\\u5236\\u5355\\u5143\\u6a21\\u5757\\u5316\\uff0c\\u91c7\\u7528\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u5de5\\u827a\\uff0c\\u4ea7\\u6c14\\u7387\\u9ad8\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles?&title=%E5%B7%A5%E5%8E%82%E5%8C%96&category%5Bid%5D=\"}', '2020-06-03 09:12:06', '2020-06-03 09:12:06'), +(545, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u5de5\\u5382\\u5316\",\"category\":{\"id\":null}}', '2020-06-03 09:12:06', '2020-06-03 09:12:06'), +(546, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u6280\\u672f\\u7279\\u70b9\",\"category\":{\"id\":null},\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:12:19', '2020-06-03 09:12:19'), +(547, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"title\":\"\\u50ac\\u5316\\u5242\",\"category\":{\"id\":null}}', '2020-06-03 09:12:28', '2020-06-03 09:12:28'), +(548, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:12:31', '2020-06-03 09:12:31'), +(549, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"title\":\"\\u50ac\\u5316\\u5242\",\"category\":{\"id\":null}}', '2020-06-03 09:12:36', '2020-06-03 09:12:36'), +(550, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"title\":\"\\u90e8\\u5206\\u79d1\\u6280\\u6210\\u679c\\u6c47\\u7f16\\u76ee\\u5f55\",\"category\":{\"id\":null}}', '2020-06-03 09:12:47', '2020-06-03 09:12:47'), +(551, 1, 'admin/articles/147/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:12:49', '2020-06-03 09:12:49'); +INSERT INTO `admin_operation_log` (`id`, `user_id`, `path`, `method`, `ip`, `input`, `created_at`, `updated_at`) VALUES +(552, 1, 'admin/articles/147', 'PUT', '1.190.203.218', '{\"title\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662<\\/br>\\u90e8\\u5206\\u79d1\\u6280\\u6210\\u679c\\u6c47\\u7f16\\u76ee\\u5f55\\uff082008-2015\\uff09\",\"category_id\":\"19\",\"description\":\"\\u5e8f\\u53f7 \\u6210\\u679c\\u540d\\u79f0 \\u9274\\u5b9a\\u65f6\\u95f4 1 \\u6cb9\\u9875\\u5ca9\\u4f4e\\u6e29\\u70ed\\u89e3\\u6761\\u4ef6\\u5bf9\\u9875\\u5ca9\\u6cb9\\u6027\\u8d28\\u7684\\u5f71\\u54cd\\u7814\\u7a76 2015 2 \\u7164\\u4e0e\\u5e9f\\u5f03\\u6709\\u673a\\u5236\\u54c1\\u5171\\u7126\\u5316\\u6280\\u672f\\u5f00\\u53d1\\u4e0e\\u5e94\\u7528 2015 3 M25\\u8f66\\u7528\\u7532\\u9187\\u6c7d\\u6cb9\\u5e94\\u7528\\u6280\\u672f\\u7814\\u7a76 2015 4 \\u5bd2\\u533a\\u519c\\u4e1a\\u56fa\\u4f53\\u5e9f\\u5f03\\u7269\\u9ad8\",\"content\":\"<\\/colgroup>
\\u5e8f\\u53f7<\\/span><\\/td>\\u6210\\u679c\\u540d\\u79f0<\\/span><\\/td>\\u9274\\u5b9a\\u65f6\\u95f4<\\/span><\\/td><\\/tr>
1<\\/span><\\/td>\\u6cb9\\u9875\\u5ca9\\u4f4e\\u6e29\\u70ed\\u89e3\\u6761\\u4ef6\\u5bf9\\u9875\\u5ca9\\u6cb9\\u6027\\u8d28\\u7684\\u5f71\\u54cd\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
2<\\/span><\\/td>\\u7164\\u4e0e\\u5e9f\\u5f03\\u6709\\u673a\\u5236\\u54c1\\u5171\\u7126\\u5316\\u6280\\u672f\\u5f00\\u53d1\\u4e0e\\u5e94\\u7528<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
3<\\/span><\\/td>M25\\u8f66\\u7528\\u7532\\u9187\\u6c7d\\u6cb9\\u5e94\\u7528\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
4<\\/span><\\/td>\\u5bd2\\u533a\\u519c\\u4e1a\\u56fa\\u4f53\\u5e9f\\u5f03\\u7269\\u9ad8\\u503c\\u5316\\u5229\\u7528\\u5173\\u952e\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
5<\\/span><\\/td>\\u91cd\\u8d28\\u6cb9\\u4e73\\u5316\\u5242\\u53ca\\u4e73\\u5316\\u65b9\\u5f0f\\u7684\\u4f18\\u5316\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
6<\\/span><\\/td>\\u4e73\\u5316\\u67f4\\u6cb9\\u63d0\\u9ad8\\u71c3\\u70e7\\u6548\\u7387\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
7<\\/span><\\/td>\\u4e00\\u79cd\\u4eb2\\u6c34\\u6027\\u65e0\\u7eba\\u5e03\\u7684\\u5236\\u5907\\u65b9\\u6cd5\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
8<\\/span><\\/td>\\u6c34\\u5305\\u6cb9\\u578b\\u4e73\\u5316\\u91cd\\u6cb9\\u7684\\u7a33\\u5b9a\\u6027\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
9<\\/span><\\/td>\\u592a\\u9633\\u80fd\\u7b49\\u6e05\\u6d01\\u80fd\\u6e90\\u66ff\\u4ee3\\u5c0f\\u578b\\u71c3\\u7164\\u9505\\u7089\\u5efa\\u7b51\\u91c7\\u6696\\u7684\\u5173\\u952e\\u6280\\u672f\\u7814\\u7a76\\u53ca\\u793a\\u8303<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
10<\\/span><\\/td>\\u592a\\u9633\\u80fd\\u7a7a\\u6c14\\u91c7\\u6696\\u667a\\u80fd\\u63a7\\u5236\\u88c5\\u7f6e\\u7684\\u5e94\\u7528\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
11<\\/span><\\/td>\\u57fa\\u4e8e\\u201c\\u4e00\\u6751\\u4e00\\u5382\\u201d\\u751f\\u7269\\u8d28\\u52a0\\u5de5\\u548c\\u6e05\\u6d01\\u5229\\u7528\\u7684\\u5bd2\\u533a\\u201c\\u65e0\\u7164\\u751f\\u6001\\u6751\\u201d\\u5e94\\u7528\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
12<\\/span><\\/td>\\u4e2d\\u8bd5\\u6cbc\\u6c14\\u53d1\\u9175\\u7cfb\\u7edf\\u8282\\u80fd\\u63a7\\u5236\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
13<\\/span><\\/td>\\u57fa\\u4e8eZigBee\\u548cWLAN\\u6280\\u672f\\u7684\\u4e2d\\u8bd5\\u6cbc\\u6c14\\u53d1\\u9175\\u76d1\\u6d4b\\u7cfb\\u7edf<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
14<\\/span><\\/td>\\u6cbc\\u6db2\\u56de\\u6d41\\u55b7\\u6dcb\\u5bf9\\u79f8\\u79c6\\u6cbc\\u6c14\\u4ea7\\u91cf\\u7684\\u5f71\\u54cd\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
15<\\/span><\\/td>\\u9178\\u9884\\u5904\\u7406\\u7389\\u7c73\\u79f8\\u79c6\\u4e0e\\u5976\\u725b\\u7caa\\u4fbf\\u6df7\\u5408\\u538c\\u6c27\\u6d88\\u5316\\u5de5\\u827a\\u4f18\\u5316\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
16<\\/span><\\/td>\\u4e09\\u5854\\u53d8\\u538b\\u5438\\u9644\\u6cbc\\u6c14\\u63d0\\u7eaf\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
17<\\/span><\\/td>\\u6cbc\\u6db2\\u8d85\\u6ee4\\u819c\\u5206\\u79bb\\u6d53\\u7f29\\u65b9\\u6cd5\\u4f18\\u5316\\u53ca\\u819c\\u518d\\u751f\\u673a\\u7406\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
18<\\/span><\\/td>\\u6db2\\u76f8\\u8272\\u8c31\\u6cd5\\u5206\\u6790\\u9e21\\u7caa\\u4e2d\\u6b8b\\u7559\\u56db\\u73af\\u7d20\\u7c7b\\u6297\\u751f\\u7d20\\u7684\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
19<\\/span><\\/td>\\u8c03\\u548c\\u56fd\\u2164\\u6807\\u51c6\\u8f66\\u7528\\u6c7d\\u6cb9\\u7684\\u6297\\u7206\\u5242\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
20<\\/span><\\/td>\\u592a\\u9633\\u80fd\\u7a7a\\u6c14\\u91c7\\u6696\\u7cfb\\u7edf\\u7684\\u4f18\\u5316\\u63a7\\u5236\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
21<\\/span><\\/td>\\u9875\\u5ca9\\u6cb9\\u52a0\\u6c22\\u7cbe\\u5236-\\u5ef6\\u8fdf\\u7126\\u5316\\u7ec4\\u5408\\u5de5\\u827a\\u7684\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
22<\\/span><\\/td>\\u6cbc\\u6c14\\u5de5\\u7a0b\\u8fdb\\u6599\\u56fa\\u542b\\u91cf\\u5728\\u7ebf\\u76d1\\u6d4b\\u65b9\\u6cd5\\u7684\\u7814\\u7a76<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
23<\\/span><\\/td>\\u8f7b\\u8d28\\u6728\\u7126\\u6cb9\\u52a0\\u6c22\\u63d0\\u8d28\\u8f6c\\u5316\\u8fd0\\u8f93\\u71c3\\u6599\\u6cb9\\u8c03\\u548c\\u7ec4\\u5206\\u7684\\u5de5\\u827a\\u7814\\u7a76<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
24<\\/span><\\/td>\\u5bd2\\u5730\\u6cbc\\u6c14\\u53d1\\u7535\\u673a\\u4f59\\u70ed\\u56de\\u6536\\u4eff\\u771f\\u4f18\\u5316\\u7814\\u7a76<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
25<\\/span><\\/td>\\u79f8\\u79c6\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fc7\\u7a0b\\u5173\\u952e\\u6280\\u672f\\u53c2\\u6570\\u7814\\u7a76<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
26<\\/span><\\/td>\\u6cbc\\u6db2\\u9ad8\\u6548\\u56de\\u7528\\u53ca\\u7efc\\u5408\\u5904\\u7406\\u5de5\\u827a\\u7814\\u7a76<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
27<\\/span><\\/td>\\u6cbc\\u6db2\\u56de\\u6d41\\u5bf9\\u725b\\u7caa\\u538c\\u6c27\\u53d1\\u9175\\u6cbc\\u6c14\\u4ea7\\u91cf\\u7684\\u5f71\\u54cd\\u53ca\\u673a\\u7406\\u7814\\u7a76<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
28<\\/span><\\/td>\\u538c\\u6c27\\u53d1\\u9175\\u53cd\\u5e94\\u5668\\u6e29\\u5ea6\\u76d1\\u63a7\\u53ca\\u8865\\u507f\\u7cfb\\u7edf\\u7684\\u7814\\u7a76<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
29<\\/span><\\/td>\\u590d\\u5408\\u8c03\\u8282\\u5242\\uff08\\u6da6\\u6ed1\\u6027\\u80fd\\uff09\\u4e2d\\u8bd5\\u7814\\u7a76<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
30<\\/span><\\/td>\\u5229\\u7528\\u70bc\\u538290#\\u6c7d\\u6cb9\\u751f\\u4ea7\\u56fd\\u2163\\u6807\\u51c693#\\u6c7d\\u6cb9\\u7684\\u590d\\u5408\\u6dfb\\u52a0\\u5242\\u5e94\\u7528<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
31<\\/span><\\/td>\\u4ea7\\u6cb9\\u5fae\\u85fb\\u7684\\u4e00\\u4f53\\u5f0f\\u57f9\\u517b\\u53ca\\u67f4\\u6cb9\\u63d0\\u53d6\\u7684\\u7814\\u7a76<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
32<\\/span><\\/td>\\u4ece\\u5e9f\\u6e90\\u57f9\\u517b\\u7684\\u4ea7\\u6cb9\\u5fae\\u85fb\\u4e2d\\u63d0\\u53d6\\u751f\\u7269\\u67f4\\u6cb9\\u7684\\u7814\\u7a76<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
33<\\/span><\\/td>\\u7532\\u9187\\u4e73\\u5316\\u67f4\\u6cb9\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
34<\\/span><\\/td>\\u5229\\u7528\\u9875\\u5ca9\\u6cb9\\u5236\\u53d6\\u6cb9\\u7802\\u5206\\u79bb\\u5242\\u7684\\u7814\\u7a76<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
35<\\/span><\\/td>\\u5168\\u998f\\u5206\\u9875\\u5ca9\\u6cb9\\u6539\\u8d28\\u8f6c\\u5316\\u8f7b\\u8d28\\u8fd0\\u8f93\\u71c3\\u6599\\u5de5\\u827a\\u7684\\u7814\\u7a76<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
36<\\/span><\\/td>\\u819c\\u751f\\u7269\\u53cd\\u5e94\\u5668\\u4e2d\\u6539\\u6027\\u590d\\u5408\\u819c\\u7684\\u5236\\u5907\\u4e0e\\u6027\\u80fd\\u7814\\u7a76<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
37<\\/span><\\/td>\\u8f66\\u7528\\u6c7d\\u6cb9\\u590d\\u5408\\u8c03\\u8282\\u5242\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
38<\\/span><\\/td>\\u6cb9\\u9875\\u5ca9\\u4e2d\\u6709\\u673a\\u8d28\\u7684\\u5206\\u79bb\\u548c\\u5206\\u6790<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
39<\\/span><\\/td>\\u53d1\\u9175\\u539f\\u6599\\u6c34\\u89e3\\u7387\\u5bf9\\u63d0\\u9ad8CSTR\\u53cd\\u5e94\\u5668\\u4ea7\\u6c14\\u7387\\u7684\\u673a\\u7406\\u7814\\u7a76<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
40<\\/span><\\/td>\\u5bd2\\u533a\\u725b\\u7caa\\u4e24\\u7ea7\\u538c\\u6c27\\u9ad8\\u6548\\u53d1\\u9175\\u5de5\\u827a\\u7814\\u7a76<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
41<\\/span><\\/td>\\u4e0d\\u540c\\u6405\\u62cc\\u65b9\\u5f0f\\u5bf9\\u53cd\\u5e94\\u5668\\u4e0a\\u5c42\\u6d6e\\u6e23\\u5f71\\u54cd\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u4ea7\\u6c14\\u7387\\u7684\\u7814\\u7a76<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
42<\\/span><\\/td>\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fc7\\u7a0b\\u4e2d\\u6cbc\\u6c14\\u51c0\\u5316\\u7cfb\\u7edf\\u7684\\u7814\\u7a76<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
43<\\/span><\\/td>\\u57fa\\u4e8e\\u6df7\\u5408\\u6a21\\u578b\\u7684\\u725b\\u7caa\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fc7\\u7a0b\\u53c2\\u91cf\\u76d1\\u6d4b<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
44<\\/span><\\/td>\\u73af\\u6c27\\u6811\\u8102\\u56fa\\u5316\\u7a0b\\u5ea6\\u5728\\u7ebf\\u76d1\\u6d4b\\u7cfb\\u7edf<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
45<\\/span><\\/td>\\u6cbc\\u6c14\\u5de5\\u7a0b\\u65e0\\u7ebf\\u7f51\\u7edc\\u5316\\u7cfb\\u7edf\\u63a7\\u5236\\u4e0e\\u65b9\\u6cd5\\u8bbe\\u8ba1<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
46<\\/span><\\/td>\\u5de5\\u4e1a\\u5316\\u5c01\\u95ed\\u73af\\u5f0f\\u6cbc\\u6c14\\u3001\\u53d1\\u7535\\u7cfb\\u7edf<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
47<\\/span><\\/td>\\u96c6\\u6210\\u725b\\u7caa\\u4fbf\\u7efc\\u5408\\u5229\\u7528\\u7cfb\\u7edf\\uff08IMUS\\uff09\\u793a\\u8303\\u5de5\\u7a0b<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
48<\\/span><\\/td>\\u751f\\u7269\\u8d28\\u8d44\\u6e90\\u7efc\\u5408\\u5229\\u7528\\u7684\\u7814\\u7a76<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
49<\\/span><\\/td>\\u538c\\u6c27\\u6d88\\u5316\\u8fc7\\u7a0b\\u4e2d\\u53d1\\u9175\\u539f\\u6599\\u7684\\u4e0d\\u540c\\u6ede\\u7559\\u65f6\\u95f4\\u5bf9\\u53d1\\u9175\\u8fc7\\u7a0b\\u7684\\u5f71\\u54cd\\u7814\\u7a76<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
50<\\/span><\\/td>\\u538c\\u6c27\\u53d1\\u9175\\u5de5\\u827a\\u8fc7\\u7a0b\\u4eff\\u771f\\u7cfb\\u7edf\\u7684\\u7814\\u5236<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
51<\\/span><\\/td>\\u725b\\u7caa\\u78b1\\u6cd5\\u4e0e\\u751f\\u7269\\u6cd5\\u8054\\u5408\\u9884\\u5904\\u7406\\u65b9\\u6cd5\\u53ca\\u673a\\u7406\\u7814\\u7a76<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
52<\\/span><\\/td>\\u7269\\u7406\\u53c2\\u6570\\u5bf9\\u63d0\\u9ad8\\u725b\\u7caa\\u9ad8\\u6e29\\u538c\\u6c27\\u6027\\u80fd\\u5f71\\u54cd\\u673a\\u7406\\u7684\\u7814\\u7a76<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
53<\\/span><\\/td>\\u63a5\\u79cd\\u7269\\u5bf9\\u725b\\u7caa\\u9ad8\\u6e29\\u538c\\u6c27\\u6d88\\u5316\\u8fc7\\u7a0b\\u7684\\u5f71\\u54cd\\u673a\\u7406\\u7814\\u7a76<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
54<\\/span><\\/td>\\u5927\\u63ba\\u91cf\\u7532\\u9187\\u6c7d\\u6cb9\\u50ac\\u5316\\u71c3\\u70e7\\u6280\\u672f<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
55<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u7701\\u6cb9\\u9875\\u5ca9\\u5206\\u5e03\\u53ca\\u542b\\u6cb9\\u7387\\u5206\\u6790\\u7814\\u7a76<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
56<\\/span><\\/td>\\u5168\\u998f\\u5206\\u9875\\u5ca9\\u6cb9\\u6539\\u8d28\\u8f6c\\u5316\\u8f7b\\u8d28\\u8fd0\\u8f93\\u71c3\\u6599\\u5de5\\u827a\\u7684\\u7814\\u7a76<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
57<\\/span><\\/td>M15\\u8f66\\u7528\\u7532\\u9187\\u6c7d\\u6cb9\\u590d\\u5408\\u6dfb\\u52a0\\u5242<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
58<\\/span><\\/td>\\u52a0\\u62ff\\u5927\\u76f4\\u8d2e\\u70ed\\u592a\\u9633\\u80fd\\u6280\\u672f<\\/span><\\/td>2011<\\/span><\\/td><\\/tr>
59<\\/span><\\/td>\\u03b3-\\u5c04\\u7ebf\\u8f90\\u7167\\u5bf9\\u725b\\u7caa\\u538c\\u6c27\\u6d88\\u5316\\u8fc7\\u7a0b\\u5f71\\u54cd\\u7684\\u7814\\u7a76<\\/span><\\/td>2011<\\/span><\\/td><\\/tr>
60<\\/span><\\/td>\\u725b\\u7caa\\u9ad8\\u6e29\\u538c\\u6c27\\u6d88\\u5316\\u52a8\\u529b\\u5b66\\u7814\\u7a76<\\/span><\\/td>2011<\\/span><\\/td><\\/tr>
61<\\/span><\\/td>\\u5976\\u725b\\u573a\\u7caa\\u6c61\\u6c34\\u7efc\\u5408\\u5904\\u7406\\u5de5\\u827a\\u7814\\u7a76<\\/span><\\/td>2011<\\/span><\\/td><\\/tr>
62<\\/span><\\/td>\\u76f4\\u8d2e\\u70ed\\u592a\\u9633\\u80fd\\u6280\\u672f\\uff08DHS\\uff09\\u793a\\u8303\\u6e29\\u5ba4<\\/span><\\/td>2011<\\/span><\\/td><\\/tr>
63<\\/span><\\/td>M20\\u7532\\u9187\\u6c7d\\u6cb9\\u5de5\\u4e1a\\u5e94\\u7528\\u53ca\\u6027\\u80fd\\u8003\\u6838<\\/span><\\/td>2011<\\/span><\\/td><\\/tr>
64<\\/span><\\/td>\\u5de5\\u4e1a\\u71c3\\u7164\\u9505\\u7089\\u70df\\u6c14\\u51c0\\u5316\\u6280\\u672f<\\/span><\\/td>2011<\\/span><\\/td><\\/tr>
65<\\/span><\\/td>\\u8910\\u7164\\u4f4e\\u6e29\\u50ac\\u5316\\u5236\\u6cb9\\u6c14\\u7814\\u7a76<\\/span><\\/td>2011<\\/span><\\/td><\\/tr>
66<\\/span><\\/td>\\u71c3\\u7164\\u9505\\u7089\\u50ac\\u5316\\u8131\\u786b\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>2011<\\/span><\\/td><\\/tr>
67<\\/span><\\/td>\\u70df\\u6c14\\u4e2d\\u4e8c\\u6c27\\u5316\\u786b\\u50ac\\u5316\\u56fa\\u786b\\u6027\\u80fd\\u7814\\u7a76<\\/span><\\/td>2011<\\/span><\\/td><\\/tr>
68<\\/span><\\/td>\\u6cb9\\u6c14\\u5206\\u79bb\\u7cfb\\u7edf\\u7684\\u7814\\u7a76\\u79d1\\u6280\\u6210\\u679c<\\/span><\\/td>2011<\\/span><\\/td><\\/tr>
69<\\/span><\\/td>\\u4e2d\\u56fd\\u52a0\\u62ff\\u5927\\u6cb9\\u7802\\u70bc\\u5236\\u6280\\u672f\\u5408\\u4f5c\\u7814\\u7a76<\\/span><\\/td>2011<\\/span><\\/td><\\/tr>
70<\\/span><\\/td>\\u725b\\u7caa\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u673a\\u7406\\u7814\\u7a76<\\/span><\\/td>2009<\\/span><\\/td><\\/tr>
71<\\/span><\\/td>\\u6cbc\\u6c14\\u751f\\u7269\\u8131\\u786b\\u673a\\u7406\\u7814\\u7a76<\\/span><\\/td>2009<\\/span><\\/td><\\/tr>
72<\\/span><\\/td>\\u725b\\u7caa\\u538c\\u6c27\\u53d1\\u9175\\u5de5\\u827a\\u5173\\u952e\\u6280\\u672f\\u53c2\\u6570\\u7814\\u7a76<\\/span><\\/td>2009<\\/span><\\/td><\\/tr>
73<\\/span><\\/td>\\u6cbc\\u6c14\\u8131\\u786b\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>2009<\\/span><\\/td><\\/tr>
74<\\/span><\\/td>\\u9ad8\\u5bd2\\u5730\\u533a\\u725b\\u7caa\\u9ad8\\u6e29\\u53d1\\u9175\\u5de5\\u827a\\u7814\\u7a76<\\/span><\\/td>2009<\\/span><\\/td><\\/tr>
75<\\/span><\\/td>\\u4ee5\\u6cbc\\u6c14\\u4e3a\\u7ebd\\u5e26\\u7684\\u751f\\u6001\\u519c\\u573a\\u6a21\\u5f0f\\u53ca\\u7ecf\\u6d4e\\u8bc4\\u4ef7\\u4f53\\u7cfb<\\/span><\\/td>2008<\\/span><\\/td><\\/tr>
76<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u7701\\u7701\\u5c5e\\u79d1\\u7814\\u673a\\u6784\\u79d1\\u6280\\u5b75\\u5316\\u5668\\u5efa\\u8bbe<\\/span><\\/td>2008<\\/span><\\/td><\\/tr>
77<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\u9662\\u5c5e\\u79d1\\u7814\\u673a\\u6784\\u79d1\\u6280\\u5b75\\u5316\\u5668\\u5efa\\u8bbe\\u7684\\u7814\\u7a76<\\/span><\\/td>2008<\\/span><\\/td><\\/tr><\\/tbody><\\/table>

<\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles?&title=%E9%83%A8%E5%88%86%E7%A7%91%E6%8A%80%E6%88%90%E6%9E%9C%E6%B1%87%E7%BC%96%E7%9B%AE%E5%BD%95&category%5Bid%5D=\"}', '2020-06-03 09:12:57', '2020-06-03 09:12:57'), +(553, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u90e8\\u5206\\u79d1\\u6280\\u6210\\u679c\\u6c47\\u7f16\\u76ee\\u5f55\",\"category\":{\"id\":null}}', '2020-06-03 09:12:57', '2020-06-03 09:12:57'), +(554, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u5927\\u63ba\\u91cf\\u7532\\u9187\\u6c7d\\u6cb9\\u50ac\\u5316\\u71c3\\u70e7\\u6280\\u672f\",\"category\":{\"id\":null},\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:13:33', '2020-06-03 09:13:33'), +(555, 1, 'admin/articles/13/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:13:35', '2020-06-03 09:13:35'), +(556, 1, 'admin/articles/13', 'PUT', '1.190.203.218', '{\"title\":\"\\u5927\\u63ba\\u91cf\\u7532\\u9187\\u6c7d\\u6cb9\\u50ac\\u5316\\u71c3\\u70e7\\u6280\\u672f\",\"category_id\":\"19\",\"description\":\"\\u6280\\u672f\\u7279\\u70b9: \\u50ac\\u5316\\u5242\\u5305\\u62ec\\u80fd\\u91cf\\u53ca\\u8f9b\\u70f7\\u503c\\u589e\\u5f3a\\u7ec4\\u4efd\\uff0c\\u81ea\\u6eb6\\u5408\\u7ec4\\u4efd\\u3001\\u5c3e\\u6c14\\u51c0\\u5316\\u7ec4\\u4efd\\u7b49\\u3002 M45\\u7532\\u9187\\u6c7d\\u6cb9\\u5408\\u6210\\u5de5\\u827a\\u7814\\u7a76\\uff0c\\u91c7\\u7528\\u5316\\u5b66\\u81ea\\u6eb6\\u5408\\u6280\\u672f\\uff0c\\u7532\\u9187\\u3001\\u50ac\\u5316\\u5242\\u3001\\u6c7d\\u6cb9\\u4e09\\u79cd\\u7269\\u8d28\\u4e0d\\u9700\\u8981\\u6405\\u62cc\\uff0c\\u5373\\u53ef\\u76f8\\u4e92\\u6eb6\",\"content\":\"

\\u6280\\u672f\\u7279\\u70b9:<\\/span><\\/p>

1\\u3001\\u50ac\\u5316\\u5242\\u5305\\u62ec\\u80fd\\u91cf\\u53ca\\u8f9b\\u70f7\\u503c\\u589e\\u5f3a\\u7ec4\\u4efd\\uff0c\\u81ea\\u6eb6\\u5408\\u7ec4\\u4efd\\u3001\\u5c3e\\u6c14\\u51c0\\u5316\\u7ec4\\u4efd\\u7b49\\u3002<\\/span><\\/p>

2\\u3001M45\\u7532\\u9187\\u6c7d\\u6cb9\\u5408\\u6210\\u5de5\\u827a\\u7814\\u7a76\\uff0c\\u91c7\\u7528\\u5316\\u5b66\\u81ea\\u6eb6\\u5408\\u6280\\u672f\\uff0c\\u7532\\u9187\\u3001\\u50ac\\u5316\\u5242\\u3001\\u6c7d\\u6cb9\\u4e09\\u79cd\\u7269\\u8d28\\u4e0d\\u9700\\u8981\\u6405\\u62cc\\uff0c\\u5373\\u53ef\\u76f8\\u4e92\\u6eb6\\u5408\\uff0c\\u589e\\u52a0\\u71c3\\u6599\\u7684\\u7a33\\u5b9a\\u6027\\u3002<\\/span>\\u4e0e\\u7eaf\\u6c7d\\u6cb9\\u53ca\\u4e59\\u9187\\u6c7d\\u6cb9\\u4e92\\u6eb6\\u6027\\u4f18\\u826f\\u3002<\\/span><\\/p>

3\\u3001\\u4e0d\\u6539\\u52a8\\u53d1\\u52a8\\u673a\\u4f9b\\u6cb9\\u7cfb\\u7edf\\uff0c\\u53d1\\u52a8\\u673a\\u6b63\\u5e38\\u8fd0\\u884c\\u3002<\\/span><\\/p>

4\\u3001\\u9ad8\\u3001\\u4f4e\\u6e29\\u542f\\u52a8\\u6b63\\u5e38,\\u65e0\\u4f4e\\u6e29\\u542f\\u52a8\\u56f0\\u96be,\\u9ad8\\u6e29\\u6c14\\u963b\\u73b0\\u8c61\\u3002<\\/span><\\/p>

5\\u3001\\u53d1\\u52a8\\u673a\\u52a8\\u529b\\u6027\\u80fd\\u4e0e\\u4f7f\\u752893#\\u6c7d\\u6cb9\\u76f8\\u5f53\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles?&title=%E5%A4%A7%E6%8E%BA%E9%87%8F%E7%94%B2%E9%86%87%E6%B1%BD%E6%B2%B9%E5%82%AC%E5%8C%96%E7%87%83%E7%83%A7%E6%8A%80%E6%9C%AF&category%5Bid%5D=\"}', '2020-06-03 09:13:41', '2020-06-03 09:13:41'), +(557, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u5927\\u63ba\\u91cf\\u7532\\u9187\\u6c7d\\u6cb9\\u50ac\\u5316\\u71c3\\u70e7\\u6280\\u672f\",\"category\":{\"id\":null}}', '2020-06-03 09:13:41', '2020-06-03 09:13:41'), +(558, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662 \\u8bba\\u6587\\u76ee\\u5f55\",\"category\":{\"id\":null},\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:14:04', '2020-06-03 09:14:04'), +(559, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"title\":\"2012-2015\",\"category\":{\"id\":null}}', '2020-06-03 09:14:12', '2020-06-03 09:14:12'), +(560, 1, 'admin/articles/149/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:14:14', '2020-06-03 09:14:14'); +INSERT INTO `admin_operation_log` (`id`, `user_id`, `path`, `method`, `ip`, `input`, `created_at`, `updated_at`) VALUES +(561, 1, 'admin/articles/149', 'PUT', '1.190.203.218', '{\"title\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662<\\/br>\\u8bba\\u6587\\u76ee\\u5f55\\uff082012-2015\\uff09\",\"category_id\":\"21\",\"description\":\"\\u5e8f\\u53f7 \\u6587\\u7ae0\\u540d\\u79f0 \\u7c7b\\u522b \\u671f\\u520a\\u540d \\u4f5c\\u8005 \\u53d1\\u8868\\u65f6\\u95f4 1 \\u6cbc\\u6c14\\u8131\\u78b3\\u63d0\\u7eaf\\u6280\\u672f\\u7814\\u7a76\\u8fdb\\u5c55 \\u4e00\\u822c \\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66 \\u6f58\\u826f;\\u5f90\\u6653\\u79cb;\\u9ad8\\u5fb7\\u7389;\\u738b\\u6b23;\\u5218\\u4f1f; 2015 2 \\u4f9d\\u5170\\u6cb9\\u9875\\u5ca9\\u9010\\u7ea7\\u6c27\\u5316\\/\\u8403\\u53d6\\u53ca\\u5176\\u4ea7\\u7269\\u7684\\u7ea2\\u5916\\u5206\\u6790 \\u4e00\\u822c \\u9ed1\\u9f99\",\"content\":\"<\\/colgroup>
\\u5e8f\\u53f7<\\/span><\\/td>\\u6587\\u7ae0\\u540d\\u79f0<\\/span><\\/td>\\u7c7b\\u522b<\\/span><\\/td>\\u671f\\u520a\\u540d<\\/span><\\/td>\\u4f5c\\u8005<\\/span><\\/td>\\u53d1\\u8868\\u65f6\\u95f4<\\/span><\\/td><\\/tr>
1<\\/span><\\/td>\\u6cbc\\u6c14\\u8131\\u78b3\\u63d0\\u7eaf\\u6280\\u672f\\u7814\\u7a76\\u8fdb\\u5c55<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u6f58\\u826f;\\u5f90\\u6653\\u79cb;\\u9ad8\\u5fb7\\u7389;\\u738b\\u6b23;\\u5218\\u4f1f;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
2<\\/span><\\/td>\\u4f9d\\u5170\\u6cb9\\u9875\\u5ca9\\u9010\\u7ea7\\u6c27\\u5316\\/\\u8403\\u53d6\\u53ca\\u5176\\u4ea7\\u7269\\u7684\\u7ea2\\u5916\\u5206\\u6790<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u6280\\u5927\\u5b66\\u5b66\\u62a5<\\/span><\\/td>\\u5434\\u9e4f;\\u5f20\\u661f\\u5b87;\\u5468\\u626c;\\u89e3\\u4e3d\\u840d;\\u6731\\u79c0\\u680b;\\u5b8b\\u5fae\\u5a1c;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
3<\\/span><\\/td>\\u5fae\\u7c73\\u7a00\\u571f\\u7c89\\u4f53\\u8868\\u9762\\u6539\\u6027\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5510\\u8bd7\\u6d0b;\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u674e\\u5065;\\u9648\\u5e86\\u6d77;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
4<\\/span><\\/td>\\u5bd2\\u5730\\u300aM25\\u8f66\\u7528\\u7164\\u57fa\\u7532\\u9187\\u6c7d\\u6cb9\\u300b\\u4f01\\u4e1a\\u6807\\u51c6<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u5316\\u5de5\\u7ba1\\u7406<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5510\\u8bd7\\u6d0b;\\u5218\\u5ca9;\\u5218\\u7ef4;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
5<\\/span><\\/td>\\u5bd2\\u5730M25\\u8f66\\u7528(\\u7164\\u57fa)\\u7532\\u9187\\u6c7d\\u6cb9\\u6027\\u80fd\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5510\\u8bd7\\u6d0b;\\u5218\\u5ca9;\\u674e\\u5065;\\u9648\\u5e86\\u6d77;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
6<\\/span><\\/td>\\u9875\\u5ca9\\u6cb9\\u6df1\\u52a0\\u5de5\\u4ea7\\u4e1a\\u53d1\\u5c55\\u8bc4\\u8ff0<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u9648\\u677e;\\u5468\\u626c;\\u738b\\u6653\\u680b;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
7<\\/span><\\/td>\\u6c34\\u5305\\u6cb9\\u578b\\u4e73\\u5316\\u91cd\\u6cb9\\u7684\\u5236\\u5907\\u6761\\u4ef6\\u53ca\\u7a33\\u5b9a\\u6027\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5f20\\u73a5;\\u5f20\\u5b87;\\u9a6c\\u5b81;\\u738b\\u5fd7\\u6210;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
8<\\/span><\\/td>\\u57fa\\u4e8eZigBee\\u548cWLAN\\u6280\\u672f\\u7684\\u538c\\u6c27\\u53d1\\u9175\\u4e2d\\u8bd5\\u76d1\\u63a7\\u7cfb\\u7edf<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u79e6\\u56fd\\u8f89;\\u738b\\u94a2;\\u738b\\u7389\\u9e4f;\\u5468\\u95ef;\\u7f57\\u5411\\u4e1c;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
9<\\/span><\\/td>\\u6cb9\\u9875\\u5ca9\\u629a\\u987a\\u7089\\u4f4e\\u6e29\\u5e72\\u998f\\u7684\\u5f71\\u54cd\\u56e0\\u7d20\\u5206\\u6790<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5468\\u626c;\\u9648\\u677e;\\u738b\\u6653\\u680b;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
10<\\/span><\\/td>\\u6cbc\\u6c14\\u53d1\\u9175\\u8fc7\\u7a0b\\u72b6\\u6001\\u76d1\\u63a7\\u7cfb\\u7edf\\u8bbe\\u8ba1<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u674e\\u798f\\u88ff;\\u738b\\u7389\\u9e4f;\\u5468\\u95ef;\\u79e6\\u56fd\\u8f89;\\u7f57\\u5411\\u4e1c;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
11<\\/span><\\/td>\\u5206\\u5b50\\u5370\\u8ff9\\u56fa\\u76f8\\u8403\\u53d6\\u6280\\u672f\\u5728\\u6297\\u751f\\u7d20\\u68c0\\u6d4b\\u4e2d\\u7684\\u5e94\\u7528\\u8fdb\\u5c55<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u6768\\u5149;\\u5f90\\u6653\\u79cb;\\u9ad8\\u5fb7\\u7389;\\u9646\\u4f73;\\u6f58\\u826f;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
12<\\/span><\\/td>\\u6d45\\u8c08\\u6cbc\\u6db2\\u5904\\u7406\\u4e0e\\u7eb3\\u6ee4\\u819c\\u6280\\u672f<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u9646\\u4f73;\\u5f90\\u6653\\u79cb;\\u9ad8\\u5fb7\\u7389;\\u5218\\u4f1f;\\u738b\\u6b23;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
13<\\/span><\\/td>\\u9875\\u5ca9\\u6cb9\\u9884\\u5904\\u7406\\u5236\\u53d6\\u52a0\\u6c22\\u539f\\u6599\\u7684\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u9648\\u677e;\\u5468\\u626c;\\u738b\\u6653\\u680b;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
14<\\/span><\\/td>\\u7d2b\\u5916\\u8f90\\u7167\\u63a5\\u679d\\u7532\\u57fa\\u4e19\\u70ef\\u9178\\u5bf9\\u65e0\\u7eba\\u5e03\\u6027\\u80fd\\u5f71\\u54cd\\u7684\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u4e0e\\u9ecf\\u5408<\\/span><\\/td>\\u5f20\\u73a5;\\u738b\\u5fd7\\u6210;\\u5f20\\u5b87;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
15<\\/span><\\/td>\\u5728\\u4fc4\\u7f57\\u65af\\u5883\\u5185\\u53d1\\u5c55\\u70bc\\u5316\\u4e00\\u4f53\\u5316\\u9879\\u76ee\\u7684\\u5de5\\u827a\\u8bba\\u8bc1<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u9648\\u677e;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
16<\\/span><\\/td>\\u53d8\\u6027\\u68af\\u5ea6\\u51dd\\u80f6\\u7535\\u6cf3(DGGE)\\u6280\\u672f\\u5728\\u755c\\u79bd\\u7caa\\u4fbf\\u538c\\u6c27\\u53d1\\u9175\\u6db2\\u4e2d\\u7684\\u7814\\u7a76\\u8fdb\\u5c55<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u738b\\u6b23;\\u82cf\\u5c0f\\u7ea2;\\u90ed\\u5e7f\\u4eae;\\u5218\\u4f1f;\\u5f90\\u6653\\u79cb;\\u9ad8\\u5fb7\\u7389;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
17<\\/span><\\/td>\\u6cbc\\u6db2\\u56de\\u6d41\\u5bf9\\u725b\\u7caa\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u4ea7\\u6c14\\u6027\\u80fd\\u7684\\u5f71\\u54cd<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u82cf\\u5c0f\\u7ea2;\\u5218\\u4f1f;\\u738b\\u6b23;\\u90ed\\u5e7f\\u4eae;\\u5f90\\u6653\\u79cb;\\u9ad8\\u5fb7\\u7389;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
18<\\/span><\\/td>\\u79f8\\u79c6\\u538c\\u6c27\\u6d88\\u5316\\u9884\\u5904\\u7406\\u6280\\u672f\\u7814\\u7a76\\u8fdb\\u5c55<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u738b\\u6b23;\\u82cf\\u5c0f\\u7ea2;\\u90ed\\u5e7f\\u4eae;\\u5218\\u4f1f;\\u5f90\\u6653\\u79cb;\\u9ad8\\u5fb7\\u7389;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
19<\\/span><\\/td>\\u5bd2\\u5730\\u6cbc\\u6c14\\u53d1\\u7535\\u673a\\u7ec4\\u4f59\\u70ed\\u56de\\u6536\\u7684\\u63a7\\u5236\\u7b56\\u7565\\u4e0e\\u8bbe\\u8ba1<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u81ea\\u52a8\\u5316\\u6280\\u672f\\u4e0e\\u5e94\\u7528<\\/span><\\/td>\\u79e6\\u56fd\\u8f89;\\u7f57\\u5411\\u4e1c;\\u738b\\u5fd7\\u6210;\\u738b\\u7389\\u9e4f;\\u5468\\u95ef;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
20<\\/span><\\/td>\\u592a\\u9633\\u80fd\\u7a7a\\u6c14\\u91c7\\u6696\\u667a\\u80fd\\u63a7\\u5236\\u7cfb\\u7edf\\u7684\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u79e6\\u56fd\\u8f89;\\u738b\\u7389\\u9e4f;\\u5468\\u95ef;\\u7f57\\u5411\\u4e1c;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
21<\\/span><\\/td>\\u6728\\u7126\\u6cb9\\u9884\\u5904\\u7406\\u5236\\u53d6\\u52a0\\u6c22\\u539f\\u6599\\u7684\\u65b9\\u6cd5<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u9648\\u677e;\\u5468\\u626c;\\u738b\\u6653\\u680b;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
22<\\/span><\\/td>\\u8f7b\\u8d28\\u6728\\u7126\\u6cb9\\u52a0\\u6c22\\u8131\\u6c27\\u7684\\u5f71\\u54cd\\u56e0\\u7d20<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u9648\\u677e;\\u5468\\u626c;\\u738b\\u6653\\u680b;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
23<\\/span><\\/td>\\u4eb2\\u6c34\\u6027\\u65e0\\u7eba\\u5e03\\u590d\\u5408\\u819c\\u7684\\u5236\\u5907\\u53ca\\u6027\\u80fd\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u4e0e\\u9ecf\\u5408<\\/span><\\/td>\\u5f20\\u73a5;\\u738b\\u5fd7\\u6210;\\u5f20\\u5b87;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
24<\\/span><\\/td>\\u300aM25\\u8f66\\u7528\\u7532\\u9187\\u6c7d\\u6cb9\\u300b\\u4f01\\u4e1a\\u6807\\u51c6\\u89e3\\u8bfb<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5218\\u8f89;\\u5510\\u8bd7\\u6d0b;\\u5218\\u7ef4;\\u5218\\u5ca9;\\u674e\\u5065;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
25<\\/span><\\/td>\\u56fd\\u9645\\u6807\\u51c6GB 17930-2011\\/XG1-2012\\u300a\\u8f66\\u7528\\u6c7d\\u6cb9\\u300b\\u7684\\u80f6\\u8d28\\u6307\\u6807\\u89e3\\u6790<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5510\\u8bd7\\u6d0b;\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u674e\\u5065;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
26<\\/span><\\/td>\\u9187\\u919a\\u71c3\\u6599\\u5728\\u8f66\\u7528\\u66ff\\u4ee3\\u80fd\\u6e90\\u4e2d\\u7684\\u53d1\\u5c55\\u8d8b\\u52bf<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u9646\\u6d77\\u73b2;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
27<\\/span><\\/td>\\u8c03\\u548c\\u56fdIV\\u6807\\u51c6\\u8f66\\u7528\\u6c7d\\u6cb9\\u7684\\u6297\\u7206\\u5242\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5510\\u8bd7\\u6d0b;\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u674e\\u5065;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
28<\\/span><\\/td>\\u77f3\\u6cb9\\u4ea7\\u54c1\\u8131\\u786b\\u6280\\u672f\\u7814\\u7a76\\u8fdb\\u5c55<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u9a6c\\u5b81;\\u5f20\\u5b87;\\u5f20\\u73a5;\\u738b\\u5fd7\\u6210;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
29<\\/span><\\/td>\\u751f\\u7269\\u67f4\\u6cb9\\u7684\\u5e94\\u7528\\u524d\\u666f<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u9a6c\\u5b81;\\u5f20\\u73a5;\\u5f20\\u5b87;\\u738b\\u5fd7\\u6210;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
30<\\/span><\\/td>\\u56fd\\u6709\\u5355\\u4f4d\\u79d1\\u6280\\u4eba\\u5458\\u57f9\\u517b\\u7684\\u5b9e\\u8df5\\u4e0e\\u601d\\u8003<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u9646\\u6d77\\u73b2;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
31<\\/span><\\/td>\\u79d1\\u6280\\u8ba1\\u5212\\u9879\\u76ee\\u5168\\u8fc7\\u7a0b\\u7ba1\\u7406\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5f20\\u5e06;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
32<\\/span><\\/td>\\u6211\\u56fd\\u79d1\\u6280\\u8ba1\\u5212\\u9879\\u76ee\\u7ba1\\u7406\\u73b0\\u72b6\\u4e0e\\u5bf9\\u7b56\\u5206\\u6790<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u9646\\u6d77\\u73b2;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
33<\\/span><\\/td>\\u79d1\\u7814\\u5355\\u4f4d\\u5bf9\\u79d1\\u7814\\u4eea\\u5668\\u8bbe\\u5907\\u7ba1\\u7406\\u65b9\\u6848<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5f20\\u5e06;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
34<\\/span><\\/td>\\u5fae\\u85fb\\u57f9\\u517b\\u6761\\u4ef6\\u4f18\\u5316\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u5e94\\u7528\\u80fd\\u6e90\\u6280\\u672f<\\/span><\\/td>\\u5f20\\u5b87;\\u738b\\u5fd7\\u6210;\\u5f20\\u73a5;\\u9a6c\\u5b81;\\u5468\\u7ea2\\u971e;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
35<\\/span><\\/td>\\u5e94\\u7528\\u6d6e\\u9009\\u6280\\u672f\\u5206\\u79bb\\u6cb9\\u7802\\u7684\\u5b9e\\u9a8c\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5468\\u626c;\\u9648\\u677e;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
36<\\/span><\\/td>\\u592a\\u9633\\u80fd\\u7a7a\\u6c14\\u96c6\\u70ed\\u63a7\\u5236\\u7cfb\\u7edf\\u7684\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u5e94\\u7528\\u80fd\\u6e90\\u6280\\u672f<\\/span><\\/td>\\u738b\\u9633;\\u79e6\\u56fd\\u8f89;\\u7f57\\u5411\\u4e1c;\\u738b\\u7389\\u9e4f;\\u5218\\u65ed\\u4e39;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
37<\\/span><\\/td>\\u53d1\\u9175\\u539f\\u6599\\u6c34\\u89e3\\u7387\\u5bf9CSTR\\u53cd\\u5e94\\u5668\\u4ea7\\u6c14\\u7387\\u5f71\\u54cd\\u7684\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u5e94\\u7528\\u80fd\\u6e90\\u6280\\u672f<\\/span><\\/td>\\u738b\\u6b23;\\u5218\\u4f1f;\\u5f90\\u6653\\u79cb;\\u8d75\\u5a34;\\u738b\\u7389\\u9e4f;\\u79e6\\u56fd\\u8f89;\\u5218\\u65ed\\u4e39;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
38<\\/span><\\/td>\\u6cbc\\u6c14\\u5de5\\u7a0b\\u5de5\\u827a\\u53c2\\u6570\\u7684\\u4f18\\u5316\\u6a21\\u578b\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u81ea\\u52a8\\u5316\\u6280\\u672f\\u4e0e\\u5e94\\u7528<\\/span><\\/td>\\u79e6\\u56fd\\u8f89;\\u7f57\\u5411\\u4e1c;\\u738b\\u7389\\u9e4f;\\u5218\\u65ed\\u4e39;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
39<\\/span><\\/td>\\u4e0d\\u540c\\u6405\\u62cc\\u65b9\\u5f0f\\u5bf9\\u6d6e\\u6e23\\u5c42\\u5f71\\u54cd\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u4ea7\\u6c14\\u7387\\u7684\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u738b\\u6b23;\\u738b\\u7389\\u9e4f;\\u5218\\u4f1f;\\u82cf\\u5c0f\\u7ea2;\\u5f90\\u6653\\u79cb;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
40<\\/span><\\/td>\\u6cb9\\u7802\\u5206\\u79bb\\u5242\\u7684\\u5b9e\\u9a8c\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5468\\u626c;\\u9648\\u677e;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
41<\\/span><\\/td>\\u79d1\\u7814\\u6210\\u679c\\u8f6c\\u5316\\u4e2d\\u79d1\\u6280\\u7ba1\\u7406\\u90e8\\u95e8\\u4f5c\\u7528\\u7684\\u63a2\\u6790<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5f20\\u5e06;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
42<\\/span><\\/td>\\u53cd\\u5e94\\u6761\\u4ef6\\u5bf9\\u8f7b\\u8d28\\u9875\\u5ca9\\u6cb9\\u52a0\\u6c22\\u8131\\u6c2e\\u6027\\u80fd\\u7684\\u5f71\\u54cd<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u9648\\u677e;\\u5468\\u626c;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
43<\\/span><\\/td>\\u6211\\u56fd\\u4e2d\\u5c0f\\u4f01\\u4e1a\\u6280\\u672f\\u521b\\u65b0\\u7684\\u73b0\\u72b6\\u53ca\\u5bf9\\u7b56<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u6280\\u4fe1\\u606f<\\/span><\\/td>\\u9646\\u6d77\\u73b2;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
44<\\/span><\\/td>\\u5927\\u63ba\\u91cf\\u7532\\u9187\\u6c7d\\u6cb9\\u521d\\u6b65\\u63a2\\u8ba8<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u4e0e\\u9ecf\\u5408<\\/span><\\/td>\\u738b\\u5fd7\\u6210;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
45<\\/span><\\/td>\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5f00\\u53d1\\u5229\\u7528\\u73b0\\u72b6<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5468\\u7ea2\\u971e;\\u738b\\u5fd7\\u6210;\\u9646\\u6d77\\u73b2;\\u5f20\\u5e06;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
46<\\/span><\\/td>\\u8f66\\u7528\\u9187\\u57fa\\u71c3\\u6599\\u53ca\\u5176\\u5e94\\u7528\\u6027\\u80fd\\u8bc4\\u4ef7<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u5510\\u8bd7\\u6d0b;\\u674e\\u5065;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
47<\\/span><\\/td>\\u89e3\\u8bfb\\u65b0\\u4fee\\u8ba2\\u7684\\u300a\\u79d1\\u5b66\\u4e8b\\u4e1a\\u5355\\u4f4d\\u8d22\\u52a1\\u7ba1\\u7406\\u5236\\u5ea6\\u300b<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5173\\u6625\\u73b2;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
48<\\/span><\\/td>\\u5fae\\u85fb\\u7814\\u7a76\\u8fdb\\u5c55\\u53ca\\u4ea7\\u6cb9\\u7684\\u5f71\\u54cd\\u56e0\\u7d20<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5f20\\u5b87;\\u738b\\u5fd7\\u6210;\\u5f20\\u73a5;\\u5468\\u7ea2\\u971e;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
49<\\/span><\\/td>\\u5168\\u998f\\u5206\\u9875\\u5ca9\\u6cb9\\u6539\\u8d28\\u8f6c\\u5316\\u8fd0\\u8f93\\u71c3\\u6599\\u6280\\u672f\\u8fdb\\u5c55\\u53ca\\u5176\\u8bc4\\u4ef7<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u9648\\u677e;\\u5468\\u626c;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
50<\\/span><\\/td>\\u6c7d\\u6cb9\\u542b\\u786b\\u91cf\\u5bf9\\u6392\\u653e\\u7684\\u5f71\\u54cd\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5510\\u8bd7\\u6d0b;\\u5218\\u5ca9;\\u674e\\u5065;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
51<\\/span><\\/td>\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\u6cbc\\u6c14\\u51c0\\u5316\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5218\\u4f1f;\\u738b\\u6b23;\\u5f90\\u6653\\u79cb;\\u8d75\\u5a34;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
52<\\/span><\\/td>\\u4f7f\\u7528\\u6570\\u5b66\\u65b9\\u6cd5\\u76d1\\u6d4b\\u70ed\\u56fa\\u6811\\u8102\\u56fa\\u5316\\u7a0b\\u5ea6\\u7684\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u79d1\\u6280\\u521b\\u65b0\\u4e0e\\u5e94\\u7528<\\/span><\\/td>\\u5218\\u65ed\\u4e39;\\u79e6\\u56fd\\u8f89;\\u738b\\u7389\\u9e4f;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
53<\\/span><\\/td>\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\u7684\\u65e0\\u7ebf\\u76d1\\u6d4b\\u7cfb\\u7edf<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u79e6\\u56fd\\u8f89;\\u7f57\\u5411\\u4e1c;\\u738b\\u7389\\u9e4f;\\u5218\\u65ed\\u4e39;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
54<\\/span><\\/td>\\u5bd2\\u533a\\u725b\\u7caa\\u4e24\\u7ea7\\u538c\\u6c27\\u9ad8\\u6548\\u53d1\\u9175\\u5de5\\u827a\\u53c2\\u6570\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u738b\\u6b23;\\u5218\\u4f1f;\\u8d75\\u5a34;\\u738b\\u7389\\u9e4f;\\u79e6\\u56fd\\u8f89;\\u5218\\u65ed\\u4e39;\\u5f90\\u6653\\u79cb;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
55<\\/span><\\/td>\\u57fa\\u4e8e\\u6700\\u5c0f\\u4e8c\\u4e58\\u5411\\u91cf\\u673a\\u7684\\u538c\\u6c27\\u53d1\\u9175\\u6cbc\\u6c14\\u4ea7\\u91cf\\u5efa\\u6a21\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u79e6\\u56fd\\u8f89;\\u5218\\u4f1f;\\u5218\\u65ed\\u4e39;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
56<\\/span><\\/td>\\u6df7\\u5408\\u5efa\\u6a21\\u65b9\\u6cd5\\u7814\\u7a76\\u53ca\\u5176\\u5728\\u725b\\u7caa\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fc7\\u7a0b\\u4e2d\\u7684\\u76d1\\u6d4b\\u5e94\\u7528<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u8303\\u5e86\\u4e3d;\\u79e6\\u56fd\\u8f89;\\u7ae0\\u529b;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
57<\\/span><\\/td>Marathon 5kpro\\u590d\\u7528\\u5668\\u914d\\u7f6e\\u4ecb\\u7ecd<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u97e9\\u6d9b;\\u5218\\u65ed\\u4e39;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
58<\\/span><\\/td>ADWR\\u591a\\u666e\\u52d2\\u5929\\u6c14\\u96f7\\u8fbe\\u4f3a\\u670d\\u7cfb\\u7edf\\u6545\\u969c\\u5206\\u6790\\u4e0e\\u5904\\u7406<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u97e9\\u6d9b;\\u5218\\u65ed\\u4e39;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
59<\\/span><\\/td>\\u57fa\\u4e8e\\u5355\\u7247\\u673a\\u7684\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u7f50\\u6e29\\u5ea6\\u63a7\\u5236\\u7cfb\\u7edf<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u8d75\\u5a34;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
60<\\/span><\\/td>MTBE\\u7684\\u56fd\\u5185\\u5916\\u7814\\u7a76\\u8fdb\\u5c55<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u97a0\\u6625\\u7ea2;\\u5f20\\u4f1f\\u541b;\\u674e\\u798f\\u88ff;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
61<\\/span><\\/td>\\u8910\\u7164\\u70ed\\u6c34\\u5e72\\u71e5\\u6539\\u8d28\\u540e\\u7684\\u6027\\u80fd\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u4e0e\\u9ecf\\u5408<\\/span><\\/td>\\u97a0\\u6625\\u7ea2;\\u5f20\\u4f1f\\u541b;\\u738b\\u5fd7\\u6210;\\u674e\\u798f\\u88ff;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
62<\\/span><\\/td>\\u5149\\u50ac\\u5316\\u8fd8\\u539f\\u4e8c\\u6c27\\u5316\\u78b3\\u7684\\u53d1\\u5c55<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u97a0\\u6625\\u7ea2;\\u5f20\\u4f1f\\u541b;\\u738b\\u5fd7\\u6210;\\u674e\\u798f\\u88ff;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
63<\\/span><\\/td>M15\\u8f66\\u7528\\u7532\\u9187\\u6c7d\\u6cb9\\u590d\\u5408\\u6dfb\\u52a0\\u5242\\u7684\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u5510\\u8bd7\\u6d0b;\\u674e\\u5065;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
64<\\/span><\\/td>\\u5bf9\\u6211\\u56fd\\u9187\\u919a\\u71c3\\u6599\\u4ea7\\u4e1a\\u7684\\u53d1\\u5c55\\u601d\\u8def\\u4e0e\\u5bf9\\u7b56\\u63a2\\u8ba8<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u519c\\u673a\\u4f7f\\u7528\\u4e0e\\u7ef4\\u4fee<\\/span><\\/td>\\u5218\\u5ca9;\\u5f20\\u6811\\u534e;\\u5510\\u8bd7\\u6d0b;\\u674e\\u5065;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
65<\\/span><\\/td>\\u81ed\\u6c27\\u52a9\\u71c3\\u6280\\u672f\\u5728\\u67f4\\u6cb9\\u53d1\\u52a8\\u673a\\u4e2d\\u7684\\u5e94\\u7528<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u519c\\u673a\\u4f7f\\u7528\\u4e0e\\u7ef4\\u4fee<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u5510\\u8bd7\\u6d0b;\\u674e\\u5065;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
66<\\/span><\\/td>\\u86c7\\u7eb9\\u77f3\\u7c89\\u4f53\\u4f5c\\u4e3a\\u673a\\u68b0\\u6469\\u64e6\\u526f\\u78e8\\u635f\\u8868\\u9762\\u81ea\\u4fee\\u590d\\u6dfb\\u52a0\\u5242\\u7684\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u5510\\u8bd7\\u6d0b;\\u674e\\u5065;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
67<\\/span><\\/td>\\u7126\\u5316\\u5e9f\\u6c34\\u4e2d\\u82ef\\u915a\\u542b\\u91cf\\u7684\\u6d4b\\u5b9a\\u65b9\\u6cd5\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u4e2d\\u56fd\\u7ed9\\u6c34\\u6392\\u6c34<\\/span><\\/td>\\u5f20\\u5b8f\\u68ee;\\u5468\\u56fd\\u6c5f;\\u5468\\u626c;\\u738b\\u5f66\\u5f6a;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
68<\\/span><\\/td>\\u8f66\\u7528\\u6c7d\\u6cb9\\u590d\\u5408\\u8c03\\u8282\\u5242\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u5510\\u8bd7\\u6d0b;\\u674e\\u5065;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
69<\\/span><\\/td>\\u5173\\u4e8e\\u8f66\\u7528\\u66ff\\u4ee3\\u71c3\\u6599\\u7684\\u53d1\\u5c55\\u72b6\\u51b5\\u4e0e\\u524d\\u666f\\u63a2\\u6790<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u519c\\u673a\\u4f7f\\u7528\\u4e0e\\u7ef4\\u4fee<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u5510\\u8bd7\\u6d0b;\\u674e\\u5065;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
70<\\/span><\\/td>\\u5185\\u71c3\\u673a\\u66ff\\u4ee3\\u71c3\\u6599\\u7684\\u5c34\\u5c2c\\u5883\\u5730<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u519c\\u673a\\u4f7f\\u7528\\u4e0e\\u7ef4\\u4fee<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u5510\\u8bd7\\u6d0b;\\u674e\\u5065;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
71<\\/span><\\/td>\\u6405\\u62cc\\u65f6\\u95f4\\u5bf9\\u9ad8\\u56fa\\u542b\\u91cf\\u5976\\u725b\\u7caa\\u4fbf\\u9ad8\\u6e29\\u538c\\u6c27\\u6d88\\u5316\\u7684\\u5f71\\u54cd\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u5e94\\u7528\\u80fd\\u6e90\\u6280\\u672f<\\/span><\\/td>\\u5218\\u4f1f;\\u738b\\u6b23;\\u5f90\\u6653\\u79cb;\\u79e6\\u56fd\\u8f89;\\u738b\\u7389\\u9e4f;\\u5218\\u65ed\\u4e39;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr><\\/tbody><\\/table>

<\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles?&title=2012-2015&category%5Bid%5D=\"}', '2020-06-03 09:14:22', '2020-06-03 09:14:22'); +INSERT INTO `admin_operation_log` (`id`, `user_id`, `path`, `method`, `ip`, `input`, `created_at`, `updated_at`) VALUES +(562, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"2012-2015\",\"category\":{\"id\":null}}', '2020-06-03 09:14:22', '2020-06-03 09:14:22'), +(563, 1, 'admin/articles/149/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:15:47', '2020-06-03 09:15:47'); +INSERT INTO `admin_operation_log` (`id`, `user_id`, `path`, `method`, `ip`, `input`, `created_at`, `updated_at`) VALUES +(564, 1, 'admin/articles/149', 'PUT', '1.190.203.218', '{\"title\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662<\\/br>\\u8bba\\u6587\\u76ee\\u5f55\\uff082012-2015\\uff09\",\"category_id\":\"21\",\"description\":\"\\u5e8f\\u53f7 \\u6587\\u7ae0\\u540d\\u79f0 \\u7c7b\\u522b \\u671f\\u520a\\u540d \\u4f5c\\u8005 \\u53d1\\u8868\\u65f6\\u95f4 1 \\u6cbc\\u6c14\\u8131\\u78b3\\u63d0\\u7eaf\\u6280\\u672f\\u7814\\u7a76\\u8fdb\\u5c55 \\u4e00\\u822c \\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66 \\u6f58\\u826f;\\u5f90\\u6653\\u79cb;\\u9ad8\\u5fb7\\u7389;\\u738b\\u6b23;\\u5218\\u4f1f; 2015 2 \\u4f9d\\u5170\\u6cb9\\u9875\\u5ca9\\u9010\\u7ea7\\u6c27\\u5316\\/\\u8403\\u53d6\\u53ca\\u5176\\u4ea7\\u7269\\u7684\\u7ea2\\u5916\\u5206\\u6790 \\u4e00\\u822c \\u9ed1\\u9f99\",\"content\":\"<\\/colgroup>' ); + + tempIndex === 2 && tmpl.push(''); + + } + + return '
' + + '
' + + '
\\u5e8f\\u53f7<\\/span><\\/td>\\u6587\\u7ae0\\u540d\\u79f0<\\/span><\\/td>\\u7c7b\\u522b<\\/span><\\/td>\\u671f\\u520a\\u540d<\\/span><\\/td>\\u4f5c\\u8005<\\/span><\\/td>\\u53d1\\u8868\\u65f6\\u95f4<\\/span><\\/td><\\/tr>
1<\\/span><\\/td>\\u6cbc\\u6c14\\u8131\\u78b3\\u63d0\\u7eaf\\u6280\\u672f\\u7814\\u7a76\\u8fdb\\u5c55<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u6f58\\u826f;\\u5f90\\u6653\\u79cb;\\u9ad8\\u5fb7\\u7389;\\u738b\\u6b23;\\u5218\\u4f1f;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
2<\\/span><\\/td>\\u4f9d\\u5170\\u6cb9\\u9875\\u5ca9\\u9010\\u7ea7\\u6c27\\u5316\\/\\u8403\\u53d6\\u53ca\\u5176\\u4ea7\\u7269\\u7684\\u7ea2\\u5916\\u5206\\u6790<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u6280\\u5927\\u5b66\\u5b66\\u62a5<\\/span><\\/td>\\u5434\\u9e4f;\\u5f20\\u661f\\u5b87;\\u5468\\u626c;\\u89e3\\u4e3d\\u840d;\\u6731\\u79c0\\u680b;\\u5b8b\\u5fae\\u5a1c;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
3<\\/span><\\/td>\\u5fae\\u7c73\\u7a00\\u571f\\u7c89\\u4f53\\u8868\\u9762\\u6539\\u6027\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5510\\u8bd7\\u6d0b;\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u674e\\u5065;\\u9648\\u5e86\\u6d77;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
4<\\/span><\\/td>\\u5bd2\\u5730\\u300aM25\\u8f66\\u7528\\u7164\\u57fa\\u7532\\u9187\\u6c7d\\u6cb9\\u300b\\u4f01\\u4e1a\\u6807\\u51c6<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u5316\\u5de5\\u7ba1\\u7406<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5510\\u8bd7\\u6d0b;\\u5218\\u5ca9;\\u5218\\u7ef4;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
5<\\/span><\\/td>\\u5bd2\\u5730M25\\u8f66\\u7528(\\u7164\\u57fa)\\u7532\\u9187\\u6c7d\\u6cb9\\u6027\\u80fd\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5510\\u8bd7\\u6d0b;\\u5218\\u5ca9;\\u674e\\u5065;\\u9648\\u5e86\\u6d77;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
6<\\/span><\\/td>\\u9875\\u5ca9\\u6cb9\\u6df1\\u52a0\\u5de5\\u4ea7\\u4e1a\\u53d1\\u5c55\\u8bc4\\u8ff0<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u9648\\u677e;\\u5468\\u626c;\\u738b\\u6653\\u680b;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
7<\\/span><\\/td>\\u6c34\\u5305\\u6cb9\\u578b\\u4e73\\u5316\\u91cd\\u6cb9\\u7684\\u5236\\u5907\\u6761\\u4ef6\\u53ca\\u7a33\\u5b9a\\u6027\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5f20\\u73a5;\\u5f20\\u5b87;\\u9a6c\\u5b81;\\u738b\\u5fd7\\u6210;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
8<\\/span><\\/td>\\u57fa\\u4e8eZigBee\\u548cWLAN\\u6280\\u672f\\u7684\\u538c\\u6c27\\u53d1\\u9175\\u4e2d\\u8bd5\\u76d1\\u63a7\\u7cfb\\u7edf<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u79e6\\u56fd\\u8f89;\\u738b\\u94a2;\\u738b\\u7389\\u9e4f;\\u5468\\u95ef;\\u7f57\\u5411\\u4e1c;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
9<\\/span><\\/td>\\u6cb9\\u9875\\u5ca9\\u629a\\u987a\\u7089\\u4f4e\\u6e29\\u5e72\\u998f\\u7684\\u5f71\\u54cd\\u56e0\\u7d20\\u5206\\u6790<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5468\\u626c;\\u9648\\u677e;\\u738b\\u6653\\u680b;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
10<\\/span><\\/td>\\u6cbc\\u6c14\\u53d1\\u9175\\u8fc7\\u7a0b\\u72b6\\u6001\\u76d1\\u63a7\\u7cfb\\u7edf\\u8bbe\\u8ba1<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u674e\\u798f\\u88ff;\\u738b\\u7389\\u9e4f;\\u5468\\u95ef;\\u79e6\\u56fd\\u8f89;\\u7f57\\u5411\\u4e1c;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
11<\\/span><\\/td>\\u5206\\u5b50\\u5370\\u8ff9\\u56fa\\u76f8\\u8403\\u53d6\\u6280\\u672f\\u5728\\u6297\\u751f\\u7d20\\u68c0\\u6d4b\\u4e2d\\u7684\\u5e94\\u7528\\u8fdb\\u5c55<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u6768\\u5149;\\u5f90\\u6653\\u79cb;\\u9ad8\\u5fb7\\u7389;\\u9646\\u4f73;\\u6f58\\u826f;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
12<\\/span><\\/td>\\u6d45\\u8c08\\u6cbc\\u6db2\\u5904\\u7406\\u4e0e\\u7eb3\\u6ee4\\u819c\\u6280\\u672f<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u9646\\u4f73;\\u5f90\\u6653\\u79cb;\\u9ad8\\u5fb7\\u7389;\\u5218\\u4f1f;\\u738b\\u6b23;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
13<\\/span><\\/td>\\u9875\\u5ca9\\u6cb9\\u9884\\u5904\\u7406\\u5236\\u53d6\\u52a0\\u6c22\\u539f\\u6599\\u7684\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u9648\\u677e;\\u5468\\u626c;\\u738b\\u6653\\u680b;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
14<\\/span><\\/td>\\u7d2b\\u5916\\u8f90\\u7167\\u63a5\\u679d\\u7532\\u57fa\\u4e19\\u70ef\\u9178\\u5bf9\\u65e0\\u7eba\\u5e03\\u6027\\u80fd\\u5f71\\u54cd\\u7684\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u4e0e\\u9ecf\\u5408<\\/span><\\/td>\\u5f20\\u73a5;\\u738b\\u5fd7\\u6210;\\u5f20\\u5b87;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
15<\\/span><\\/td>\\u5728\\u4fc4\\u7f57\\u65af\\u5883\\u5185\\u53d1\\u5c55\\u70bc\\u5316\\u4e00\\u4f53\\u5316\\u9879\\u76ee\\u7684\\u5de5\\u827a\\u8bba\\u8bc1<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u9648\\u677e;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
16<\\/span><\\/td>\\u53d8\\u6027\\u68af\\u5ea6\\u51dd\\u80f6\\u7535\\u6cf3(DGGE)\\u6280\\u672f\\u5728\\u755c\\u79bd\\u7caa\\u4fbf\\u538c\\u6c27\\u53d1\\u9175\\u6db2\\u4e2d\\u7684\\u7814\\u7a76\\u8fdb\\u5c55<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u738b\\u6b23;\\u82cf\\u5c0f\\u7ea2;\\u90ed\\u5e7f\\u4eae;\\u5218\\u4f1f;\\u5f90\\u6653\\u79cb;\\u9ad8\\u5fb7\\u7389;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
17<\\/span><\\/td>\\u6cbc\\u6db2\\u56de\\u6d41\\u5bf9\\u725b\\u7caa\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u4ea7\\u6c14\\u6027\\u80fd\\u7684\\u5f71\\u54cd<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u82cf\\u5c0f\\u7ea2;\\u5218\\u4f1f;\\u738b\\u6b23;\\u90ed\\u5e7f\\u4eae;\\u5f90\\u6653\\u79cb;\\u9ad8\\u5fb7\\u7389;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
18<\\/span><\\/td>\\u79f8\\u79c6\\u538c\\u6c27\\u6d88\\u5316\\u9884\\u5904\\u7406\\u6280\\u672f\\u7814\\u7a76\\u8fdb\\u5c55<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u738b\\u6b23;\\u82cf\\u5c0f\\u7ea2;\\u90ed\\u5e7f\\u4eae;\\u5218\\u4f1f;\\u5f90\\u6653\\u79cb;\\u9ad8\\u5fb7\\u7389;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
19<\\/span><\\/td>\\u5bd2\\u5730\\u6cbc\\u6c14\\u53d1\\u7535\\u673a\\u7ec4\\u4f59\\u70ed\\u56de\\u6536\\u7684\\u63a7\\u5236\\u7b56\\u7565\\u4e0e\\u8bbe\\u8ba1<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u81ea\\u52a8\\u5316\\u6280\\u672f\\u4e0e\\u5e94\\u7528<\\/span><\\/td>\\u79e6\\u56fd\\u8f89;\\u7f57\\u5411\\u4e1c;\\u738b\\u5fd7\\u6210;\\u738b\\u7389\\u9e4f;\\u5468\\u95ef;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
20<\\/span><\\/td>\\u592a\\u9633\\u80fd\\u7a7a\\u6c14\\u91c7\\u6696\\u667a\\u80fd\\u63a7\\u5236\\u7cfb\\u7edf\\u7684\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u79e6\\u56fd\\u8f89;\\u738b\\u7389\\u9e4f;\\u5468\\u95ef;\\u7f57\\u5411\\u4e1c;<\\/span><\\/td>2015<\\/span><\\/td><\\/tr>
21<\\/span><\\/td>\\u6728\\u7126\\u6cb9\\u9884\\u5904\\u7406\\u5236\\u53d6\\u52a0\\u6c22\\u539f\\u6599\\u7684\\u65b9\\u6cd5<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u9648\\u677e;\\u5468\\u626c;\\u738b\\u6653\\u680b;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
22<\\/span><\\/td>\\u8f7b\\u8d28\\u6728\\u7126\\u6cb9\\u52a0\\u6c22\\u8131\\u6c27\\u7684\\u5f71\\u54cd\\u56e0\\u7d20<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u9648\\u677e;\\u5468\\u626c;\\u738b\\u6653\\u680b;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
23<\\/span><\\/td>\\u4eb2\\u6c34\\u6027\\u65e0\\u7eba\\u5e03\\u590d\\u5408\\u819c\\u7684\\u5236\\u5907\\u53ca\\u6027\\u80fd\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u4e0e\\u9ecf\\u5408<\\/span><\\/td>\\u5f20\\u73a5;\\u738b\\u5fd7\\u6210;\\u5f20\\u5b87;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
24<\\/span><\\/td>\\u300aM25\\u8f66\\u7528\\u7532\\u9187\\u6c7d\\u6cb9\\u300b\\u4f01\\u4e1a\\u6807\\u51c6\\u89e3\\u8bfb<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5218\\u8f89;\\u5510\\u8bd7\\u6d0b;\\u5218\\u7ef4;\\u5218\\u5ca9;\\u674e\\u5065;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
25<\\/span><\\/td>\\u56fd\\u9645\\u6807\\u51c6GB 17930-2011\\/XG1-2012\\u300a\\u8f66\\u7528\\u6c7d\\u6cb9\\u300b\\u7684\\u80f6\\u8d28\\u6307\\u6807\\u89e3\\u6790<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5510\\u8bd7\\u6d0b;\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u674e\\u5065;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
26<\\/span><\\/td>\\u9187\\u919a\\u71c3\\u6599\\u5728\\u8f66\\u7528\\u66ff\\u4ee3\\u80fd\\u6e90\\u4e2d\\u7684\\u53d1\\u5c55\\u8d8b\\u52bf<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u9646\\u6d77\\u73b2;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
27<\\/span><\\/td>\\u8c03\\u548c\\u56fdIV\\u6807\\u51c6\\u8f66\\u7528\\u6c7d\\u6cb9\\u7684\\u6297\\u7206\\u5242\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5510\\u8bd7\\u6d0b;\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u674e\\u5065;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
28<\\/span><\\/td>\\u77f3\\u6cb9\\u4ea7\\u54c1\\u8131\\u786b\\u6280\\u672f\\u7814\\u7a76\\u8fdb\\u5c55<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u9a6c\\u5b81;\\u5f20\\u5b87;\\u5f20\\u73a5;\\u738b\\u5fd7\\u6210;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
29<\\/span><\\/td>\\u751f\\u7269\\u67f4\\u6cb9\\u7684\\u5e94\\u7528\\u524d\\u666f<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u9a6c\\u5b81;\\u5f20\\u73a5;\\u5f20\\u5b87;\\u738b\\u5fd7\\u6210;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
30<\\/span><\\/td>\\u56fd\\u6709\\u5355\\u4f4d\\u79d1\\u6280\\u4eba\\u5458\\u57f9\\u517b\\u7684\\u5b9e\\u8df5\\u4e0e\\u601d\\u8003<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u9646\\u6d77\\u73b2;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
31<\\/span><\\/td>\\u79d1\\u6280\\u8ba1\\u5212\\u9879\\u76ee\\u5168\\u8fc7\\u7a0b\\u7ba1\\u7406\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5f20\\u5e06;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
32<\\/span><\\/td>\\u6211\\u56fd\\u79d1\\u6280\\u8ba1\\u5212\\u9879\\u76ee\\u7ba1\\u7406\\u73b0\\u72b6\\u4e0e\\u5bf9\\u7b56\\u5206\\u6790<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u9646\\u6d77\\u73b2;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
33<\\/span><\\/td>\\u79d1\\u7814\\u5355\\u4f4d\\u5bf9\\u79d1\\u7814\\u4eea\\u5668\\u8bbe\\u5907\\u7ba1\\u7406\\u65b9\\u6848<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5f20\\u5e06;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
34<\\/span><\\/td>\\u5fae\\u85fb\\u57f9\\u517b\\u6761\\u4ef6\\u4f18\\u5316\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u5e94\\u7528\\u80fd\\u6e90\\u6280\\u672f<\\/span><\\/td>\\u5f20\\u5b87;\\u738b\\u5fd7\\u6210;\\u5f20\\u73a5;\\u9a6c\\u5b81;\\u5468\\u7ea2\\u971e;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
35<\\/span><\\/td>\\u5e94\\u7528\\u6d6e\\u9009\\u6280\\u672f\\u5206\\u79bb\\u6cb9\\u7802\\u7684\\u5b9e\\u9a8c\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5468\\u626c;\\u9648\\u677e;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
36<\\/span><\\/td>\\u592a\\u9633\\u80fd\\u7a7a\\u6c14\\u96c6\\u70ed\\u63a7\\u5236\\u7cfb\\u7edf\\u7684\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u5e94\\u7528\\u80fd\\u6e90\\u6280\\u672f<\\/span><\\/td>\\u738b\\u9633;\\u79e6\\u56fd\\u8f89;\\u7f57\\u5411\\u4e1c;\\u738b\\u7389\\u9e4f;\\u5218\\u65ed\\u4e39;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
37<\\/span><\\/td>\\u53d1\\u9175\\u539f\\u6599\\u6c34\\u89e3\\u7387\\u5bf9CSTR\\u53cd\\u5e94\\u5668\\u4ea7\\u6c14\\u7387\\u5f71\\u54cd\\u7684\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u5e94\\u7528\\u80fd\\u6e90\\u6280\\u672f<\\/span><\\/td>\\u738b\\u6b23;\\u5218\\u4f1f;\\u5f90\\u6653\\u79cb;\\u8d75\\u5a34;\\u738b\\u7389\\u9e4f;\\u79e6\\u56fd\\u8f89;\\u5218\\u65ed\\u4e39;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
38<\\/span><\\/td>\\u6cbc\\u6c14\\u5de5\\u7a0b\\u5de5\\u827a\\u53c2\\u6570\\u7684\\u4f18\\u5316\\u6a21\\u578b\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u81ea\\u52a8\\u5316\\u6280\\u672f\\u4e0e\\u5e94\\u7528<\\/span><\\/td>\\u79e6\\u56fd\\u8f89;\\u7f57\\u5411\\u4e1c;\\u738b\\u7389\\u9e4f;\\u5218\\u65ed\\u4e39;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
39<\\/span><\\/td>\\u4e0d\\u540c\\u6405\\u62cc\\u65b9\\u5f0f\\u5bf9\\u6d6e\\u6e23\\u5c42\\u5f71\\u54cd\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u4ea7\\u6c14\\u7387\\u7684\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u738b\\u6b23;\\u738b\\u7389\\u9e4f;\\u5218\\u4f1f;\\u82cf\\u5c0f\\u7ea2;\\u5f90\\u6653\\u79cb;<\\/span><\\/td>2014<\\/span><\\/td><\\/tr>
40<\\/span><\\/td>\\u6cb9\\u7802\\u5206\\u79bb\\u5242\\u7684\\u5b9e\\u9a8c\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5468\\u626c;\\u9648\\u677e;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
41<\\/span><\\/td>\\u79d1\\u7814\\u6210\\u679c\\u8f6c\\u5316\\u4e2d\\u79d1\\u6280\\u7ba1\\u7406\\u90e8\\u95e8\\u4f5c\\u7528\\u7684\\u63a2\\u6790<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5f20\\u5e06;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
42<\\/span><\\/td>\\u53cd\\u5e94\\u6761\\u4ef6\\u5bf9\\u8f7b\\u8d28\\u9875\\u5ca9\\u6cb9\\u52a0\\u6c22\\u8131\\u6c2e\\u6027\\u80fd\\u7684\\u5f71\\u54cd<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u9648\\u677e;\\u5468\\u626c;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
43<\\/span><\\/td>\\u6211\\u56fd\\u4e2d\\u5c0f\\u4f01\\u4e1a\\u6280\\u672f\\u521b\\u65b0\\u7684\\u73b0\\u72b6\\u53ca\\u5bf9\\u7b56<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u6280\\u4fe1\\u606f<\\/span><\\/td>\\u9646\\u6d77\\u73b2;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
44<\\/span><\\/td>\\u5927\\u63ba\\u91cf\\u7532\\u9187\\u6c7d\\u6cb9\\u521d\\u6b65\\u63a2\\u8ba8<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u4e0e\\u9ecf\\u5408<\\/span><\\/td>\\u738b\\u5fd7\\u6210;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
45<\\/span><\\/td>\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5f00\\u53d1\\u5229\\u7528\\u73b0\\u72b6<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5468\\u7ea2\\u971e;\\u738b\\u5fd7\\u6210;\\u9646\\u6d77\\u73b2;\\u5f20\\u5e06;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
46<\\/span><\\/td>\\u8f66\\u7528\\u9187\\u57fa\\u71c3\\u6599\\u53ca\\u5176\\u5e94\\u7528\\u6027\\u80fd\\u8bc4\\u4ef7<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u5510\\u8bd7\\u6d0b;\\u674e\\u5065;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
47<\\/span><\\/td>\\u89e3\\u8bfb\\u65b0\\u4fee\\u8ba2\\u7684\\u300a\\u79d1\\u5b66\\u4e8b\\u4e1a\\u5355\\u4f4d\\u8d22\\u52a1\\u7ba1\\u7406\\u5236\\u5ea6\\u300b<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5173\\u6625\\u73b2;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
48<\\/span><\\/td>\\u5fae\\u85fb\\u7814\\u7a76\\u8fdb\\u5c55\\u53ca\\u4ea7\\u6cb9\\u7684\\u5f71\\u54cd\\u56e0\\u7d20<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5f20\\u5b87;\\u738b\\u5fd7\\u6210;\\u5f20\\u73a5;\\u5468\\u7ea2\\u971e;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
49<\\/span><\\/td>\\u5168\\u998f\\u5206\\u9875\\u5ca9\\u6cb9\\u6539\\u8d28\\u8f6c\\u5316\\u8fd0\\u8f93\\u71c3\\u6599\\u6280\\u672f\\u8fdb\\u5c55\\u53ca\\u5176\\u8bc4\\u4ef7<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u9648\\u677e;\\u5468\\u626c;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
50<\\/span><\\/td>\\u6c7d\\u6cb9\\u542b\\u786b\\u91cf\\u5bf9\\u6392\\u653e\\u7684\\u5f71\\u54cd\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5510\\u8bd7\\u6d0b;\\u5218\\u5ca9;\\u674e\\u5065;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
51<\\/span><\\/td>\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\u6cbc\\u6c14\\u51c0\\u5316\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u5218\\u4f1f;\\u738b\\u6b23;\\u5f90\\u6653\\u79cb;\\u8d75\\u5a34;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
52<\\/span><\\/td>\\u4f7f\\u7528\\u6570\\u5b66\\u65b9\\u6cd5\\u76d1\\u6d4b\\u70ed\\u56fa\\u6811\\u8102\\u56fa\\u5316\\u7a0b\\u5ea6\\u7684\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u79d1\\u6280\\u521b\\u65b0\\u4e0e\\u5e94\\u7528<\\/span><\\/td>\\u5218\\u65ed\\u4e39;\\u79e6\\u56fd\\u8f89;\\u738b\\u7389\\u9e4f;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
53<\\/span><\\/td>\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\u7684\\u65e0\\u7ebf\\u76d1\\u6d4b\\u7cfb\\u7edf<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u79e6\\u56fd\\u8f89;\\u7f57\\u5411\\u4e1c;\\u738b\\u7389\\u9e4f;\\u5218\\u65ed\\u4e39;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
54<\\/span><\\/td>\\u5bd2\\u533a\\u725b\\u7caa\\u4e24\\u7ea7\\u538c\\u6c27\\u9ad8\\u6548\\u53d1\\u9175\\u5de5\\u827a\\u53c2\\u6570\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u738b\\u6b23;\\u5218\\u4f1f;\\u8d75\\u5a34;\\u738b\\u7389\\u9e4f;\\u79e6\\u56fd\\u8f89;\\u5218\\u65ed\\u4e39;\\u5f90\\u6653\\u79cb;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
55<\\/span><\\/td>\\u57fa\\u4e8e\\u6700\\u5c0f\\u4e8c\\u4e58\\u5411\\u91cf\\u673a\\u7684\\u538c\\u6c27\\u53d1\\u9175\\u6cbc\\u6c14\\u4ea7\\u91cf\\u5efa\\u6a21\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u79e6\\u56fd\\u8f89;\\u5218\\u4f1f;\\u5218\\u65ed\\u4e39;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
56<\\/span><\\/td>\\u6df7\\u5408\\u5efa\\u6a21\\u65b9\\u6cd5\\u7814\\u7a76\\u53ca\\u5176\\u5728\\u725b\\u7caa\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fc7\\u7a0b\\u4e2d\\u7684\\u76d1\\u6d4b\\u5e94\\u7528<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u8303\\u5e86\\u4e3d;\\u79e6\\u56fd\\u8f89;\\u7ae0\\u529b;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
57<\\/span><\\/td>Marathon 5kpro\\u590d\\u7528\\u5668\\u914d\\u7f6e\\u4ecb\\u7ecd<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u97e9\\u6d9b;\\u5218\\u65ed\\u4e39;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
58<\\/span><\\/td>ADWR\\u591a\\u666e\\u52d2\\u5929\\u6c14\\u96f7\\u8fbe\\u4f3a\\u670d\\u7cfb\\u7edf\\u6545\\u969c\\u5206\\u6790\\u4e0e\\u5904\\u7406<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u97e9\\u6d9b;\\u5218\\u65ed\\u4e39;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
59<\\/span><\\/td>\\u57fa\\u4e8e\\u5355\\u7247\\u673a\\u7684\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u7f50\\u6e29\\u5ea6\\u63a7\\u5236\\u7cfb\\u7edf<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u8d75\\u5a34;<\\/span><\\/td>2013<\\/span><\\/td><\\/tr>
60<\\/span><\\/td>MTBE\\u7684\\u56fd\\u5185\\u5916\\u7814\\u7a76\\u8fdb\\u5c55<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u97a0\\u6625\\u7ea2;\\u5f20\\u4f1f\\u541b;\\u674e\\u798f\\u88ff;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
61<\\/span><\\/td>\\u8910\\u7164\\u70ed\\u6c34\\u5e72\\u71e5\\u6539\\u8d28\\u540e\\u7684\\u6027\\u80fd\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u4e0e\\u9ecf\\u5408<\\/span><\\/td>\\u97a0\\u6625\\u7ea2;\\u5f20\\u4f1f\\u541b;\\u738b\\u5fd7\\u6210;\\u674e\\u798f\\u88ff;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
62<\\/span><\\/td>\\u5149\\u50ac\\u5316\\u8fd8\\u539f\\u4e8c\\u6c27\\u5316\\u78b3\\u7684\\u53d1\\u5c55<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u9ed1\\u9f99\\u6c5f\\u79d1\\u5b66<\\/span><\\/td>\\u97a0\\u6625\\u7ea2;\\u5f20\\u4f1f\\u541b;\\u738b\\u5fd7\\u6210;\\u674e\\u798f\\u88ff;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
63<\\/span><\\/td>M15\\u8f66\\u7528\\u7532\\u9187\\u6c7d\\u6cb9\\u590d\\u5408\\u6dfb\\u52a0\\u5242\\u7684\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u5510\\u8bd7\\u6d0b;\\u674e\\u5065;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
64<\\/span><\\/td>\\u5bf9\\u6211\\u56fd\\u9187\\u919a\\u71c3\\u6599\\u4ea7\\u4e1a\\u7684\\u53d1\\u5c55\\u601d\\u8def\\u4e0e\\u5bf9\\u7b56\\u63a2\\u8ba8<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u519c\\u673a\\u4f7f\\u7528\\u4e0e\\u7ef4\\u4fee<\\/span><\\/td>\\u5218\\u5ca9;\\u5f20\\u6811\\u534e;\\u5510\\u8bd7\\u6d0b;\\u674e\\u5065;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
65<\\/span><\\/td>\\u81ed\\u6c27\\u52a9\\u71c3\\u6280\\u672f\\u5728\\u67f4\\u6cb9\\u53d1\\u52a8\\u673a\\u4e2d\\u7684\\u5e94\\u7528<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u519c\\u673a\\u4f7f\\u7528\\u4e0e\\u7ef4\\u4fee<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u5510\\u8bd7\\u6d0b;\\u674e\\u5065;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
66<\\/span><\\/td>\\u86c7\\u7eb9\\u77f3\\u7c89\\u4f53\\u4f5c\\u4e3a\\u673a\\u68b0\\u6469\\u64e6\\u526f\\u78e8\\u635f\\u8868\\u9762\\u81ea\\u4fee\\u590d\\u6dfb\\u52a0\\u5242\\u7684\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u5510\\u8bd7\\u6d0b;\\u674e\\u5065;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
67<\\/span><\\/td>\\u7126\\u5316\\u5e9f\\u6c34\\u4e2d\\u82ef\\u915a\\u542b\\u91cf\\u7684\\u6d4b\\u5b9a\\u65b9\\u6cd5\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u4e2d\\u56fd\\u7ed9\\u6c34\\u6392\\u6c34<\\/span><\\/td>\\u5f20\\u5b8f\\u68ee;\\u5468\\u56fd\\u6c5f;\\u5468\\u626c;\\u738b\\u5f66\\u5f6a;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
68<\\/span><\\/td>\\u8f66\\u7528\\u6c7d\\u6cb9\\u590d\\u5408\\u8c03\\u8282\\u5242\\u6280\\u672f\\u7814\\u7a76<\\/span><\\/td>\\u6838\\u5fc3<\\/span><\\/td>\\u5316\\u5b66\\u5de5\\u7a0b\\u5e08<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u5510\\u8bd7\\u6d0b;\\u674e\\u5065;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
69<\\/span><\\/td>\\u5173\\u4e8e\\u8f66\\u7528\\u66ff\\u4ee3\\u71c3\\u6599\\u7684\\u53d1\\u5c55\\u72b6\\u51b5\\u4e0e\\u524d\\u666f\\u63a2\\u6790<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u519c\\u673a\\u4f7f\\u7528\\u4e0e\\u7ef4\\u4fee<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u5510\\u8bd7\\u6d0b;\\u674e\\u5065;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
70<\\/span><\\/td>\\u5185\\u71c3\\u673a\\u66ff\\u4ee3\\u71c3\\u6599\\u7684\\u5c34\\u5c2c\\u5883\\u5730<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u519c\\u673a\\u4f7f\\u7528\\u4e0e\\u7ef4\\u4fee<\\/span><\\/td>\\u5f20\\u6811\\u534e;\\u5218\\u5ca9;\\u5510\\u8bd7\\u6d0b;\\u674e\\u5065;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr>
71<\\/span><\\/td>\\u6405\\u62cc\\u65f6\\u95f4\\u5bf9\\u9ad8\\u56fa\\u542b\\u91cf\\u5976\\u725b\\u7caa\\u4fbf\\u9ad8\\u6e29\\u538c\\u6c27\\u6d88\\u5316\\u7684\\u5f71\\u54cd\\u7814\\u7a76<\\/span><\\/td>\\u4e00\\u822c<\\/span><\\/td>\\u5e94\\u7528\\u80fd\\u6e90\\u6280\\u672f<\\/span><\\/td>\\u5218\\u4f1f;\\u738b\\u6b23;\\u5f90\\u6653\\u79cb;\\u79e6\\u56fd\\u8f89;\\u738b\\u7389\\u9e4f;\\u5218\\u65ed\\u4e39;<\\/span><\\/td>2012<\\/span><\\/td><\\/tr><\\/tbody><\\/table>

<\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles?&title=2012-2015&category%5Bid%5D=\"}', '2020-06-03 09:15:55', '2020-06-03 09:15:55'); +INSERT INTO `admin_operation_log` (`id`, `user_id`, `path`, `method`, `ip`, `input`, `created_at`, `updated_at`) VALUES +(565, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"2012-2015\",\"category\":{\"id\":null}}', '2020-06-03 09:15:55', '2020-06-03 09:15:55'), +(566, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"2008-2015\",\"category\":{\"id\":null},\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:16:05', '2020-06-03 09:16:05'), +(567, 1, 'admin/articles/148/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:16:07', '2020-06-03 09:16:07'), +(568, 1, 'admin/articles/148', 'PUT', '1.190.203.218', '{\"title\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662<\\/br>\\u4e13\\u5229\\u76ee\\u5f55\\uff082008-2015\\uff09\",\"category_id\":\"21\",\"description\":\"\\u5e8f\\u53f7 \\u4e13\\u5229\\u540d\\u79f0 \\u4e13\\u5229\\u53f7 \\u7c7b\\u578b 1 \\u5229\\u7528\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fd0\\u884c\\u53c2\\u6570\\u65e0\\u7ebf\\u5b9e\\u65f6\\u76d1\\u6d4b\\u7cfb\\u7edf\\u5bf9\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fd0\\u884c\\u53c2\\u6570\\u76d1\\u6d4b\\u7684\\u65b9\\u6cd5 ZL201310364454.2 \\u53d1\\u660e\\u4e13\\u5229 2 \\u4e00\\u79cd\\u57fa\\u4e8e\\u6cbc\\u6c14\\u53d1\\u7535\\u7684\\u4f59\\u70ed\\u56de\\u6536\\u5229\\u7528\\u7cfb\\u7edf ZL201310\",\"content\":\"<\\/colgroup>' ); + } else { + tableHtml[ i ].push( '' ); + } + + tableData[ i ][ j ] = value; + + } + + tableHtml[ i ] = tableHtml[ i ].join( "" ); + + } + + //draw 表格 + $( "#tableContainer" ).html( '
\\u5e8f\\u53f7<\\/span><\\/td>\\u4e13\\u5229\\u540d\\u79f0<\\/span><\\/td>\\u4e13\\u5229\\u53f7<\\/span><\\/td>\\u7c7b\\u578b<\\/span><\\/td><\\/tr>
1<\\/span><\\/td>\\u5229\\u7528\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fd0\\u884c\\u53c2\\u6570\\u65e0\\u7ebf\\u5b9e\\u65f6\\u76d1\\u6d4b\\u7cfb\\u7edf\\u5bf9\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fd0\\u884c\\u53c2\\u6570\\u76d1\\u6d4b\\u7684\\u65b9\\u6cd5<\\/span><\\/td>ZL201310364454.2<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
2<\\/span><\\/td>\\u4e00\\u79cd\\u57fa\\u4e8e\\u6cbc\\u6c14\\u53d1\\u7535\\u7684\\u4f59\\u70ed\\u56de\\u6536\\u5229\\u7528\\u7cfb\\u7edf<\\/span><\\/td>ZL201310674344.6<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
3<\\/span><\\/td>\\u4e00\\u79cd\\u8f66\\u7528\\u71c3\\u6599\\u6cb9\\u6297\\u6c34\\u590d\\u5408\\u6dfb\\u52a0\\u5242<\\/span><\\/td>ZL201410445460.5<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
4<\\/span><\\/td>\\u4e00\\u79cd\\u542b\\u8d85\\u7ec6\\u7a00\\u571f\\u7c89\\u4f53\\u6da6\\u6ed1\\u6cb9\\u6dfb\\u52a0\\u5242<\\/span><\\/td>ZL201310631999.5<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
5<\\/span><\\/td>\\u8f66\\u7528\\u6c7d\\u6cb9\\u590d\\u5408\\u8c03\\u8282\\u5242<\\/span><\\/td>ZL201310140441.7<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
6<\\/span><\\/td>\\u6709\\u673a\\u65e0\\u7070\\u7c7bM15\\u8f66\\u7528\\u7532\\u9187\\u6c7d\\u6cb9\\u590d\\u5408\\u6dfb\\u52a0\\u5242<\\/span><\\/td>ZL201210258097.7<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
7<\\/span><\\/td>\\u91c7\\u7528\\u5168\\u998f\\u5206\\u9875\\u5ca9\\u6cb9\\u751f\\u4ea7\\u4f4e\\u786b\\u4f4e\\u51dd\\u67f4\\u6cb9\\u7684\\u65b9\\u6cd5<\\/span><\\/td>ZL201310484593.9<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
8<\\/span><\\/td>\\u4e00\\u79cd\\u6cbc\\u6c14\\u65cb\\u8f6c\\u51b7\\u51dd\\u7684\\u88c5\\u7f6e<\\/span><\\/td>ZL201310381690.5<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
9<\\/span><\\/td>\\u4e00\\u79cd\\u6405\\u62cc\\u7834\\u58f3\\u4e8e\\u4e00\\u4f53\\u7684\\u53d1\\u9175\\u53cd\\u5e94\\u5668<\\/span><\\/td>ZL201310367177<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
10<\\/span><\\/td>\\u4e00\\u79cd\\u6539\\u6027\\u805a\\u5bf9\\u82ef\\u4e8c\\u7532\\u9178\\u4e59\\u4e8c\\u9187\\u916f\\u65e0\\u7eba\\u5e03\\u590d\\u5408\\u819c\\u7684\\u5236\\u5907\\u65b9\\u6cd5<\\/span><\\/td>ZL201310484592.4<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
11<\\/span><\\/td>\\u7532\\u9187\\u4e73\\u5316\\u67f4\\u6cb9\\u53ca\\u5176\\u5236\\u5907\\u65b9\\u6cd5<\\/span><\\/td>ZL201410091283.5<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
12<\\/span><\\/td>\\u4e00\\u79cd\\u5229\\u7528\\u5564\\u9152\\u5382\\u6c61\\u6c34\\u57f9\\u517b\\u4ea7\\u6cb9\\u5fae\\u85fb\\u7684\\u65b9\\u6cd5<\\/span><\\/td>ZL201310625139.0<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
13<\\/span><\\/td>\\u4e00\\u79cd\\u57fa\\u4e8e\\u6cbc\\u6c14\\u53d1\\u7535\\u7684\\u4f59\\u70ed\\u56de\\u6536\\u5229\\u7528\\u7cfb\\u7edf<\\/span><\\/td>201310674345<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
14<\\/span><\\/td>\\u4e00\\u79cd\\u6e29\\u5ea6\\u81ea\\u63a7\\u98ce\\u529b\\u5236\\u70ed\\u88c5\\u7f6e<\\/span><\\/td>201310692604<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
15<\\/span><\\/td>\\u4e00\\u79cd\\u73af\\u6c27\\u6811\\u8102\\u56fa\\u5316\\u7a0b\\u5ea6\\u5728\\u7ebf\\u76d1\\u63a7\\u7cfb\\u7edf\\u53ca\\u91c7\\u7528\\u8be5\\u7cfb\\u7edf\\u5bf9\\u73af\\u6c27\\u6811\\u8102\\u56fa\\u5316\\u7a0b\\u5ea6\\u76d1\\u63a7\\u7684\\u65b9\\u6cd5<\\/span><\\/td>201310511396<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
16<\\/span><\\/td>\\u4e00\\u79cd\\u592a\\u9633\\u80fd\\u96c6\\u70ed\\u63a7\\u5236\\u7cfb\\u7edf\\u53ca\\u5176\\u96c6\\u70ed\\u63a7\\u5236\\u65b9\\u6cd5<\\/span><\\/td>201310421572<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
17<\\/span><\\/td>\\u53ef\\u6d4b\\u5b9a\\u51fa\\u6599\\u4f4d\\u7f6e\\u7684CSTR\\u53cd\\u5e94\\u5668<\\/span><\\/td>201310470071<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
18<\\/span><\\/td>\\u5229\\u7528\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fd0\\u884c\\u53c2\\u6570\\u65e0\\u7ebf\\u5b9e\\u65f6\\u76d1\\u6d4b\\u7cfb\\u7edf\\u5bf9\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fd0\\u884c\\u53c2\\u6570\\u76d1\\u6d4b\\u7684\\u65b9\\u6cd5<\\/span><\\/td>201310364454<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
19<\\/span><\\/td>\\u4e00\\u79cd\\u538c\\u6c27\\u53d1\\u9175\\u5206\\u6bb5\\u63a7\\u6e29\\u7cfb\\u7edf\\u53ca\\u65b9\\u6cd5<\\/span><\\/td>201310364456<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
20<\\/span><\\/td>\\u4e00\\u79cd\\u6cbc\\u6c14\\u65cb\\u8f6c\\u51b7\\u51dd\\u7684\\u88c5\\u7f6e<\\/span><\\/td>201310381691<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
21<\\/span><\\/td>\\u4e00\\u79cd\\u6405\\u62cc\\u7834\\u58f3\\u4e8e\\u4e00\\u4f53\\u7684\\u53d1\\u9175\\u53cd\\u5e94\\u5668\\u53ca\\u6405\\u62cc\\u7834\\u58f3\\u65b9\\u6cd5<\\/span><\\/td>201310367177<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
22<\\/span><\\/td>\\u8054\\u5408\\u4f7f\\u7528\\u7684\\u538c\\u6c27\\u53d1\\u9175\\u53cd\\u5e94\\u5668<\\/span><\\/td>201210338447<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
23<\\/span><\\/td>\\u538c\\u6c27\\u53d1\\u9175\\u7f50\\u4f53\\u6cbc\\u6c14\\u8d2e\\u91cf\\u7684\\u6d4b\\u91cf\\u65b9\\u6cd5\\u53ca\\u5b9e\\u73b0\\u8be5\\u65b9\\u6cd5\\u7684\\u88c5\\u7f6e<\\/span><\\/td>201110078502<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
24<\\/span><\\/td>\\u4e00\\u79cd\\u539f\\u6599\\u9884\\u5904\\u7406\\u88c5\\u7f6e\\u53ca\\u5229\\u7528\\u8be5\\u88c5\\u7f6e\\u5b9e\\u73b0\\u6cbc\\u6c14\\u6536\\u96c6\\u7684\\u7cfb\\u7edf<\\/span><\\/td>201110058808<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
25<\\/span><\\/td>\\u4e00\\u79cd\\u5229\\u7528\\u592a\\u9633\\u80fd\\u7684\\u76f4\\u8d2e\\u70ed\\u538c\\u6c27\\u6d88\\u5316\\u88c5\\u7f6e<\\/span><\\/td>201110056367<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
26<\\/span><\\/td>\\u538c\\u6c27\\u5f80\\u590d\\u6298\\u6d41\\u590d\\u5408\\u6d88\\u5316\\u88c5\\u7f6e<\\/span><\\/td>201110042375<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
27<\\/span><\\/td>\\u4e00\\u79cd\\u7528\\u4e8e\\u725b\\u573a\\u6c61\\u6c34\\u5904\\u7406\\u7684\\u4e8c\\u6b21\\u538c\\u6c27\\u6d88\\u5316\\u88c5\\u7f6e<\\/span><\\/td>201010611390<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
28<\\/span><\\/td>\\u4e00\\u79cd60Co\\u03b3-\\u5c04\\u7ebf\\u8f90\\u7167\\u725b\\u7caa\\u63d0\\u9ad8\\u6cbc\\u6c14\\u4ea7\\u91cf\\u7684\\u65b9\\u6cd5<\\/span><\\/td>\\u3000<\\/span><\\/td>\\u53d1\\u660e\\u4e13\\u5229<\\/span><\\/td><\\/tr>
29<\\/span><\\/td>\\u53ef\\u6d4b\\u5b9a\\u51fa\\u6599\\u4f4d\\u7f6e\\u7684CSTR\\u53cd\\u5e94\\u5668<\\/span><\\/td>201320623818<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
30<\\/span><\\/td>\\u4e00\\u79cd\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fd0\\u884c\\u53c2\\u6570\\u7684\\u65e0\\u7ebf\\u5b9e\\u65f6\\u76d1\\u6d4b\\u7cfb\\u7edf<\\/span><\\/td>201320509482<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
31<\\/span><\\/td>\\u8054\\u5408\\u4f7f\\u7528\\u7684\\u538c\\u6c27\\u53d1\\u9175\\u53cd\\u5e94\\u5668<\\/span><\\/td>201220466304<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
32<\\/span><\\/td>\\u4e00\\u79cd\\u6cbc\\u6c14\\u53d1\\u9175\\u8fc7\\u7a0b\\u72b6\\u6001\\u68c0\\u6d4b\\u7cfb\\u7edf<\\/span><\\/td>ZL201420711902.1<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
33<\\/span><\\/td>\\u592a\\u9633\\u80fd\\u7a7a\\u6c14\\u667a\\u80fd\\u91c7\\u6696\\u88c5\\u7f6e<\\/span><\\/td>ZL201420688401.6<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
34<\\/span><\\/td>\\u4e00\\u79cd\\u538c\\u6c27\\u53d1\\u9175\\u5206\\u6bb5\\u63a7\\u6e29\\u7cfb\\u7edf<\\/span><\\/td>ZL201320509483.9<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
35<\\/span><\\/td>\\u4e00\\u79cd\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fd0\\u884c\\u53c2\\u6570\\u7684\\u65e0\\u7ebf\\u5b9e\\u65f6\\u76d1\\u6d4b\\u7cfb\\u7edf<\\/span><\\/td>ZL201320509482.4 <\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
36<\\/span><\\/td>\\u4e00\\u79cd\\u592a\\u9633\\u80fd\\u96c6\\u70ed\\u63a7\\u5236\\u7cfb\\u7edf<\\/span><\\/td>ZL201320573185.6<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
37<\\/span><\\/td>\\u57fa\\u4e8eBuck\\u53d8\\u6362\\u5668\\u7684\\u65e0\\u5237\\u76f4\\u6d41\\u7535\\u673a\\u9a71\\u52a8\\u7535\\u8def<\\/span><\\/td>ZL201420663823.8<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
38<\\/span><\\/td>\\u65e0\\u5237\\u76f4\\u6d41\\u7535\\u673a\\u53cd\\u7535\\u52a8\\u52bf\\u4e09\\u6b21\\u8c10\\u6ce2\\u68c0\\u6d4b\\u7535\\u8def<\\/span><\\/td>ZL201420678192.7<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
39<\\/span><\\/td>\\u4e00\\u79cd\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u88c5\\u7f6e<\\/span><\\/td>ZL201420670351.9<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
40<\\/span><\\/td>\\u592a\\u9633\\u80fd\\u52a9\\u529b\\u5f0f\\u98ce\\u529b\\u53d1\\u7535\\u88c5\\u7f6e<\\/span><\\/td>ZL201420759477.3<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
41<\\/span><\\/td>\\u7535\\u7ebf\\u56fa\\u5b9a\\u88c5\\u7f6e<\\/span><\\/td>ZL201420711843.8<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
42<\\/span><\\/td>\\u4e00\\u79cd\\u5e26\\u6709\\u4f9b\\u70ed\\u7cfb\\u7edf\\u7684\\u6052\\u6e29\\u5efa\\u7b51<\\/span><\\/td>ZL201420697172.4 <\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
43<\\/span><\\/td>\\u4e00\\u79cd\\u5e26\\u6709\\u6cbc\\u6db2\\u56de\\u6d41\\u7ba1\\u7ebf\\u7684\\u755c\\u79bd\\u7caa\\u4fbf\\u538c\\u6c27\\u53d1\\u9175\\u88c5\\u7f6e<\\/span><\\/td>ZL201420697135.3<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
44<\\/span><\\/td>\\u4e00\\u79cd\\u5229\\u7528\\u56de\\u6536\\u7684\\u6cbc\\u6db2\\u55b7\\u6dcb\\u79f8\\u79c6\\u7684\\u5e72\\u5f0f\\u538c\\u6c27\\u53d1\\u9175\\u88c5\\u7f6e<\\/span><\\/td>ZL201420707710.3<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
45<\\/span><\\/td>\\u4e00\\u79cd\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u88c5\\u7f6e<\\/span><\\/td>ZL201420670351.9<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
46<\\/span><\\/td>\\u53ef\\u6d4b\\u5b9a\\u51fa\\u6599\\u4f4d\\u7f6e\\u7684CSTR\\u53cd\\u5e94\\u5668<\\/span><\\/td>ZL201320623817.5<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
47<\\/span><\\/td>\\u4e00\\u79cd\\u6cbc\\u6c14\\u65cb\\u8f6c\\u51b7\\u51dd\\u7684\\u88c5\\u7f6e<\\/span><\\/td>ZL201320529632.8<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
48<\\/span><\\/td>\\u4e00\\u79cd\\u6405\\u62cc\\u7834\\u58f3\\u4e8e\\u4e00\\u4f53\\u7684\\u53d1\\u9175\\u53cd\\u5e94\\u5668<\\/span><\\/td>ZL201320512530.5<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
49<\\/span><\\/td>\\u4ea7\\u6cb9\\u5fae\\u85fb\\u7684\\u4e00\\u4f53\\u5f0f\\u57f9\\u517b\\u88c5\\u7f6e<\\/span><\\/td>ZL201420312552.1<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
50<\\/span><\\/td>\\u4e00\\u79cd\\u592a\\u9633\\u80fd\\u96c6\\u70ed\\u63a7\\u5236\\u7cfb\\u7edf<\\/span><\\/td>201320573186<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
51<\\/span><\\/td>\\u4e00\\u79cd\\u538c\\u6c27\\u53d1\\u9175\\u5206\\u6bb5\\u63a7\\u6e29\\u7cfb\\u7edf<\\/span><\\/td>201320509484<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
52<\\/span><\\/td>\\u4e00\\u79cd\\u6cbc\\u6c14\\u65cb\\u8f6c\\u51b7\\u51dd\\u7684\\u88c5\\u7f6e<\\/span><\\/td>201320529633<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
53<\\/span><\\/td>\\u4e00\\u79cd\\u6405\\u62cc\\u7834\\u58f3\\u4e8e\\u4e00\\u4f53\\u7684\\u53d1\\u9175\\u53cd\\u5e94\\u5668<\\/span><\\/td>201320512531<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
54<\\/span><\\/td>\\u538c\\u6c27\\u5f80\\u590d\\u6298\\u6d41\\u590d\\u5408\\u6d88\\u5316\\u88c5\\u7f6e<\\/span><\\/td>201120045415<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
55<\\/span><\\/td>\\u4e00\\u79cd\\u7528\\u4e8e\\u725b\\u573a\\u6c61\\u6c34\\u6c89\\u964d\\u51c0\\u5316\\u5904\\u7406\\u7684\\u4e8c\\u6b21\\u538c\\u6c27\\u6d88\\u5316\\u88c5\\u7f6e<\\/span><\\/td>201020686844<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr>
56<\\/span><\\/td>\\u7528\\u4e8e\\u6052\\u6e29\\u5b9e\\u9a8c\\u5ba4\\u7684\\u76f8\\u8f6c\\u53d8\\u592a\\u9633\\u80fd\\u8d2e\\u70ed\\u88c5\\u7f6e<\\/span><\\/td>200920317606<\\/span><\\/td>\\u5b9e\\u7528\\u65b0\\u578b<\\/span><\\/td><\\/tr><\\/tbody><\\/table>

<\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles?&title=2008-2015&category%5Bid%5D=\"}', '2020-06-03 09:16:13', '2020-06-03 09:16:13'), +(569, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"2008-2015\",\"category\":{\"id\":null}}', '2020-06-03 09:16:13', '2020-06-03 09:16:13'), +(570, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u4e00\\u79cd\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fd0\\u884c\\u53c2\\u6570\\u7684\\u65e0\\u7ebf\\u5b9e\\u65f6\\u76d1\\u6d4b\\u7cfb\\u7edf\",\"category\":{\"id\":null},\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:16:29', '2020-06-03 09:16:29'), +(571, 1, 'admin/articles/100/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:16:32', '2020-06-03 09:16:32'), +(572, 1, 'admin/articles/100', 'PUT', '1.190.203.218', '{\"title\":\"\\u4e13\\u5229\\u300a\\u4e00\\u79cd\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fd0\\u884c\\u53c2\\u6570\\u7684\\u65e0\\u7ebf\\u5b9e\\u65f6\\u76d1\\u6d4b\\u7cfb\\u7edf\\u300b\",\"category_id\":\"21\",\"description\":\"\\u4e13\\u5229\\u540d\\u79f0 \\u7533\\u8bf7\\u53f7 \\u6388 \\u6743 \\u65f6 \\u95f4 \\u4e00\\u79cd\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fd0\\u884c\\u53c2\\u6570\\u7684\\u65e0\\u7ebf\\u5b9e\\u65f6\\u76d1\\u6d4b\\u7cfb\\u7edf\\uff08\\u5b9e\\u7528\\u65b0\\u578b\\uff0c\\u5f90\\u6653\\u79cb\\uff09 201320509482.4 2014.1.15\",\"content\":\"]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*\s*$/g,bz={option:[1,""],legend:[1,"
","
"],thead:[1,"
\\u4e13\\u5229\\u540d\\u79f0<\\/span><\\/td>\\u7533\\u8bf7\\u53f7<\\/span><\\/td>\\u6388 \\u6743 \\u65f6 \\u95f4<\\/span><\\/td><\\/tr>
\\u4e00\\u79cd\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fd0\\u884c\\u53c2\\u6570\\u7684\\u65e0\\u7ebf\\u5b9e\\u65f6\\u76d1\\u6d4b\\u7cfb\\u7edf\\uff08\\u5b9e\\u7528\\u65b0\\u578b\\uff0c\\u5f90\\u6653\\u79cb\\uff09<\\/span><\\/td>201320509482.4<\\/span><\\/td>2014.1.15<\\/span><\\/td><\\/tr><\\/tbody><\\/table>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles?&title=%E4%B8%80%E7%A7%8D%E9%AB%98%E6%B8%A9%E5%8E%8C%E6%B0%A7%E5%8F%91%E9%85%B5%E8%BF%90%E8%A1%8C%E5%8F%82%E6%95%B0%E7%9A%84%E6%97%A0%E7%BA%BF%E5%AE%9E%E6%97%B6%E7%9B%91%E6%B5%8B%E7%B3%BB%E7%BB%9F&category%5Bid%5D=\"}', '2020-06-03 09:16:39', '2020-06-03 09:16:39'), +(573, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u4e00\\u79cd\\u9ad8\\u6e29\\u538c\\u6c27\\u53d1\\u9175\\u8fd0\\u884c\\u53c2\\u6570\\u7684\\u65e0\\u7ebf\\u5b9e\\u65f6\\u76d1\\u6d4b\\u7cfb\\u7edf\",\"category\":{\"id\":null}}', '2020-06-03 09:16:39', '2020-06-03 09:16:39'), +(574, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u7b80\\u4ecb\",\"category\":{\"id\":null},\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:16:52', '2020-06-03 09:16:52'), +(575, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:16:56', '2020-06-03 09:16:56'); +INSERT INTO `admin_operation_log` (`id`, `user_id`, `path`, `method`, `ip`, `input`, `created_at`, `updated_at`) VALUES +(576, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u80fd\\u6e90\\u9662\\u7b80\\u4ecb\",\"category_id\":\"2\",\"description\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\",\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles?&title=%E7%AE%80%E4%BB%8B&category%5Bid%5D=\"}', '2020-06-03 09:17:04', '2020-06-03 09:17:04'), +(577, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '[]', '2020-06-03 09:17:04', '2020-06-03 09:17:04'), +(578, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u80fd\\u6e90\\u9662\\u7b80\\u4ecb\",\"category_id\":\"2\",\"description\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\",\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\"}', '2020-06-03 09:18:15', '2020-06-03 09:18:15'), +(579, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '[]', '2020-06-03 09:18:15', '2020-06-03 09:18:15'), +(580, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u80fd\\u6e90\\u9662\\u7b80\\u4ecb\",\"category_id\":\"2\",\"description\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\",\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\"}', '2020-06-03 09:18:31', '2020-06-03 09:18:31'), +(581, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '[]', '2020-06-03 09:18:31', '2020-06-03 09:18:31'), +(582, 1, 'admin/links', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:19:46', '2020-06-03 09:19:46'), +(583, 1, 'admin/links/1/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:19:49', '2020-06-03 09:19:49'), +(584, 1, 'admin/links', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:19:51', '2020-06-03 09:19:51'), +(585, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:20:49', '2020-06-03 09:20:49'), +(586, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"title\":\"\\u7b80\\u4ecb\",\"category\":{\"id\":null}}', '2020-06-03 09:20:55', '2020-06-03 09:20:55'), +(587, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:20:58', '2020-06-03 09:20:58'), +(588, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u80fd\\u6e90\\u9662\\u7b80\\u4ecb\",\"category_id\":\"2\",\"description\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\",\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles?&title=%E7%AE%80%E4%BB%8B&category%5Bid%5D=\"}', '2020-06-03 09:21:32', '2020-06-03 09:21:32'), +(589, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '[]', '2020-06-03 09:21:32', '2020-06-03 09:21:32'), +(590, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u80fd\\u6e90\\u9662\\u7b80\\u4ecb\",\"category_id\":\"2\",\"description\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\",\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\"}', '2020-06-03 09:21:41', '2020-06-03 09:21:41'), +(591, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '[]', '2020-06-03 09:21:41', '2020-06-03 09:21:41'); +INSERT INTO `admin_operation_log` (`id`, `user_id`, `path`, `method`, `ip`, `input`, `created_at`, `updated_at`) VALUES +(592, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u80fd\\u6e90\\u9662\\u7b80\\u4ecb\",\"category_id\":\"2\",\"description\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\",\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\"}', '2020-06-03 09:23:31', '2020-06-03 09:23:31'), +(593, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-03 09:23:31', '2020-06-03 09:23:31'), +(594, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u7b80\\u4ecb\",\"category\":{\"id\":null},\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:23:40', '2020-06-03 09:23:40'), +(595, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:23:41', '2020-06-03 09:23:41'), +(596, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u80fd\\u6e90\\u9662\\u7b80\\u4ecb\",\"category_id\":\"2\",\"description\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\",\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles?title=%E7%AE%80%E4%BB%8B&category%5Bid%5D=\"}', '2020-06-03 09:23:46', '2020-06-03 09:23:46'), +(597, 1, 'admin/articles/255/edit', 'GET', '1.190.203.218', '[]', '2020-06-03 09:23:46', '2020-06-03 09:23:46'), +(598, 1, 'admin/articles/255', 'PUT', '1.190.203.218', '{\"title\":\"\\u80fd\\u6e90\\u9662\\u7b80\\u4ecb\",\"category_id\":\"2\",\"description\":\"\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\",\"content\":\"

\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u7b80\\u4ecb<\\/span><\\/h1>

       \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u521b\\u5efa\\u4e8e1995\\u5e74\\uff0c\\u524d\\u8eab\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u8282\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u4e2d\\u5fc3\\u201d\\uff0c\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u5385\\uff0c2003\\u5e74\\u66f4\\u540d\\u4e3a\\u201c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u201d\\u30022010\\u5e74\\u96b6\\u5c5e\\u4e8e\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u5b66\\u9662\\uff0c\\u5c5e\\u516c\\u76ca\\u4e00\\u7c7b\\u4e8b\\u4e1a\\u5355\\u4f4d\\u3002<\\/span><\\/p>

        \\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u662f\\u4e00\\u4e2a\\u57fa\\u7840\\u7814\\u7a76\\u4e0e\\u5e94\\u7528\\u7814\\u7a76\\u5e76\\u91cd\\u3001\\u516c\\u76ca\\u670d\\u52a1\\u4e0e\\u6280\\u672f\\u521b\\u65b0\\u76f8\\u7ed3\\u5408\\u7684\\u7efc\\u5408\\u6027\\u7814\\u7a76\\u9662\\u3002\\u4e8c\\u5341\\u591a\\u5e74\\u6765\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u6839\\u636e\\u5730\\u57df\\u7279\\u70b9\\uff0c\\u4e0d\\u65ad\\u5b8c\\u5584\\u5b66\\u79d1\\u4f53\\u7cfb\\uff0c\\u7a33\\u6b65\\u63d0\\u9ad8\\u79d1\\u7814\\u6c34\\u5e73\\uff0c\\u5f62\\u6210\\u4e86\\u9c9c\\u660e\\u7684\\u79d1\\u7814\\u7279\\u8272\\u3002\\u5176\\u804c\\u80fd\\u4e3a\\u201c\\u56f4\\u7ed5\\u56fd\\u5bb6\\u91cd\\u5927\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u9ed1\\u9f99\\u6c5f\\u7701\\u653f\\u5e9c\\u51b3\\u7b56\\u548c\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\u7684\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u5728\\u73af\\u5883\\u5de5\\u7a0b\\u3001\\u4e00\\u6b21\\u80fd\\u6e90\\u3001\\u4e8c\\u6b21\\u80fd\\u6e90\\u7b49\\u5b66\\u79d1\\u9886\\u57df\\u5f00\\u5c55\\u57fa\\u7840\\u6027\\u3001\\u7cfb\\u7edf\\u6027\\u548c\\u524d\\u77bb\\u6027\\u7814\\u7a76\\uff0c\\u638c\\u63e1\\u548c\\u7a81\\u7834\\u5173\\u952e\\u6838\\u5fc3\\u6280\\u672f\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u6218\\u7565\\u3001\\u7ecf\\u6d4e\\u548c\\u793e\\u4f1a\\u53d1\\u5c55\\u63d0\\u4f9b\\u79d1\\u6280\\u652f\\u6491\\u201d\\u3002\\u62e5\\u6709\\u80fd\\u6e90\\u5316\\u5b66\\u7701\\u7ea7\\u9886\\u519b\\u4eba\\u624d\\u68af\\u961f\\u548c\\u9ed1\\u9f99\\u6c5f\\u7701\\u71c3\\u6cb9\\u71c3\\u7164\\u6e05\\u6d01\\u80fd\\u6e90\\u91cd\\u70b9\\u5b9e\\u9a8c\\u5ba4\\u3002        \\u8fd1\\u5e74\\u6765\\u5f62\\u6210\\u4e86\\u80fd\\u6e90\\u5316\\u5b66\\u3001\\u751f\\u7269\\u8d28\\u80fd\\u548c\\u56fa\\u5e9f\\u5904\\u7406\\u4e0e\\u73af\\u5883\\u6539\\u5584\\u4e09\\u4e2a\\u5b66\\u79d1\\u9886\\u57df\\u516d\\u4e2a\\u91cd\\u70b9\\u7814\\u7a76\\u65b9\\u5411\\u7684\\u79d1\\u7814\\u4f53\\u7cfb\\u3002\\u5728\\u9ed1\\u9f99\\u6c5f\\u7701\\u5efa\\u6210\\u4e86\\u9996\\u5ea7\\u53ef\\u5168\\u5e74\\u8fde\\u7eed\\u7a33\\u5b9a\\u8fd0\\u884c\\u7684\\u5927\\u578b\\u6cbc\\u6c14\\u53d1\\u7535\\u5de5\\u7a0b\\uff0c\\u5728\\u50ac\\u5316\\u6cb9\\u6d46\\u5236\\u5907\\u65b0\\u6750\\u6599\\u5f62\\u6210\\u6280\\u672f\\u521b\\u65b0\\uff0c\\u5728\\u6cb9\\u9875\\u5ca9\\u7efc\\u5408\\u5229\\u7528\\u5f62\\u6210\\u6280\\u672f\\u50a8\\u5907\\u3002\\u5728\\u7164\\u77f8\\u77f3\\u5904\\u7406\\u3001\\u5ba4\\u5185\\u7a7a\\u6c14\\u8d28\\u91cf\\u6539\\u5584\\u3001\\u519c\\u6751\\u5783\\u573e\\u3001\\u5395\\u6240\\u9769\\u547d\\u3001\\u79f8\\u79c6\\u56fa\\u4f53\\u71c3\\u6599\\u7b49\\u65b9\\u5411\\u79ef\\u6781\\u4e0e\\u56fd\\u5185\\u77e5\\u540d\\u9ad8\\u6821\\u3001\\u79d1\\u7814\\u9662\\u6240\\u548c\\u4f01\\u4e1a\\u5f00\\u5c55\\u8054\\u5408\\uff0c\\u5927\\u529b\\u63a8\\u8fdb\\u5e9f\\u5f03\\u7269\\u5904\\u7406\\u6280\\u672f\\u8054\\u5408\\u7814\\u53d1\\u548c\\u6210\\u679c\\u843d\\u5730\\uff0c\\u6539\\u5584\\u519c\\u6751\\u548c\\u57ce\\u5e02\\u73af\\u5883\\uff0c\\u52a9\\u63a8\\u6c61\\u67d3\\u9632\\u6cbb\\u653b\\u575a\\u6218\\u3002        \\u5efa\\u9662\\u4ee5\\u6765\\uff0c\\u7d2f\\u8ba1\\u5b8c\\u6210\\u56fd\\u5bb6\\u653b\\u5173\\u9879\\u76ee4\\u9879\\uff0c\\u79d1\\u6280\\u90e8\\u56fd\\u9645\\u79d1\\u6280\\u5408\\u4f5c\\u9879\\u76ee2\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u91cd\\u5927\\u9879\\u76ee1\\u9879\\uff0c\\u9ed1\\u9f99\\u6c5f\\u7701\\u79d1\\u6280\\u653b\\u5173\\u9879\\u76ee11\\u9879\\uff0c\\u7701\\u81ea\\u7136\\u79d1\\u5b66\\u57fa\\u91d12\\u9879\\uff0c\\u5404\\u7ea7\\u79d1\\u7814\\u9879\\u76ee120\\u4f59\\u9879\\u3002\\u83b7\\u5f97\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u53d1\\u660e\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e2d\\u56fd\\u77f3\\u6cb9\\u548c\\u5316\\u5b66\\u534f\\u4f1a\\u79d1\\u6280\\u8fdb\\u6b65\\u4e8c\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u6280\\u8fdb\\u6b65\\u4e09\\u7b49\\u59561\\u9879\\uff0c\\u7701\\u79d1\\u5b66\\u9662\\u79d1\\u6280\\u8fdb\\u6b65\\u4e00\\u7b49\\u59562\\u9879\\uff0c\\u4e8c\\u7b49\\u59561\\u9879\\uff1b\\u83b7\\u5f97\\u56fd\\u5bb6\\u4e13\\u5229100\\u4f59\\u9879\\uff1b\\u53d1\\u8868\\u79d1\\u6280\\u8bba\\u6587200\\u4f59\\u7bc7\\u3002        \\u8fdb\\u5165\\u65b0\\u65f6\\u4ee3\\u7684\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\uff0c\\u5c06\\u201c\\u4e0d\\u5fd8\\u521d\\u5fc3\\uff0c\\u7262\\u8bb0\\u4f7f\\u547d\\u201d\\uff0c\\u9762\\u5411\\u653f\\u5e9c\\u6218\\u7565\\u9700\\u6c42\\uff0c\\u9762\\u5411\\u6280\\u672f\\u521b\\u65b0\\u524d\\u6cbf\\uff0c\\u9762\\u5411\\u516c\\u76ca\\u4e8b\\u4e1a\\u53d1\\u5c55\\uff0c\\u901a\\u8fc7\\u201c\\u534f\\u540c\\u521b\\u65b0\\u3001\\u5f00\\u653e\\u5408\\u4f5c\\u201d\\u7684\\u529e\\u9662\\u7406\\u5ff5\\uff0c\\u63a8\\u52a8\\u9ad8\\u8d28\\u91cf\\u53d1\\u5c55\\uff0c\\u4e3a\\u9ed1\\u9f99\\u6c5f\\u7701\\u5728\\u80fd\\u6e90\\u548c\\u73af\\u5883\\u9886\\u57df\\u7684\\u5168\\u65b9\\u4f4d\\u53d1\\u5c55\\u63d0\\u4f9b\\u6280\\u672f\\u5f15\\u9886\\uff0c\\u4e3a\\u56fd\\u5bb6\\u548c\\u5730\\u65b9\\u7ecf\\u6d4e\\u3001\\u793e\\u4f1a\\u53d1\\u5c55\\u505a\\u51fa\\u5e94\\u6709\\u7684\\u8d21\\u732e\\u3002<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\"}', '2020-06-03 09:24:21', '2020-06-03 09:24:21'), +(599, 1, 'admin/articles', 'GET', '1.190.203.218', '[]', '2020-06-03 09:24:21', '2020-06-03 09:24:21'), +(600, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u5f90 \\u6653 \\u79cb\",\"category\":{\"id\":null},\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:25:03', '2020-06-03 09:25:03'), +(601, 1, 'admin/articles/266/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:25:05', '2020-06-03 09:25:05'), +(602, 1, 'admin/articles/266', 'PUT', '1.190.203.218', '{\"title\":\"\\u5f90 \\u6653 \\u79cb\",\"category_id\":\"4\",\"description\":\"\\u4e2d\\u5171\\u515a\\u5458\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u9662\\u957f\\u3001\\u515a\\u59d4\\u4e66\\u8bb0\\r\\n\\u7814\\u7a76\\u5458\\u7ea7\\u9ad8\\u7ea7\\u5de5\\u7a0b\\u5e08\",\"content\":\"

\\u4e2d\\u5171\\u515a\\u5458<\\/span>
\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u9662\\u957f\\u3001\\u515a\\u59d4\\u4e66\\u8bb0<\\/span>
\\u7814\\u7a76\\u5458\\u7ea7\\u9ad8\\u7ea7\\u5de5\\u7a0b\\u5e08<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles?title=%E5%BE%90+%E6%99%93+%E7%A7%8B&category%5Bid%5D=\"}', '2020-06-03 09:25:12', '2020-06-03 09:25:12'), +(603, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u5f90 \\u6653 \\u79cb\",\"category\":{\"id\":null}}', '2020-06-03 09:25:12', '2020-06-03 09:25:12'), +(604, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u5173 \\u6625 \\u73b2\",\"category\":{\"id\":null},\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:25:22', '2020-06-03 09:25:22'), +(605, 1, 'admin/articles/267/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:25:23', '2020-06-03 09:25:23'), +(606, 1, 'admin/articles/267', 'PUT', '1.190.203.218', '{\"title\":\"\\u5173 \\u6625 \\u73b2\",\"category_id\":\"4\",\"description\":\"\\u4e2d\\u5171\\u515a\\u5458\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u526f\\u9662\\u957f\\u3001\\u515a\\u59d4\\u59d4\\u5458\\r\\n\\u9ad8\\u7ea7\\u4f1a\\u8ba1\\u5e08\",\"content\":\"

\\u4e2d\\u5171\\u515a\\u5458<\\/span>
\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u526f\\u9662\\u957f\\u3001\\u515a\\u59d4\\u59d4\\u5458<\\/span>
\\u9ad8\\u7ea7\\u4f1a\\u8ba1\\u5e08<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles?&title=%E5%85%B3+%E6%98%A5+%E7%8E%B2&category%5Bid%5D=\"}', '2020-06-03 09:25:29', '2020-06-03 09:25:29'), +(607, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u5173 \\u6625 \\u73b2\",\"category\":{\"id\":null}}', '2020-06-03 09:25:29', '2020-06-03 09:25:29'), +(608, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u5218 \\u4f1f\",\"category\":{\"id\":null},\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:25:37', '2020-06-03 09:25:37'), +(609, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"title\":\"\\u5218\\u4f1f\",\"category\":{\"id\":null}}', '2020-06-03 09:25:40', '2020-06-03 09:25:40'), +(610, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\",\"title\":\"\\u5218\",\"category\":{\"id\":null}}', '2020-06-03 09:25:43', '2020-06-03 09:25:43'), +(611, 1, 'admin/articles/268/edit', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-03 09:25:45', '2020-06-03 09:25:45'), +(612, 1, 'admin/articles/268', 'PUT', '1.190.203.218', '{\"title\":\"\\u5218 \\u4f1f\",\"category_id\":\"4\",\"description\":\"\\u4e2d\\u5171\\u515a\\u5458\\r\\n\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u526f\\u9662\\u957f\\u3001\\u515a\\u59d4\\u59d4\\u5458\\r\\n\\u526f\\u7814\\u7a76\\u5458\",\"content\":\"

\\u4e2d\\u5171\\u515a\\u5458<\\/span>
\\u9ed1\\u9f99\\u6c5f\\u7701\\u80fd\\u6e90\\u73af\\u5883\\u7814\\u7a76\\u9662\\u526f\\u9662\\u957f\\u3001\\u515a\\u59d4\\u59d4\\u5458<\\/span>
\\u526f\\u7814\\u7a76\\u5458<\\/span><\\/p>\",\"sort\":\"0\",\"_token\":\"3n1UyGKUck4QvmStWkyJMHl9U3F5wb3zyCpL4NBp\",\"_method\":\"PUT\",\"_previous_\":\"http:\\/\\/nyfh.cnskl.com\\/admin\\/articles?&title=%E5%88%98&category%5Bid%5D=\"}', '2020-06-03 09:25:51', '2020-06-03 09:25:51'), +(613, 1, 'admin/articles', 'GET', '1.190.203.218', '{\"title\":\"\\u5218\",\"category\":{\"id\":null}}', '2020-06-03 09:25:51', '2020-06-03 09:25:51'), +(614, 1, 'admin/articles', 'GET', '112.102.243.66', '[]', '2020-06-03 10:02:33', '2020-06-03 10:02:33'), +(615, 1, 'admin', 'GET', '1.190.203.218', '[]', '2020-06-04 01:21:04', '2020-06-04 01:21:04'), +(616, 1, 'admin/links', 'GET', '1.190.203.218', '{\"_pjax\":\"#pjax-container\"}', '2020-06-04 01:21:07', '2020-06-04 01:21:07'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `admin_permissions` +-- + +CREATE TABLE `admin_permissions` ( + `id` int(10) UNSIGNED NOT NULL, + `name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, + `slug` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, + `http_method` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `http_path` text COLLATE utf8mb4_unicode_ci, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- 转存表中的数据 `admin_permissions` +-- + +INSERT INTO `admin_permissions` (`id`, `name`, `slug`, `http_method`, `http_path`, `created_at`, `updated_at`) VALUES +(1, 'All permission', '*', '', '*', NULL, NULL), +(2, 'Dashboard', 'dashboard', 'GET', '/', NULL, NULL), +(3, 'Login', 'auth.login', '', '/auth/login\r\n/auth/logout', NULL, NULL), +(4, 'User setting', 'auth.setting', 'GET,PUT', '/auth/setting', NULL, NULL), +(5, 'Auth management', 'auth.management', '', '/auth/roles\r\n/auth/permissions\r\n/auth/menu\r\n/auth/logs', NULL, NULL), +(6, 'Admin Config', 'ext.config', '', '/config*', '2020-06-02 01:57:49', '2020-06-02 01:57:49'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `admin_roles` +-- + +CREATE TABLE `admin_roles` ( + `id` int(10) UNSIGNED NOT NULL, + `name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, + `slug` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- 转存表中的数据 `admin_roles` +-- + +INSERT INTO `admin_roles` (`id`, `name`, `slug`, `created_at`, `updated_at`) VALUES +(1, 'Administrator', 'administrator', '2020-05-27 23:22:24', '2020-05-27 23:22:24'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `admin_role_menu` +-- + +CREATE TABLE `admin_role_menu` ( + `role_id` int(11) NOT NULL, + `menu_id` int(11) NOT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- 转存表中的数据 `admin_role_menu` +-- + +INSERT INTO `admin_role_menu` (`role_id`, `menu_id`, `created_at`, `updated_at`) VALUES +(1, 2, NULL, NULL); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `admin_role_permissions` +-- + +CREATE TABLE `admin_role_permissions` ( + `role_id` int(11) NOT NULL, + `permission_id` int(11) NOT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- 转存表中的数据 `admin_role_permissions` +-- + +INSERT INTO `admin_role_permissions` (`role_id`, `permission_id`, `created_at`, `updated_at`) VALUES +(1, 1, NULL, NULL); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `admin_role_users` +-- + +CREATE TABLE `admin_role_users` ( + `role_id` int(11) NOT NULL, + `user_id` int(11) NOT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- 转存表中的数据 `admin_role_users` +-- + +INSERT INTO `admin_role_users` (`role_id`, `user_id`, `created_at`, `updated_at`) VALUES +(1, 1, NULL, NULL); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `admin_users` +-- + +CREATE TABLE `admin_users` ( + `id` int(10) UNSIGNED NOT NULL, + `username` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, + `password` varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL, + `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `avatar` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- 转存表中的数据 `admin_users` +-- + +INSERT INTO `admin_users` (`id`, `username`, `password`, `name`, `avatar`, `remember_token`, `created_at`, `updated_at`) VALUES +(1, 'admin', '$2y$10$UVsiB01XL7ThiKjktVzc3OSmPVEwotmYhni7KU7Y5nBESEuoYEMAW', 'Administrator', NULL, 'jOlpP9mQKLwp287K3dbYQ67qKK68ta7cytmfnWf6bfsPO14nEe8eB37GQ5Fd', '2020-05-27 23:22:24', '2020-05-27 23:22:24'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `admin_user_permissions` +-- + +CREATE TABLE `admin_user_permissions` ( + `user_id` int(11) NOT NULL, + `permission_id` int(11) NOT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `adverts` +-- + +CREATE TABLE `adverts` ( + `id` bigint(20) UNSIGNED NOT NULL, + `category_id` bigint(20) UNSIGNED NOT NULL, + `title` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `cover` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `sort` int(3) DEFAULT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; + +-- +-- 转存表中的数据 `adverts` +-- + +INSERT INTO `adverts` (`id`, `category_id`, `title`, `cover`, `url`, `sort`, `created_at`, `updated_at`) VALUES +(1, 22, '广告1', 'images/2020/06/03/a2bedd136318db4a2475271986c82d5d.jpg', NULL, 1, '2020-06-03 02:31:56', '2020-06-03 02:32:42'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `articles` +-- + +CREATE TABLE `articles` ( + `id` bigint(20) UNSIGNED NOT NULL, + `oldid` int(10) UNSIGNED DEFAULT NULL COMMENT '老网站文章id 校验没有问题后删除', + `category_id` bigint(20) UNSIGNED NOT NULL, + `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `writer` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb4_unicode_ci, + `cover` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `content` longtext COLLATE utf8mb4_unicode_ci NOT NULL, + `status` int(10) UNSIGNED NOT NULL DEFAULT '0', + `sort` int(5) NOT NULL DEFAULT '0', + `source` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `keywords` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL, + `deleted_at` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; + +-- +-- 转存表中的数据 `articles` +-- + +INSERT INTO `articles` (`id`, `oldid`, `category_id`, `title`, `writer`, `description`, `cover`, `content`, `status`, `sort`, `source`, `keywords`, `created_at`, `updated_at`, `deleted_at`) VALUES +(1, 8, 7, '我院与黑龙江科技大学签订科研合作与人才培养协议', '李福裿', '黑龙江省能源环境研究院与黑龙江科技大学 签订科研合作与人才培养协议 为了更好的促进科研院所与高校之间资源的优势互补,黑龙江省能源环境研究院与黑龙江科技大学科技合作签约', '/kjfh/uploads/130628/1-13062Q0313c11.jpg', '        为了更好的促进科研院所与高校之间资源的优势互补,黑龙江省能源环境研究院与黑龙江科技大学科技合作签约仪式于2013年3月28日在黑龙江科技大学举行,标志着双方合作进入更加紧密的新阶段。
\r\n
\r\n        黑龙江省能源环境研究院院长徐晓秋同志、副院长关春玲同志以及科研办、办公室负责人,黑龙江科技大学周国江主任、丁慧贤副主任、李哲教授等出席了签约仪式。双方对各自的研究方向、研究领域进行了介绍,就合作领域及项目进行了探讨,均表示要充分利用研究院所的实验条件及黑龙江科技大学的人才技术优势。并在科技立项、科学研究、成果转化、合作机制、院校实训等方面达成共识,签订合作协议。
\r\n
\r\n        我院将以院校合作为契机,在煤化工、新材料领域打造出一支高新技术创新团队,为我省的经济社会发展做出更大的贡献。
\r\n

\r\n
\r\n \"\"
\r\n  
\r\n
\r\n 我院徐晓秋院长和黑龙江科技大学周国江主任分别代表双方在协议上签字。
\r\n 
\r\n 
\r\n 
\r\n \r\n
\r\n 黑龙江省能源环境研究院
\r\n
\r\n 2013年3月28日  
\r\n', 1, 0, '综合办', '黑龙江省,能源,环境,研究院,与,黑龙江,科技,', '2013-03-28 07:18:00', '2020-06-02 02:11:01', NULL), +(2, 9, 7, '中国绿色农业联盟刘连馥主席赴大庆杜尔伯特考察省科学院科技孵化中心生物质能源示范项目', '李福裿', '中国绿色农业联盟刘连馥主席赴大庆杜尔伯特考察 省科学院科技孵化中心生物质能源示范项目 中国绿色农业联盟刘连馥主席及国家财政部农发办项目审批专家组组长、华南农大食品学', '/kjfh/uploads/130628/130628/1-13062Q12211928.jpg', '
\r\n         中国绿色农业联盟刘连馥主席及国家财政部农发办项目审批专家组组长、华南农大食品学院院长杨公明一行,于2013年3月23日,考察了科技孵化中心位于大庆杜尔伯特的生物质能源示范项目,中心主任徐晓秋同志、副主任关春玲同志、科研办、办公室负责人陪同考察。徐晓秋同志首先介绍了项目的特点和生产规模,随后又详细讲解了该项目在经济、社会效益、生态及带动养殖等方面的优势情况。听取完情况介绍后,双方就该项目在农业领域加强合作及复制推广进行了探讨,刘连馥主席和杨公明院长都显示出了浓厚的兴趣,并给予了很高的评价。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n 
\r\n 
\r\n \r\n
\r\n 黑龙江省能源环境研究院
\r\n 2013年3月23日  
\r\n', 1, 0, '综合办', '中国,绿色农业,联盟,刘连馥,主席,赴,大庆,', '2013-03-23 07:17:00', '2020-06-02 02:11:01', NULL), +(3, 10, 8, '我院职工赴杜尔伯特基地开展五四活动', '李福裿', '黑龙江省能源环境研究中心(孵化中心)赴杜尔伯特基地开展五四活动 黑龙江省能源环境研究院(孵化中心)全体职工,于5月10日到位于大庆市杜尔伯特蒙古族自治县的黑龙江省科学院', '/kjfh/uploads/allimg/130630/1-1306301149150-L.jpg', '

\r\n 黑龙江省能源环境研究院(孵化中心)全体职工,于5月10日到位于大庆市杜尔伯特蒙古族自治县的黑龙江省科学院生物质能源示范基地开展五四青年节活动-暨能源院(孵化中心)首届职工趣味运动会。

\r\n
\r\n \"\"
\r\n \"\"
\r\n

\r\n 5月10日上午,全体职工首先参观了示范基地,并听取了项目负责人对该套示范装置的讲解,使全体职工尤其是能源院的职工对该示范装置有了进一步的了解,之后,全体职工参加了植树活动,大家齐心协力,种下了棵棵象征着希望的树苗,希望它能像我们的事业一样蒸蒸日上,硕果累累。下午进行的徒步活动,让大家走近自然,贴进自然,身心得到了很好的放松。

\r\n
\r\n \"\"
\r\n \"\"
\r\n

\r\n 通过本次活动,不但增进了同事之间的友谊,放松了身心,更重要的是增强了团队意识。职工们在活动后表示,身为科技工作者,将把能源环境作为一项事业推广下去,为单位的发展贡献自己的力量。

\r\n \r\n
\r\n 黑龙江省能源环境研究院    
\r\n', 1, 0, '综合办', '我院,职工,赴,杜尔伯特,基地,开展,五四,活动,', '2013-05-10 03:54:00', '2020-06-02 02:11:01', NULL), +(4, 11, 7, '黑龙江省科学院产业化处到省能源环境研究院产业化基地调研', '李福裿', '2013年5月7日,省科学院产业化处孙宇峰处长、范延新副处长、李晓辉副处长在省能源环境研究院院长徐晓秋同志的陪同下来到位于双城的M15车用甲醇汽油复合添加剂产业化基地进行调研', '', '

\r\n         2013年5月7日,省科学院产业化处孙宇峰处长、范延新副处长、李晓辉副处长在省能源环境研究院院长徐晓秋同志的陪同下来到位于双城的“M15车用甲醇汽油复合添加剂”产业化基地进行调研,指导工作。

\r\n

\r\n         产业化处领导在听取了我院油品助剂研发中心主任张树华关于产业化工作的汇报之后,对我院产业化工作的示范引领作用给予了充分肯定,并对在基地工作的职工进行慰问,极大地鼓舞了职工的工作热情。同时,产业化处领导对我院“M15车用甲醇汽油复合添加剂”产业项化目的发展提出设想,并表示省科学院相关部门会大力支持我院的产业化工作,使“M15车用甲醇汽油复合添加剂”产业化项目为黑龙江区域经济建设更好的服务。

\r\n \r\n
\r\n 黑龙江省能源环境研究院    
\r\n', 1, 0, '综合办', '黑龙江省,科学院,产业化,处,到,省,能源,环境,', '2013-05-07 07:17:00', '2020-06-02 02:11:01', NULL), +(5, 12, 7, '“领导关怀,实地解决问题”黑龙江省科学院潘忠院长一行到能源院召开现场会', '李福裿', '2013年6月7日,潘忠院长率部分领导班子成员及相关处室负责人一行12人赴能源院(孵化中心)召开现场办公会议。能源院(孵化中心)班子成员、各部门负责人、副高职以上人员参加了', '/kjfh/uploads/allimg/130630/1-1306301202010-L.jpg', '

\r\n         2013年6月7日,潘忠院长率部分领导班子成员及相关处室负责人一行12人赴能源院(孵化中心)召开现场办公会议。能源院(孵化中心)班子成员、各部门负责人、副高职以上人员参加了会议。

\r\n

\r\n         潘院长一行在省能源环境研究院院长徐晓秋同志陪同下先后察看了能源院实验楼、办公楼及职工食堂。

\r\n
\r\n
\r\n
\r\n
\r\n

\r\n         随后能源院院长、孵化中心主任徐晓秋同志就任职后的主要工作情况及存在的问题向潘院长一行进行了汇报。汇报结束后,科学院领导、相关处室负责人与能源院(孵化中心)参会人员进行了互动交流。最后潘忠院长对能源院(孵化中心)融合后的工作情况和成绩给予了充分肯定,对在艰苦的环境里坚守工作岗位的同志们表示理解和支持,并对能源院(孵化中心)的人员结构、业务体系、工作环境等方面做出了相应指示,鼓励大家靠自己的双手创造属于自己的发展之路。

\r\n
\r\n
\r\n 
\r\n 
\r\n 
\r\n
\r\n 黑龙江省能源环境研究院    
\r\n', 1, 0, '综合办', '“,领导关怀,实地,解决问题,”,黑龙江省,', '2013-06-07 07:16:00', '2020-06-02 02:11:01', NULL), +(6, 13, 7, '“磨练意志 以球会友”技术物理研究所与能源环境研究院篮球友谊赛', 'admin', '为丰富职工业余文化生活,增强兄弟院所之间的交流与合作,提高研究院所团队的协作能力,6月5日下午,省科学院技术物理研究所与能源环境研究院(孵化)共同进行了一场篮球友谊', '/kjfh/uploads/allimg/130630/1-130630120Z0I3-lp.jpg', '

\r\n         为丰富职工业余文化生活,增强兄弟院所之间的交流与合作,提高研究院所团队的协作能力,6月5日下午,省科学院技术物理研究所与能源环境研究院共同进行了一场篮球友谊赛。两院所党政领导班子成员参观了比赛。

\r\n

\r\n         伴随着裁判员一声号响,篮球赛如火如荼的展开,队员在场上你争我夺,从传球、运球、助攻到投篮一系列动作帅气利索,比赛场景异常激烈。两院所队员中,能源院队员老中青混搭,宝刀未老;物理所队员不甘示弱,部分领导也加入了比赛当中。在短短一个多小时的赛场上,赛出了风格,赛出了水平,充分展现了两院所职工的精神面貌和全面的优秀素质。

\r\n

\r\n \"\"

\r\n

\r\n         通过这次篮球比赛,不仅丰富了两院所的业余文化生活,更是提高了锻炼身体和团结合作的意识,而且增强了两院所之间的感情交流,更重要的是为两院所今后的交流和合作奠定了良好的基础。   

\r\n', 1, 0, '综合办', '“,磨练意志,以,球,会友,”,技术,物理,研究所,', '2013-06-30 01:57:00', '2020-06-02 02:11:01', NULL), +(7, 14, 7, '“探索新路、实现合作”我院与俄罗斯“梅索-克”科学生产应用中心实现科技合作', '李福裿', '2013年06月13日,省能源环境研究院(孵化中心)院长及相关科室人员在能源院(孵化中心)会议室会见了俄罗斯梅索-克科学生产应用中心总经理杰诺夫.尼古拉.杰奥里耶维奇博士一行二', '/kjfh/uploads/allimg/130630/1-1306301221320-L.jpg', '

\r\n         2013年06月13日,省能源环境研究院(孵化中心)院长及相关科室人员在能源院(孵化中心)会议室会见了俄罗斯“梅索-克”科学生产应用中心总经理杰诺夫.尼古拉.杰奥里耶维奇博士一行二人。双方就润滑油复合添加剂的相关合作进行了热烈的讨论,此技术特点突出、可广泛应用于多种领域。后经双方多轮协商,于15日达成框架协议,引进俄方相关技术,用于生产润滑油复合添加剂。双方的合作为我院润滑油添加剂的产业化工作奠定了基础,并使我院在该领域向世界先进水平迈进了一步。

\r\n

\r\n \"\"
\r\n \"\"

\r\n  

\r\n

\r\n 黑龙江省能源环境研究院    

\r\n', 1, 0, '综合办', '“,探索新路,、,实现,合作,”,我院,与,俄罗斯,', '2013-06-13 07:16:00', '2020-06-02 02:11:01', NULL), +(8, 15, 7, '“携手同行 共圆大科学院梦”省科学院自动化研究所与能源院帽儿山活动小记', '李福裿', '​为了更好的完成收官之年的各项工作,增强干劲,凝心聚力,鼓舞势气,使大家能够在紧张而忙碌的工作中,放松心情、愉悦身心,同时为加强科学院各兄弟院所之间的感情,6月14日', '/kjfh/uploads/allimg/130630/1-130630122P40-L.png', '

\r\n ​为了更好的完成“收官”之年的各项工作,增强干劲,凝心聚力,鼓舞势气,使大家能够在紧张而忙碌的工作中,放松心情、愉悦身心,同时为加强科学院各兄弟院所之间的感情,6月14日自动化研究所与能源院部分职工一行70余人来到了风景秀丽的帽儿山,共同举行了爬山活动。

\r\n

\r\n 微风低语,流水呢喃,鸟鸣清脆。沿着陡峭的山路,大家一路前行。天气虽然炎热,路途虽然艰辛,但每一个人的心中都有一个坚定的信念:不达目的不罢休。在行进中大家相互配合,相互鼓励,团结一致,终于在经历了一小时左右时间成功登顶。在登顶的那一刻,虽然大家已是气喘吁吁,满头大汗,但内心的激动和喜悦难以形容,大家高声欢呼“我们登顶成功了!”

\r\n

\r\n 爬山归来,在宾馆的广场上共同举办了篝火晚会,大家载歌载舞,欢聚一堂,整场晚会充满了欢声笑语,让人难以忘怀。

\r\n

\r\n 此次活动把“走进自然、增进友谊、锻炼意志、陶冶情操”融合在一起,既锻炼了身体,又增强了团队的凝聚力,增进了兄弟院所间的沟通融合,大家决心把登山的气魄投入到工作中,“矢志创新、勇于攀登”,以饱满的工作热情、优异的工作业绩为实现翻番目标和“创新2020”发展规划做贡献,共圆“大科学院”梦想。

\r\n
\r\n

\r\n  

\r\n

\r\n \"\"

\r\n

\r\n \"\"

\r\n
\r\n
\r\n 黑龙江省能源环境研究院    
\r\n', 1, 0, '综合办', '“,携手同行,共圆,大,科学院,梦,”,省,自动化,', '2013-06-30 09:14:00', '2020-06-02 02:11:01', NULL), +(9, 16, 19, '工厂化厌氧沼气发电控制系统仿真平台的开发研究', '李福裿', '工厂化厌氧沼气发电控制系统仿真平台以加拿大阿尔伯塔研究院集成粪便综合利用系统(IMUS)设计工艺为基础,针对工业化沼气发电过程中,厌氧发酵工艺过程自动控制的复杂性和多样', 'images/2020/06/03/2cf25c0c42ea7db639634565bb3efd50.jpg', '

        “工厂化厌氧沼气发电控制系统仿真平台”以加拿大阿尔伯塔研究院“集成粪便综合利用系统(IMUS)”设计工艺为基础,针对工业化沼气发电过程中,厌氧发酵工艺过程自动控制的复杂性和多样性,建立一套适用于工业化沼气发电控制系统的厌氧发酵过程仿真平台系统。通过仿真平台系统可在实验室内实现实际生产中很难获得的技术数据,并对开发项目进行预评估,可缩短项目开发周期、节约试验和设计费用、降低开发风险。

        在设计过程中,将针对生物发酵过程的时变性、非线性以及控制过程的复杂性,应用工具软件和数学计算方法进行仿真平台的开发,项目采用LabVIEW和MATLAB语言相结合进行系统设计;依据生产过程不同控制节点(进出料的情况、压力控制、产气率、温度、底物浓度、发酵及搅拌时间等)的技术参数进行曲线模拟仿真,并设计控制数学模型,建立工厂化高温厌氧发酵沼气发电过程控制仿真平台。仿真平台通过已知的参数(发酵料液的产量、环境温度的变化等)进行沼气发电装置的发酵罐体、发电机等主要设备的设计参数进行预估仿真,为新建“工厂化厌氧沼气发电装置”建设提供参数仿真模拟;通过修改控制过程的参数(温度、压力、底物流量、PH值变化、底物浓度、发酵时间、搅拌时间等),实现沼气产气量和产气质量的变化情况模拟,提供产气量变化过程控制修改方案。

        该平台系统一方面它可以供研究者和建设者在分析和比较各种控制策略和诊断方法时使用;另一方面可以根据示范工程中取得的新成果、数据、发现以及新工艺不断完善数据平台,为工艺设计提供帮助,以适应新的工业需求。

        该仿真平台系统采用国外先进的技术工艺进行设计,针对于工厂化厌氧沼气发电装置进行设计,具有高效的热电联用热回收工艺,不消耗新的化石能源,尤其适合高寒地区进行,工艺水平处于国际先进水平,开发完成后将对国内的工厂化沼气发电工程建议提供借鉴依据。控制系统在生产过程中,不产生二次污染,进出料连续化,控制单元模块化,采用高温厌氧发酵工艺,产气率高。

', 1, 0, '综合办', '工厂化,厌氧,沼气,发电,控制系统,仿真,平台,', '2013-07-01 05:45:00', '2020-06-03 09:12:06', NULL), +(10, 17, 8, '认真学习贯彻十八大开创科研工作新局面', 'admin', '高举旗帜奋力开拓铸就辉煌业绩,领航中国信心满怀共创美好未来。举世瞩目的中国共产党第十八次全国代表大会在北京胜利闭幕以来,科技孵化中心掀起了深入学习、领会和贯彻十八', '/uploads/allimg/130802/1-130P2111431507-lp.jpg', '

\r\n         高举旗帜奋力开拓铸就辉煌业绩,领航中国信心满怀共创美好未来。举世瞩目的中国共产党第十八次全国代表大会在北京胜利闭幕以来,我院掀起了深入学习、领会和贯彻“十八大”精神的热潮。

\r\n

\r\n         为深入贯彻落实“十八大”精神,凝心聚力推动中心科研发展。我院组织党员、入党积极分子和科研人员参加学习贯彻十八大精神会议。

\r\n

\r\n         与会同志学习了党的十八大精神,通过学习,大家一致认为党的“十八大”是在我国进入全面建成小康社会决定性阶段召开的一次十分重要的大会,在我们党和国家历史上都具有十分重要的里程碑意义。大会科学总结了过去五年的成就和十年的历程,确立了科学发展观的历史地位,提出了夺取中国特色社会主义新胜利的基本要求,对全面建成小康社会和深化改革开放作出了安排部署,对提高党的建设科学化水平提出了明确要求。把“科学发展观”、“中国特色社会主义制度”、“中国特色社会主义道路”、“中国特色社会主义理论体系”、“生态文明”、“建设美丽中国”、“实现中华民族永续发展”等等写入党章,顺应了历史发展的必然。

\r\n

\r\n         大家表示,要以十八大胜利闭幕为契机,积极响应院党组号召,切实贯彻、落实院会议工作部署,落实省科学院“创新2020”规划,积极推进孵化中心中长期科技发展规划任务,实现明年“双倍增”目标。
\r\n  

\r\n

\r\n \"\"
\r\n
\r\n \"\"

\r\n', 1, 0, '未知', '认真学习贯彻十八大开创科研工作新局面', '2012-11-26 03:16:00', '2020-06-02 02:11:01', NULL), +(11, 18, 8, '七一表彰的通知', 'admin', '为促进省科学院创新2020发展规划实施,确保三年目的全面实现,根据黑龙江省科学院关于《七一表彰的通知》的相关要求,通过全体党员投票,选举产生孵化中心支部为先进党组织,王', '', '        为促进“省科学院创新2020发展规划”实施,确保三年目的全面实现,根据黑龙江省科学院关于《七一表彰的通知》的相关要求,通过全体党员投票,选举产生孵化中心支部为先进党组织,王欣同志为优秀党务工作者,刘岩同志为优秀共产党员,并上报省科学院。', 1, 0, '未知', '七一,表彰,的,通知,为,促进省,科学院,创新,', '2013-07-03 03:17:00', '2020-06-02 02:11:01', NULL), +(12, 19, 19, 'M15车用甲醇汽油复合添加剂', '李福裿', '《M15车用甲醇汽油复合添加剂》是含有辛烷值增强剂、动力增强剂、金属腐蚀抑制剂、橡胶溶胀抑制剂、助燃剂和助溶剂的复合添加剂。通过互配性试验、溶解性试验、辛烷值加和性和', 'images/2020/06/03/e50371f51cc7165058355d4f995f4d02.jpg', '

        《M15车用甲醇汽油复合添加剂》是含有辛烷值增强剂、动力增强剂、金属腐蚀抑制剂、橡胶溶胀抑制剂、助燃剂和助溶剂的复合添加剂。通过互配性试验、溶解性试验、辛烷值加和性和调和正效应试验,解决了添加剂复合后产生的较大互扰性及经济性等问题,最终得出添加剂的最佳配比,并对添加剂各项指标进行检测,检测结果均符合标准。该添加剂有效解决和控制了M15车用甲醇汽油:低温启动难、高温气阻大、动力不足、腐蚀溶胀等问题。使M15甲醇汽油长期处于稳定状态,不易分层,解决了汽油与甲醇互溶性差的问题。并且可以显著提高油品的辛烷值和动力性能,同时使用该添加剂调和的M15甲醇汽油,不需改变发动机的结构。该添加剂通过工业应用及性能考核,经黑龙江省精细化工产品质量监督检验站检验合格。

', 1, 0, '综合办', 'M15,车用,甲醇,汽油,复合,添加剂,《,', '2013-07-01 05:45:00', '2020-06-03 09:11:34', NULL), +(13, 20, 19, '大掺量甲醇汽油催化燃烧技术', '李福裿', '技术特点: 催化剂包括能量及辛烷值增强组份,自溶合组份、尾气净化组份等。 M45甲醇汽油合成工艺研究,采用化学自溶合技术,甲醇、催化剂、汽油三种物质不需要搅拌,即可相互溶', 'images/2020/06/03/a1e6418671f45cdae03019d889b2d971.jpg', '

技术特点:

1、催化剂包括能量及辛烷值增强组份,自溶合组份、尾气净化组份等。

2、M45甲醇汽油合成工艺研究,采用化学自溶合技术,甲醇、催化剂、汽油三种物质不需要搅拌,即可相互溶合,增加燃料的稳定性。与纯汽油及乙醇汽油互溶性优良。

3、不改动发动机供油系统,发动机正常运行。

4、高、低温启动正常,无低温启动困难,高温气阻现象。

5、发动机动力性能与使用93#汽油相当。

', 1, 0, '综合办', '大掺,量,甲醇,汽油,催化,燃烧,技术,技术,特点,', '2013-07-01 05:45:00', '2020-06-03 09:13:41', NULL), +(14, 21, 19, '直贮热太阳能技术', '李福裿', '新能源是二十一世纪世界经济发展中最具决定力的五大技术领域之一。太阳能是一种清洁、高效和永不衰竭的新能源。在新世纪中,各国政府都将太阳能资源利用作为国家可持续发展战', '', '

\r\n         新能源是二十一世纪世界经济发展中最具决定力的五大技术领域之一。太阳能是一种清洁、高效和永不衰竭的新能源。在新世纪中,各国政府都将太阳能资源利用作为国家可持续发展战略的重要内容。

\r\n

\r\n         因为地域气候的原因,在中国北方地区的建筑物维持良好的温度环境需要提供大量的能源,黑龙江省的气候条件与阿尔伯塔省非常相似。在这些严酷的气候条件下建筑物的能源消耗大约2GJ/m2/年,等于20美元/m2/年(假设天然气耗资10/GJ 美元)。由于燃料成本上升,在未来我国北方建筑物的采暖保温方面可能导致严重的经济问题。

\r\n

\r\n         直贮蓄热太阳能系统(DHS)太阳能集热系统可以实现在白天收集太阳能并将其直接贮存在建筑物的墙壁中以调节建筑内温度的目的。在冬季,该系统可以在白天收集太阳能,晚上又释放到建筑的外壳。它为建筑物创造了一个类似于保温毛毯的缓冲区,在夏季,该系统以相反的方式工作,调节房屋内部的温度。该系统在国外已广泛应用于商业楼宇、民用住宅和农业温室,为工业结构的空间供热提供新的概念与技术,属国际领先水平。

\r\n', 1, 0, '综合办', '热太阳能技术', '2013-07-01 05:44:00', '2020-06-02 02:11:01', NULL), +(15, 22, 19, '油页岩中有机质的分离和分析', '李福裿', '油页岩作为非常规能源,已成为当前世界范围内开发利用的热点,由于油页岩的组成和结构的未知使得油页岩的开发、利用手段单一。如何提高其有效利用途径,发挥其在能源和化工原', '', '

\r\n         油页岩作为非常规能源,已成为当前世界范围内开发利用的热点,由于油页岩的组成和结构的未知使得油页岩的开发、利用手段单一。如何提高其有效利用途径,发挥其在能源和化工原料领域的作用,引起经济和技术界人士的重视。该项目以油页岩为原料,通过温和条件下分级萃取的方法,将得到的萃取物进行分离并进行相关的检测分析,一方面,准确提出油页岩中可萃取有机质的组成和结构,为油页岩结构的研究奠定基础;另一方面,分级萃取的方法可以选择性提取油页岩中具有应用前景的化合物,不断提高页岩油的加工深度和综合利用水平。目前,该项目已通过黑龙江省科学院组织的专家鉴定。
\r\n  

\r\n', 1, 0, '综合办', '油页岩,中,有机,质的,分离,和,分析,油页岩,', '2013-07-01 05:44:00', '2020-06-02 02:11:01', NULL), +(16, 23, 19, '集成牛粪便综合利用系统', 'admin', '集成粪便综合利用系统(IMUS)是阿尔伯塔研究院开发的工业化封闭环式沼气系统,它采用独特的高温消化技术,将畜禽粪便转换为能源、生物肥料和可再利用的水,通过高温厌氧发酵来', '', '

\r\n         集成粪便综合利用系统(IMUS)是阿尔伯塔研究院开发的工业化封闭环式沼气系统,它采用独特的高温消化技术,将畜禽粪便转换为能源、生物肥料和可再利用的水,通过高温厌氧发酵来生产沼气并用其来发电。后营养物可作为无病原体的生物肥料市场化,水可以再次用于IMUS系统或者用于灌溉。IMUS 技术不仅全部利用生物废物中的能源和养分,它还减轻温室气体排放和农业、城市、食品加工等废物造成的其它环境和社会压力。IMUS系统是世界上唯一正在运行的利用牛粪进行发电,并回收其养分生产肥料的综合利用系统,IMUS技术已经在阿尔伯塔省连续运营5年,属国际领先水平。

\r\n', 1, 0, '未知', '集成,牛,粪便,综合利用,系统,集成,粪便,', '2013-07-01 05:43:00', '2020-06-02 02:11:01', NULL), +(17, 24, 9, 'The Catcher in the Rye', 'admin', '麦田里的守望者(The Catcher in the Rye)简介: The Catcher in the Rye is a 1951 novel by J. D. Salinger. Originally published for adults, it has been translated into almost all of the worlds major languages. Around 250,000 copies ar', '/kjfh/uploads/130701/1-130F10F219336.jpg', '

\r\n 麦田里的守望者(The Catcher in the Rye)简介:

\r\n

\r\n The Catcher in the Rye is a 1951 novel by J. D. Salinger. Originally published for adults, it has been translated into almost all of the world's major languages. Around 250,000 copies are sold each year, with total sales of more than sixty-five million. The novel's protagonist and antihero, Holden Caulfield, has become an icon for teenage rebellion.
\r\n The novel was among the 100 best English-language novels from 1951 to 2005 as chosen by Time, and named by Modern Library and its readers as one of the 100 best English-language novels of the 20th century. It has been frequently challenged in the United States for its liberal use of profanity and portrayal of sexuality and teenage angst. It also deals with complex issues of identity, belonging, connection and alienation.

\r\n

\r\n   本书的主人公霍尔顿是个中学生,出身于富裕的中产阶级家庭。他虽只有16岁,但比常人高出一头,整日穿着风雨衣,戴着鸭舌帽,游游荡荡,不愿读书。他对学校里的一切——老师、同学、功课、球赛等等,全都腻烦透了,曾是学校击剑队队长,3次被学校开除。又一个学期结束了,他又因5门功课中4门不及格被校方开除。他丝毫不感到难受。在和同房间的同学打了一架后,他深夜离开学校,回到纽约城,但他不敢贸然回家。当天深夜住进了一家小旅馆。他在旅馆里看到的都是些不三不四的人,有穿戴女装的男人,有相互喷水、喷酒的男女,他们寻欢作乐,忸怩作态,使霍尔顿感到恶心和惊讶。他无聊之极,便去夜总会厮混了一阵。回旅馆时,心里仍觉得十分烦闷,糊里糊涂答应电梯工毛里斯,让他叫来了一个妓女。妓女一到他又紧张害怕,最后按讲定的价格给了五块钱,把她打发走了。
\r\n   第二天是星期天,霍尔顿上街游荡,遇见两个修女,捐了10块钱。后来他的女友萨丽去看了场戏,又去溜冰。看到萨丽那假情假义的样子,霍尔顿很不痛快,两人吵了一场,分了手。接着霍尔顿独自去看了场电影,又到酒吧里和一个老同学一起喝酒,喝得酩酊大醉。他走进厕所,把头伸进盥洗盆里用冷水浸了一阵,才清醒过来。可是走出酒吧后,被冷风一吹,他的头发都结了冰。他想到自己也许会因此患肺炎死去,永远见不着妹妹菲芘了,决定冒险回家和她诀别。
\r\n   霍尔顿偷偷回到家里,幸好父母都出去玩了。他叫醒菲芘,向她诉说了自己的苦闷和理想。他对妹妹说,他将来要当一名“麦田里的守望者”:“有那么一群小孩子在一大块麦田里做游戏。几千几万个小孩子,附近没有一个人——没有一个大人,我是说——除了我。我呢,就在那混帐的悬崖边。我的职务是在那儿守望,要是有哪个孩子往悬崖边奔来,我就把他捉住——我是说孩子们都在狂奔,也不知道自己是在往哪儿跑。我得从什么地方出来,把他们捉住。我整天就干这样的事。我只想当个麦田里的守望者。”后来父母回来了,霍尔顿吓得躲进壁橱。等父母去卧室,他急忙溜出家门,到一个他尊敬的老师家中借宿。可是睡到半夜,他发觉这个老师有可能是个同性恋者,于是只好偷偷逃出来,到车站候车室过夜。
\r\n   霍尔顿不想再回家,也不想再念书了,决定去西部谋生,做一个又聋又哑的人,但他想在临走前再见妹妹一面,于是托人给她带去一张便条,约她到博物馆的艺术馆门边见面。过了约定时间好一阵,菲芘终于来了,可是拖着一只装满自己衣服的大箱子,她一定要跟哥哥一起去西部。最后,因对妹妹劝说无效,霍尔顿只好放弃西部之行,带她去动物园和公园玩了一阵,然后一起回家。回家后不久,霍尔顿就生了一场大病。整部小说是以回忆的方式写的

\r\n
\r\n
\r\n', 1, 0, '未知', 'The,Catcher,the,Rye,The,Catche', '2013-07-01 00:15:00', '2020-06-02 02:11:01', NULL), +(18, 25, 9, 'The Old Man and the Sea', 'admin', '老人与海(The Old Man and the Sea)简介: 这本书讲了古巴的一个名叫圣地亚哥的老渔夫,独自一个人出海打鱼,在一无所获的84天之后钓到了一条无比巨大的马林鱼。这是老人从来没见过也没', '/kjfh/uploads/allimg/130701/1-130F10F5120-L.jpg', '

\r\n 老人与海(The Old Man and the Sea)简介:

\r\n

\r\n   这本书讲了古巴的一个名叫圣地亚哥的老渔夫,独自一个人出海打鱼,在一无所获的84天之后钓到了一条无比巨大的马林鱼。这是老人从来没见过也没听说过的比他的船还长两英尺的一条大鱼。鱼的劲非常大,拖着小船漂流了整整两天两夜,老人在这两天两夜中经历了从未经受的艰难考验,终于把大鱼刺死,拴在船头。然而这时却遇上了鲨鱼,老人与鲨鱼进行了殊死搏斗,结果大马林鱼被鲨鱼吃光了,老人最后拖回家的只剩下一副光秃秃的鱼骨架和一身的伤。最后却得到了人们的赞赏。

\r\n
\r\n
\r\n

\r\n The Old Man and the Sea recounts an epic battle between an old, experienced fisherman and a giant marlin said to be the largest catch of his life. It opens by explaining that the fisherman, who is named Santiago, has gone 84 days without catching any fish at all (although a comment made at some point in the book reveals that he had previously gone 87 days without catching one). He is apparently so unlucky that his young apprentice, Manolin, has been forbidden by his parents to sail with the old man and been ordered to fish with more successful fishermen. Still dedicated to the old man, however, the boy visits Santiago's shack each night, hauling back his fishing gear, feeding him and discussing American baseball — most notably Santiago's idol, Joe DiMaggio. Santiago tells Manolin that on the next day, he will venture far out into the Gulf to fish, confident that his unlucky streak is near its end.
\r\n
\r\n Thus on the eighty-fifth day, Santiago sets out alone, taking his skiff far into the Gulf. He sets his lines and, by noon of the first day, a big fish that he is sure is a marlin takes his bait. Unable to pull in the great marlin, Santiago instead finds the fish pulling his skiff. Two days and two nights pass in this manner, during which the old man bears the tension of the line with his body. Though he is wounded by the struggle and in pain, Santiago expresses a compassionate appreciation for his adversary, often referring to him as a brother. He also determines that because of the fish's great dignity, no one will be worthy of eating the marlin.
\r\n
\r\n On the third day of the ordeal, the fish begins to circle the skiff, indicating his tiredness to the old man. Santiago, now completely worn out and almost in delirium, uses all the strength he has left in him to pull the fish onto its side and stab the marlin with a harpoon, thereby ending the long battle between the old man and the tenacious fish.
\r\n
\r\n Santiago straps the marlin to his skiff and heads home, thinking about the high price the fish will bring him at the market and how many people he will feed.
\r\n
\r\n While Santiago continues his journey back to the shore, sharks are attracted to the trail of blood left by the marlin in the water. The first, a great mako shark, Santiago kills with his harpoon, losing that weapon in the process. He makes a new harpoon by strapping his knife to the end of an oar to help ward off the next line of sharks; in total, five sharks are slain and many others are driven away. But by night, the sharks have almost devoured the marlin's entire carcass, leaving a skeleton consisting mostly of its backbone, its tail and its head, the latter still bearing the giant spear. The old man castigates himself for sacrificing the marlin. Finally reaching the shore before dawn on the next day, he struggles on the way to his shack, carrying the heavy mast on his shoulder. Once home, he slumps onto his bed and enters a very deep sleep.
\r\n
\r\n A group of fishermen gather the next day around the boat where the fish's skeleton is still attached. One of the fishermen measures it to be eighteen feet from nose to tail. Tourists at the nearby café mistakenly take it for a shark. Manolin, worried during the old man's endeavor, cries upon finding him safe asleep. The boy brings him newspapers and coffee. When the old man wakes, they promise to fish together once again. Upon his return to sleep, Santiago dreams of lions on the African beach.

\r\n
\r\n
\r\n', 1, 0, '未知', 'The,Old,Man,and,the,Sea,老人与海,T', '2013-06-30 17:34:00', '2020-06-02 02:11:01', NULL), +(19, 26, 9, 'Pride and Prejudice', 'admin', '傲慢与偏见(Pride and Prejudice)简介: Few have failed to be charmed by the witty and independent spirit of Elizabeth Bennet. Her early determination to dislike Mr. Darcy is a prejudice only matched by the folly of his arrogant pride', '/kjfh/uploads/allimg/130701/1-130F10FA90-L.jpg', '
\r\n
\r\n 傲慢与偏见(Pride and Prejudice)简介:
\r\n
\r\n Few have failed to be charmed by the witty and independent spirit of Elizabeth Bennet. Her early determination to dislike Mr. Darcy is a prejudice only matched by the folly of his arrogant pride. Their first impressions give way to true feelings in a comedy profoundly concerned with happiness and how it might be achieved.
\r\n
\r\n', 1, 0, '未知', 'Pride,and,Prejudice,傲慢与偏见,Prid', '2013-06-30 23:06:38', '2020-06-02 02:11:01', NULL), +(20, 27, 9, 'Who Moved My Cheese', 'admin', '谁动了我的奶酪(Who Moved My Cheese)简介: Change can be a blessing or a curse, depending on your perspective. The message of Who Moved My Cheese? is that all can come to see it as a blessing, if they understand the nature of chees', '/kjfh/uploads/allimg/130701/1-130F10FZ30-L.jpg', '

\r\n 谁动了我的奶酪(Who Moved My Cheese)简介:

\r\n

\r\n Change can be a blessing or a curse, depending on your perspective. The message of Who Moved My Cheese? is that all can come to see it as a blessing, if they understand the nature of cheese and the role it plays in their lives. Who Moved My Cheese? is a parable that takes place in a maze. Four beings live in that maze: Sniff and Scurry are mice--nonanalytical and nonjudgmental, they just want cheese and are willing to do whatever it takes to get it. Hem and Haw are "littlepeople," mouse-size humans who have an entirely different relationship with cheese. It's not just sustenance to them; it's their self-image. Their lives and belief systems are built around the cheese they've found. Most of us reading the story will see the cheese as something related to our livelihoods--our jobs, our career paths, the industries we work in--although it can stand for anything, from health to relationships. The point of the story is that we have to be alert to changes in the cheese, and be prepared to go running off in search of new sources of cheese when the cheese we have runs out.
\r\n Dr. Johnson, coauthor of The One Minute Manager and many other books, presents this parable to business, church groups, schools, military organizations--anyplace where you find people who may fear or resist change. And although more analytical and skeptical readers may find the tale a little too simplistic, its beauty is that it sums up all natural history in just 94 pages: Things change. They always have changed and always will change. And while there's no single way to deal with change, the consequence of pretending change won't happen is always the same: The cheese runs out. --Lou Schuler

\r\n
\r\n
\r\n', 1, 0, '未知', 'Who,Moved,Cheese,谁,动了,我的,奶酪,Wh', '2013-06-30 23:08:56', '2020-06-02 02:11:01', NULL), +(21, 28, 0, '科研人员档案', 'admin', '罗向东,1989年毕业于国防科技大学应用物理系,黑龙江省能源环境研究院(孵化中心)工程实验室主任,研究员。 具有本专业广博、坚实的基础理论知识,并有深入的研究和独到的见', '/kjfh/uploads/allimg/130701/1-130F11046360-L.jpg', '

\r\n \"\"
\r\n  

\r\n

\r\n 罗向东,1989年毕业于国防科技大学应用物理系,黑龙江省能源环境研究院(孵化中心)工程实验室主任,研究员。
\r\n  

\r\n

\r\n 具有本专业广博、坚实的基础理论知识,并有深入的研究和独到的见解,熟悉相关专业的基础理论和专业知识。熟悉掌握本专业及相关专业国内外发展现状和趋。熟练掌握本专业相关的技术标准、规范。熟悉国家和地方有关的法律法规、技术政策和技术法规。能根据国家或本地区经济建设需要和学科发展提出本专业的研究方向,具备有选定具有重要学术意义或开创性研究课题的能力,能够带领团队开拓新的研究领域。具有丰富的从事科学研究的实践经验,并能够完成规定的研究任务,在主持省(部)级项目的研究过程中,能够创造性地解决重大、关键性的技术问题,能够在研究团队中起到学术带头人的作用,主持的省攻关项目经鉴定取得了国内领先水平。具有指导本专业技术人员开展业务工作的能力,培养初中级技术人员3名。具有丰富的研究、开发、科技管理工作经验。参加工作以来共组织申报国家、省市及科学院各类项目30余项,获得科研及产业化项目经费1000多万元。
\r\n  

\r\n

\r\n 主持及能与科研项目10项(其中:省攻关项目2项,市攻关项目1项,省中小企业创新基金项目1项,院基金项目6项);获黑龙江省科技进步三等奖1项;省科学院科技进步奖4项;授权专利6项;在有CN和ISSN统一刊号且公开出版发行的科技类期刊发表专业论文10篇(其中第一名6篇)。
\r\n  

\r\n', 1, 0, '未知', '罗向东,罗,向东,罗向东,罗,向东,1989年,毕,', '2013-07-01 02:58:08', '2020-06-02 02:11:01', NULL), +(22, 29, 0, '科研人员档案', 'admin', '王志成,1973年出生,学士,研究员级高级工程师,能源化学省级领军人才梯队后备带头人,省级燃油燃煤清洁能源重点实验室成员,省能源环境研究院科研与产业化办公室主任,环境科', '/kjfh/uploads/allimg/130701/1-130F11055020-L.jpg', '

\r\n \"\"
\r\n  

\r\n

\r\n 王志成,1973年出生,学士,研究员级高级工程师,能源化学省级领军人才梯队后备带头人,省级燃油燃煤清洁能源重点实验室成员,省能源环境研究院科研与产业化办公室主任,环境科学与节能技术研究室主任。兼任:省化学学会理事。
\r\n  

\r\n

\r\n 从事新型醇醚燃料催化剂和乳化燃料催化剂及合成工艺研究,以及生物质能源研究工作。主持和在研项目20项,其中包括国家攻关计划项目3项,省自然科学基金项目1项,国家政府间国际合作项目1项,省攻关计划项目6项。获省科技进步一等奖1项,省科技发明一等奖2项,三等奖1项,国家石化协会科技二等奖1项,发表学术论文11篇。

\r\n', 1, 0, '未知', '科研,人员,档案,王志成,王,志成,1973年,出生,', '2013-07-01 02:53:19', '2020-06-02 02:11:01', NULL), +(23, 30, 19, '褐煤催化提炼轻质燃料油及石油干气技术', '李福裿', '我研究院经过6年的努力攻关,采用低档褐煤做原料,通过采用催化低温热裂解国家发明专利技术,成功地从褐煤中催化提炼出20.4%轻质燃料油、9.2%石油干气及70.4%焦炭。轻质燃料油经过', '/kjfh/uploads/allimg/130703/1-130F3142624405.jpg', '

\r\n         我院经过6年的努力攻关,采用低档褐煤做原料,通过采用催化低温热裂解国家发明专利技术,成功地从褐煤中催化提炼出20.4%轻质燃料油、9.2%石油干气及70.4%焦炭。轻质燃料油经过简单处理可替代柴油,石油干气可替代天然气,焦炭是市场紧缺的原料。由于我国低档褐煤储藏量巨大,价格每吨在200元以内,所以经过催化低温热裂解后产生的轻质燃料油、石油干气、焦炭可获得巨大的经济效益。
\r\n
\r\n  

\r\n

\r\n \"\"

\r\n', 1, 0, '综合办', '褐煤,催化,提炼,轻质,燃料油,及,石油,干气,我,', '2008-06-20 05:47:00', '2020-06-02 02:11:01', NULL), +(24, 31, 7, '能源院省级重点实验室通过省科技厅评估认定', '李福裿', '2012年5月,在院领导班子高度重视及各部门的大力配合下,能源院省级重点实验室-燃油燃煤清洁能源重点实验室参加了黑龙江省科技厅展开的省级各类科技平台评估认定工作,经自评申', '', '

\r\n         2012年5月,在院领导班子高度重视及各部门的大力配合下,能源院省级重点实验室-燃油燃煤清洁能源重点实验室参加了黑龙江省科技厅展开的省级各类科技平台评估认定工作,经自评申报、省科技厅综合评审,我院重点实验室被继续保留省级科技平台资格。
\r\n   我院燃油燃煤清洁能源重点实验室为黑龙江省重点实验室,2007年经黑龙江省科技厅批准成立。自成立以来,重点实验室科技人员先后承担并完成国际科技合作重点项目、科技攻关项目、省自然科学基金等项目14项。获国家发明专利10项,省科技发明一等奖一项,发表论文45篇,实现经济效益和社会效益累计达1000余万元,在清洁能源、替代能源、污染物减排等领域形成了自己的特色和优势。
\r\n   能源院将以此次评估认定为契机,做好重点实验室承担的各级课题,为提高我省清洁能源、可再生能源、替代能源等领域的技术水平及解决相关技术问题做出应有的贡献。

\r\n', 1, 0, '综合办', '能源,院,省级,重点,实验室,通过省,科技厅,', '2012-10-24 07:15:00', '2020-06-02 02:11:01', NULL), +(25, 32, 19, '奥里油或超重质沥青蒸馏轻质燃料油技术研究及产业化项目', '李福裿', '由黑龙江省能源环境研究院承担的国家振兴东北老工业基地科技专项奥里油或超重质沥青蒸馏轻质燃料油技术研究及产业化项目,2007年12月18日,圆满通过国家验收。 该技术不采用传统', '', '

\r\n         由黑龙江省能源环境研究院承担的国家振兴东北老工业基地科技专项——奥里油或超重质沥青蒸馏轻质燃料油技术研究及产业化项目,2007年12月18日,圆满通过国家验收。
\r\n         该技术不采用传统石油炼制装置,在奥里油或超重质沥青中加入3%~5%的液体催化剂,在非高压、不加氢气的条件下,从室温加热到450℃左右,时间3小时,蒸馏出轻质燃料油,这是石油炼制工艺的一次突破,该技术达到国际领先水平。
\r\n   该项目获得两项国家发明专利:
\r\n   《一种生产轻质燃料油的催化剂和方法》,专利号:ZL 2005 1 0002080.5。
\r\n   《一种以含油岩石为原料生产轻质燃料油的催化剂和方法》,专利号:ZL 2005 1 0126073.6。

\r\n', 1, 0, '综合办', '国家,振兴东北,老,工业,基地,科技,专项,—,由,', '2007-12-18 05:56:00', '2020-06-02 02:11:01', NULL), +(26, 33, 19, '国家“十五”科技攻关计划——工业锅炉脱硫试验与性能考核', '李福裿', '由黑龙江省能源环境研究院承担的国家十五科技攻关计划 工业锅炉脱硫试验与性能考核项目,2007年1月,圆满通过国家验收。 该技术已在山西省工业锅炉上应用,脱硫率高达95%。经法定', '', '

\r\n         由黑龙江省能源环境研究院承担的国家“十五”科技攻关计划 ——工业锅炉脱硫试验与性能考核项目,2007年1月,圆满通过国家验收。
\r\n         该技术已在山西省工业锅炉上应用,脱硫率高达95%。经法定环境监测中心站检测:脱硫前锅炉烟气SO2排放浓度高达2423mg/m3。采用脱硫技术后SO2排放浓度150mg/m3,远远优于国家标准SO2排放浓度额900mg/m3。
\r\n         该项目研究成果《燃煤、燃油锅炉烟气的脱硫脱氮催化剂及其脱硫脱氮方法》已申报国家发明专利,并通过实审。

\r\n', 1, 0, '综合办', '国家,“,十五,”,科技,攻关计划,—,工业,锅炉,', '2007-03-15 06:08:00', '2020-06-02 02:11:01', NULL), +(27, 34, 19, '国际科技合作项目——中加沙油炼制技术合作研究', 'admin', '黑龙江省能源环境研究院历时两年,圆满完成国家政府间国际科技合作项目中加沙油炼制技术合作研究。我院科技人员研发了加拿大沙油在非高压不加氢气的条件下,蒸馏出轻质燃料油', '/kjfh/uploads/allimg/130704/1-130F4110353502-lp.jpg', '

\r\n         黑龙江省能源环境研究院历时两年,圆满完成国家政府间国际科技合作项目——中加沙油炼制技术合作研究。我院科技人员研发了加拿大沙油在非高压不加氢气的条件下,蒸馏出轻质燃料油直接替代0号柴油应用的创新技术。
\r\n         验收专家组对项目进行了严格的评审,最后提出结论意见:该技术成果的关键是研制出的蒸馏催化剂,它是沙油炼制技术的一次创新,它解决了加拿大沙油无法直接蒸馏轻质燃料油的难题。该技术填补了国内外的空白,达到国际领先水平。
\r\n         专家建议:将该成果拓展到东南亚含油岩石、委内瑞拉奥里油和国内含油岩石的应用开发上。

\r\n  

\r\n

\r\n \"\"

\r\n', 1, 0, '未知', '国际,科技,合作项目,—,中,加沙,油,炼制,', '2006-12-12 06:05:00', '2020-06-02 02:11:01', NULL); +INSERT INTO `articles` (`id`, `oldid`, `category_id`, `title`, `writer`, `description`, `cover`, `content`, `status`, `sort`, `source`, `keywords`, `created_at`, `updated_at`, `deleted_at`) VALUES +(28, 35, 0, '棕榈毛油直接法转换生物柴油及催化燃烧技术', 'admin', '棕榈毛油直接法转换生物柴油及催化燃烧技术,是黑龙江省能源环境研究院自主研发并完全拥有该技术知识产权的创新技术。生物柴油是被当前世界公认的石化柴油的友好替代燃料,是', '/kjfh/uploads/allimg/130704/1-130F41223151b-lp.jpg', '

\r\n 棕榈毛油直接法转换生物柴油及催化燃烧技术,是黑龙江省能源环境研究院自主研发并完全拥有该技术知识产权的创新技术。生物柴油是被当前世界公认的石化柴油的友好替代燃料,是新型环保的可再生能源。
\r\n   黑龙江省能源环境研究院面对世界石油能源紧张的形势,积极探索可再生的生物柴油技术。经过多年的研究与试验,建立油品改性和催化燃烧技术理论,研发出一套切实可行的工艺路线和生产方法,提出棕榈毛油直接合成生物柴油和催化燃烧理论。该技术关键在于高效降粘组分、抗腐蚀组分、能量增强组分和独特的脱酸及催化燃烧组分等,它是直接法将棕榈毛油改性成生物柴油的关键助剂。
\r\n   B50棕榈毛油直接法转换生物柴油是由棕榈毛油、催化剂及柴油直接调合而成,比例为棕榈毛油 50 %,催化剂 5 %,柴油 45 %,它是完全可以替代柴油的新型环保燃料油。

\r\n  

\r\n

\r\n B50棕榈毛油生物质柴油的技术指标

\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n 序号 \r\n 检验项目 \r\n 检验方法 \r\n 检验结果
\r\n 1\r\n  密度( 30 ℃ ) ,g/cm 3\r\n GB/T1884\r\n 0.86
\r\n 2\r\n  密度( 40 ℃ ) ,g/cm 3\r\n GB/T1884\r\n 0.825
\r\n 3\r\n  硫含量,%( m/m )\r\n GB/T 380\r\n 0.05
\r\n 4\r\n  酸度, mgKOH/100mL\r\n GB/T 258\r\n 7.55
\r\n 5\r\n  灰分,%( m/m )\r\n GB/T 508\r\n 0.01
\r\n 6\r\n  铜片腐蚀( 50 ℃ , 3 h ) , 级\r\n GB/T 5096\r\n 1
\r\n 7\r\n  水分,%( V/V )\r\n GB/T 260\r\n 痕迹
\r\n 8\r\n  机械杂质\r\n GB/T 511\r\n 无
\r\n 9\r\n  运动粘度( 30 ℃ ) ,mm 2 /s\r\n GB/T 6536\r\n 12.2
\r\n 10\r\n  运动粘度( 40 ℃ ) ,mm 2 /s\r\n GB/T 6536\r\n 6.94
\r\n 11\r\n  凝点, ℃\r\n GB/T 570\r\n 12
\r\n 12\r\n  闪点(闭口), ℃\r\n GB/T 261\r\n 56
\r\n 13\r\n  十六烷值\r\n GB/T 386\r\n 49.0
\r\n 14\r\n  残炭,%( m/m )\r\n SH/T0170\r\n 0.3
\r\n
\r\n  
\r\n

\r\n   B40棕榈毛油直接法转换生物柴油是由棕榈毛油、催化剂及柴油直接调合而成,比例为棕榈毛油 40 %,催化剂 4 %,柴油 56 %,它是完全可以替代柴油的新型环保燃料油。
\r\n  

\r\n

\r\n B40棕榈毛油生物质柴油的技术指标
\r\n  

\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n

\r\n 序号

\r\n
\r\n

\r\n 检验项目

\r\n
\r\n

\r\n 检验方法

\r\n
\r\n

\r\n 检验结果

\r\n
\r\n

\r\n 1

\r\n
\r\n

\r\n  密度( 20 ℃ ) ,g/cm 3

\r\n
\r\n

\r\n GB/T1884

\r\n
\r\n

\r\n 0.856

\r\n
\r\n

\r\n 2

\r\n
\r\n

\r\n  硫含量,%( m/m )

\r\n
\r\n

\r\n GB/T 380

\r\n
\r\n

\r\n 0.05

\r\n
\r\n

\r\n 3

\r\n
\r\n

\r\n  酸度, mgKOH/100mL

\r\n
\r\n

\r\n GB/T 258

\r\n
\r\n

\r\n 7.10

\r\n
\r\n

\r\n 4

\r\n
\r\n

\r\n  灰分,%( m/m )

\r\n
\r\n

\r\n GB/T 508

\r\n
\r\n

\r\n 0.01

\r\n
\r\n

\r\n 5

\r\n
\r\n

\r\n  铜片腐蚀( 50 ℃ , 3 h ) , 级

\r\n
\r\n

\r\n GB/T 5096

\r\n
\r\n

\r\n 1

\r\n
\r\n

\r\n 6

\r\n
\r\n

\r\n  水分,%( V/V )

\r\n
\r\n

\r\n GB/T 260

\r\n
\r\n

\r\n 痕迹

\r\n
\r\n

\r\n 7

\r\n
\r\n

\r\n  机械杂质

\r\n
\r\n

\r\n GB/T 511

\r\n
\r\n

\r\n 无

\r\n
\r\n

\r\n 8

\r\n
\r\n

\r\n  运动粘度( 20 ℃ ) ,mm 2 /s

\r\n
\r\n

\r\n GB/T 6536

\r\n
\r\n

\r\n 10.00

\r\n
\r\n

\r\n 9

\r\n
\r\n

\r\n  凝点, ℃

\r\n
\r\n

\r\n GB/T 570

\r\n
\r\n

\r\n 3

\r\n
\r\n

\r\n 10

\r\n
\r\n

\r\n  闪点(闭口), ℃

\r\n
\r\n

\r\n GB/T 261

\r\n
\r\n

\r\n 60

\r\n
\r\n

\r\n 11

\r\n
\r\n

\r\n  十六烷值

\r\n
\r\n

\r\n GB/T 386

\r\n
\r\n

\r\n 49.5

\r\n
\r\n

\r\n 12

\r\n
\r\n

\r\n  残炭,%( m/m )

\r\n
\r\n

\r\n SH/T0170

\r\n
\r\n

\r\n 0.3

\r\n
\r\n

\r\n  

\r\n

\r\n   B30棕榈毛油直接法转换生物柴油是由棕榈毛油、催化剂及柴油直接调合而成,比例为棕榈毛油 30 %,催化剂 3 %,柴油 67 %,它是完全可以替代柴油的新型环保燃料油。
\r\n  

\r\n

\r\n B30棕榈毛油生物质柴油的技术指标

\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n

\r\n 序号

\r\n
\r\n

\r\n 检验项目

\r\n
\r\n

\r\n 检验方法

\r\n
\r\n

\r\n 检验结果

\r\n
\r\n

\r\n 1

\r\n
\r\n

\r\n  密度( 20 ℃ ) ,g/cm 3

\r\n
\r\n

\r\n GB/T1884

\r\n
\r\n

\r\n 0.850

\r\n
\r\n

\r\n 2

\r\n
\r\n

\r\n  硫含量,%( m/m )

\r\n
\r\n

\r\n GB/T 380

\r\n
\r\n

\r\n 0.05

\r\n
\r\n

\r\n 3

\r\n
\r\n

\r\n  酸度, mgKOH/100mL

\r\n
\r\n

\r\n GB/T 258

\r\n
\r\n

\r\n 7.00

\r\n
\r\n

\r\n 4

\r\n
\r\n

\r\n  灰分,%( m/m )

\r\n
\r\n

\r\n GB/T 508

\r\n
\r\n

\r\n 0.01

\r\n
\r\n

\r\n 5

\r\n
\r\n

\r\n  铜片腐蚀( 50 ℃ , 3 h ) , 级

\r\n
\r\n

\r\n GB/T 5096

\r\n
\r\n

\r\n 1

\r\n
\r\n

\r\n 6

\r\n
\r\n

\r\n  水分,%( V/V )

\r\n
\r\n

\r\n GB/T 260

\r\n
\r\n

\r\n 痕迹

\r\n
\r\n

\r\n 7

\r\n
\r\n

\r\n  机械杂质

\r\n
\r\n

\r\n GB/T 511

\r\n
\r\n

\r\n 无

\r\n
\r\n

\r\n 8

\r\n
\r\n

\r\n  运动粘度( 20 ℃ ) ,mm 2 /s

\r\n
\r\n

\r\n GB/T 6536

\r\n
\r\n

\r\n 6.80

\r\n
\r\n

\r\n 9

\r\n
\r\n

\r\n  凝点, ℃

\r\n
\r\n

\r\n GB/T 570

\r\n
\r\n

\r\n 2

\r\n
\r\n

\r\n 10

\r\n
\r\n

\r\n  闪点(闭口), ℃

\r\n
\r\n

\r\n GB/T 261

\r\n
\r\n

\r\n 62

\r\n
\r\n

\r\n 11

\r\n
\r\n

\r\n  十六烷值

\r\n
\r\n

\r\n GB/T 386

\r\n
\r\n

\r\n 49.8

\r\n
\r\n

\r\n 12

\r\n
\r\n

\r\n  残炭,%( m/m )

\r\n
\r\n

\r\n SH/T0170

\r\n
\r\n

\r\n 0.3

\r\n
\r\n

\r\n  

\r\n

\r\n  \"\"

\r\n

\r\n
\r\n   棕榈毛油直接法转换生物柴油已完成柴油机台架长期可靠性考核,完全可以替代柴油应用。
\r\n   应用B50生物柴油时,发动机未做任何改动,冷车启动一次成功,连续运行期间无停火、爆燃现象。发动机怠速、中速、高速时运行平稳,所带发电机满负荷运行正常。高压油泵柱塞付不会咬死,喷油嘴不会阻塞,运行安全可靠。
\r\n   发动机燃用棕榈生物柴油燃烧完全,长期应用后拆机检查,活塞顶部、燃烧室、进气门、排气门室的积炭接近于零,远远小于燃用柴油的积炭,发动机在大负荷和急加速状态下,排气管不冒黑烟。
\r\n   能源消耗方面,燃用棕榈毛油生物柴油由于采用催化燃烧技术,比燃用石化柴油在同等条件下节油 4 %。
\r\n   其综合性能优于柴油,完全可以在高、中、低速,大、中、小型柴油机上替代柴油应用。
\r\n   下面是长期应用后拆机情况:

\r\n  

\r\n

\r\n \"\"
\r\n \"\"

\r\n  

\r\n

\r\n
\r\n 经济效益
\r\n   采用直接法将棕榈毛油转换成生物柴油,生产中不像酯化法需使用大量醇类及酸液,不用纯碱做中和,不产生大量废甘油及废水,工艺简单,运行成本低。与柴油批发价相比每吨低数百元,经济效益显著。         

\r\n   生物柴油在销售渠道中享受国家相关的政策补贴,相当于企业又获得一定的利润,并可以为国家节省大量的柴油,社会效益和经济效益巨大。

\r\n', 1, 0, '未知', '棕榈,毛油,直接,法,转换,生物,柴油,及,催化,', '2006-12-01 07:02:00', '2020-06-02 02:11:01', NULL), +(29, 36, 19, '国家“九五”重点科技攻关计划——化学脱硫技术工业试验及性能考核', 'admin', '我研究院承担的国家九五重点科技攻关计划化学脱硫技术工业试验及性能考核[课题任务书编号(96- A19-02-05)], 在邹家华副委员长和国家环保总局解振华局长的关怀和支持下,完成了在', '/kjfh/uploads/allimg/130707/1-130FH11334T9.jpg', '

\r\n         我院承担的国家“九五”重点科技攻关计划——化学脱硫技术工业试验及性能考核[课题任务书编号(96- A19-02-05)], 在邹家华副委员长和国家环保总局解振华局长的关怀和支持下,完成了在发电厂的工业试验及性能考核。

\r\n

\r\n         国家环保监测部门在发电厂对应用化学脱硫技术试验进行监测,监测结果脱硫效果显著 。 该项目以满分的成绩通过了国家科技部组织的专家验收。并获得黑龙江省科技进步三等奖。
\r\n  

\r\n

\r\n \"\"
\r\n 邹家华副委员长批示
\r\n
\r\n \"\"
\r\n 国家电力公司呈给邹家华副委员长的函
\r\n
\r\n \"\"
\r\n 黑龙江省科技进步三等奖证书

\r\n', 1, 0, '未知', '国家,“,九五,”,重点,科技,攻关计划,—,化学,', '2008-03-03 06:04:00', '2020-06-02 02:11:01', NULL), +(30, 37, 19, '国家“十五”重点科技攻关计划——清洁能源项目', 'admin', '注:黑龙江省能源环境研究院原名为黑龙江省节油技术开发中心 我研究院与清华、中科院工程热物理所、国家电力公司西安热工院、国家电站工程技术研究中心、中国洁净煤中心等国家', '/kjfh/uploads/allimg/130707/1-130FH1204H08-lp.jpg', '

\r\n \"\"

\r\n

\r\n 注:黑龙江省能源环境研究院原名为黑龙江省节油技术开发中心
\r\n  

\r\n

\r\n         我院与清华、中科院工程热物理所、国家电力公司西安热工院、国家电站工程技术研究中心、中国洁净煤中心等国家级科研院所共同承担国家“十五”重点科技攻关计划——清洁能源项目,其中我研究院承担了化学脱硫工业性示范及设备产业化课题。

\r\n

\r\n
\r\n \"\"

\r\n

\r\n 应用管式电炉进行脱硫试验

\r\n

\r\n \"\"

\r\n

\r\n 科技人员应用碘量法测试 SO2

\r\n

\r\n         加入脱硫剂的煤燃烧后,烟气中SO2排放浓度达到国家最新标准Ⅱ时段要求。在 CRF 电站燃烧检测装置上对不同含硫量原煤(含硫量为:0.5%、1.0%、1.5%、2.0%)进行脱硫考核。我研究院圆满地通过了考核,并通过科技部组织的专家验收。

\r\n

\r\n \"\"

\r\n

\r\n CRF 电站燃烧检测装置

\r\n

\r\n \"\"

\r\n

\r\n 国家验收意见

\r\n', 1, 0, '未知', '国家,“,十五,”,重点,科技,攻关计划,—,注,', '2008-03-03 06:04:00', '2020-06-02 02:11:01', NULL), +(31, 38, 19, '国家“十五”重点科技攻关计划—工业锅炉脱硫试验与性能考核', '李福裿', '《工业锅炉脱硫试验与性能考核》是国家十五期间化学脱硫课题的深化研究,脱硫效率进一步提高。燃煤锅炉烟气中污染物排放达到国家《锅炉大气污染物排放标准》要求,烟气中SO2排', '/kjfh/uploads/allimg/130707/1-130FH12F2263-lp.jpg', '

\r\n         《工业锅炉脱硫试验与性能考核》是国家“十五”期间化学脱硫课题的深化研究,脱硫效率进一步提高。燃煤锅炉烟气中污染物排放达到国家《锅炉大气污染物排放标准》要求,烟气中SO2排放浓度小于等于900mg/m3。
\r\n         工业锅炉脱硫技术采用新型的催化脱硫方法,将烟气通过脱硫净化装置中的催化脱硫剂,在催化脱硫剂的作用下,使烟气中绝大部分的SO2固化形成硫酸盐等固体沉积在净化装置的底部,烟气排放达到国家标准。
\r\n         该技术工艺简单,投资少,效率高,达到国际先进水平。

\r\n  

\r\n

\r\n \"\"

\r\n

\r\n 工业锅炉脱硫工艺路线图
\r\n  

\r\n

\r\n         该技术已在太原煤气化(集团)有限公司成功地进行了工业性示范,太原市环境监测中心站对工业性示范进行了监测,其结果是:
\r\n          烟气未经脱硫前SO2排放浓度为2423mg/m3,
\r\n          烟气经过脱硫后SO2排放浓度为150mg/m3。
\r\n          脱硫率达到94%。

\r\n  

\r\n

\r\n \"\"

\r\n

\r\n  

\r\n', 1, 0, '综合办', '国家,“,十五,”,重点,科技,攻关计划,—,工业,', '2008-03-03 06:03:00', '2020-06-02 02:11:01', NULL), +(32, 39, 19, '奥里油或超重质沥青蒸馏轻质燃料油技术研究', '李福裿', '奥里油或超重质沥青是应用常规技术提炼出汽、煤、柴油等石化产品后的终极产品,目前,国内外都是采用高温、高压、加氢气方法从奥里油或超重质沥青中加工轻质燃料油。我院研制', '/kjfh/uploads/allimg/130707/1-130FH13314330-lp.jpg', '

\r\n         奥里油或超重质沥青是应用常规技术提炼出汽、煤、柴油等石化产品后的终极产品,目前,国内外都是采用高温、高压、加氢气方法从奥里油或超重质沥青中加工轻质燃料油。我院研制的在奥里油或超重质沥青中加入3%~5%的液体催化剂,能在非高压、不加氢气的条件下从室温加热到450℃,蒸馏出轻质燃料油来替代0号柴油技术。是一次高科技的研发过程,是石油炼制技术的一次重大突破。

\r\n

\r\n \"\"
\r\n  

\r\n

\r\n 轻质燃料油蒸馏工艺
\r\n \"\"\"\"\"\"

\r\n

\r\n       奥里油               催化剂                  轻质燃料油

\r\n

\r\n         此技术能使轻质燃料油出油率提高 30%,蒸馏后的固体残渣可以替代煤炭应用。这是真正意义的原油“吃干榨净”。此技术的产业化将是能源领域的一次创新,会获得巨大的经济效益。目前,该技术国家已正式立项,为国家“振兴老工业基地” 首批科技专项中的唯一能源项目(2004BA907A32)。

\r\n

\r\n \"\"

\r\n', 1, 0, '综合办', '奥里,油,或,超重,质,沥青,蒸馏,轻质,燃料油,', '2008-03-03 05:58:00', '2020-06-02 02:11:01', NULL), +(33, 40, 0, 'M30车用甲醇汽油技术', 'admin', '', '/kjfh/uploads/allimg/130707/1-130FH15TU30-lp.jpg', '
\r\n \"\"
\r\n', 1, 0, '未知', 'M30,车用,甲醇,汽油,技术,', '2006-06-08 14:06:00', '2020-06-02 02:11:01', NULL), +(34, 41, 19, '奥里油转化轻质燃料油技术', 'admin', '', '/kjfh/uploads/allimg/130707/1-130FH2192T55-lp.jpg', '
\r\n \"\"
\r\n', 1, 0, '未知', '奥里,油,转化,轻质,燃料油,技术,', '2006-06-08 14:11:00', '2020-06-02 02:11:01', NULL), +(35, 42, 19, '含油岩石提炼轻质燃料油技术', 'admin', '', '/kjfh/uploads/allimg/130707/1-130FH2261a52-lp.jpg', '
\r\n \"\"
\r\n', 1, 0, '未知', '含油,岩石,提炼,轻质,燃料油,技术,', '2006-06-08 14:20:00', '2020-06-02 02:11:01', NULL), +(36, 43, 19, '石脑油转化高性能燃料', 'admin', '', '/kjfh/uploads/allimg/130707/1-130FH23024364-lp.jpg', '\"\"', 1, 0, '未知', '石脑油,转化,高性能,燃料,', '2006-06-08 14:27:00', '2020-06-02 02:11:01', NULL), +(37, 44, 0, 'M65型车用甲醇汽油技术', 'admin', '', '/kjfh/uploads/allimg/130707/1-130FH235301X-lp.jpg', '
\r\n \"\"
\r\n', 1, 0, '未知', 'M65,型,车用,甲醇,汽油,技术,', '2006-06-08 14:32:00', '2020-06-02 02:11:01', NULL), +(38, 45, 0, 'M18型车用甲醇汽油技术', 'admin', '', '/kjfh/uploads/allimg/130707/1-130FH23910G3-lp.jpg', '
\r\n \"\"
\r\n', 1, 0, '未知', 'M18,型,车用,甲醇,汽油,技术,', '2006-06-08 14:36:00', '2020-06-02 02:11:01', NULL), +(39, 46, 0, 'M20型车用甲醇汽油技术', 'admin', '', '/kjfh/uploads/allimg/130707/1-130FH24211416-lp.jpg', '
\r\n \"\"
\r\n', 1, 0, '未知', 'M20,型,车用,甲醇,汽油,技术,', '2006-06-08 14:41:00', '2020-06-02 02:11:01', NULL), +(40, 47, 6, '新版网站上线', 'admin', '能源环境研究院(孵化中心)新版网站现已重新上线啦!', '', '    能源环境研究院(孵化中心)新版网站现已重新上线啦!敬请关注!', 1, 0, '未知', '通知,通知,', '2013-08-02 02:21:16', '2020-06-02 02:11:01', NULL), +(41, 49, 6, '关于举办万方数据平台使用培训的通知', '李福裿', '高效检索与文献分析万方数据知识服务平台使用详解培训大概定在本月20日或23日,请大家留意。', '', '        “高效检索与文献分析——万方数据知识服务平台使用详解”培训大概定在本月20日或23日,请大家留意。', 1, 0, '综合办', '万方,数据,平台,使用,培训,高效,检索,与,文献,', '2013-08-16 07:31:47', '2020-06-02 02:11:01', NULL), +(42, 50, 6, '关于举办Triz理论讲座的通知', '李福裿', '题目:Triz理论 时间:8月16日下午1:00 地点:孵化中心8楼会议室 主讲:王志成 欢迎各位同事积极参加!', '', '        题目:Triz理论
\r\n
\r\n        时间:8月16日下午1:00
\r\n
\r\n        地点:孵化中心8楼会议室
\r\n
\r\n        主讲:王志成
\r\n
\r\n        欢迎各位同事积极参加!
', 1, 0, '综合办', 'Triz,理论,讲座,通知,题目,Triz,理论,时间,8月', '2013-08-12 07:32:00', '2020-06-02 02:11:01', NULL), +(43, 51, 7, '我院举办TRIZ科技创新讲座', '李福裿', '8月16日,我院在8楼会议室举办了TRIZ科技创新讲座,由环境科学研究室主任王志成同志进行宣讲。此次讲座是根据我院2013年的工作指示精神而安排,旨在加强和提升院科研人员的创新能', '/uploads/allimg/130816/1-130Q6160551549-lp.jpg', '
\r\n \"\"
\r\n
\r\n  
\r\n        8月16日,我院在8楼会议室举办了TRIZ科技创新讲座,由环境科学研究室主任王志成同志进行宣讲。此次讲座是根据我院2013年的工作指示精神而安排,旨在加强和提升院科研人员的创新能力和科研能力。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n \"\"

\r\n  
\r\n        王志成系统介绍了TRIZ理论的历史起源,从技术系统的进化规律讲起,用生动例子介绍了技术矛盾与创新原理、物理矛盾与分离原理和无偿模型与标准解法。本次讲座受到了广大职工的认可,大家普遍反映,通过此次培训对TRIZ创新理论有了更深入的了解,对培养创新思维意义较大,不仅增长见识,开拓创新思路,提高创新能力,还可以将TRIZ原理应用于解决科研中遇到的实际问题,受益匪浅。', 1, 0, '综合办', '我院,举办,TRIZ,科技创新,讲座,8月,16日,我院,', '2013-08-16 08:09:34', '2020-06-02 02:11:01', NULL), +(44, 52, 6, '关于万方数据“高效检索与文献分析”专题培训的通知', '李福裿', '培训主题:高效检索与文献分析万方数据知识服务平台使用详解 培训讲师:万方数据周雷 培训时间:2013年8月23日13:30---16:30 培训地点:嵩山路15号省科学院会议中心', '', '
\r\n        
\r\n         培训主题:“高效检索与文献分析——万方数据知识服务平台使用详解”
\r\n         培训讲师:万方数据 周雷
\r\n         培训时间:2013年8月23日  13:30---16:30
\r\n         培训地点:嵩山路15号 省科学院会议中心
\r\n', 1, 0, '综合办', '关于,万方,数据,“,高效,检索,与,文献,分析,', '2013-08-19 06:58:12', '2020-06-02 02:11:01', NULL), +(45, 53, 8, '倾听民意 关注发展', '李福裿', '--省科学院群众路线教育实践活动调研组到我院调研 8月15日下午,省科学院群众路线教育实践活动调研组,来到省能源环境研究院(孵化中心)召开听取群众意见调研会议。省能源环境', '', '
\r\n --省科学院群众路线教育实践活动调研组到我院调研
\r\n  
\r\n 
\r\n    8月15日下午,省科学院群众路线教育实践活动调研组,来到省能源环境研究院(孵化中心)召开听取群众意见调研会议。省能源环境研究院(孵化中心)一、二线代表,工勤人员代表及部分党外人士出席会议,省科学院院长潘忠出席会议并发言。
\r\n    潘忠在讲话中指出,深入开展党的群众路线教育实践活动是党中央做出的重大战略部署。我院按照中央统一部署,正扎实开展教育实践活动,要充分调动基层党员干部的积极性,在教育实践活动中真正做到依靠广大党员群众,确保活动取得实效。他强调,此次会议是在基层代表中开一个集思广益的调研会,希望大家消除顾虑、畅所欲言,说多说少都行,说深说浅都行,说错说对都行,为开展好群众路线教育实践活动把把脉、支支招。
\r\n    会上,参会各位代表,本着“知无不言、言无不尽”的态度纷纷各抒己见,紧扣会议要求,聚焦院所建设,紧密联系工作中的实际,开门见山的找问题,潘院长针对每一个问题都进行了认真的记录,并做出了详实、客观的解答,他指出这些发言饱含真知灼见,是直言诤言,也是良计良策,既体现了大家对群众路线教育实践活动的积极拥护,也体现了大家对广大党员干部的殷切期许。同时,更应该深刻地认识到,群众利益无小事,必须坚持走群众路线,凡是涉及群众切身利益和实际困难的事情,再小也要竭尽全力去抓好办好,切实践行为人民服务的宗旨。
\r\n    会后,我院群众路线教育实践活动领导小组组织了专题讨论,对下一步工作开展进行了研究部署和具体安排。
', 1, 0, '综合办', '倾听,民意,关注,发展,省,科学院,群众,', '2013-08-15 03:27:00', '2020-06-02 02:11:01', NULL), +(46, 54, 9, '生物质能源发展趋势', 'admin', '生物质能源发展趋势', '', '请点击下载:\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \"\"\r\n 生物质能源发展趋势
\r\n', 1, 0, '能源化学研究室', '生物质,能源,发展,趋势,生物质,能源,发展,', '2013-08-27 05:02:29', '2020-06-02 02:11:01', NULL), +(47, 55, 9, '我国生物质能源的特点和发展方向', 'admin', '请点击下载: 我国生物质能源的特点和发展方向', '', '请点击下载: \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \"\"\r\n 我国生物质能源的特点和发展方向
\r\n', 1, 0, '未知', '我国,生物质,能源,的,特点,和,发展方向,请,', '2013-08-27 05:03:39', '2020-06-02 02:11:01', NULL), +(48, 56, 7, '黑龙江省能源环境研究院与延寿县技术合作洽谈', '刘伟', '2013年8月22日,应延寿县政协主席杨晓春的邀请,黑龙江省能源环境研究院院长徐晓秋、副院长关春玲同志以及科研办和财务办同志,一行五人来到延寿县交流访问。 徐晓秋院长一行受', '/uploads/allimg/130827/1-130RGA504317-lp.JPG', '
\r\n \"\"
\r\n  
\r\n
\r\n        2013年8月22日,应延寿县政协主席杨晓春的邀请,黑龙江省能源环境研究院院长徐晓秋、副院长关春玲同志以及科研办和财务办同志,一行五人来到延寿县交流访问。
\r\n        徐晓秋院长一行受到了延寿县政协主席杨晓春、延寿县副县长呼大鹏同志的热烈欢迎。在县政协会议室,徐院长首先介绍了研究院的概况,重点介绍了优势学科的发展及重点科研成果,并就延寿县所需的技术需求及下一步的合作构想与延寿县领导交换了意见。杨晓春主席对此表示赞同,并表示愿意与黑龙江省能源环境研究院建立长期、紧密的合作关系。下一步将就有机废弃物处理等领域的项目申报展开合作。
', 1, 0, '生物质能源实验室', '黑龙江省,能源,环境,研究院,与,延,寿县,2013年,', '2013-08-27 08:51:56', '2020-06-02 02:11:01', NULL), +(49, 57, 7, '能源环境研究院举办“马来西亚培训学习”经验交流会', '王志成', '能源院孵化中心举办马来西亚培训学习经验交流会 2013年9月18日下午,能源院孵化中心举办了马来西亚培训学习经验交流会。我院青年科技人员张玥同志做了内容丰富的培训学习汇报,', '/uploads/allimg/131010/1-13101016351M43-lp.JPG', '

\r\n         2013年9月18日下午,能源院举办了马来西亚培训学习经验交流会。我院青年科技人员张玥同志做了内容丰富的培训学习汇报,各科室青年科技人员参与了此次经验交流会。
\r\n         张玥同志在马来亚大学理学院化学系的胶体与表面实验室从事乳化柴油相关研究。经过四个月的学习,学到了乳化柴油相关的理论知识,制备出澄清透明、性质稳定的柴油微乳液,研究工作与现阶段工作很好的结合在一起,为今后工作起到指导性作用。
\r\n         张玥同志介绍了马来西亚的风土人情和所在大学的基本情况,在语言学习、实验室学习、日常生活等方面给与会人员做了详细讲述,总结了在国外学习和生活的体会和经验,使大家了解了马来亚大学的科研情况,开拓了大家的视野,也与青年科技人员们分享了国外生活学习的宝贵经验。青年科技人员们纷纷提出感兴趣的问题,会议气氛活跃。 

\r\n         最后,科研与产业化办公室主任王志成同志做了总结发言。希望全体科技人员借鉴宝贵经验,努力提高自身科研及英语水平,争取更多的出国学习机会,为我院更好更快发展贡献自己的力量。
\r\n  

\r\n

\r\n
\r\n  

\r\n

\r\n \"\"

\r\n

\r\n  

\r\n

\r\n \"\"

\r\n
\r\n  
\r\n', 1, 0, '环境科学与节能技术研究', '能源,环境,研究院,孵化,中心,举办,“,能源,院,', '2013-10-10 07:09:00', '2020-06-02 02:11:01', NULL), +(50, 58, 7, '院产业处领导来我院产业基地检查指导工作', '王志成', '院产业处领导来我院产业基地检查指导工作 2013年10月11日上午,院产业处孙宇峰处长、范延新、曹海虹副处长来到我院双城产业基地检查院产业化基金项目《M15车用甲醇汽油复合添加剂', '/uploads/allimg/131028/1-13102Q620470-L.jpg', '

\r\n         2013年10月11日上午,院产业处孙宇峰处长、范延新、曹海虹副处长来到我院双城产业基地检查院产业化基金项目《M15车用甲醇汽油复合添加剂》执行情况。我院科研与产业办主任王志成、副主任刘伟,以及项目组负责人张树华、刘岩陪同前往。
\r\n         孙宇峰处长仔细询问了产业项目的生产情况,科研与产业办和项目组详细介绍了生产流程、产量、效益等生产经营情况,现已全面、超额完成任务书的技术、经济考核指标,项目可以圆满结题;还介绍了下一步M25车用甲醇汽油复合添加剂、车用复合调节剂的生产开发情况。孙宇峰处长表示这是我院产业基金支持的较大项目,要及时、认真地对产业工作进行总结,以便给今后产业基金支持提供依据。
\r\n         科研与产业办和项目组表示有院领导和产业基金的支持,我院产业工作一定能更好更快发展。

\r\n
\r\n  

\r\n

\r\n \"\"
\r\n
\r\n \"\"

\r\n', 1, 0, '科研与产业化办公室', '院,产业,处,领导,来,我院,基地,检查,指导工作,', '2013-10-28 08:30:16', '2020-06-02 02:11:01', NULL), +(51, 59, 7, '能源院四项课题顺利通过鉴定', '王志成', '10月23日,我院成功地召开科学院预研课题利用页岩油制取油砂分离剂的研究、全馏分页岩油改质转化轻质运输燃料工艺的研究,院青年基金膜生物反应器中改性复合膜的制备与性能研究', '/uploads/allimg/131031/1-131031151Z0534-lp.JPG', '

\r\n         10月23日,我院成功地召开科学院预研课题——利用页岩油制取油砂分离剂的研究、全馏分页岩油改质转化轻质运输燃料工艺的研究,院青年基金——膜生物反应器中改性复合膜的制备与性能研究,省财政基本科研业务费专项——车用汽油复合调节剂技术研究等四项课题鉴定会。会议由省科学院科研处王阳处长主持,鉴定专家为哈工程、黑大等高校知名能源专家。
\r\n         鉴定委员会听取了课题组的工作汇报,审查了相关技术资料,经认真质询、讨论,形成鉴定意见。专家组认为,这四项课题在选题上紧扣能源、环境的主线,研究内容较新颖,技术路线及工艺合理可行,均达到国内先进水平。专家还建议进一步完善数据,扩大研究领域,开展放大实验。
\r\n         王阳处长作总结性发言,对专家组的辛勤工作表示感谢,对课题组提出要求,要按各位专家提出的意见、建议进一步充实数据,修定研究方法,完善课题鉴定材料。
\r\n         最后,课题鉴定会在热烈的掌声中胜利闭幕。

\r\n
\r\n  

\r\n

\r\n \"\"
\r\n
\r\n \"\"

\r\n', 1, 0, '科研与产业化办公室', '能源,院,四项,课题,顺利,通过鉴定,10月,23日,', '2013-10-31 07:13:13', '2020-06-02 02:11:01', NULL), +(52, 60, 6, '关于认真落实党的群众路线教育实践活动整改工作的通知', '李福裿', '院各部门: 为深入推进党的群众路线教育实践活动,认真做好整改工作,使整改工作扎实、有序推进,现就有关要求通知如下: 一、提高思想认识,增强工作紧迫性 整改落实是确保党', '', '院各部门:
\r\n    为深入推进党的群众路线教育实践活动,认真做好整改工作,使整改工作扎实、有序推进,现就有关要求通知如下:
\r\n     一、提高思想认识,增强工作紧迫性
\r\n    整改落实是确保党的群众路线教育实践活动见成效的一项重要工作,全院要提高思想认识、提高标准和要求,根据第一环节梳理归纳的意见和建议内容,集中解决问题。要切实增强整改工作的重要性和紧迫性,确保每一项整改内容落实到位。
\r\n    二、加强组织领导,落实整改责任
\r\n    院领导和各科室负责人要对照整改内容和整改要求认真抓好落实,对查找出来的问题即查即改,边查边改。对能够及时解决的问题,切实做到不等、不拖、不推。院领导班子要认真撰写整改材料,分析问题原因,剖析思想根源,明确努力方向,提出整改措施。
\r\n    三、加强督促检查,通报检查情况
\r\n    群众路线领导小组要对照整改内容逐项认真检查全院的整改落实情况,责任领导要及时了解整改和落实工作情况,活动办公室要督促办法推进,掌握进度,定期通报。
\r\n    四、制定整改时限,保障活动按期完成
\r\n    领导班子和各部门要明确整改内容、制定整改时限,突出整改重点,确保整改效果。
', 1, 0, '综合办', '关于,认真,落实,党的,群众,路线教育,实践,院,', '2013-11-28 02:21:00', '2020-06-02 02:11:01', NULL), +(53, 61, 7, '践行群众路线、深入一线检查', 'admin', '--省财政厅庄炳艳处长到能源院检查维修施工情况 9月22日下午,省财政厅教科文处庄炳艳处长、曹铁峰,省科学院条财处沙长青处长、张云志副处长,一同到我院实验楼维修项目施工现', '', '
\r\n --省财政厅庄炳艳处长到能源院检查维修施工情况
\r\n 
\r\n    9月22日下午,省财政厅教科文处庄炳艳处长、曹铁峰,省科学院条财处沙长青处长、张云志副处长,一同到我院实验楼维修项目施工现场检查指导工作,省能源院徐晓秋院长、关春玲副院长及办公室人员陪同检查。庄处长要求施工方必须把安全作为工作的重中之重来抓,确保工程按时、保质完工。

\r\n       庄处长先后来到实验室、中试车间等施工现场,听取了工程负责人关于维修改造项目的实施方案、质量监督和总体进展等情况汇报,认真查看了维修改造项目的施工质量、工程进度和安全设施情况,仔细询问了一些维修改造的实施细节,并对维修改造方案的进一步完善提出了指导性意见。
\r\n    庄处长最后指出,做全体员工满意的放心工程是关乎党的群众路线教育实践活动落实到位的关键,项目负责部门要在工期紧、任务重和气温突降的困难条件下,做到精细化施工、科学化管理,确保维修改造项目按期保质完工,切实为能源院职工提供满意的工作环境。

\r\n', 1, 0, '未知', '践行,群众路线,、,深入,一线,检查,省,财政厅,', '2013-09-22 03:28:00', '2020-06-02 02:11:01', NULL), +(54, 62, 7, '践行群众路线、科技服务先行', '王志成', '为实践党的群众路线活动,2014年2月19日,黑龙江省能源环境研究院院长徐晓秋、省科学院外事处处长高德玉以及科研办和寒区生物质能源技术研究中心科研人员等5名同志,来到齐齐哈', '/uploads/allimg/140225/1-1402250U9100-L.jpg', '        为实践党的群众路线活动,2014年2月19日,黑龙江省能源环境研究院院长徐晓秋、省科学院外事处处长高德玉以及科研办和寒区生物质能源技术研究中心科研人员等5名同志,来到齐齐哈尔市甘南县黑龙江蓝天能源发展股份有限公司交流访问,为企业把脉,排忧解难。 \r\n
\r\n \"\"
\r\n        徐院长一行受到了黑龙江蓝天能源发展股份有限公司总经理宋兴国、副总于兴友的热烈欢迎。徐院长一行不顾旅途劳顿,直接参观了厂区,了解生产工艺及设备试运行情况。在会议室徐院长首先介绍了研究院的概况,并表示愿意通过院地合作,利用能源院的技术优势为企业保驾护航。徐院长对生产工艺中不合理部分,提出建设性意见。对企业提出的原料预处理难题,表示可以通过技术合作联合攻关解决。宋兴国总经理对省里专家光临表示欢迎,并希望今后能长期合作。
\r\n        下一步将就对原料预处理及工艺优化项目联合申报课题,展开合作研究。
', 1, 0, '科研与产业化办公室', '践行,群众路线,、,科技服务,先行,为,实践,', '2014-02-19 01:12:00', '2020-06-02 02:11:01', NULL), +(55, 63, 7, '积极作为 凝聚推动环保事业正能量
--省科学院产业化处到能源院考察指导工作', '李福裿', '2014年3月12日,黑龙江省科学院产业化处李骏处长一行到我院考察指导工作。李骏处长考察了我院改造后的综合实验楼和中试实验室,并认真听取了我院近期的工作成果以及未来的发展计', '/uploads/allimg/140312/1-140312141110525.JPG', '        2014年3月12日,黑龙江省科学院产业化处李骏处长一行到我院考察指导工作。李骏处长考察了我院改造后的综合实验楼和中试实验室,并认真听取了我院近期的工作成果以及未来的发展计划。
\r\n
\r\n
\r\n \"\"
\r\n  
\r\n        能源院徐晓秋院长主持了会议,徐晓秋院长首先对产业化处对我院产业化工作给予的支持表示感谢,随后徐院长介绍了我院近期产业主体工作的总体情况,会上双方就能源院现有产业化工作进行了深入探讨。目前我院已研制出符合国Ⅴ标准的汽油添加剂系列产品和柴油添加剂等,与此同时,我院计划利用现有的秸秆无害化处理技术、生物质能源技术和洁净煤生产技术等,在环保重灾领域充分介入,为龙江百姓做出更大的贡献。
\r\n
\r\n
\r\n \"\"
\r\n  
\r\n        李骏处长对我院近期的发展以及我院对环保领域做出的贡献给予了充分肯定和赞赏,同时鼓励我院进一步提升研究能力,不断发挥我院在龙江产业体系建设中的作用,为龙江环保领域提供更强有力的技术支撑。
\r\n
\r\n \"\"
\r\n', 1, 0, '综合办', '积极,作为,凝聚,推动,环保,事业,正,能量,省,', '2014-03-12 02:18:00', '2020-06-02 02:11:01', NULL), +(56, 65, 7, '下基层 接地气
--省科学院产业化处与能源院', '王志成', '为进一步了解黑龙江省各地农作物秸秆资源化利用现状,2014年3月11日,黑龙江省科学院产业化处处长李骏,黑龙江省能源环境研究院院长徐晓秋,黑龙江省能源环境研究院总工程师高德', '/uploads/allimg/140318/1-14031Q01031493-lp.jpg', '

\r\n         为进一步了解黑龙江省各地农作物秸秆资源化利用现状,2014年3月11日,黑龙江省科学院产业化处处长李骏,黑龙江省能源环境研究院院长徐晓秋,黑龙江省能源环境研究院总工程师高德玉研究员以及科研办和生物质能源实验室的负责人,一行5人赴望奎县和明水县进行实地考察。
\r\n
\r\n  

\r\n

\r\n \"\"

\r\n

\r\n
\r\n         考察期间,我方一行受到了望奎县、明水县科技局和当地企业的热烈欢迎,此行先后参观了国能望奎生物发电有限公司和常青集团明水长青环保能源有限公司,并与企业进行了项目对接。在洽谈过程中,产业化处处长李骏介绍了黑龙江省科学院的相关情况,院长徐晓秋介绍了能源环境研究院的研究领域,着重介绍了生物质能源实验室的科研成果与科研实力,随后,总工程师高德玉研究员了解了企业采用的工艺和经济效益等情况,并参观了企业的生产工厂。
\r\n         通过此次考察,我院对望奎县和青冈县的秸秆利用有了深入的了解,下一步将与两家企业针对秸秆资源化利用过程中的遇到的技术难题开展合作攻关。

\r\n', 1, 0, '科研与产业化办公室', '下基层,接地,气,省,科学院,产业化,处,与,能源,', '2014-03-10 23:13:00', '2020-06-02 02:11:01', NULL), +(57, 66, 7, '黑龙江省能源环境研究院
首批科研人员赴清华大学学习交流', '李福裿', '为学习借鉴先进技术,汲取科研经验,我院选派的首批科研骨干,于3月14日起程赴清华大学开展学习交流活动,省科学院王钢副院长、省能源院徐晓秋院长和关春玲副院长亲自到场送行', '/uploads/allimg/140318/1-14031Q05955136-lp.JPG', '

\r\n        为学习借鉴先进技术,汲取科研经验,我院选派的首批科研骨干,于3月14日起程赴清华大学开展学习交流活动,省科学院王钢副院长、省能源院徐晓秋院长和关春玲副院长亲自到场送行。
\r\n
\r\n  

\r\n

\r\n \"\"

\r\n

\r\n
\r\n        王钢副院长要求此次赴清华学习的人员,要活跃思维,积极主动,认真学习对方的先进科研理念,并以此为指导,让一个点上的闪耀,带动一个面,受益一群人。最后祝此行人员在业务上和人生上都能有所收获。
\r\n        自去年9月我院与清华大学建立战略伙伴关系以来,双方在高效环保的新型能源领域开展了一系列合作,此次选派科研人员互访交流,将进一步拓宽我院科研人员视野,有利于提升我院的知名度和影响力,是深化院际合作的又一成功举措。

\r\n', 1, 0, '综合办公室', '黑龙江省,能源,环境,研究院,首批,科研,人员,', '2014-03-18 03:01:30', '2020-06-02 02:11:01', NULL), +(58, 67, 7, '院校交流,优势互补,扩大人才互动
--能源院科研人员赴清华大学学习', 'admin', '根据2013年清华大学杨旭东教授来院指导工作期间双方达成的关于人才培养方面的协议,我院从现在开始选派科研人员赴清华大学学习,首批人员一行四人于3月14日启程。省科学院王钢副', '/uploads/allimg/140318/1-14031Q05955136-lp.JPG', '

\r\n         根据2013年清华大学杨旭东教授来院指导工作期间双方达成的关于人才培养方面的协议,我院从现在开始选派科研人员赴清华大学学习,首批人员一行四人于3月14日启程。省科学院王钢副院长、能源院徐晓秋院长和关春玲副院长到场送行。
\r\n
\r\n  

\r\n

\r\n \"\"

\r\n

\r\n
\r\n         王钢院长嘱咐大家,此次清华之行,是各位人生中精彩的一笔,要珍惜此次的学习机会,明确学习目的,认真学习对方的科研理念和先进技术,汲取科研经验,用于指导今后的工作,最后祝大家此次学习圆满成功。
\r\n         此次赴清华大学的科研人员除学习外,还将参加清华大学科研项目的推广与实施工作,即北京市改善雾霾天气的一项举措--------北京市周边农村无烟村的建设工作,此项目的中试工作已经在我院完成。参加这项工作对该项目在我省的推广应用将起到重要作用。
\r\n         选派科研人员到清华大学学习,将进一步提高我院人员素质和水平,拓宽视野,真正做到资源分享、优势互补、科学定位、合作双赢,有利于提高我院的知名度和影响力,是 深化院校合作的新举措。

\r\n', 1, 0, '未知', '院校,交流,优势互补,扩大,人才,互动,能源,院,', '2014-03-14 23:12:00', '2020-06-02 02:11:01', NULL), +(59, 68, 7, '贯彻精神 认真部署
--省能源院召开科研工作会议', '李福裿', '3月27日上午,我院2014年创新团队建设工作会议在能源院会议室召开,各科研部门负责人出席会议。 徐晓秋院长主持会议并发言,在发言中,徐晓秋院长指出,要紧密围绕郭春景院长到', '/uploads/allimg/140327/1-14032G52Z0Y3-lp.JPG', '

\r\n         3月27日上午,我院2014年创新团队建设工作会议在能源院会议室召开,各科研部门负责人出席会议。
\r\n
\r\n  

\r\n

\r\n \"\"

\r\n

\r\n
\r\n         徐晓秋院长主持会议并发言,在发言中,徐晓秋院长指出,要紧密围绕郭春景院长到我院查检创新团队时的讲话精神,把握好科研工作的切入点。徐院长分别从树立成熟的科研理念、完善选题机制、规范工作职能、努力寻求高质量合作等几个方面做出重要指示,为我院下一步的创新团队建设工作指明了方向。
\r\n         工作会议对我院创新团队的建设工作进行了全面部署,提出了明确的工作要求,确定了工作的步骤和方法,并解答了各科研部门关于团队建设方面的相关问题,此次会议的召开为我院下一步打造高品质科研创新团队打下了基础,做好了准备。

\r\n  

\r\n

\r\n  \"\"

\r\n', 1, 0, '综合办公室', '贯彻,精神,认真,部署,省,能源,院,召开,3月,', '2014-03-27 07:48:25', '2020-06-02 02:11:01', NULL), +(60, 69, 9, '油页岩加工工艺进展', '陈松', '我国页岩油中约含有40%左右的轻柴油馏分,约含有45%左右的重柴油馏分,其十六烷值较高,经过精制后可作高速柴油机燃料。我国页岩重柴油馏分含有大量石蜡,也称为含蜡油,从中脱', '', '

\r\n         我国页岩油中约含有40%左右的轻柴油馏分,约含有45%左右的重柴油馏分,其十六烷值较高,经过精制后可作高速柴油机燃料。我国页岩重柴油馏分含有大量石蜡,也称为含蜡油,从中脱出的石蜡可作为商品出售。脱蜡油精制后可作为中速柴油机燃料,热裂化或加氢裂化的原料油。 页岩残油在室温下为黑色沥青状固体,直接作为燃料使用时,其凝固点过高。生产沥青时,沥青质量较差。但经过焦化能生产优质石油焦。因此,页岩残油一般作为焦化原料油。
\r\n 页岩油常温下为褐色膏状物,带有刺激性气味。抚顺页岩油中的轻馏分较少,汽油馏分一般仅为2.5%~2.7%;360℃以下馏分约占40%~50%;含蜡重油馏分约占25 %~30%;渣油约占20%~30%。页岩油中含有大量石蜡,凝固点较高,含沥青质较低,含氮量高,属于含氮较高石蜡基油。世界各地所产的页岩油由于组成和性质不同,在密度、含蜡量、凝固点、沥青质、元素组成方面有很大差别,但各地页岩油的碳氢重量比均在7~8左右,是最接近天然石油,最适于代替天然石油的液体燃料组成。
\r\n         组成页岩油的化合物主要有以下几类:烃类、含硫化合物、含氮化合物、含氧化合物。页岩油中丰富的烷烃和烯烃可生产相关的高附加值化学品。C6~10馏分被利用来生产增塑剂;C10~13馏分中通过生物降解线形十二烷基苯所得的产品作为清洁剂原材料;C14~18馏分作为脂肪醇和烷基硫化盐产品的原材料;重质烷烃馏分通过裂化以生产各种低分子质量的烯烃,也可以获得沥青和碳纤维。页岩油硫化物主要为硫化氢、硫醇类、噻吩类及硫茚等有机硫及二硫化物。硫的资源广而廉价,工业上、农业上、医药上、染织上和合成材料上的硫和硫化物的用途是非常多的。硫的用途主要是制酸(主要是硫酸)。页岩油中的含氮化合物可分为3类:碱性的、弱碱性的和中性的。碱性含氮化合物主要是叔胺类的吡啶系、喹啉系和异喹啉系化合物,弱碱性含氮化合物主要属于吡啶系化合物,中性含氮化合物则主要是腈类R-CN。而页岩油中存在的含氮化合物主要为吡啶系氮化物。吡啶碱是多用途的化工原料,它能溶解一般溶剂所难溶解的有机物,尤其是轻质吡啶,广泛用于制药工业。重质吡啶除了氧化制取菸碱酸外,又是有色金属矿的浮选剂,尤其对硫化物矿具有优良的富集性能。吡啶碱及硫酸吡啶络合物对稀酸侵蚀钢铁有一定的抑制作用,可用做钢铁腐蚀抑制剂。页岩油中的含氧化合物有:酸性含氧化合物和酚类,以及中性含氧化合物。而页岩油中含氧化合物的利用主要以酚类化合物为主。酚类化合物是塑料、染料、合成纤维、电气绝缘、防腐蚀和药品等的主要化学原料。其中重质酚类可以作为铜、铅、锌磁铁等矿物的浮选剂,也是制造木材粘合剂、农药杀虫剂等原料。影响页岩油柴油颜色及安定性的主要因素是其中含有大量的不饱和烃及氮、硫、氧等杂原子化合物,要解决页岩油柴油质量合格问题,关键在于如何脱除页岩油中的氮、硫、氧等杂原子化合物。天然石油的加工技术一般都适用于页岩油的加工。
\r\n         目前页岩油的加工方法主要分为加氢处理和非加氢处理2种。加氢处理页岩油可得到液体燃料,包括柴油、石脑油和汽油,生产的柴油稳定性好,产品收率高,没有“三废”排放,但一次性投资大,所需设备费用及操作费用也很高,适合于大型炼油厂;而非加氢处理过程设备投资小,工艺操作简单,费用较低,适合中小型炼油厂,非加氢处理一般包括酸碱精制、溶剂精制、吸附精制和加入稳定剂等。美国曾对绿河页岩油进行了大量加工方法的研究,主要采用加氢预处理法加以改质,以脱除砷、氮、硫等杂质,然后在炼厂按常规的炼油加工工艺加工成各种油品;巴西将页岩油经分馏分成轻馏分和重馏分,轻馏分经催化裂化生产汽油,重馏分作为燃料油;页岩油加氢技术仅有澳大利亚SPP公司达到工业试验阶段,通过加氢精制生产超低硫轻质燃料油。抚顺石油化工研究院(FRIPP)则于20世纪 50年代初就开展了页岩油加工流程的研究工作,并提出了一些不同的加工方案。由于60年代天然石油的发现及大量开采,页岩油生产逐渐萎缩,没再进行研究。不过FRIPP早期研究成果为今后页岩油加工研究提供了宝贵的经验,现将各项主要成果概述如下:
\r\n         1、热加工-加氢精制流程 
\r\n         页岩油全馏分焦化、热裂化的直馏混合轻油用纯MoS2加氢精制,获得了稳定的1号航煤,并提高了液体收率;页岩油全馏分焦化馏出油用W-Mo-NiAl系催化剂进行加氢精制,可以得到宽馏分航煤约34%(对加氢油),轻质汽车燃料68%(对全馏分)和页岩焦13.7%(对全馏分)。
\r\n         2、加氢精制-加氢裂化流程   
\r\n         1956~1958年对抚顺页岩油全馏分进行了加氢精制及加氢裂化小试试验。用MoS2 催化剂在26 MPa氢压下加氢精制,液体收率可达97%(未考虑制氢用原料),柴油收率为64.5%,生成油氮含量为0.05%,重油部分脱蜡后可以制取润滑油及石蜡;用 MoS2-W S2一段串联进行加氢裂化,轻质油产率可达78.5%,1号航煤可接近40%,生成油氮含量为0.01%。   
\r\n         3、加氢精制-催化裂化流程   
\r\n         1958年用抚顺页岩油全馏分高压固定床精制后含氮约0.08%的生成油,以低硅铝催化剂在试验室间歇固定床小型装置中进行了催化裂化试验,结果汽油收率约35%,柴油收率31%,液体产率74%。自2005年开始,FRIPP针对能源短缺的现实,又开展了以页岩油全馏分为原料,采用FRIPP开发的具有自主知识产权的加氢裂化催化剂加氢精制催化剂和加氢裂化-加氢处理反序串联(FHC-FHT)组合工艺技术,制取清洁燃料的研究。小试、中试结果表明,可生产满足欧V标准的清洁柴油及低硫、优质石脑油,且柴油收率高达81%,液体收率可达97%,化学氢耗为2.93%。
\r\n         酸碱精制是开发较早的精制技术,它包括酸洗、碱洗以及酸碱联合精制。酸洗一般采用浓硫酸、盐酸、磷酸等强酸,目的是脱除油中的胶质、含硫化合物,如硫醇类、硫酚类、硫醚、烷基二硫化物、噻吩和砜类,含氮化合物中的碱性氮可以全部洗去,部分非碱性氮化物、烯烃和芳烃也可以洗去;碱洗采用低浓度的碱液处理,目的是脱除油中的酸性物质,如硫醇、硫酚。   
\r\n         溶剂精制是利用某些溶剂对油品的理想组分和非理想组分的溶解度不同,有选择地从油品中脱除某些不安定组分,从而改善油品的安定性。选择合适的溶剂是溶剂精制的关键,应综合考虑溶剂的溶解能力和选择能力。 吸附精制是利用吸附剂对极性化合物较强的吸附作用,脱除油品中的氮化物以及含硫、含氧化合物,常用吸附剂有分子筛、硅胶、氧化铝、硅藻土和白土等。   
\r\n         添加稳定剂主要是为了防止芳烃、烯烃缩合和聚合成胶质沥青质,一般是由抗氧剂、分散剂、防腐剂、金属钝化剂等一种或几种添加剂组成的复合剂。其中,抗氧剂能够分解过氧化物,终止自由基生成,从而降低实际胶质,延长诱导期;分散剂能够迅速有效地分散沉渣颗粒,防止滤清器及喷油嘴堵塞;金属钝化剂使油品中溶解性金属离子活性降低,抑制其对油品氧化反应的催化作用,三者作用互补,共同起到改善页岩油柴油馏分稳定性的作用。 
\r\n         采用酸碱洗涤法来处理页岩油柴油馏分,结果表明,处理过程中产生的大量酸碱渣难以找到出路,因而未见其工业应用。 用极性复合溶剂和醇类复合溶剂联合精制法精制抚顺页岩油轻柴油,在很大程度上改善了精制油的安定性,精制柴油收率达到84%。石油大学重质油国家重点实验室用复合溶剂法精制抚顺页岩油粗柴油,在很大程度上改善了精制油的安定性,尤其是精制油的色度,而且精制柴油收率达到80%左右,溶剂回收率达到97%以上。

\r\n', 1, 0, '能源化学研究室', '油页岩,加工,工艺,进展,我国,页岩,油中,约,', '2014-03-30 17:09:04', '2020-06-02 02:11:01', NULL); +INSERT INTO `articles` (`id`, `oldid`, `category_id`, `title`, `writer`, `description`, `cover`, `content`, `status`, `sort`, `source`, `keywords`, `created_at`, `updated_at`, `deleted_at`) VALUES +(61, 70, 9, '煤焦油深加工现状、新技术和发展方向', '陈松', '煤焦油行业是一个比较传统的行业,尽管近30年来受到石油化工行业的激烈竞争,煤焦油行业仍然具有较大的发展潜力,尤其近几年来随着新材料和钢铁行业的发展,煤焦油资源的高效', '/uploads/140331/1-140331013114D9.jpg', '

\r\n         煤焦油行业是一个比较传统的行业,尽管近30年来受到石油化工行业的激烈竞争,煤焦油行业仍然具有较大的发展潜力,尤其近几年来随着新材料和钢铁行业的发展,煤焦油资源的高效利用再度引起人们的重视。我国是焦炭生产大国,约占世界的36%左右。焦炭的生产产生大量的副产物——煤焦油,我国煤焦油年产量约为500—600万t,加工能力约为450万t,在建、扩建、拟建项目能力约为200万t。目前共有约50多家企业进行煤焦油加工,其中最为先进的是宝钢集团上世纪从日本引入的煤焦油加工装置,加工规模为26万t/a,产品品种有26种,其次是鞍钢、武钢和本钢。除此以外的其他大多数的煤焦油生产相对分散,且以土炼焦工艺为主,这样不仅浪费了大量的不可再生资源,也污染了环境。
\r\n         随着我国经济的不断发展和对环境保护要求的日益提高,煤焦油的深加工成为一个亟待解决的课题。从目前煤焦油行业的发展情况来看,国内的煤焦化行业正处在一次重要的整合变革时期,未来的煤焦油工业正向集中化、精细分离、深加工、新材料合成方向发展。
\r\n         一、我国煤焦油产量
\r\n         煤焦油是以芳香烃为主的有机混合物,含有1万多种化合物,可提取的约200种,目前,有利用价值且提取经济合理的约50种,其深加工所获得的轻油、酚、萘、洗油、蒽、咔唑、吲哚、沥青等系列产品是合成塑料、合成纤维、农药、染料、医药、涂料、助剂及精细化工产品的基础原料,也是冶金、合成、建设、纺织、造纸、交通等行业的基本原料,许多产品是石油化工中得不到的。因此,煤焦深油加工可促进这些行业的发展。
\r\n 现代的炼焦生产过程中,从煤气中回收和初级化工产品主要有煤焦油、氨(主要是硫铵)和粗苯3种。煤焦油的产量,是根据炼焦生产配煤的种类不同而变化,配煤的挥发份越高,焦油回收率越多,焦油产量越大。
\r\n         二、国内外煤焦油加工现状
\r\n         1、生产规模
\r\n         日本、德国、法国、俄罗斯等国家的单套焦油蒸馏装置的能力都在10—50万t/a。从理论上讲,能力越大,规模效益越好。在资源有限的情况下,选择10万t/a的加工装置能最大限度发挥产品的加工价值。只有焦油收集量足够多的时候,才能建设5O万t/a焦油加工装置。国内单套焦油蒸馏装置有0.6,1.2,3,5, 10,15万t/a各种规模。3万t/a以上的规模均为连续蒸馏工艺,小于3万t/a的规模都是间歇蒸馏工艺。出现不同加工规模的原因有:①焦油加工厂自身焦油产量不同,按自产焦油建设相应的规模;②未作为一个产业来考虑焦油的加工,仅作为一个焦化厂的附带处理单元;③大规模焦油加工的技术水平不够;④环境保护和能量利用没有达到发达国家的重视程度。
\r\n         2、产品方案
\r\n         国外煤焦油加工有3种模式生产:一是全方位多品种,提纯和配制各种规格和等级的产品;二是在煤焦油加工产品的基础上,向着精细化工、染料、医药方面延伸的深加工产品;三是重点加工沥青类产品。
\r\n 第一种模式的代表是德国吕特格公司。从焦油中分离、配制的产品有220多种,萘有4个级别,树脂有5个级别,蒽有7个级别,沥青粘结剂及浸渍料有20个级别。可以根据市场要求,在同一装置上,改变操作参数,生产不同级别的产品,达到装置的多功能性。
\r\n         第二种模式的代表是日本的住金化学,仅对煤焦油中纯化合物进行提纯或延伸,试制和生产的产品有180种,如酚类衍生物有21种,喹啉及衍生物有32种,萘衍生物有60种。
\r\n         第三种模式的代表有日本三菱株式会社、美国的RiUy公司、澳大利亚Koppem公司,都在煤焦油沥青加工上有特色的产品。这些公司对煤焦油蒸馏的其它馏分均不进行加工,以混合油的形式出售,仅对蒸馏产生的沥青进行加工。因为煤焦油加工过程中,沥青产率在50%以上,做好沥青加工,提高沥青的附加值,就能够保证焦油加工项目的整体效益。
\r\n 国内煤焦油加工产品主要是酚类、萘、洗油、粗蒽、沥青等。各厂的产品质量和数量都基本类似,导致焦油加工的效益平平,与国外差距较大。其主要原因有以下几方面:各焦油加工装置的规模普遍偏小;高质量、高附加值产品较少;生产企业适应市场能力较差;焦油深加工产品的市场有待开发,特别是新产品推向市场时,其难度较大。
\r\n         3、工艺流程
\r\n 国内外焦油蒸馏的工艺大同小异,都是脱水、分馏,但国外的工艺比国内要多样化。国内的焦油蒸馏工艺与国外工艺相比较,差距并不大,只是适用的场合不同。只要对国内工艺的设备、仪表控制、能量利用方面做一些改进工作,就能够变成先进和实用的工艺。
\r\n         4、环保水平
\r\n         环保主要是指对焦油加工过程中所产生的废水、废气、废渣的处理。焦油加工产生的废水,国内外所采取的措施基本相同,都是集中收集,送焦化厂污水处理装置处理后排放,所不同的是国内污水处理后的指标要差一点。
\r\n         废气处理主要是指焦油加工过程中的放散气和沥青烟气的处理。国外焦油加工厂收集这部分废气,并集中到洗涤塔,净化、降温后送管式炉焚烧。有些焦油加工厂的油槽顶部还进行氮封,其放散气排出的可能性就更小。而国内只有个别焦油加工装置对放散气进行集中收集处理,大部分装置都是自由放散。所以在废气处理上应改进。
\r\n         焦油加工产生的废渣只有焦油渣,各国处理模式都一样,均是集中收集后混配到煤中。国内配到煤中的设施较差,有些厂随地抛弃现象严重。但只要严格管理,认真处理,达到国外处理水平是完全可以实现的。
\r\n         5、节能水平
\r\n         节能降耗是装置的重要指标。焦油加工是高能耗过程,国外在水、蒸汽、煤气消耗方面控制较好,采用空冷、冷热流体换热、多级循环水、低温减压蒸馏、热量回收蒸汽等技术,但电的消耗反而比国内还高。随着国内能源结构的调整,多使用电,减少水、蒸汽和煤气的消耗是一个必然趋势。
\r\n         6、装备水平
\r\n         装置的装备水平与机械制造、自控水平密切相关。国内焦油加工的装备水平与国外差距较大,主要原因是过多考虑项目投资额;高温运转设备、耐腐蚀材质、高温高粘度介质的检测仪表等难以找到合适的国内生产厂;即使是国外引进的设备,维修水平相差较远。
\r\n         三、国内煤焦油加工技术进展
\r\n         1、焦油蒸馏技术
\r\n         国内多采用常压、一塔式、切取两混或三混馏分的蒸馏工艺。而引进的煤焦油蒸馏装置有如下特点:采用连续脱水.脱轻油,馏分塔为减压操作,塔顶采出酚油、压力为13.3kPa,塔底为软化点为65℃的软沥青;采用方箱管式炉,出口焦油温度为330℃;余热利用好,其中,软沥青与焦油换热、各馏分采用蒸汽发生器产生0.3MPa的低压蒸汽;馏分塔塔顶的油汽采用空气冷凝冷却器,并为减压操作,可节能约15%一50%;减压抽出的尾气与分离酚水均送往管式炉焚烧;馏分塔材质选用抗腐蚀低碳合金钢。
\r\n         2、工业萘蒸馏技术
\r\n 目前,国内多数焦化厂生产的是不酸洗95%工业萘,只有回收喹啉类的厂家才生产稀酸洗95%工业萘。另外,生产95%工业萘的原料也有不同:窄馏分(即萘油馏分)、四混馏分(轻、酚、萘、洗)、三混馏分(酚、萘、洗)、两混馏分(萘、洗)等。
\r\n         工业萘蒸馏工艺可分为常压间歇釜式精馏、减压间歇釜式精馏、常压双釜双塔连续精馏、常压双炉双塔连续精馏、常压单炉双塔连续精馏、常压单炉单塔连续精馏、常加压单炉双塔连续精馏等。从精馏塔的实际塔板数来看,开始为5O层、后增加到63,64,70层。其精馏塔的塔型有填料塔(瓷环、鲍尔环、波纹板等)、圆泡罩塔、条形泡罩塔、斜孔板塔、浮阀塔等。目前,多数大型焦化厂采用70层浮阀塔,以两混或三混馏分为原料的常压双炉双塔连续精馏工艺。常压单炉、双塔连续工艺较普遍,而宝钢的常压、加压单炉双塔连续工艺的能耗最低。随着计算机的应用,单炉、单塔连续精馏工艺有发展前途。
\r\n         3、焦油蒸馏所获馏分的洗涤技术
\r\n         这里指的是碱洗脱酚或酸洗脱喹啉装置,可分别获得酚盐与硫酸喹啉。一般是先脱酚、后脱喹啉,也可只脱酚、不脱喹啉。原料则根据焦油蒸馏切取馏分不同而异,有窄馏分、宽馏分之分。洗涤工艺可间歇或连续操作。洗涤设备有空气搅拌、机械搅拌、泵混合、静态混合器、喷射混合器等型式。后两种洗涤器较先进,洗涤效果好,便于连续操作与自动控制。碱洗脱酚的主要控制因素有用碱浓度、洗涤温度、分离时间、洗涤的级数等。各馏分的洗涤要求馏分含酚小于0.5%。宝钢引进的是全连续碱洗脱酚工艺,碱液浓度较低,为8%一10%;轻油、酚油均为一段脱酚,脱酚效率分别为~38%和88%。其轻油脱酚对酚钠盐起到净化的作用。萘油则采用三段脱酚,脱酚效率79%;脱酚设备采用静态混合器。另外,只对脱酚酚油与甲基萘油分别进行连续酸洗脱喹啉,加酸浓度为30%一39%,效率分别为38.5%和52.2%。设备也采用静态混合器。
\r\n         4、粗蒽制取技术
\r\n         国内各厂均采用间歇操作工艺,设备为转鼓结晶机。为了提高粗蒽的收率,开发了两段结晶法。宝钢引进的工艺采用全连续程序控制操作,包括:蒽油装人、冷却结晶、放料、离心等工序,计44h。后改进为自然与强制冷却相结合,缩至35h,结晶颗粒大;设备采用立式冷却结晶机,有利于实现连续操作;所得粗蒽的含蒽高达38%,而含油很低。
\r\n         5、酚钠盐分解技术
\r\n         国内大多采用硫酸分解法,缺点是有浓酚水产生,较难处理。20世纪70年代开发了烟道废气分解法,仍有二次污染问题。宝钢引进工艺采用高炉煤气分解法,按两级分解操作,其分解率为98%;并配备有苛化装置,可获得浓度为8%一10%的苛性碱液,苛化率为77%;无二次污染问题。
\r\n         6、精萘制取技术
\r\n         国内原来一直采用浓硫酸精制法,缺点是产生大量废酸很难处理,且能耗高、收率低。20世纪80年代开发了间歇操作的分步结晶法,并得到普遍应用。近年改为采用“Praobd”工艺技术,为箱式分部结晶,精萘产率为90%,并全部按程序自动控制、连续操作。
\r\n         7、粗酚精制技术
\r\n         国内多采用常压脱水一减压脱渣、精馏的工艺,获得的酚类产品质量较差。引进的采用5塔连续操作脱水脱渣精馏、第6个塔为间歇操作的工艺流程。各塔均为减压操作,苯酚的回收率高达42%,比国内要高10%左右;产品质量特别好,有特号苯酚(结晶点40℃以上),邻位甲酚(结晶点29℃以上),问、对甲酚,二甲酚等。
\r\n         8、粗吡啶与粗喹啉精制技术
\r\n         国内均采用烧碱液中和分解硫酸喹啉,国外多采用液氨中和分解,粗吡啶与粗喹啉的精制都是采用间歇操作、共沸脱水、减压精馏的工艺流程。与国内不同的是引进装置采用6塔间歇脱水、真空精馏操作,并采用了空冷器,可节约冷却用水。
\r\n         9、精蒽、精咔唑与蒽醌生产技术
\r\n         国内都采用以粗蒽为原料,经溶剂一精馏法处理获得精蒽,再催化氧化制取蒽醌。宝钢引进Praobcl技术,即以I蒽油为原料,先加入溶剂进行分布结晶(即:溶剂结晶法),进行减压蒸馏,获得精蒽(含蒽达95%以上)与精咔唑(纯度为90%以上)。蒽醌生产工艺是瑞士Ciba Geigy公司的技术,经多段固定床催化氧化、多段冷却,获得纯度为99%以上的蒽醌。与国内相比,工艺与设备方面的水平也差不多。特点是整个生产过程所产生的废液很少,可以送往活性污泥装置处理;产生的废气量较大,但它可以经回收、过滤,再经废气燃烧装置破坏后放散,故不会给环境带来危害。
\r\n         煤焦油进一步深加工水平取决于投资和市场,一般而言,随着加工深度的增加,产品的附加值增高,同时投资也增大。在深加工中要考虑设备上的灵活性,根据市场需要及时调整产品质量品种。煤焦油的集中加工是现代化工业发展的必然趋势,也是国家的一项技术政策,今后发展方向是如何提高资源利用率、扩大品种、搞深度加工,对产品结构延伸,致力于新产品的开发、减少污染,加强国内外信息交流,扩大对外开放,加大引资的力度,为企业的发展注入活力,组建煤焦油化学品信息与技术协作网。加强煤焦化企业、科研教学、信息研究机构的协作,使资源得到合理利用。

\r\n', 1, 0, '能源化学研究室', '煤焦油,深加工,现状,、,新技术,和,发展方向,', '2014-03-30 17:30:53', '2020-06-02 02:11:01', NULL), +(62, 71, 9, '页岩气真的能掀起一场能源革命吗?', '陈松', '2012年争论最热烈的能源话题,莫过于页岩气革命。而随着隆冬来临,对这场革命的关注热度也在降温。激烈的唱多派声音有些嘶哑了,务实派的冷静思考开始占上风。这种转变有点成也', '/uploads/140331/1-140331012335D4.jpg', '

\r\n         2012年争论最热烈的能源话题,莫过于“页岩气革命”。而随着隆冬来临,对这场“革命”的关注热度也在降温。激烈的“唱多派”声音有些嘶哑了,“务实派”的冷静思考开始占上风。这种转变有点“成也萧何败也萧何”的味道。最早鼓吹“页岩气革命”的美国陆续传来利空的消息。虽然近年来页岩气开发的声势不小,可参与进去的开采商收益却持续恶化。美国天然气巨头XTO Energy的CEO对外透露,“我们如今亏得裤子都没了,页岩气生意根本不赚钱,所有人都在亏钱“。据报道,一些大牌能源公司都在下调来年页岩气产量计划。有统计称,2012年美国境内的挖掘机数量下降至422台,比一年前下降48%,创下20年来降幅最大的纪录。工程机械使用数量的增减趋势,经常被用来衡量该地区基础工业项目(比如矿业、房地产等)的开工热度。一直站在旁侧静观其变的俄罗斯开始冷嘲热讽。俄罗斯科学院一位专家说,即便美国页岩气已经规模化开采,其成本相比传统的常规天然气还是偏高,而这种资源不适合远距离运输,采气区资源消耗过快,再加上生态破坏等难题,都将使得这场“革命”越发显得虚幻。由于担心地质灾害,美国纽约州和特拉华盆地已叫停了该地区的页岩气项目。《金融时报》警告,页岩气开发使得美国再度兴起“廉价化石燃料之风”,但短期或中期的经济收益却可能使该国陷入长期依赖化石能源的“陷阱”。
\r\n         所谓页岩气,就是从页岩层中开采出来的天然气。它与煤层气、致密砂岩气一起,被称为非常规油气资源的三大品种。美国从19世纪就开发过商用页岩气矿井,不过直到21世纪,其开采技术才日渐成熟。2006年之后,国际能源市场经历了一轮“大牛市”,这使得页岩气开采变得有利可图。金融危机之后,奥巴马倡导美国“能源独立”战略,要大幅度降低对海外能源的依赖程度。从杯盘狼藉的华尔街流出来的资金,发现了页岩气这个“富矿”。一时间,各种投机资金扮上新能源的“新娘妆”,成群结队要下嫁页岩气这个几乎被遗忘的“穷小子”。 20世纪80年代因下注页岩气开发而破产的美国房地产商乔治·米歇尔也被请了出来。美国一家能源协会授予这位90多岁的老人“终身成就奖”。事实上,米歇尔用于页岩气开发的水平钻井技术和分段水力压裂技术,算不上什么“技术革命”,它只是在长期钻井经验中积累下来的一套相对成熟的钻探工艺,证明了只要投入足够多的资金,“从石头里榨出的血”也有可能相当廉价。
\r\n         页岩气开采的确使美国能源结构发生了巨变。页岩气在美国天然气产量的比重从1996年的1.6%猛增至2010年的约23%,并使美国在2009年超过俄罗斯成为世界第一大天然气生产国和资源国。据预测,美国有可能在2021年成为天然气净出口国。但这场美国“革命”是否能在世界其他地区复制,还存在很大疑问。我国城市金融研究所的报告显示,页岩气在全球范围开发还有众多障碍:首先,地质条件的极大差异页岩气开采受阻;其次,页岩气在使用过程中要消耗大量水资源,而它必须使用的化学品可能对蓄水层造成污染;第三,天然气价格的持续低迷会打击企业的投资热情;第四,在北美以外市场,普遍缺乏足够的储存、液化和传输等非常规天然气的基础设施,这将大大限制市场开发进程。在这些难题待解的情况下,如果美国的页岩气“革命”开始进入“挤泡沫”阶段,其他国家的情况恐怕就更不乐观了。
\r\n 从各方数据对比,中国的页岩气储量似乎并不比美国少。中国是仅次于美国的能源消费大国,一些为中国页岩气“革命”鼓与呼的声音,由此可以理解了。但冷静下来会发现,页岩气开发对环境条件的“硬束缚”,恐怕不是中国的禀赋条件所能承受的。中国人均占有土地和水资源的数量远逊于美国,生态环境更为脆弱。平均而言,一口页岩气井需要20万吨水,向页岩中注入的压裂液中含有大量化学成分,对地下水资源的影响存在很大不确定性。而中国的页岩气富集区域又往往处在水资源较为紧张的内陆、盆地地区。在页岩气的“十二五”规划中,像华北地区、准噶尔盆地、吐哈盆地、鄂尔多斯盆地这样的缺水地区,即便资源潜力不小,但要真正落实开采,则需慎之又慎。有业内专家提醒,在辽宁、陕西和四川等地,页岩气的大规模开发很可能会出现与工业和农业“争水”的难题。另须格外关注的是,中国目前的页岩气开采技术还不过关。如上所述,目前成熟的页岩气开采技术主要是基于美国特定区域和地质特点而长期积累下来的钻探工艺。别说一时半会儿不可能从美国引进技术,就算能把技术拿来,是否适应中国特殊的地质特性和环境,也存在很大疑问,更不要说由此而增加的巨额开采成本了。
\r\n         除此之外,必须在商业上对页岩气的合理性有精确的论证。美国页岩气“革命”的前提,是有6300家大大小小的天然气生产商参与的“充分动员型”的市场化模式。这与中国只有几大能源企业控制市场的局面差异很大,对风险的承受能力也大不相同。美国能源工业发展了将近两百年,油气管道密如蛛网,约有50万公里,中国即便这些年发展很快,也不过区区6万公里。管网基础建设不能一蹴而就,不能及时商品化的页岩气资源,显然会让开采商面临尴尬。曾任职石油部勘探司副司长的老专家查全衡就公开撰文称,如果中国不能找到一条比美国“更省地、省钱、省水,更环保”的开发方法,就不要过早谈什么“页岩气革命”,省得“被美国忽悠”。从本质上看,美国的页岩气“革命”,是应对金融危机后国家经济“脾虚伤肾”的一个应急手段。美国金融危机,表面上看是华尔街心火旺盛导致了“脑中风”,实质上是国家经济“产业空心化”、“消费金融化”情况严重,长期积累下来,造成经济肌体的脾胃消化不良、精气不足,终致“肾阴虚亏”。
\r\n         这几年美联储不停地印钱,给美国经济“滋补血气”,暂时稳定了金融市场,但流动性增加之后资金必须有出口。同时,美国经济需要降低成本,增加产品竞争力,启动所谓“再工业化”战略,那么能源价格是否足够低廉则是个瓶颈。页岩气开采算不上一项重大科技创新,但它的启动,恰恰在投机资本流向和降低制造业成本两个战略方向上达成了一致,这才有了“革命”。从货币层面上看,页岩气“革命”给贬值风险加剧的美元注入了新的变量,但这绝非一种可持续的正向变量。作为世界经济的“龙头”,美国经济应当以持续的科技创新为牵引力,拉动世界经济增长,从而让其美元重新“实心化”——以再造实业来建立必要的纸币信用。但就像华尔街一度创造的“石油-美元”捆绑游戏一样,因其本性使然,他们仍然要将货币与页岩气等大宗资源捆绑,通过操纵和炒作资源类的大宗商品,制造资源产品的泡沫,来控制全球经济,并维系其“美元帝国”的秩序。但是这种经济再循环的结果,最终不过是“下一个2008”罢了。
\r\n         与原油不同,天然气一直没有形成全球性的市场,只有欧洲、北美和亚洲三大市场,这三大市场的天然气价格长期存在“落差”。美国能源自给的预期,以及页岩气“革命”给液化天然气贸易增加的想象空间,有可能将全球天然气市场联系在一起,打破原来以管道天然气为主的贸易方式。因此,页岩气“革命”背后的潜台词可能是:当美国在中东受挫而不得不进行战略“收缩”时,它对世界石油的控制力降低了,但它反而必须要在天然气这种新兴的大宗资源商品上争取主导权和定价权,以便让美元重获信任。治疗“美国病”的合理逻辑应该是“健脾补肾”。“健脾”就是通过收入调节来促进消费,让陷入困境的美国中产阶级再次挺起胸膛,而不是郁闷到搞什么“占领华尔街”的街头运动。“补肾”就是强化国家科研创新能力,持续增加制造业的技术水平,沿着当年他们搞“阿波罗登月”计划的道路前进。但是,页岩气“革命”这种搞不好很可能搞成敲骨吸髓一般的透支性资源开采,却在大行其道。美国经济可能本来只是“阳虚”,这样下去,反而有了搞成“阴阳两虚”的趋势。笔者认为,一种理性的国家能源长期战略不能被急功近利的思维左右。
\r\n         以此反观中国,在全球化经济分工链条中,中国是实业国家,而不是资源国家。中国具有全球最充足的生产能力和商品供应能力,同时又是潜在的最具成长性的消费市场。一方面,中国对资源的需求是强烈的;另一方面,我们换取资源的能力也是强大的。“实业换资源”,仍是我们安身立命的根本和长期战略。历史上,仅仅靠提供廉价资源获得利润从而实现繁荣的国家,不可能是真正的强国,繁荣也不会持久。因为它们很快就透支了自身的资源,走向衰落。只有那些拥有强大的甚至是不可替代的制造能力和创新能力的国家,那些通过技术的不断升级,持续开发出新能源、开拓出新的经济增长方式的国家,才能走在世界前列。从这个意义上说,对于美国的页岩气“革命”,中国从战略上不必重视过度。远期看,真正的能源“革命”必须伴随着跨时代的技术创新,下一轮能源大变革将从“采集能源”向“制造能源”过渡,以核聚变为基础的核能研发和普及利用,才是真正的大方向。中国能源战略的主攻方向应该在这里。在战术上,中国又不能完全忽视页岩气。毕竟,在中短期内它对提升美国经济竞争力确实有所帮助。我们要审慎观察它对美国经济复苏进程的真实影响。同时,在目前世界格局中,要想不被别人在资源上“卡脖子”要挟,你自己必须要“立得住”。中国缺乏在全球大宗商品和资源贸易体系中的定价权。因此,我们应该积极参与国内以及国外的页岩气市场的调研、开发,不论在传统能源领域还是在页岩气这种新能源领域,中国在立足自身的同时,更要坚定地“走出去”,要去积极争取定价权。
\r\n         还须认清的问题是,页岩气“革命”以及由此延伸的页岩油开发,一定程度上推翻了美国一度鼓吹的“石油峰值论”。“人类不是因为缺少石头才离开石器时代,也绝不会因为缺少石油才离开石油时代。”此话不假。这不,石油并未枯竭,常规的、非常规的天然气已经开始给全球经济输血了。这再次证明,真正的“资源瓶颈”,不在地表或地下,而是在人的大脑里。只要技术进步,总会有新的资源被发现、被利用。技术的小进步,会有小批量的资源被利用;技术的大进步和大跨越,就会带来大批量的资源。对于中国的大型能源企业而言,应该在各种“革命”论中保持头脑清醒。对它们的最大挑战,不在于跟踪某种“错综复杂的趋势”,而是明确能源开发的大方向,进行提前布局。中国经济的崛起必然同时伴随一次能源“革命”,那一定不会在石油、天然气这种传统化石能源层面发生。像中石油、中石化、中海油这些主导着国家命脉的大企业,是否考虑过在花掉数百亿美元投资去世界各地购买传统能源公司的同时,留出一部分资金,去投资类似核聚变、核引擎这样真正影响长远的科技攻关项目呢?2012年,中国已经进行了两轮页岩气项目招标,引得能源行业热闹异常。因为有民营企业中标,一些不着调的评论把这说成是中国“能源体制变革的重大时刻”。请不要忘记,能源行业的性质决定了它的投资周期长、资金投入大,历来都是大风险项目,这和体制并无直接联系。况且,总不能期望中国的页岩气开采重蹈山西小煤窑泛滥的覆辙吧。奉劝那些为页岩气项目抓狂的投资者最好谨慎些。有句业内人士的戏言,在新年里似乎应格外上心:不要“投进去的是鳄鱼,出来的是壁虎”。
\r\n  

\r\n  

\r\n', 1, 0, '能源化学研究室', '页岩,气,真的,能,掀起,一场,能源,革命,吗,', '2014-03-30 17:23:05', '2020-06-02 02:11:01', NULL), +(63, 72, 9, '页岩气真的能掀起一场能源革命吗?', '陈松', '2012年争论最热烈的能源话题,莫过于页岩气革命。而随着隆冬来临,对这场革命的关注热度也在降温。激烈的唱多派声音有些嘶哑了,务实派的冷静思考开始占上风。这种转变有点成也', '', '

\r\n         2012年争论最热烈的能源话题,莫过于“页岩气革命”。而随着隆冬来临,对这场“革命”的关注热度也在降温。激烈的“唱多派”声音有些嘶哑了,“务实派”的冷静思考开始占上风。这种转变有点“成也萧何败也萧何”的味道。最早鼓吹“页岩气革命”的美国陆续传来利空的消息。虽然近年来页岩气开发的声势不小,可参与进去的开采商收益却持续恶化。美国天然气巨头XTO Energy的CEO对外透露,“我们如今亏得裤子都没了,页岩气生意根本不赚钱,所有人都在亏钱“。据报道,一些大牌能源公司都在下调来年页岩气产量计划。有统计称,2012年美国境内的挖掘机数量下降至422台,比一年前下降48%,创下20年来降幅最大的纪录。工程机械使用数量的增减趋势,经常被用来衡量该地区基础工业项目(比如矿业、房地产等)的开工热度。一直站在旁侧静观其变的俄罗斯开始冷嘲热讽。俄罗斯科学院一位专家说,即便美国页岩气已经规模化开采,其成本相比传统的常规天然气还是偏高,而这种资源不适合远距离运输,采气区资源消耗过快,再加上生态破坏等难题,都将使得这场“革命”越发显得虚幻。由于担心地质灾害,美国纽约州和特拉华盆地已叫停了该地区的页岩气项目。《金融时报》警告,页岩气开发使得美国再度兴起“廉价化石燃料之风”,但短期或中期的经济收益却可能使该国陷入长期依赖化石能源的“陷阱”。
\r\n         所谓页岩气,就是从页岩层中开采出来的天然气。它与煤层气、致密砂岩气一起,被称为非常规油气资源的三大品种。美国从19世纪就开发过商用页岩气矿井,不过直到21世纪,其开采技术才日渐成熟。2006年之后,国际能源市场经历了一轮“大牛市”,这使得页岩气开采变得有利可图。金融危机之后,奥巴马倡导美国“能源独立”战略,要大幅度降低对海外能源的依赖程度。从杯盘狼藉的华尔街流出来的资金,发现了页岩气这个“富矿”。一时间,各种投机资金扮上新能源的“新娘妆”,成群结队要下嫁页岩气这个几乎被遗忘的“穷小子”。 20世纪80年代因下注页岩气开发而破产的美国房地产商乔治·米歇尔也被请了出来。美国一家能源协会授予这位90多岁的老人“终身成就奖”。事实上,米歇尔用于页岩气开发的水平钻井技术和分段水力压裂技术,算不上什么“技术革命”,它只是在长期钻井经验中积累下来的一套相对成熟的钻探工艺,证明了只要投入足够多的资金,“从石头里榨出的血”也有可能相当廉价。
\r\n         页岩气开采的确使美国能源结构发生了巨变。页岩气在美国天然气产量的比重从1996年的1.6%猛增至2010年的约23%,并使美国在2009年超过俄罗斯成为世界第一大天然气生产国和资源国。据预测,美国有可能在2021年成为天然气净出口国。但这场美国“革命”是否能在世界其他地区复制,还存在很大疑问。我国城市金融研究所的报告显示,页岩气在全球范围开发还有众多障碍:首先,地质条件的极大差异页岩气开采受阻;其次,页岩气在使用过程中要消耗大量水资源,而它必须使用的化学品可能对蓄水层造成污染;第三,天然气价格的持续低迷会打击企业的投资热情;第四,在北美以外市场,普遍缺乏足够的储存、液化和传输等非常规天然气的基础设施,这将大大限制市场开发进程。在这些难题待解的情况下,如果美国的页岩气“革命”开始进入“挤泡沫”阶段,其他国家的情况恐怕就更不乐观了。
\r\n 从各方数据对比,中国的页岩气储量似乎并不比美国少。中国是仅次于美国的能源消费大国,一些为中国页岩气“革命”鼓与呼的声音,由此可以理解了。但冷静下来会发现,页岩气开发对环境条件的“硬束缚”,恐怕不是中国的禀赋条件所能承受的。中国人均占有土地和水资源的数量远逊于美国,生态环境更为脆弱。平均而言,一口页岩气井需要20万吨水,向页岩中注入的压裂液中含有大量化学成分,对地下水资源的影响存在很大不确定性。而中国的页岩气富集区域又往往处在水资源较为紧张的内陆、盆地地区。在页岩气的“十二五”规划中,像华北地区、准噶尔盆地、吐哈盆地、鄂尔多斯盆地这样的缺水地区,即便资源潜力不小,但要真正落实开采,则需慎之又慎。有业内专家提醒,在辽宁、陕西和四川等地,页岩气的大规模开发很可能会出现与工业和农业“争水”的难题。另须格外关注的是,中国目前的页岩气开采技术还不过关。如上所述,目前成熟的页岩气开采技术主要是基于美国特定区域和地质特点而长期积累下来的钻探工艺。别说一时半会儿不可能从美国引进技术,就算能把技术拿来,是否适应中国特殊的地质特性和环境,也存在很大疑问,更不要说由此而增加的巨额开采成本了。
\r\n         除此之外,必须在商业上对页岩气的合理性有精确的论证。美国页岩气“革命”的前提,是有6300家大大小小的天然气生产商参与的“充分动员型”的市场化模式。这与中国只有几大能源企业控制市场的局面差异很大,对风险的承受能力也大不相同。美国能源工业发展了将近两百年,油气管道密如蛛网,约有50万公里,中国即便这些年发展很快,也不过区区6万公里。管网基础建设不能一蹴而就,不能及时商品化的页岩气资源,显然会让开采商面临尴尬。曾任职石油部勘探司副司长的老专家查全衡就公开撰文称,如果中国不能找到一条比美国“更省地、省钱、省水,更环保”的开发方法,就不要过早谈什么“页岩气革命”,省得“被美国忽悠”。从本质上看,美国的页岩气“革命”,是应对金融危机后国家经济“脾虚伤肾”的一个应急手段。美国金融危机,表面上看是华尔街心火旺盛导致了“脑中风”,实质上是国家经济“产业空心化”、“消费金融化”情况严重,长期积累下来,造成经济肌体的脾胃消化不良、精气不足,终致“肾阴虚亏”。
\r\n         这几年美联储不停地印钱,给美国经济“滋补血气”,暂时稳定了金融市场,但流动性增加之后资金必须有出口。同时,美国经济需要降低成本,增加产品竞争力,启动所谓“再工业化”战略,那么能源价格是否足够低廉则是个瓶颈。页岩气开采算不上一项重大科技创新,但它的启动,恰恰在投机资本流向和降低制造业成本两个战略方向上达成了一致,这才有了“革命”。从货币层面上看,页岩气“革命”给贬值风险加剧的美元注入了新的变量,但这绝非一种可持续的正向变量。作为世界经济的“龙头”,美国经济应当以持续的科技创新为牵引力,拉动世界经济增长,从而让其美元重新“实心化”——以再造实业来建立必要的纸币信用。但就像华尔街一度创造的“石油-美元”捆绑游戏一样,因其本性使然,他们仍然要将货币与页岩气等大宗资源捆绑,通过操纵和炒作资源类的大宗商品,制造资源产品的泡沫,来控制全球经济,并维系其“美元帝国”的秩序。但是这种经济再循环的结果,最终不过是“下一个2008”罢了。
\r\n         与原油不同,天然气一直没有形成全球性的市场,只有欧洲、北美和亚洲三大市场,这三大市场的天然气价格长期存在“落差”。美国能源自给的预期,以及页岩气“革命”给液化天然气贸易增加的想象空间,有可能将全球天然气市场联系在一起,打破原来以管道天然气为主的贸易方式。因此,页岩气“革命”背后的潜台词可能是:当美国在中东受挫而不得不进行战略“收缩”时,它对世界石油的控制力降低了,但它反而必须要在天然气这种新兴的大宗资源商品上争取主导权和定价权,以便让美元重获信任。治疗“美国病”的合理逻辑应该是“健脾补肾”。“健脾”就是通过收入调节来促进消费,让陷入困境的美国中产阶级再次挺起胸膛,而不是郁闷到搞什么“占领华尔街”的街头运动。“补肾”就是强化国家科研创新能力,持续增加制造业的技术水平,沿着当年他们搞“阿波罗登月”计划的道路前进。但是,页岩气“革命”这种搞不好很可能搞成敲骨吸髓一般的透支性资源开采,却在大行其道。美国经济可能本来只是“阳虚”,这样下去,反而有了搞成“阴阳两虚”的趋势。笔者认为,一种理性的国家能源长期战略不能被急功近利的思维左右。
\r\n         以此反观中国,在全球化经济分工链条中,中国是实业国家,而不是资源国家。中国具有全球最充足的生产能力和商品供应能力,同时又是潜在的最具成长性的消费市场。一方面,中国对资源的需求是强烈的;另一方面,我们换取资源的能力也是强大的。“实业换资源”,仍是我们安身立命的根本和长期战略。历史上,仅仅靠提供廉价资源获得利润从而实现繁荣的国家,不可能是真正的强国,繁荣也不会持久。因为它们很快就透支了自身的资源,走向衰落。只有那些拥有强大的甚至是不可替代的制造能力和创新能力的国家,那些通过技术的不断升级,持续开发出新能源、开拓出新的经济增长方式的国家,才能走在世界前列。从这个意义上说,对于美国的页岩气“革命”,中国从战略上不必重视过度。远期看,真正的能源“革命”必须伴随着跨时代的技术创新,下一轮能源大变革将从“采集能源”向“制造能源”过渡,以核聚变为基础的核能研发和普及利用,才是真正的大方向。中国能源战略的主攻方向应该在这里。在战术上,中国又不能完全忽视页岩气。毕竟,在中短期内它对提升美国经济竞争力确实有所帮助。我们要审慎观察它对美国经济复苏进程的真实影响。同时,在目前世界格局中,要想不被别人在资源上“卡脖子”要挟,你自己必须要“立得住”。中国缺乏在全球大宗商品和资源贸易体系中的定价权。因此,我们应该积极参与国内以及国外的页岩气市场的调研、开发,不论在传统能源领域还是在页岩气这种新能源领域,中国在立足自身的同时,更要坚定地“走出去”,要去积极争取定价权。
\r\n         还须认清的问题是,页岩气“革命”以及由此延伸的页岩油开发,一定程度上推翻了美国一度鼓吹的“石油峰值论”。“人类不是因为缺少石头才离开石器时代,也绝不会因为缺少石油才离开石油时代。”此话不假。这不,石油并未枯竭,常规的、非常规的天然气已经开始给全球经济输血了。这再次证明,真正的“资源瓶颈”,不在地表或地下,而是在人的大脑里。只要技术进步,总会有新的资源被发现、被利用。技术的小进步,会有小批量的资源被利用;技术的大进步和大跨越,就会带来大批量的资源。对于中国的大型能源企业而言,应该在各种“革命”论中保持头脑清醒。对它们的最大挑战,不在于跟踪某种“错综复杂的趋势”,而是明确能源开发的大方向,进行提前布局。中国经济的崛起必然同时伴随一次能源“革命”,那一定不会在石油、天然气这种传统化石能源层面发生。像中石油、中石化、中海油这些主导着国家命脉的大企业,是否考虑过在花掉数百亿美元投资去世界各地购买传统能源公司的同时,留出一部分资金,去投资类似核聚变、核引擎这样真正影响长远的科技攻关项目呢?2012年,中国已经进行了两轮页岩气项目招标,引得能源行业热闹异常。因为有民营企业中标,一些不着调的评论把这说成是中国“能源体制变革的重大时刻”。请不要忘记,能源行业的性质决定了它的投资周期长、资金投入大,历来都是大风险项目,这和体制并无直接联系。况且,总不能期望中国的页岩气开采重蹈山西小煤窑泛滥的覆辙吧。奉劝那些为页岩气项目抓狂的投资者最好谨慎些。有句业内人士的戏言,在新年里似乎应格外上心:不要“投进去的是鳄鱼,出来的是壁虎”。
\r\n  

\r\n  

\r\n', 1, 0, '能源化学研究室', '页岩,气,真的,能,掀起,一场,能源,革命,吗,', '2014-03-30 17:44:57', '2020-06-02 02:11:01', NULL), +(64, 73, 8, '我院第一届工会委员会成立', '李福裿', '经过近半年的筹备,依据科学院的批复,1月20日,我院党委组织召开了黑龙江省能源环境研究院工会委员会第一次会员大会,选举工会主席1人,工会委员4人,发展会员26人。 随着工会', '', '

\r\n         经过近半年的筹备,根据《中国工会章程》规定和黑科院工会字〔2013〕3号文件批复的要求,我院党委于1月20日组织召开了黑龙江省能源环境研究院全体职工大会,通过民主选举,产生工会主席1人,工会委员4人。
\r\n         随着工会的成立,我院建制已经趋于完善,实现了党、政、工、团的体系结构。职工可以通过工会对能源院的发展提出建议和意见,反映工作、生活、学习等方面的合理诉求,切实保障职工权益。同时根据工作需要,结合我院实际,适时举办有益职工身体健康的活动,丰富职工业余文化生活,改善职工的福利待遇,使我院职工队伍成为一支高素质的、充满活力的优秀集体,从而有力地促进我院的改革与发展。

\r\n', 1, 0, '综合办公室', '我院,召开,工会,委员会,第一次,会员,大会,', '2014-01-23 03:03:00', '2020-06-02 02:11:01', NULL), +(65, 74, 7, '加拿大李筱梅博士到我院访问交流', '苏小红', '为深入开展厌氧发酵技术的应用研究,交流IMUS技术的推广经验,2014年4月17日,阿尔伯塔创新能源环境研究院李筱梅博士应邀到能源院访问,在能源院徐晓秋院长、高德玉总工程师及相', '/uploads/allimg/140418/1-14041Q31URc-lp.JPG', '

\r\n         为深入开展厌氧发酵技术的应用研究,交流IMUS技术的推广经验,2014年4月17日,阿尔伯塔创新能源环境研究院李筱梅博士应邀到能源院访问,在能源院徐晓秋院长、高德玉总工程师及相关科研人员的陪同下,参观了IMUS中试系统,并与科研人员进行了交流,对于面临的技术难题,李博士提出了宝贵意见。

\r\n

\r\n  

\r\n

\r\n  \"\"

\r\n

\r\n
\r\n         上午10点,李博士做了题为“用家庭垃圾生产沼气的挑战”的学术报告,首先介绍了德国、加拿大、中国部分城市垃圾的现状和处理方式,随后阐述了加拿大阿尔伯塔省政府在应对温室气体排放的管理政策、城市生活垃圾的收集、管理等的做法和经验,并同与会人员进行了讨论与交流。最后,对家庭垃圾厌氧发酵产沼气的研究及设想进行了介绍,并与徐晓秋、高德玉就IMUS系统的未来发展方向及其在处理废弃物等领域的应用等方面进行了深入的交流与探讨,为IMUS的推广和开展进一步相关合作、交流奠定了基础。
\r\n
\r\n  

\r\n

\r\n \"\"

\r\n', 1, 0, '生物质能源实验室', '加拿大,李筱梅,博士,到,我院,访问,交流,为,', '2014-04-18 05:22:22', '2020-06-02 02:11:01', NULL), +(66, 75, 7, '我院创新团队工作落实情况', '王志成', '2014年3月24日,郭院长带队调研我院学科创新团队工作,作出重要指示:调整研究方向,找准主线,抓住切入点,确立目标,建设创新团队。我院领导班子对郭院长的指示特别重视,先后', '/uploads/allimg/140604/1-1406041105230-L.jpg', '        2014年3月24日,郭院长带队调研我院学科创新团队工作,作出重要指示:调整研究方向,找准主线,抓住切入点,确立目标,建设创新团队。我院领导班子对郭院长的指示特别重视,先后三次召开会议布置、检查创新团队落实工作。2014年3月27日,我院召开院工作会议,对创新团队工作进行动员和布置。院领导班子,全体中层干部和创新团队负责人参加会议。徐晓秋院长讲话,让大家遵照郭院长指示,理清思路,找准切入点,确立目标,咬住青山不放松,用几年时间研发出几个有影响力的大成果。具体要对团队成员、研究方向,团队目标等内容进行调整。2014年4月21日, 我院召开了创新团队工作落实检查会议,对各团队整改情况进行通报,讨论团队目标的合理性,措施的可操作性等议题,同志们畅所欲言,气氛热烈,开阔了思路,统一了目标,对团队建设工作更有信心了。2014年5月19日,我院又召开团队建设工作阶段成果汇报会议,并邀请相关领域专家给团队把关、点评。各创新团队以PPT的形式展示团队研究领域的现状和战略分析,研究内容的竞争力分析,团队近远期工作安排及工作目标等内容。
\r\n        我院创新团队工作整改措施:
\r\n        1、理清思路,寻找研发切入点。
\r\n        2、明确方向,确定目标。
\r\n        3、强化团队成员学习培养,建立学术交流机制。
\r\n        4、开办学习园地,年轻人相互学习,努力提高外语水平。
\r\n        5、建立团队例会制度,讨论问题,统一思想。
\r\n        6、寻找领域内科研团队的短板,努力提升为我团队的强项。

\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '科研办', '院,创新,团队,工作,落实,情况,2014年,3月,24日,', '2014-05-29 03:11:00', '2020-06-02 02:11:01', NULL), +(67, 76, 8, '开展消防演练 提高防火意识', '李福裿', '为进一步提高我院职工的消防安全意识,检验与巩固职工掌握灭火器材扑灭火灾的能力,6月3日下午,我院举行了消防演习活动,各部门防火负责人及职工约15人参加了演习。 演习由我', '/uploads/allimg/140605/1-1406051021203R-lp.JPG', '        为进一步提高我院职工的消防安全意识,检验与巩固职工掌握灭火器材扑灭火灾的能力,6月3日下午,我院举行了消防演习活动,各部门防火负责人及职工约 15 人参加了演习。
\r\n
\r\n \"\"
\r\n        演习由我院消防兵转业的郭晓东同志为职工面授有关消防安全知识及现场示范,到场的所有职工都十分认真地听取了讲解。在整个过程中,郭晓东同志给大家讲解了各种消防器材的使用常识,以及发生火灾等情况的扑救方法,并现场指导大家使用灭火器,让大家掌握了灭火器的使用方法。整个演习过程组织严密,操作规范,既让参加演习的职工熟悉了灭火器的使用方法,又增强了职工的安全防火意识。
\r\n
\r\n \"\"
\r\n        通过此次消防培训和灭火演练,使我院职工增长了防火、灭火知识,增强了使用消防器材的操作能力,切实提高了消防安全意识。', 1, 0, '综合办公室', '开展,消防,演练,提高,防火,意识,为,进一步,', '2014-06-03 02:24:00', '2020-06-02 02:11:01', NULL), +(68, 77, 6, '关于省科学院系统乒乓球比赛的通知', 'admin', '院各部门: 省科学院系统乒乓球赛拟定于6月27日召开,比赛项目设定为团体比赛(男单、女单、男双、女双和混双),请各部门乒乓球好手踊跃报名。 报名地点:综合办 联 系 人:赵', '', '院各部门:
\r\n
\r\n        省科学院系统乒乓球赛拟定于6月27日召开,比赛项目设定为团体比赛(男单、女单、男双、女双和混双),请各部门乒乓球好手踊跃报名。
\r\n
\r\n报名地点:综合办
\r\n联 系 人:赵   娴

\r\n
\r\n
\r\n 综合办                       
\r\n 2014年6月5日               
\r\n', 1, 0, '未知', '关于省,科学院,系统,乒乓球,比,赛的,通知,院,', '2014-06-05 02:56:00', '2020-06-02 02:11:01', NULL), +(69, 78, 9, '我国液化石油气(LPG)发展现状及趋势', 'admin', '2013年原油依旧维持箱体震荡格局,走势与品种的季节性规律密切相关。在3月、9月形成两个高点,在10、11月整体维持弱势,低点曾触及82美元/桶。总体上是下行的趋势。2012年国际液化', '', '        2013年原油依旧维持箱体震荡格局,走势与品种的季节性规律密切相关。在3月、9月形成两个高点,在10、11月整体维持弱势,低点曾触及82美元/桶。总体上是下行的趋势。2012年国际液化气市场则基本呈"M"型走势,大致分为三个较为明显的阶段:第一阶段在1月至3月份。年初伊朗同西方国家的关系升级,中东石油运输要道面临封锁威胁,国际原油供应担忧一再推高油价;中东冷冻货市场整体供应略显紧张,此阶段远东需求尚好,供需基本面利好推高冷冻货市场价格。第二阶段在3月中旬至7月份。3月中旬之后,低迷行情未有明显好转,且需求逐步减少,压力货市场价格震荡走低;4月份油价稳中走跌;5月份开始油价大幅走低跌势惊人。受全球经济疲弱、美国原油库存以及欧债危机等利空因素的影响,投资者心态不振,国际液化气市场持续震荡走跌。第三阶段在7月份之后,华南冷冻货丙烷到岸价格和华南压力货离岸价低至年度最低点。主要原因除自身基本面利好不足,国内需求改善不佳;随着原油市场震荡不减,液化气市场业者观望心态持续并加重。
\r\n        2013年中国国内LPG产量大约为2257.8236万吨,相比2012年2186.0826万吨的产量来说,仍保持增长势头,同比涨幅为3.3%,但与12年6.1%的涨幅相比明显放缓。产量增加的主要原因可归结为国内炼厂原油加工能力的提升和液化气深加工投产的单位增多。而涨幅放缓的原因为:部分深加工厂家生产成本过高和原料紧张等原因无奈停工或者转嫁下游商品;主力炼厂检修和因为环境问题整改减产减量。面临销售不佳的压力,越来越多的厂家开始关注液化气深加工,将液化气作为生产乙烯、芳烃等产品的原料。2013年中国LPG进口总量338万吨,与2012年的322万吨总进口量相比稍有增加,但增幅并不明显,主要消费区域集中在华南和华东。
\r\n        近几年全球LPG 产量增长较快,2011 年全球LPG 产量达2.41 亿吨,同比增长2.56%,预计到2014 年全球LPG 产量将增长到2.75 亿吨。
\r\n        中国是全球 LPG 行业发展较快的国家之一,产量从2003 年的1256 万吨增长到2012 年的2180.90万吨,年复合增长率达7.14%;2013 年1-3 月中国LPG 产量为555.40 万吨,同比增长4.13%。中国LPG 的消费增长也较快,从2003 年的1958 万吨增长到2012 年的2419 万吨,年复合增长率为2.68%。
\r\n        前瞻产业研究院LPG行业研究小组分析指出,随着我国 LPG 在城市燃料、汽车和化工原料等领域的应用扩大,市场对LPG 的需求将不断增加,结合2006-2012年中国LPG 消费量数据,预计2013 年中国LPG 消费量将达到2540 万吨,增长率为5%,2014 年将在2013 年的基础上继续增长,消费量将超过2650 万吨。在原油加工量增长的同步带动下,国内LPG产量跟随攀升, 1-11月,国内液化气产量为2085万吨,预计全年LPG产量将达到2275万吨,比上年总产量2230万吨增加2%左右,再创历史新高,但增速正在放缓。
\r\n        一、全国液化石油气消费量稳步增长,增速有所放缓
\r\n        近十年间,我国LPG表观消费量年均增长近5%。近两年,国内液化石油气市场受到天然气、二甲醚等替代能源的冲击,发展势头有所减缓,但LPG在化工原料、车用替代能源等新领域的发展使得其继续保持旺盛的生命力。据国家统计局的数据显示,2013年液化气进口量约402万吨,较上年增加近20%。液化气出口量为122万吨,下降近3.2%。
\r\n近年来,伴随着中国天然气消费量的强劲增长,LNG进口量也大幅上升。海关总署数据显示,2013年全年LNG进口量约为1700万吨,同比增长20.1%。
\r\n        二、进口来源多元化趋势明显
\r\n目前,我国LNG进口来源地已扩充至近10个国家。2013年我国从卡塔尔进口LNG量约占总进口量的35%,为我国LNG进口量最大的来源地;从澳大利亚进口LNG约占我国总量进口的20%,占比大幅下降。另外,由于近两年印度尼西亚和马来西亚LNG产量的增长,我国从东南亚地区进口量也出现明显上升。值得一提的是,我国从非洲国家进口的LNG也呈现出快速增长的态势。
\r\n        三、国内LNG接收站陆续投产,LNG接收站布局趋于均衡
\r\n随着LNG的快速发展和中国进口量的增多,沿海LNG接收站的建设正在提速。上半年东莞九丰能源的LNG码头开始投产,10月份中国海洋石油广东珠海LNG码头开始投产,11月份中国石油河北曹妃甸开始投产,共新增750万吨LNG接受能力,截至2013年底,我国共有9个LNG接收站投入运营,年处理LNG能力达2630万吨,较上年底增长约40%。
\r\n        四、2014年我国进口LNG海运市场预测
\r\n随着LNG的快速发展和中国进口量的增多,中国沿海LNG接收站的建设正在提速。当前除中国已经建成分布在辽宁、广东、福建、上海、江苏、浙江和河北的9个接收站外,按照当前规划,2014年全国还将有4个LNG接收站投入运营。从国内LNG进口量来看,由于我国居民对天然气的消费需求正处于高增长期,预计2014年我国LNG进口量将继续保持20%以上的高速增长,总量将再创历史新高。
\r\n        到2014年全球液化石油气(LPG)产量将从2010年的2.41亿吨增长到2.75亿吨。LPG主要来自于炼油、原油开采和天然气开采,所占的比例分别为41%、24%和35%。炼油业目前是LPG的首要来源,但预计到2014年全球75%的LPG产量将来自天然气。
', 1, 0, '能源化学研究室', '我国,液化,石油气,LPG,发展现状,及,趋势,2013年,', '2014-06-05 03:09:37', '2020-06-02 02:11:01', NULL), +(70, 79, 9, '我国替代能源的现实选择', 'admin', '以煤炭为主的能源消耗结构,是我国空气污染不断恶化的主要原因。在全国上下寻找治理污染特别是治理雾霾突破口的关键时期,发展清洁的替代能源,推动我国能源结构的调整优化,', '', '        以煤炭为主的能源消耗结构,是我国空气污染不断恶化的主要原因。在全国上下寻找治理污染特别是治理雾霾突破口的关键时期,发展清洁的替代能源,推动我国能源结构的调整优化,对大气污染防治具有至关重要的作用。
\r\n        一、调整能源结构已刻不容缓
\r\n        过去十余年,我国经济规模持续快速提升,能源消耗总量也随之迅速扩大,能源生产与能源消费总量均已居世界首位,且呈现“煤炭独大”的严峻格局。2004年国务院发布的《能源中长期发展规划纲要》(2004—2020)提出2020年煤炭消费总量为24亿吨,实际上2010年我国煤炭消费就已超过30亿吨,2013年更接近40亿吨,并以每年3亿吨的速度持续增长。自1984年成为全球最大的煤炭消费国始,到2012年我国已占全球煤炭消费量的47.8%,2013年进一步提升到接近全球一半。
\r\n        相比煤炭而言较为“清洁”的天然气和石油,在我国能源生产与消费总量中比重偏低,且对外依存度过高,使我国的能源安全面临着空前复杂的国际形势。
\r\n        我国境内经济活动并不均匀,95%以上的经济活动集中在1/3的国土,尤以京津冀、长三角、珠三角为甚。在经济活动密集的150万平方公里国土上,燃煤、燃油等能源消费占全国的70%以上,相当于在每平方公里土地上每年燃烧2000吨标准煤。如此大密度燃烧高污染的煤炭等能源,使空气质量持续恶化无法避免。加上每年新增近2000万辆机动车,我国大气污染日益呈现煤烟型污染与汽车尾气污染叠加的重度复合污染态势。
\r\n        历史事件及科学研究早已警告世人,雾霾等空气污染问题对健康极具危害。我国目前严峻的环境形势也表明,优化调整能源结构既是保证能源安全的需要,更是全体国民身体健康的需要。发展清洁“绿色”能源,加快能源替代的进程,优化能源结构已刻不容缓。
\r\n        二、选择替代能源要考虑“三重约束”
\r\n        优化能源结构,关键在于选择适合国情的可替代能源。替代能源的选择必须充分考虑我国能源领域的“三重约束”。
\r\n        化石能源资源结构与生态环境要求的脱节。选择我国的替代能源,躲不过多煤、少油气的能源资源约束。美国能源消费结构中,煤炭消费比重已缩至32%,天然气消费比重由20%增至32%,页岩气取代煤炭成为仅次于石油的第二大能源资源,能源结构总体比较“清洁”。我国化石能源资源呈现典型的“富煤、贫油、少气”特征,目前煤、油、气等一次能源消费比重约为8∶1∶1。2013年石油对外依存度达57.72%,天然气对外依存度达31.6%。经济发达的东部地区过度依赖西部输煤,消耗高品质能源来传输低品质能源。
\r\n        清洁能源环境优势与综合成本劣势的对立。近20年来,可再生能源发电技术不断取得突破,规模经济日益凸显。例如印度由于日照条件好,太阳能发电成本已降至历史新低,接近煤炭发电价位。我国东部经济发达地区日照条件并不理想,且雾霾天增多,难以大规模建立太阳能光伏电站,而分散的家用光伏发电系统需要20年才能回收成本。由于并网政策、补贴政策、信贷政策、规划政策落实不到位,导致我国风电企业成本高企,风电行业“弃风”现象依然严峻。
\r\n        能源需求刚性约束与能源替代目标的矛盾。近年来我国能源需求增速下降主要源于经济增长趋缓,而非能源弹性下降,一旦经济增长提速,能源需求仍有可能增长较快。经济增长对能源总量的刚性需求及短期内能源强度难以大幅下降的现实,使相对低廉的煤炭等化石能源产销较为强劲。非化石能源在我国一次能源中的消费比重从2009年的8%左右增至2013年的9.8%,历时五年仅提升1.8个百分点。“十二五”规划要求我国2015年非化石能源在一次能源中消费比重达到11.4%,此目标恐难完成,2020年15%的目标更难落实。
\r\n        三、发展替代能源的优先顺序
\r\n        综合对上述三重约束的分析,我国发展替代能源的优先顺序应该是:
\r\n        以电为主,电为中心。加大电力生产是我国电力行业的一项中长期战略任务,由核能、可再生能源转化的电能全面取代化石能源只是时间问题,未来应大力推广大城市以电代煤、以电代油。相比电煤,散烧煤才是雾霾的主要源头,应以集中煤电取代分散低效的散烧煤使用,在终端尽快普及用电。以电代煤、以电代油会加剧东部地区电力供需矛盾,虽可加大新一代核电投资,但其建设周期长,新能源短期内规模难以突破,建设特高压电网调入西部能源基地富余电力不失为一个快速见效的办法。2014年国家电网投资将超过3800亿元,其中特高压电网投资约占1/3,其建设将有利于全国范围内能源资源的优化配置。
\r\n        推广用氢,气为支撑。氢是宇宙中最为丰富的元素,在构成宇宙的物质中约占75%。与化石能源相比,氢具有很多优点:资源丰富,水就是地球上名副其实的“氢矿”;环保、高效,是一种能量密度与质量比值极高的能源,且燃烧零污染。只要按章操作,氢气和其他燃料一样安全。目前,氢制备、氢储存、氢使用的安全性都已解决。氢是很好的储能载体,利用电网富余电力制氢并储能是一举两得。日本已开发出较完善的运用太阳能等可再生能源制氢并供燃料电池车(FCV)使用的系统,利用生物质能产业化制氢也已取得突破。除了可再生能源制氢,大力发展页岩气、煤层气、煤制气等气体能源,用于交通、发电、供热,也将是我国能源替代的重要支撑。
\r\n        推广分布式能源,以新能源生产消费为补充。2010年之前全球累计新增发电容量的25%~30%为分布式发电。美国是世界上开发新能源和可再生分布式能源发电最多的国家,到2020年将有一半以上的新建商用或办公建筑使用分布式电源,同时有15%的现有建筑改用分布式电源。分布式能源技术也是我国可持续发展的必然选择,随着技术的成熟、规模的扩大以及相关政策的扶持,未来分布式能源电力的成本将变得更具吸引力,分布式能源即将进入规模实施阶段。
\r\n        四、要从战略高度形成替代能源发展的合力
\r\n        要从民族存亡角度“限煤”,确保煤炭峰值提前。英国伦敦通过“限煤”摆脱“雾都”称号的经验表明,减少煤炭依赖、优化能源结构至关重要。目前,我国的煤炭使用量已大大超过环境容量,因此煤炭峰值的出现不宜太晚,最好到2020年前后。有必要借鉴美国大规模制定清洁能源法律法规的经验,以法律的形式严格限制高污染能源的使用。近期内煤炭可以集中用于发电,逐步减少直至不再用于供热,并优先淘汰终端直接分散燃烧的用煤方式。像北京这样的特大城市,应借鉴伦敦、纽约煤炭占比为零的经验,彻底将燃煤发电及供暖退出历史舞台。
\r\n        要运用多种经济手段,提高清洁能源的经济可行性。美国、德国与日本等发达国家的经验表明,价格调整、政府补贴、直接投资、优惠信贷和减免税收等政策实施能够有效地推动新能源产业的发展。我国应尽快运用定价、税收、补贴、信贷等多种经济政策,通过在能源供应和需求领域产生经济杠杆效应,发挥对清洁能源的激励和对传统能源的约束作用,提高清洁能源替代传统能源的经济可行性,加速实现非化石能源的替代目标。
\r\n        要建设智能电网,为可再生能源的发展提供技术可行性。从本世纪初开始,基于新能源技术、分布式发电技术、大规模储能技术、超远距离超大规模输电技术和智能控制技术的快速发展,世界电网进入智能电网阶段。发展智能电网,能够有效解决我国新能源和分布式电源的并网问题,改善能源结构,保护自然生态,有利于最大限度实现对化石能源的替代。未来必须加快我国智能电网的发展,在凝聚共识的基础上,科学规划、统筹推进、重点突破。
', 1, 0, '能源化学研究室', '我国,替代,能源,的,现实,选择,以,煤炭,为主,', '2014-06-05 03:13:31', '2020-06-02 02:11:01', NULL), +(71, 80, 9, '生物燃料发展重心将向原料生产倾斜', 'admin', '生物燃料通常指生物液体燃料,是重要的交通替代燃料。相对于其他替代燃料,生物燃料具有与现有基础设施兼容性好、能量密度高、清洁低碳、资源可再生且资源基础广阔等优点,而', '', '        生物燃料通常指生物液体燃料,是重要的交通替代燃料。相对于其他替代燃料,生物燃料具有与现有基础设施兼容性好、能量密度高、清洁低碳、资源可再生且资源基础广阔等优点,而且已具有规模化生产应用的实际经验,可望成为重型卡车、航运和航空等长途交通工具的最经济可行的清洁替代燃料。
\r\n        20世纪90年代以来,为保障能源安全、应对气候变化、保护环境、促进农业发展,许多国家制定实施积极战略和政策,推动生物燃料的规模化开发利用。我国在上述各领域也面临着巨大挑战,也亟待制定符合我国国情的战略和政策,促进生物燃料的规模化发展。
\r\n        为此,国家发展改革委能源研究所开展了“中国可再生能源规模化发展研究”,通过考察分析国际上生物燃料产业发展趋势和政策实践,评估我国生物燃料的发展潜力和重大挑战,进而探讨我国生物燃料规模化发展的战略任务、总体思路和发展路径,并提出促进我国生物燃料产业发展的政策措施建议。
\r\n        一、国际政策趋向——扶持与监管并重
\r\n        20世纪90年代以来,为促进农业经济、改善大气质量、减排温室气体,以美国、欧盟国家和巴西为代表的许多发达国家和发展中国家制定实施了规模空前的生物燃料项目和积极的扶持政策,全面推动了生物燃料产业的蓬勃发展。虽然2008年金融危机以来受到油价低位运行和市场需求疲软的影响,但各国扶持政策保持延续并继续深化,大型石油企业开始大力介入,技术研发取得积极进展,应用领域扩展到航空领域,推动了生物燃料产业加快升级转型和继续扩大规模。
\r\n        目前,以粮糖油为原料的燃料乙醇和生物柴油(通常被称为传统生物燃料,或第一代生物燃料)已进入商业化发展阶段,以农林业有机废弃物、专用非粮能源植物/藻类微生物等生物质为原料的先进生物燃料(或第二代、第三代生物燃料)正在建设一批示范项目,预计在今后10年内逐步实现商业化。2009年全球燃料乙醇和生物柴油产量分别达到5760万吨和1590万吨,绝大部分集中在美国、巴西和欧盟地区。据国际能源机构(IEA)的生物燃料路线图分析,2010年全球生物燃料产量约1000亿升,满足全球3%道路交通燃料需求;2050年生物燃料可满足全球交通能源需求的27%,可年减排21亿吨二氧化碳。
\r\n        虽然生物燃料在近年来发展迅速并初步展示了广阔的发展潜力,但也开始引发了众多争议和批评,主要是生物燃料的节能减排效益和发展潜力、以及对粮食安全和生态环境的威胁,反映了生物燃料产业自身及其社会经济含义的复杂性。
\r\n        近年来,一些领先国家和国际组织积极推动建立扶持与监管并重的政策体系,促进生物燃料产业健康持续发展。在扶持政策方面,
\r\n        早期主要采取了投资补贴、减免消费税和燃油税等措施,近年来美国和欧盟许多国家陆续引入了再生燃料标准(RFS)等强制性市场份额政策,并特别规定先进生物燃料的具体发展目标和更高贡献度。在监管政策方面,近年来欧美国家开始规定生物燃料的最低温室气体减排率,调整农业及土地政策,推动建立可持续生产准则和产品认证体系;包括我国在内的部分发展中国家则禁止使用或严禁扩大使用粮食原料,以确保可持续发展。
\r\n        二、我国生物燃料生产潜力大
\r\n        由于我国人口保持增长、饮食水平的持续提高,而优良耕地减少、水资源相对短缺,利用传统粮糖油原料发展生物燃料的潜力在我国非常有限。利用非粮原料将是我国发展生物燃料的根本方向。
\r\n        我国早在上世纪90年代即开展以甜高粱、小桐子为原料的生物燃料生产技术研究,“十一五”以来,大批企业,包括大型企业,积极投身非粮生物燃料产业研发。目前,我国利用薯类、甜高粱、小桐子等非粮作物/植物生产燃料乙醇和生物柴油的技术已进入示范阶段。木薯和甘薯乙醇技术也可实现商业化应用,广西于2007年建成年产20万吨木薯乙醇项目。甜高粱乙醇技术开发取得实质性进展,已开发出高品质杂交种籽,自主开发的发酵工艺和技术达到实用水平,并在黑龙江省建成年产5000吨乙醇的示范装置。木质纤维素乙醇在原料预处理、纤维素转化以及酶制剂生产成本等方面均取得实质性进展,在黑龙江、河南等地建成了年产数百吨和数千吨乙醇的示范生产装置。生物柴油产业化示范工作的时机也已基本成熟,但受废油资源收集利用量、油料植物种植基地建设进度的限制,目前只有少数生物柴油企业实现规模化持续生产,也没有正式进入车用成品油的主要流通使用体系。其他第二代生物燃料(如合成燃料技术)目前仍处于实验室研究和小规模中试阶段。
\r\n        目前我国还没有全面深入开展生物质能资源潜力评价。初步估算,利用废糖蜜、食品加工业和饮食业废油、棉籽油等废弃糖油类资源,估计可满足年产80万吨燃料乙醇和200万吨以上生物柴油的原料需求。可能源化利用的农作物秸秆和林业剩余物年产量目前约2.5亿吨,且可望继续增加,在中长期可满足年产3000~5000万吨第二代生物燃料的原料需求。另外,还可通过推广良种良法、品种替换、开发劣质边际土地等途径发展能源植物,例如甜高粱、木薯、麻疯树等。相关土地评估显示,我国现有约3200万~7600万公顷边际性土地,但适合能源植物生长的土地资源有待查清。
\r\n        总体估算,我国以非食用粮糖类农作物为原料的燃料乙醇生产潜力近中期约为1500万吨,以废油为原料的生物柴油生产潜力近中期约200万吨,以油料林为原料的生物柴油生产潜力在中长期约为数百万吨,以纤维素和藻类生物质为原料的先进生物燃料生产潜力在长期可达每年数千万吨。
\r\n        通过发展传统生物燃料,估计在近中期具有满足近10%道路交通燃料的潜力;如果实现第二代生物燃料技术的商业化,则我国生物燃料在长远期具有满足20%~30%左右道路交通燃料需求的潜力。
\r\n        三、4大问题待解
\r\n        未来,我国生物燃料产业发展将面临以下4大挑战:
\r\n        (1)原料资源基础仍然薄弱。实际剩余可用边际土地资源潜力不清,缺乏科学评价和规划;原料植物的选育栽培和规模种植经营技术、产业和管理体系有待完善;原料资源来源多样、品质不一。
\r\n        (2)技术产业发展水平不高。技术工艺水平较为落后;资源利用和环境保护水平不高;缺乏符合国内原料特点的整套技术工艺和装备;第二代生物燃料技术离工业化生产还有较大差距;产业模式仍不成熟,有待于建立与“三农”和现代林业和谐发展的产业模式;可持续生产技术规范和模式尚未建立,仍有待于开展良种选育及混交林营建技术等研究,制定保障高能效、高减排的技术标准和规范。
\r\n        (3)缺乏竞争力和抗风险能力。原料成本居高不下甚至还有所攀高;规模经济、范围经济和资源综合利用效益偏低;经济竞争力较弱,存在较大市场风险。
\r\n        (4)扶持政策和市场环境不完善。非粮生物燃料的市场准入和产品流通体系不通畅,无法进入车用成品油经销体系和终端消费市场;行业监管薄弱,存在社会、经济和自然生态风险;扶持价格和财税政策不完善;产品推广使用市场环境不健全,各项基础设施不完善,封闭区域强制使用制度影响跨地区车辆使用性能;指定企业在特定封闭区域销售影响公平竞争。
\r\n        四、生物燃料产业链重心向种植和原料生产倾斜
\r\n        我国生物燃料的规模化生产利用有赖于加快实现产业的转型升级。我国生物燃料产业在今后应完成如下几个战略任务。
\r\n        (1)转变扩大原料结构,夯实资源基础。要从主要利用食用粮糖油农产品等原料转向各种非粮原料,在避免威胁粮食安全前提下有效扩大原料结构,夯实资源基础。
\r\n        (2)完善优化产品结构,提高经济效益。根据原料特点,通过开发整合相关技术工艺、拓展延伸产业链,提高资源梯级利用和综合利用水平,开发高增加值副产品和新产品,实现从单一原料和产品模式转向可利用多种原料、生产多种产品的综合精炼技术的转变,从而完善优化产品结构,显著提高经济效益。
\r\n        (3)调整产业组织结构,提高产业效率。根据非粮生物燃料产业的农林业属性、多样性和地域性等特点,把产业链重心向能源植物种植和原料生产倾斜,建立“分散加工转换+集中精炼调配”的经营模式,充分调动发挥当地农民和政府的积极性。应鼓励中下游的大中型企业与地方农民、中小企业和相关组织建立稳定互利的协作关系和新型农工一体化产业运作模式。
\r\n        (4)转变产业发展理念,确保可持续发展。要创新产业发展理念,实现宏观层次上的农业系统、工业系统和环境系统之间的整合,全面促进可持续发展。从粗放式、破坏性的土地开发和原料植物种植模式转向集约式、保护性的土地开发和原料植物种植模式,减少生态风险和土壤中碳泄漏风险;全面考察、评估和削减生物燃料的原料生产、加工转换和生产应用的能耗水耗、常规污染物和温室气体排放。
\r\n        (5)健全产业政策体系,促进产业健康发展。根据技术进展和产业化进程、原料和产品结构、产业组织结构特点、可持续发展理念和要求,建立健全涵盖资源开发保障、加工转换、产品流通和使用等完整环节的产业监管和激励政策,建立灵活高效的市场机制,确保生物燃料试点工作和规模化发展得以健康有序推进。
\r\n        “十五”期间,我国出台了陈化粮燃料乙醇生产和车用乙醇汽油试点的政策,陈化粮乙醇和变性燃料乙醇享受跟随汽油的联动价格政策和一系列税费优惠政策;生产企业的亏损实行定额补贴。经济激励方面,中央财政将对符合相关要求和标准的林业原料基地补助标准为200元/亩,对农业原料基地补助标准原则上为180元/亩。
', 1, 0, '能源化学研究室', '生物,燃料,发展,重心,将向,原料,生产,倾斜,', '2014-06-05 03:13:43', '2020-06-02 02:11:01', NULL), +(72, 81, 6, '我院关于召开2014年上半年工作会议的通知', '李福裿', '院各部门: 2014年已经过半,为及时总结上半年工作情况,并对下半年工作做好规划和部署,我院决定召开上半年工作会议,具体事宜如下: 一、会议时间:暂定为6月末-7月初。 二、会', '', '院各部门:
\r\n        2014年已经过半,为及时总结上半年工作情况,并对下半年工作做好规划和部署,我院决定召开上半年工作会议,具体事宜如下:
\r\n        一、会议时间:暂定为6月末-7月初。
\r\n        二、会议地点:能源院会议室。
\r\n        三、参会人员:院领导班子、各部门负责人。
\r\n        四、会议内容:
\r\n        1、上半年工作计划完成情况汇报,包含2014年度重点工作推进情况汇报;
\r\n        2、下半年工作计划及安排。
\r\n        五、会议议程:
\r\n        1、各部门负责人汇报,发言时间不超10分钟;
\r\n        2、院领导讲话。
\r\n        六、相关要求:
\r\n        1、请各部门负责人根据会议要求提前认真做好准备,整理成书面材料交综合办,要求汇报内容要详实,工作计划要细致,不说空话套话。
\r\n        2、参会人员应准时参加会议,不得缺席。
\r\n
\r\n                                                                                                                     综合办   
\r\n                                                                                                        二〇一四年六月十二日
', 1, 0, '综合办公室', '我院,关于,召开,2014年,上半年,工作,会议,的,', '2014-06-12 03:29:52', '2020-06-02 02:11:01', NULL), +(73, 82, 6, '我院关于召开2014年上半年工作会议的通知', '李福裿', '院各部门: 2014年已经过半,为及时总结上半年工作情况,并对下半年工作做好规划和部署,我院决定召开上半年工作会议,具体事宜如下: 一、会议时间:暂定为6月末-7月初。 二、会', '', '院各部门:
\r\n        2014年已经过半,为及时总结上半年工作情况,并对下半年工作做好规划和部署,我院决定召开上半年工作会议,具体事宜如下:
\r\n        一、会议时间:暂定为6月末-7月初。
\r\n        二、会议地点:能源院会议室。
\r\n        三、参会人员:院领导班子、各部门负责人。
\r\n        四、会议内容:
\r\n        1、上半年工作计划完成情况汇报,包含2014年度重点工作推进情况汇报;
\r\n        2、下半年工作计划及安排。
\r\n        五、会议议程:
\r\n        1、各部门负责人汇报,发言时间不超10分钟;
\r\n        2、院领导讲话。
\r\n        六、相关要求:
\r\n        1、请各部门负责人根据会议要求提前认真做好准备,整理成书面材料交综合办,要求汇报内容要详实,工作计划要细致,不说空话套话。
\r\n        2、参会人员应准时参加会议,不得缺席。
\r\n
\r\n                                                                     综合办   
\r\n                                                           二〇一四年六月十二日
', 1, 0, '综合办公室', '我院,关于,召开,2014年,上半年,工作,会议,的,', '2014-06-12 03:29:52', '2020-06-02 02:11:01', NULL), +(74, 83, 8, '我院开展系列活动庆祝中国共产党成立93周年', '李福裿', '为了隆重庆祝中国共产党成立93周年,我院党委组织全体党员及群众开展党史知识测试等活动祝福党的生日。活动以共筑中国梦喜迎建党93周年为主题,通过回顾93年来党的光辉历程、认', '/uploads/allimg/140701/1-140F10F0349B-lp.JPG', '        为了隆重庆祝中国共产党成立93周年,我院党委组织全体党员及群众开展党史知识测试等活动祝福党的生日。活动以“共筑中国梦·喜迎建党93周年”为主题,通过回顾93年来党的光辉历程、认真学习贯彻落实党的十八大精神并开展党史知识测试,进一步推进学习型、服务型、效能型、活力型和阳光型党组织建设,进一步强化我院党员的党性观念,进一步发挥党委组织的先进作用和党员的先锋模范作用,推动我院发展实现新的跨越。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n \"\"
\r\n', 1, 0, '综合办公室', '我院,开展,系列,活动,庆祝,中国共产党,成立,', '2014-06-30 11:48:00', '2020-06-02 02:11:01', NULL), +(75, 84, 8, '我院参加省科学院乒乓球赛', '赵娴', '由院机关党委举办的省科学院职工乒乓球赛在省科学院石油化学研究院举行,共70多名选手参加了比赛。比赛分三组,为团体比赛。我院共有6名队员参加比赛,虽然大家平时没有经过专', '', '        由院机关党委举办的“省科学院职工乒乓球赛”在省科学院石油化学研究院举行,共70多名选手参加了比赛。比赛分三组,为团体比赛。我院共有6名队员参加比赛,虽然大家平时没有经过专门的训练,但都能积极快乐的投入到比赛当中。本次比赛采用单淘汰制,各单位强手在比赛中施展精彩的球技,博来喝彩声不断。最终,自然与生态研究所取得了团体冠军。我院虽然没有进入决赛,但6名队员积极配合相互鼓励,发挥出最好的水平,体现了我院的团队精神。这次比赛不仅为众多院所职工提供了一个相互交流、切磋球技的机会,还提供了一个展示自己,不断提高的机会,也也激发了大家的拼搏热情和团结精神。', 1, 0, '综合办公室', '我院,参加省,科学院,乒乓球赛,由,院,', '2014-06-26 23:26:00', '2020-06-02 02:11:01', NULL), +(76, 85, 7, '我院参加温室、沼气产品创新联盟暨产学研合作对接会', '王志成', '2014年6月28日黑龙江省能源环境研究院科研办主任王志成同志参加了省科技厅组织召开的温室、沼气产品创新联盟暨产学研合作对接会。会议主要内容:1.研究温室、沼气产品产业发展的', '', '        2014年6月28日黑龙江省能源环境研究院科研办主任王志成同志参加了省科技厅组织召开的“温室、沼气产品创新联盟暨产学研合作对接会”。会议主要内容:1.研究温室、沼气产品产业发展的现状、问题及发展趋势;2.发布温室、沼气产品产业新产品、新装备、新技术,研究编制温室、沼气产品技术标准、设计规范、施工规范等;3.研究组建温室、沼气产品创新联盟。
\r\n        在会上,我院与省内沼气领域的企业、高校、院所充分交流,交换了科研思路并宣传了我院的科研成果,重点推介了我院开发的集成粪便综合利用系统(IMUS)技术。IMUS是工业化封闭环式沼气、发电系统,采用独特的高温厌氧消化技术,使畜禽粪便转化为沼气能源用来发电,产生的沼液、沼渣作为无病原体的生物肥料进行市场化形成了一个自然环境下的循环经济链。
\r\n        我院积极参加沼气产品创新联盟,院企合作,产学研结合,为企业服务,为创新联盟提供技术支撑,为我省沼气产业发展贡献力量。
', 1, 0, '科研与产业化办公室', '我究,院,参加,温室,、,沼气,产品,创新,联盟,', '2014-07-02 08:29:00', '2020-06-02 02:11:01', NULL); +INSERT INTO `articles` (`id`, `oldid`, `category_id`, `title`, `writer`, `description`, `cover`, `content`, `status`, `sort`, `source`, `keywords`, `created_at`, `updated_at`, `deleted_at`) VALUES +(77, 86, 7, '我院参加全省高校科研院所知识产权管理工作座谈会', '王志成', '2014年7月2日,在黑龙江工会大厦,我院科研办主任王志成同志参加了省专利管理局组织的全省高校科研院所知识产权管理工作座谈会。与会的有省专利管理局马峰副局长和综合处领导,', '', '        2014年7月2日,在黑龙江工会大厦,我院科研办主任王志成同志参加了省专利管理局组织的全省高校科研院所知识产权管理工作座谈会。与会的有省专利管理局马峰副局长和综合处领导,以及全省55个科研院所的代表。
\r\n        会上省专利管理局领导听取了我院知识产权管理工作情况,特别是承担专利资金项目后,对专利工作的引导作用情况,我院的知识产权(专利)制度(政策)、管理机制建设情况,专利创造、管理、运用、保护等各方面进展情况,知识产权文化建设情况,知识产权人才培养情况,项目实施中遇到的问题,下步工作打算及对省知识产权局的意见和建议等情况。
\r\n        通过交流,了解了兄弟院所专利工作情况,学习了许多先进经验,也看到我们的不足,为我院今后专利工作指明了方向。同时,也看到我院专利申报人均数量和增长率等指标在省里是名列前茅的,专利工作大有可为。
', 1, 0, '科研办', '我院,参加,全省,高校,科研院所,知识产权,', '2014-07-03 07:35:05', '2020-06-02 02:11:01', NULL), +(78, 87, 7, '加拿大阿尔伯塔大学医学和病理学实验室庞晓莉教授
到我院进行讲座', '', '7月2日,加拿大阿尔伯塔大学医学和病理学实验室庞晓丽教授Pang Xiaoli(Lilly),在能源院一楼会议室就如何建立分子生物实验室举行了精彩的讲座,我院徐晓秋院长、关春玲副院长及部分', '/uploads/allimg/140703/1-140F31AT4621.JPG', '        7月2日,加拿大阿尔伯塔大学医学和病理学实验室庞晓丽教授Pang Xiaoli(Lilly),在能源院一楼会议室就“如何建立分子生物实验室”举行了精彩的讲座,我院徐晓秋院长、关春玲副院长及部分科研人员参加了此次讲座。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n        徐晓秋院长首先表达了愿望,希望用十年的时间,用顶尖的设备、先进的技术和最好的老师,建立并逐步完善我院的分子生物实验室,最终达到国内领先水平,Pang Xiaoli(Lilly)教授十分赞同并表示会尽最大努力予以技术支持。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n         讲座在融洽的气氛中开始,Pang Xiaoli(Lilly)教授首先介绍了加拿大实验室的相关情况,随后结合国外的先进经验,分别从设备、技术、人员、经费等方面详细介绍了实验室的建立方法、区域划分和级别标准,讲座循序渐进,其间Pang Xiaoli(Lilly)教授还不忘与在座人员进行互动交流,我院科研人员纷纷结合我院的实际情况发表了想法和提出问题,Pang Xiaoli(Lilly)教授都一一给予了解答,讲座持续了近二个小时。最后徐晓秋院长代表能源院全体职工对Pang Xiaoli(Lilly)教授的精彩讲座表示感谢,讲座在轻松愉快的气氛中结束。
\r\n
\r\n
\r\n
\r\n                                                                 综合办
\r\n                                                                    2014年7月2日
\r\n
\r\n  
\r\n', 1, 0, '综合办公室', '加拿大,阿尔伯塔,大学,医学,和,病理学,7月,', '2014-07-04 02:42:49', '2020-06-02 02:11:01', NULL), +(79, 88, 7, '我院召开上半年工作会议', 'admin', '7月9日,我院在江北会议室召开了由全体职工参加的2014年上半年工作会议。会议由党委书记、院长徐晓秋同志主持。会上各部门负责人分别汇报了本部门上半年工作进展情况,并提出了', '/uploads/allimg/140709/1-140F913010c25-lp.JPG', '        7月8日,我院在江北会议室召开了由全体职工参加的2014年上半年工作会议。会议由党委书记、院长徐晓秋同志主持。会上各部门负责人分别汇报了本部门上半年工作进展情况,并提出了下半年具体工作计划。
\r\n
\r\n \"\"
\r\n
\r\n        徐晓秋院长结合汇报情况作了重要讲话,徐院长首先对我院上半年的重点工作进行了总结,并对项目申报情况进行了通报,她指出,在全院科技人员的共同努力下,上半年我院在各级科研项目申报、获奖、专利、以及论文等方面均有了一定的增长,接下来我院要继续稳扎稳打,坚定思想,走科研促发展的道路,并鼓励青年人要快速的成长,为我院的长足发展做出贡献。
\r\n
\r\n         随后,徐晓秋院长对我院下半年工作作出了具体部署:一是加强高水平大项目的培育和申报工作;二是科研管理部门要从项目申报、实施、鉴定、成果转化几个环节建立相关制度,加强科研研发工作;三是科研人员要充分接地气,建立畅通的信息渠道,结合实际开展科学研究;四是保证仪器设备的使用率,做好定期维护和校对,为科研工作服好务;五是加速成果转化进程,促进成果转化快速发展;六是加强对外合作,在巩固现有对外合作成果基础上,积极寻求新的合作机会,扩大合作领域;七是抓好安全工作,各部门要高度重视安全管理工作,充分认识安全工作的重要性,要制定工作方案,强化工作措施,在汛期临近之际,要定期开展排查,消除隐患,确保安全。
\r\n         最后,徐晓秋院长希望大家克服人员少,办公空间小等困难,充分抓住机遇,不断提高我院的科研水平。

\r\n
\r\n
\r\n                                                                            综合办公室
\r\n', 1, 0, '未知', '我院,召开,上半年,工作,会议,7月,9日,我院,在,', '2014-07-11 02:11:48', '2020-06-02 02:11:01', NULL), +(80, 89, 7, '热烈祝贺我院三名科研工作者获得ACI及MOHRSS认证', 'admin', '近日,我院三名科研工作者通过了ACI(美国认证协会)和MOHRSS(中国人力资源和社会保障部)联合举办的能源管理、能源审计及能源评估岗位培训考核,并获得ACI和MOHRSS颁发的国际注册', '/uploads/allimg/140717/1-140GG1245EH-lp.jpg', '

\r\n         近日,我院三名科研工作者通过了ACI(美国认证协会)和MOHRSS(中国人力资源和社会保障部)联合举办的能源管理、能源审计及能源评估岗位培训考核,并获得ACI和MOHRSS颁发的国际注册高级能源管理师、国际注册高级能源审计师及国际注册高级能源评估师证书。
\r\n         ACI(美国认证协会)是由美国哈佛大学、德州大学、耶鲁大学、加州大学、杜克大学、森坦那瑞商学院等美国数十个著名院校的专家教授共同组成的学术认证委员会,在全球范围内从事国际职业资格认证的专业机构,长期致力于专家级高水平认证、考试服务,得到美国政府的合法注册,所有课程均获得了美国教育部承认,其颁发的证书被全球157个国家认可,全球通用。

\r\n
\r\n  

\r\n

\r\n \"\"

\r\n

\r\n \"\"
\r\n  

\r\n

\r\n
\r\n  

\r\n

\r\n \"\"

\r\n

\r\n \"\"
\r\n  

\r\n

\r\n \"\"
\r\n  

\r\n

\r\n \"\"
\r\n  

\r\n

\r\n
\r\n
\r\n  

\r\n

\r\n \"\"
\r\n \"\"
\r\n \"\"

\r\n', 1, 0, '未知', '热烈,祝贺,我院,三名,科研,工作者,获得,ACI,及,', '2014-07-17 03:35:34', '2020-06-02 02:11:01', NULL), +(81, 90, 9, '油页岩低温热解的影响因素', 'admin', '油页岩热解生成的液态产物汽化后,与气态产物一起首先通过页岩内部的空隙和毛细管扩散到油页岩块之外,然后通过页岩间的空隙至页岩层之外,最后通过页岩层外空间导出干馏装置', '', '        油页岩热解生成的液态产物汽化后,与气态产物一起首先通过页岩内部的空隙和毛细管扩散到油页岩块之外,然后通过页岩间的空隙至页岩层之外,最后通过页岩层外空间导出干馏装置。在干馏过程中,温度达约105℃时,油页岩主要是干燥脱水。到180℃左右时放出油页岩中包藏的少量气体。温度升高至450~520℃时,油页岩内的有机质即热解生成页岩油蒸汽与热解气体的混合物以及固定碳。油页岩的无机矿物质(有些会脱水或脱CO2)则与固定碳形成页岩半焦。逸出的蒸汽-气体混合物冷却至常温时,便分离成气相和液相。液相产物通常分成互不相溶的两层,一层为页岩油,另一层为水溶液。水溶液中含有能溶于水的NH3、CO2、H2S及水溶性的酚类、氧化物、有机碱及乳化油等。
\r\n        影响因素关于抚顺油页岩、茂名油页岩在不同条件下的热解情况,FRIPP曾进行了大量的研究工作。通过研究结果可知,加热温度、加热时间及加热速度对油页岩的热分解有相当大的影响。加热温度油页岩干馏的最终加热温度影响有机质的分解程度,也是影响页岩油产率的决定性因素。而且,热解产物的二次裂解反应也与最终加热温度有关。用1~2mm的颗粒油页岩,在葛金氏干馏试验装置上考察了加热温度对油页岩干馏的影响。试验结果表明,随着干馏温度的升高,页岩油的产率逐步增加,放出大量页岩油的温度范围为400~450℃。抚顺油页岩、茂名油页岩在加热至450℃时,可产生约90%的页岩油,放出页岩油的最终温度约为505℃。加热时间油页岩的热分解程度不仅取决于最终的加热温度,而且取决于加热时间。在油页岩热解过程中,当热解温度较低时,页岩油的产率随着加热时间的延长而增加;进一步提高热解温度,则分解有机质所需的时间逐渐缩短。采用粒度为1~2mm的抚顺油页岩和茂名油页岩为原料,以2℃•min-1的加热速度升温,考察了加热时间对页岩油产率的影响。当加热温度小于375℃时,页岩油的放出量随着加热时间的延长而增加;温度为450℃时,加热时间超过lh后就不再释出页岩油,表明有机质的热解反应已经完毕。由此可以看出,加热温度愈高,油页岩有机质的分解速度愈快,达到最大页岩油产率所需的时间愈短。如果热解温度大于500℃,则在很短的时间内有机质就能完全热分解,而加热时间对页岩油产率没有明显的影响。所以,最终加热温度是影响热分解反应的主要因素。热解反应所需的加热时间因油页岩性质的不同而异。例如,在其它条件一定的前提下温度为425℃时,茂名油页岩放出页岩油的时间为1h,抚顺油页岩放出页岩油的时间为1.5h;油页岩干馏最终温度大于500℃时,抚顺油页岩及茂名油页岩的页岩油产率在很短的时间内均能达到最高。加热速度油页岩的加热速度影响低温干馏炉的生产强度。
\r\n        块状油页岩在抚顺式炉中的加热速度,一般不超过1.5~5℃•min-1,属于低速加热范围,热量供给速度比油页岩中有机质的化学反应速度要慢得多,在温度上升过程中,油页岩尚未达到最终温度时,有机质即已开始发生热解,反应产物借扩散作用从油页岩内部导出。由于油页岩的受热、有机质的热解反应和反应产物的导出等几个过程是同时进行的,所以在现有干馏工业装置上难于控制油页岩有机质的热解反应。油页岩有机质热分解的研究结果表明:加热速度较低时,加热速度对热解反应产物的产率和组成没有显著的影响,热解反应主要是温度的函数;开始提高加热速度时,页岩油产率略有上升的趋势。加热速度对页岩油产率的影响,是由于两方面的因素造成的。一方面,在相同反应设备和压力等条件下,提高加热速度等于增加了热量的供应,提高了油页岩有机质的反应速度、页岩油的生成速度,使其在设备内停留的时间相对减少,减轻了页岩油在设备内的裂化程度,结果表现为页岩油产率增加。另一方面,若要提高加热速度,就必须提高热载体的温度,这就相当于提高了油页岩外部空间的温度,油页岩热解反应产物—页岩油从油页岩内部向外逸出时所遇到的温度得以升高,页岩油在较高的温度下深度分解,结果造成页岩油产率的降低。此外,不同地区的油页岩其组成和性质不同,加热速度对其影响亦不尽相同。油页岩块径工业上使用的块状油页岩,其块径范围较宽,抚顺油页岩的块径为8~75mm,茂名油页岩的块径为15~125mm。由于油页岩本身的导热性不良,对大块径油页岩而言,加热时其表面与中心存在较大的温差。抚顺页岩油研究所曾在试验室对处在加热过程中的块径不同的(正方体)抚顺油页岩试样的内外温差进行过测定。测定结果发现:在干馏过程中,由于受到脱水及有机质分解等物理-化学过程吸热效应的影响,油页岩的内外温差存在两个高峰,两个高峰分别为200~225℃和475℃左右。第一个高峰在脱水阶段形成。当大量水分被蒸发放出时需要大量的汽化热,此时,由于供给的热量不能迅速传入油页岩块的内部,其内外温差就逐渐加大,并且随着油页岩块径的增大而加大。当水分放出完毕后,外部供给的热量能够较快地传入油页岩内部,温差就逐渐缩小。第二个高峰在油页岩有机质热解和无机物结晶水放出阶段形成。因为有机质的热分解和结晶水的放出也消耗大量的分解热,故造成温差的增大,并且随着页岩块径的增大而增大。所以,在加热温度一定时,块状油页岩比颗粒油页岩需要更长的加热时间才能干馏完全。

\r\n', 1, 0, '能源化学研究室', '油页岩,低,温热,解,的,影响,因素,油页岩,热解,', '2014-07-24 00:46:26', '2020-06-02 02:11:01', NULL), +(82, 91, 9, '油页岩综合利用行业发展概述', 'admin', '油页岩干馏分为两种,即地下干馏和地上干馏。地下干馏也被称为就地干馏,是在地下对油页岩矿层进行加热和裂解,促使其转化为高品质的油或气,再通过相关通道将油、气分别提取', '', '        油页岩干馏分为两种,即地下干馏和地上干馏。地下干馏也被称为就地干馏,是在地下对油页岩矿层进行加热和裂解,促使其转化为高品质的油或气,再通过相关通道将油、气分别提取出来。该技术提高了资源开发利用效率,减少了开采过程中对生态环境的破坏,但页岩油收率不高,而且容易导致地下油气污染。地上干馏,是指油页岩经开采并送至地面,经破碎筛分后,送入干馏炉内进行加热干馏,从而生成页岩油气及页岩半焦或页岩灰的方法。目前,地上干馏是油页岩干馏制页岩油的主要途径。
\r\n        油页岩干馏炉可分成外热式炉和内热式炉两种。采用外热式炉时,热气体通过炉壁加热在炉内的油页岩从而进行干馏;采用内热式炉时,油页岩在炉内直接与气体热载体或固体热载体接触,进行干馏。外热式炉的传热效率低,且不易放大,在工业生产上已被淘汰。当前世界上用于工业生产的炉子都是属于内热式的炉。内热式炉也分为两种:块状页岩(粒径25~125mm)干馏炉和颗粒页岩(粒径0~25mm)干馏炉。块状页岩干馏,一般以热燃烧气或热干馏气为气体热载体;颗粒页岩干馏,一般以烧热的页岩灰为固体热载体。两种干馏工艺的主要差别,在于页岩干燥方法不同及所使用的热载体不同。半焦的处理和利用途径亦不同。目前,世界上许多国家都对油页岩干馏已形成工业化生产规模,中国、俄罗斯、爱沙尼亚的发生式炉及德国LR炉处理量小,油收率较低,工艺不先进,但投资少,适用于小规模的页岩炼油厂;爱沙尼亚Kiviter炉和美国TOSCO-Ⅱ炉处理量较大,投资中等,适用于中等规模的油页岩炼油厂;爱沙尼亚Galoter、巴西Petrosix及加拿大Alberta-Taciuk炉处理量大,油收率高,适用于大、中型油页岩炼油厂。
\r\n        一、油页岩干馏工业发展现状
\r\n        从1838年法国页岩油工业开始至今,油页岩的开发和应用有近200年历史。油页岩工业也曾几度兴衰。随着世界油价的高起,有关国家对油页岩的开发利用又活跃起来。于2005年,美国国会通过了发展非常规能源的法案,在美国掀起了油页岩干馏炼油的研发高潮。美国内政部己经批准了6个土地矿产租赁项目,支持开展油页岩干馏炼油。据美国能源部2008年的统计报告显示,开展油页岩加工利用研究的公司有29家,从事地下干馏研究的有14家公司,从事地上干馏研究的有11家公司,从事页岩油加氢制取轻质油品研究的有2家公司。目前的研究多处于实验室、数学模拟或概念研究阶段。中国油页岩的开发利用起步较早,规模也比较大,但长期以来并没有明显进步。近年来,随着全国能源需求的不断增长,为缓解能源供需矛盾,抚顺、桦甸、罗子沟、黄县等油页岩老矿先后恢复了生产。2008年,我国页岩油年产量约40万t,其中我国最大的油页岩炼油厂—抚顺矿业集团油页岩炼油厂的产量就达35万t。我国的科研院所和相关企业在油页岩利用技术方面也进行了深入的研究。抚顺矿业集团于2006年成立了“辽宁省抚顺矿业集团工程技术研究中心”,针对抚顺炉单台装置处理能力小、油收率低、环境污染严重等问题,将油页岩的综合利用作为研发重点,开发油页岩干馏新工艺和相应的大型生产装置,研究页岩油生产过程中产生的废水、废渣等的处理与循环利用技术。大连理工大学为大庆油田开发的颗粒页岩固体热载体干馏技术,日加工油页岩2000t,拟建设柳树河油页岩工业试验装置。中煤集团黑龙江哈尔滨煤化工公司开展油页岩流化干馏炼油中试已取得初步成功(日加工油页岩50t),日加工油页岩2000t的工业试验装置的可行性研究报告已初步通过。
\r\n        二、油页岩干馏技术应用展望
\r\n        油页岩资源储量丰富,开采和应用有近200年的历史,取得了很多成功经验,并在不断改进。预计随着国际油价的不断上涨,以及剩余油、低渗透油气藏开发难度的增加、天然气水合物开发的瓶颈技术暂时无重大突破等原因的影响,各个国家将会对二十一世纪非常重要的接替能源油页岩的重视程度不断加强。目前,制取页岩油的主要方式是地上干馏,干馏会产生大量灰渣,不仅污染空气,且废弃的灰渣中的金属元素和微量元素渗入地下,造成污染环境。地下转化工艺技术(ICP)是壳牌公司投入巨资研发出的开采油页岩的专利技术,在美国科罗拉多州和加拿大阿尔伯特省进行了商业示范。按照2005年5月每桶原油开发成本计算,传统的干馏技术为20美元•桶-1,使用ICP技术生产成本为12美元•桶-1,大大低于传统的干馏技术,使该技术在油价高于25美元•桶-1时即可盈利。而且该技术无需采矿,减少了开采过程中对生态环境的破坏,尽管该项技术现在还未完全商业化,但关键的工艺、设备等技术问题都已解决,这种新技术必将引导和推动油页岩干馏技术的不断进步和发展。随着技术工艺的不断改进和环保意识的不断增强以及经济效益要求的不断提高,油页岩资源将由从前的单纯能源利用向综合利用效益最大化方向转化。油页岩开采后不仅仅是作为能源被利用,即干馏提炼页岩油;直接燃烧发电。而是通过加氢精制和非加氢精制的方法从干馏后的页岩油中进一步制取汽油、煤油、柴油、石蜡、石焦油等多种化工产品,精制后的重油还可再作燃料使用。用油页岩作为发电的燃料,可直接用作锅炉燃料,或经过低温干馏利用产生的气体燃烧发电,干馏和直接燃烧产生的灰渣可以用来充填矿井、也可用来制造水泥熟料、陶瓷纤维、陶粒、砖块等建筑材料;废气可以作为燃料燃烧产生蒸汽供生产、生活使用,也可再作为油页岩干馏的热源循环使用。油页岩资源的综合开发利用展示出了诱人前景,不仅符合发展循环经济的要求,而且也将带来良好的经济效益、环保效益和社会效益。

\r\n', 1, 0, '能源化学研究室', '油页岩,综合利用,行业发展,概述,油页岩,干馏,', '2014-07-24 00:47:56', '2020-06-02 02:11:01', NULL), +(83, 92, 7, '热烈祝贺我院选手在省科学院外语大赛中获得一等奖', 'admin', '7月30日,省科学院第5届外语大赛在高研院举行,经过个人演讲,评委提问,团体展示等环节,我院参赛的选手不负重望,取得了优异的成绩。其中,杨光获得个人赛一等奖,陆佳获个人', '/uploads/allimg/140801/1-140P1113112H5-lp.jpg', '        7月30日,省科学院第5届外语大赛在高研院举行,经过个人演讲,评委提问,团体展示等环节,我院参赛的选手不负重望,取得了优异的成绩。其中,杨光获得个人赛一等奖,陆佳获个人赛二等奖,潘良获个人赛优秀奖,我院在团体赛中也表现不俗,获得团体优秀奖。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '热烈,祝贺,我院,选手,在,省,科学院,外语,大,', '2014-08-01 01:51:00', '2020-06-02 02:11:01', NULL), +(84, 93, 7, '省环科院专家考察我院杜蒙IMUS装置', 'admin', '2014年7月29日我院徐晓秋院长、关春玲副院长陪同省环科院叶真主任、黑龙江科技大学周国江教授,到我院位于杜蒙的集成粪便综合利用系统(IMUS)示范装置考察。徐院长向两位专家详', '/uploads/allimg/140909/1-140ZZZTVB-lp.jpg', '        2014年7月29日我院徐晓秋院长、关春玲副院长陪同省环科院叶真主任、黑龙江科技大学周国江教授,到我院位于杜蒙的集成粪便综合利用系统(IMUS)示范装置考察。徐院长向两位专家详细介绍了我省畜禽粪便量、目前粗放的处理方式和污染破坏环境的情况,以及IMUS项目的由来,工业化封闭环式沼气系统的特点及优势。
\r\n
\r\n \"\"
\r\n
\r\n        IMUS采用独特的高温消化技术,将畜禽粪便转换为能源、生物肥料和可再利用的水,通过高温厌氧发酵来生产沼气并用其来发电。后营养物可作为无病原体的生物肥料市场化,水可以再次用于IMUS系统或者用于灌溉。IMUS 技术不仅全部利用生物废物中的能源和养分,它还减轻温室气体排放和农业、城市、食品加工等废物造成的其它环境和社会压力。IMUS系统是世界上唯一在高寒地区运行的利用牛粪进行发电,并回收其养分生产肥料的综合利用系统,属国内领先水平。
\r\n
\r\n \"\"
\r\n
\r\n        两位专家认真听取了徐院长的介绍,一致认为IMUS项目是一项既能解决我省高寒地区畜禽粪便严重污染环境的技术,同时也是一项清洁可再生的能源项目。一项技术能同时解决我国环境和能源这两大经济发展中的瓶颈问题,值得大力推广。今后省环科院要在环保技术推广中,推广此技术。此外,IMUS技术还可以应用在城市污泥处理上,市场巨大,更利于推广,大有可为。', 1, 0, '未知', '省,环科,院,专家,考察,我院,杜蒙,IMUS,装置,', '2014-08-04 01:01:00', '2020-06-02 02:11:01', NULL), +(85, 94, 9, '世界原油加工消费现状和趋势', 'admin', '截至2012年底,世界原油探明储量2358亿吨,比2011年增长0.9%。原油储量最多的中东地区,保持小幅增长,已探明储量为1093亿吨,同比增长1.2%。原油资源仍然集中在欧佩克,欧佩克控制着', '', '        截至2012年底,世界原油探明储量2358亿吨,比2011年增长0.9%。原油储量最多的中东地区,保持小幅增长,已探明储量为1093亿吨,同比增长1.2%。原油资源仍然集中在欧佩克,欧佩克控制着世界原油储量的72.6%,这是自1998年以来的最高比例。到2012年底世界原油储采比保持在52.9。
\r\n        2012年,世界原油生产41.19亿吨,比2011年增长2.2%,产量明显增长主要来自北美和非洲地区。北美地区原油产量增幅最大,同比增长8.9%,非洲地区产量增幅也达7.7%。中东地区产量仅增长0.9%,为13.37亿吨,占世界总产量的32.5%。欧佩克生产原油17.78亿吨,占世界的43.2%,高于2011年42.4%的比例。
\r\n        2012年,世界石油消费总量为41.3亿吨,比2011年增长0.9%,已连续3年在化石燃料中处于最低的增长率。分地区看,欧美地区原油消费继续回落,其中,北美消费量为10.17亿吨(占世界24.6%),同比下降1.8%;欧洲和欧亚大陆消费量8.8亿吨(占世界21.3%),同比下降2.5%。其中,亚太和中东地区原油消费继续增长,其中,亚太地区消费量13.89亿吨(占33.6%),同比上升3.7%;中东消费量3.96亿吨(占9.1%),同比上升4.5%。经合组织国家的石油消费下降1.3%(53万桶/天),为过去7年中的第6次下降,占全球消费量的52.2%,为有记录以来的最小份额;非经合组织的石油消费增长了140万桶/天,即增长3.3%。
\r\n        从主要石油资源国来看,位列2012年世界石油探明储量第一的仍是委内瑞拉465亿吨(占世界17.8%),2010年时委内瑞拉为304亿吨(占15.3%),居第二位,2011年晋升至第一位;沙特阿拉伯以365亿吨(占15.9%)退居第二;加拿大280亿吨(占10.4%)、伊朗216亿吨(占9.4%)、伊拉克202亿吨(占9.0%)分列第三、四、五位。在2012年排名中,中国探明储量排名由上一年第15位升至第14位,储采比由上年末的9.9升至11.4。
\r\n        从主要产油国来看,欧佩克占全球石油产量增长的约72%,尽管由于国际制裁,伊朗产量有下降(减68万桶/天),利比亚产量(增100万桶/天)几乎恢复了2011年的全部损失,沙特阿拉伯、阿联酋和卡塔尔产量连续第二年达到了创纪录的水平,伊拉克和科威特产量也显着增加。伊朗石油供应的减少,由利比亚生产的恢复以及沙特阿拉伯和其他欧佩克国家增产完全抵消而有余。
\r\n        2012年全球生产原油名列前茅的国家排名中,沙特阿拉伯仍位居世界第一大原油生产国,产量5.47亿吨,同比增长3.7%;在2010年曾位于第一位的俄罗斯继续退居第二,产量5.26亿吨,同比增长1.2%;美国产量大幅增长13.9%,达到3.95亿吨,稳居第三位,美国新增的产量大多来自于全新的页岩油产区——北达科他州巴肯页岩或得克萨斯州的鹰福特页岩,伴随着页岩气革命而日趋成熟的水力压裂和水平井技术使这些地区的非传统石油产量得到了充分的释放;伊朗产量下降,与中国互换座次;伊拉克产量大幅增长,位次上升,委内瑞拉排名下挫。
\r\n        从原油主要消费国来看,2012年美国、中国、日本、印度、俄罗斯依然占据前五位。美国原油消费仍居首位,为8.2亿吨,比2011年下降2.3%,占世界消费量的19.8%,消费量和占比均有下降;中国消费量为4.84亿吨,再次创纪录,同比增长5.0%,低于过去十年的平均水平,占比11.7%;日本消费量2.18亿吨,同比增长6.3%,这是自1994年以来最强劲的增长。
\r\n        2012年,世界原油贸易总量为5531.4万桶/日,比上年增长1.3%,贸易量占全球消费量的62%,占比有所提升。其中,原油进口大国美国贸易量出现下滑,为1058.7万桶/日,同比下降6.6%,目前美国的石油进口是20世纪90年代中期以来最少的;而中国的石油净进口增长了61万桶/天,占全球增长的86%;日本的进口贸易量同比增长5.5%。出口贸易集中的前苏联和中东地区贸易量均出现下滑,分别为859.7万桶/日和1969.9万桶/日,同比分别下降2.2%和0.3%,而北非和加拿大的出口贸易大幅增长33.6%和9.2%,抵消了几个地区的出口下降。
\r\n        预计2014年国际石油需求将每天增长120万桶(2013年为93万桶),2014年石油生产和消费增长动力主要为美国。中国、美国、印度、巴西、印度尼西亚和韩国将是重要国际能源消费国。2014年非欧佩克国家石油开采量将达到20年来最高值,对欧佩克石油的需求将从2013年的2960万桶/天下降到2940万桶/天(当前开采量为3061万桶/天)。在这种情况下,包括沙特阿拉伯在内的大多数欧佩克石油出口国将由于市场饱和而被迫减少石油开采量。国际能源机构指出,欧佩克国家对石油的依赖将由于美国和加拿大页岩油新开采技术的使用而进一步削弱。

\r\n', 1, 0, '未知', '世界,原油,加工,消费,现状,和,趋势,截至,', '2014-09-09 01:19:20', '2020-06-02 02:11:01', NULL), +(86, 95, 9, '我国炼油产能现状分析', 'admin', '目前我国炼油产能严重过剩,2013年炼厂平均开工率仅67.3%,同比下降了2.4个百分点。受益于成品油定价机制调整,2013年我国炼油行业实现了扭亏,实现利润400亿元。但由于一方面炼厂产', '', '        目前我国炼油产能严重过剩,2013年炼厂平均开工率仅67.3%,同比下降了2.4个百分点。受益于成品油定价机制调整,2013年我国炼油行业实现了扭亏,实现利润400亿元。但由于一方面炼厂产能不断扩展,另一方面,我国成品油消费增速正在逐步下行,我国成品油市场过剩的现象正在加剧。据业内人士透露:“目前国内总炼油能力超过了7亿吨,如果提高开工负荷,近5年内可以不用新建炼厂“。造成低开工率的原因主要是国内成品油产能严重过剩。
\r\n        按照国际标准,某一行业的开工率如果降至70%,这一行业就属于产能过剩行业。目前我国的炼油业开工负荷还不足70%,已经算是严重过剩。虽然产能严重过剩,但国内炼油项目仍在新建、扩建中,其中,2013年我国新增炼油能力4000万吨。扩建的项目包括乌石化、安庆、武汉、胜利、榆林、汇丰、玉皇、盛马、利安。新建的项目包括:海南东方、福建腾龙、东辰、天弘、海跃、富宇、东方华龙、乌苏华泰等。近年来,民营炼厂投资热情依然非常高涨。随着民营炼厂的新建扩建,民营企业在我国成品油供应市场份额的占比从2012年的10%上升到2013年的13%。
\r\n        从需求来看,2000年到2005年我国石油消费年均增速为7.3%、成品油消费年均增速为8.7%、消费柴汽比为2.28:1;2005年到2010年分别为7.2%、7.9%、2.2:1;2010年到2013年分别为3.6%、5.2%、1.8:1。
\r\n        成品油需求增速下降是短期因素和长期因素的叠加而导致的。经济方面,我国产业结构转型、新兴城镇化进程加快,三产发展的速度超过二产;产业方面,我国钢铁、水泥、电解铝、平板玻璃、船舶等主要用油行业产能全面过剩;第三,汽油需求增长率远超过柴油,但近年来不少城市陆续实施限购、限行措施,对汽油消费也可能造成影响。
\r\n        一、国内成品油市场环境的变化,倒逼我国炼油企业早日转型。
\r\n        据业内人士透露:“与其扩大产能,不如提高油品质量,差异化经营。”从油品质量升级寻求突破口,对炼油企业来说是个机遇。很多企业通过升级改造已经从中获利。另外,成品油出口也是一个机遇。虽然我国油品进出口受限于商务部配额限制,但我国成品油出口有望逐步放开。初步判断2015年亚太地区的汽油还略有缺口,而柴油和煤油则供大于求。
\r\n        当今世界炼化行业的大型化、基地化、一体化已成趋势。2012年和2013年的数据显示,我国炼油能力已超过每年6亿吨的规模,位居全球第二。千万吨级的炼油企业达到24家,产能超过3亿吨,约占全国产能一半稍强。其中,有22家隶属中国石油和中国石化两大集团。这使得中国石化和中国石油炼油平均规模分别达到每年778万吨和658万吨。与此同时,国内却有百余家规模在200万吨级以下的炼油企业,占全国产能的8%稍弱。这些数据说明,我国炼厂的潜在技术效率总体平均水平依然不高,且分布不平衡。
\r\n        由于现行的原油配置政策,多数地方民营炼厂不能获得稳定的原料供应,依靠少量不稳定的原油和大量高成本的进口燃料油,若能实现40%以上的开工率就已经属于乐观状态了。自然,地方民营炼厂的开工率拉低了全国炼油行业的平均生产能力利用率。可就算是在这种条件下,这些潜在技术效率低、生产能力利用率低、原料成本高的小型炼厂依然能够存活的事实透露了很多重要的信息,其中最为重要的是,中国的成品油政府定价足够高。因此,这就不难理解业内专家对产能过剩忧心忡忡的原因。
\r\n        通过举例可以说明问题,若在新加坡成品油现货市场价格基础上,加上运保费作为到岸价格,支付进口关税、给予批发零售环节合理的利润率,再加上所有环节增值税及从量消费税进行计算,我们会发现自2008年6月以后,这个“放开成品油进口,成品油批发零售环节合理竞争”意义的影子价格总是低于国内的同期政府定价。即便如此,炼化企业也不是普遍盈利的。也就是说,以中国炼油企业的总体效率,同韩国、印度、日本、新加坡炼厂在国际市场竞争,基本没有可能。目前中国国内市场的成品油需求主要靠本土成品油供应,不受进口成品油冲击已然是幸运的了。沿着这个思路自然可以理解,炼油效率足够高是判断产能真正过剩的必要条件。低效率厂商不能获得满意的市场份额,导致开工率不足,不意味着具有经济意义的产能过剩。缺乏效率,在开放市场中,再低的产能也有可能成为过剩产能。
\r\n        需要说明的是,对于中国炼油企业总体效率偏低的判断并不排除个别企业实现高效率的可能,更不否认优秀炼油企业存在的现实。剔除炼厂规模和投产年代差异等因素,国内炼厂的生产效率和财务绩效差异仍是巨大的。其实,对于中国成品油高油价和炼厂普遍亏损并存的论断并不公平,至少是不够全面、客观的。由于众所周知的历史和现实原因,太多的国企央企承担了一些至少在规范市场经济体制下被普遍视为过分的“社会责任”。石油系统内,很多基层单位的冗员问题至今不能根据市场规则得到解决。而中国大型炼厂的员工数量数十倍于国外相同规模的炼厂也是非常普遍的现象。我们很难期待这些炼油企业能够在国际市场上争夺一席之地。
\r\n        当然,最近几年各地大型炼油设施投资增长过快的推手离不开地方政府对政绩的追逐和石化企业对市场的争夺,但这不足以造就真正意义的产能过剩。高成本的企业没有被迫停产关闭,小规模的没有被淘汰,低效率的没有去“瘦身”。如同自然界食肉动物的饥饿有可能是因为猎物数量的增长没能抵消捕食能力的衰退。我们看到的“产能过剩”只是所捕获的猎物变少,并不是捕食者变多,或者猎物变少。
\r\n        总之,提出“炼油行业产能过剩”的论断,并非意在吓退潜在的行业进入者,或者希望政府继续整顿小炼厂,而是对于政府进一步理顺体制、改进政策、企业不断提升效率有所期望。中国炼油产能过剩或许只是个伪命题。
', 1, 0, '未知', '我国,炼油,产能,现状,分析,目前,我国,炼油,', '2014-09-09 01:20:54', '2020-06-02 02:11:01', NULL), +(87, 96, 9, '中国能源如何应对全球能源格局的转变
—2035年前世界能源局势预测', 'admin', '当前,国际能源格局正处于深刻变化之中,全球经济期待新的增长引擎拉动,欧元区危机日益加深,延宕世界经济复苏,西方社会整体陷入体制性危机。国际社会陷于全球经济危机后的', '', '        当前,国际能源格局正处于深刻变化之中,全球经济期待新的增长引擎拉动,欧元区危机日益加深,延宕世界经济复苏,西方社会整体陷入体制性危机。国际社会陷于全球经济危机后的全面调整之中,美国加速衰落,使世界政治和经济格局向多极转变和向无极世界继续滑落两个方向发展,新的国际秩序呼唤中国高效参与全球和区域治理,广泛参与多边国际事务,塑造新的国际格局,综合维护国家利益和能源安全。全球人口资源环境矛盾突出,气候变化谈判成为国际热点之一,新能源研发和节能环保技术将成为核心推动力,从而引领世界经济发展方向。未来世界的能源供应转向区域化和本土化,分布式能源网络建设提速。西方世界处于向新型工业化社会转型阶段,面临技术创新取得突破的前夜。2015年之前世界经济仍普遍低迷,2020年后将出现新的增长。发展中新兴国家追赶式现代化面临挑战,中国经济减速至7.5~8%。欧美中新技术突破之前,2015~ 2020年世界经济形势暗淡。2012~2020年的8年是中国“转方式、调结构”的重要机遇期,2013年是中俄签署天然气贸易合同的良好时间窗口。2020年后常规资源包括油气价格仍将因稀缺性而震荡上扬。
\r\n        一、中国:技术创新改写全球能源格局
\r\n        当前页岩气和页岩油开发是全球能源领域的一场技术革命,是全球油气勘探开发的新方向。2005年以来,美国页岩革命已导致国际能源市场发生深刻变化,已经开始改写全球能源政治版图。
\r\n 随着美国页岩气开采技术取得突破进展,美国能源重心从中东-西非逐渐西移转向北美地区和本土,对外依存度显著下降。2005年美国页岩气年产量仅196亿立方米,而2010年已达到1378亿立方米,加上致密砂岩气和煤层甲烷气,非常规天然气产量约占美国天然气总产量一半以上,2030年将达到65%。页岩气开发利用使美国国内天然气价格出现暴跌(0.5元/立方米),已在改变美国的能源消费结构。
\r\n        美国石油对外依存度呈现下降态势。美国能源信息署(EIA)数据显示,2005年美国石油对外依存度高达60.3%,2010年下降到49.3%,2011年进一步降至45%。未来10年美国计划把石油进口量再削减1/3。美国2010 年能源综合自给率为78%,预计在2035年将达到87%。
\r\n        EIA还预测美国将在2016 年成为LNG 净出口国,2021年成为天然气总量净出口国,2025年成为管道天然气净出口国。2035年美国石油及其他液体燃料的自给率也将超过60%。
\r\n        与美国能源走向独立形成鲜明对比的是,由于经济保持高速增长,以中国为首的东亚和印度为首的南亚地区石油对外依存度节节攀升。2011年中国消费能源34.8亿吨标煤,超过美国成为全球第一大能源消费国,新增消费2.3亿吨标煤。中国能源消耗量占全球19.5%,煤炭消费量相当于其他国家的总和,高能耗产生了仅占世界8.6%的GDP。中国2013年石油依附度已达到58.8%,远超美国。中国占世界能源消费总量由2000年的9.02%飙升至2010年的20.82%,2020年前仍将继续攀升。
\r\n  中国的对外依存度过高,供求矛盾突出,从而制约经济社会发展。中国石油消费已进入快速增长时期,石油供需缺口将越来越大,2020年中国石油对外依存度将上升至超过66%。中国对外石油依赖程度越高,国家控制短缺风险的能力越弱。一旦发生石油进口通道受阻等情况,必然对整个国民经济和社会生活秩序产生消极影响。如果中国经济的运行秩序经常受到石油市场行情波动和供应紧平衡的影响,可持续发展能力将会受到掣肘。
\r\n  中国石油定价机制不完善,市场风险增大。中国石油定价机制的弹性不足使中国石油安全在国际油价的变化中承受极大风险。国际油价上涨给中国经济运行和居民生活带来一定的负面影响,高油价导致外汇支出增加、企业成本加大、居民消费支出增加,抑制经济活力,输入性通胀加剧潜在国内通货膨胀压力,并增大国家宏观调控难度。
\r\n  2000~2010年期间,世界基础能源(包括石油、天然气、煤炭、水电和核电,不含新能源)消费总量年增长率为2.67%,亚太地区年均增长率则为6.34%,而北美、欧洲、独联体地区年均增长率仅为0.2%。
\r\n  中国尽管页岩气资源丰富,可采资源量约25万亿立方米,潜力巨大,但与美国页岩的平原分布相比,中国页岩发育层系构造复杂,分布地带多为山丘,开发难度较大。矿产资源普查基础工作薄弱,地质理论有待创新和高端突破,可采储量尚需进一步落实。此外,开发技术滞后、水资源相对匮乏、资源区人口密集是我国页岩气开发的不利因素。而水平井钻完井技术、分段压裂等核心技术落后,我国与美国相比落后10年,这些已成为阻碍页岩气开发的瓶颈。
\r\n  随着西亚北非“阿拉伯之春”运动的发生和欧元区崩溃,新的全球能源格局浮出水面。国际能源格局将发生深刻变化:
\r\n  1、以美国为代表的西半球非常规油气资源的新发现,打压油气价格并降低供应的波动性,全球石油供应中断的威胁下降;但华盛顿掌握着油价的标价权,其将实行弱势或强势或美元政策影响油价升降。
\r\n  2、能源供应形势的乐观态势将极大改善国际关系和能源格局。石油输出国组织(OPEC,简称欧佩克)作为卡特尔组织功能消退,局势动荡的石油国家如伊朗、伊拉克、委内瑞拉可能会被边缘化。
\r\n  3、欧洲持续推进能源多元化战略,大力发展洁净能源和新能源,降低对俄罗斯的能源依赖,加大从中东-北非-中亚的油气进口。
\r\n  4、传统油气资源的供应国与消费国之间的竞争将集中于新兴国家经济体和OPEC之间,中国更是首当其冲,被推上前台。
\r\n  5、中美继续争夺新能源关键技术研发的战略制高点和创新市场。新能源(非常规油气和可再生能源)的经济性即价格成本能否接近常规油气资源是技术竞争的焦点。
\r\n  美国取代俄罗斯,摘取世界天然气生产大国的桂冠,俄罗斯天然气工业股份公司(Газпром,俄气)将丧失欧洲天然气市场的霸主地位,2011年俄气对德国、挪威和荷兰的天然气出口大幅下降。俄欧能源一体化战略已逐渐沦为空想。
\r\n  在发动页岩气革命之后,美国页岩油开采凯歌行进。这势必会引起全球能源消费格局的变革甚至地缘政治的震动。Cambridge EnergyResearch Associates (CERA)公司对美国和加拿大48个油田共28口页岩油油井的调查显示,储量为8.41亿吨,开采成本仅为23.77美元/桶,在当前油价和税制条件下,利润空间很大。15年之后,美国页岩油日产量将达到4.5百万~5百万桶,相当于俄罗斯目前日产量的一半。
\r\n  2015年之后,中国、印度、加拿大等国以及欧盟开始页岩气的工业开采,俄气在国际市场份额受挤压,地位开始下降。尽管俄气也有页岩气项目,可以随时增加产量,但外部市场不容乐观。俄气计划2013年底分别与印度(LNG形式供应)和中国签署天然气出口协议。
\r\n  如果世界油价在普京第一个六年任期保持低位,俄罗斯预算对能源出口创汇的依赖度难以下调,俄罗斯将面临巨大困境,从能源出口依附型经济向创新型国家的转变就难以有充足的启动资金。
\r\n  为确保能源供应保障中国应采取的对策
\r\n  2030年之前,常规油气资源仍将是工业化和后工业化国家的主导性能源,石油作为常规军事机器和交通运输的主要动力燃料不会改变,可再生能源仅占世界能源平衡的16%。美国拥有打压世界油气价格下行的能力,但美国因此获得美元贬值的自由空间度。
\r\n  1、随着美国从中东-北非石油进口的下降和退出,中国进一步密接同中东、北非能源国家的战略合作,如推进中国-海合会国家自贸区建设和人民币对伊斯兰世界国际化水平;中国应加强同日、韩的能源合作,减少在寻求国际石油天然气资源方面的激烈对抗和冲突,避免过度竞争。
\r\n  2、中国利用上合组织与欧亚同盟之间的交叉与融合,争取人民币成为上合成员国能源贸易的结算货币;考虑俄罗斯对中亚-外高加索地区的关切,应注重平衡中俄利益,共同维护中亚地区的安全和能源利益;中国与俄罗斯应加强能源科技创新合作、研发氦提取与封存技术、稀土和铀资源开发战略的协调。
\r\n  3、中国继续推进西部陆路能源大通道和中国-土耳其-欧洲铁路新大陆桥建设;按照《上合组织中期发展战略规划》适时扩大上合组织,第一批纳入巴基斯坦、印度,之后适时批准蒙古和伊朗加入;下次峰会应考虑土耳其成为观察员国。2012年6月北京峰会已批准阿富汗为观察员国,上合应针对2014年美国撤军后的后阿富汗重建达成共识。
\r\n  4、中国需要善用金融工具,利用G20机制作为全球金融治理平台,推动对发展中国家有利的规则制定,加强原油及其衍生品期货市场建设,使上海成为东亚和世界石油定价中心之一。
\r\n  5、加快产业结构和能源消费结构调整,推进高能效技术创新,发展新能源和核能;能源结构以煤为主,优质能源资源如石油、天然气等比例偏低,能源结构不合理。资源勘探相对滞后,影响了能源产能提高,资源利用效率也亟待提高。同时,中国煤炭清洁利用水平低,煤炭燃烧产生的污染给生态环境带来很大压力,在国际气候谈判中处于被动地位。
\r\n  6、改变平行推进的“救火式”外交,确定中国外交战略的优先方向:重点落实区域经济一体化战略(中日韩自贸区、东盟10+3、中哈自贸区建设、中国东北与俄罗斯远东和东西伯利亚区域合作);第二层面加强中非合作;同时注重大国协调,以义为先,推行和谐世界的义利观;放弃不结盟政策而采取负责任的盟友战略;放弃不干涉内政原则,维护国际正义。
\r\n  7、坚定维护南海海洋国土主权,同时加快南海深水油气开发,2020年前尝试可燃冰的工业开发。
\r\n  8、创新能源合作方式,促成中俄通过天然气“上下游一体化”合作模式,缔结长期管道天然气贸易合同,打造与优先发展的中俄战略协作伙伴关系战略定位相匹配的“新型能源共同体”。中俄原油贸易将扩大到5000万吨,天然气价格谈判障碍将在上下游一体化模式探索中取得突破。俄方计划在欧亚同盟一体化能源战略框架内制定对中国的天然气出口路线。俄近期将突破从东西伯利亚天然气之中分离氦气技术、制定欧亚同盟铀出口战略,以及俄东部稀土开发战略。
\r\n  9、加快推进社会主义民主和法治建设,维护国内社会的整体稳定和谐,为实施我国大国外交战略奠定坚实的国内环境和执政基础。
\r\n  二、美国专家之预测
\r\n  西半球非常规油气资源的新发现,弱化了油气供应中断的威胁,降低了油气价格的波动性,有利于改善国际关系。西方国家石油产量自1952年以来将首次有望满足需求,美国天然气自给自足可以维持100年。科技革命带来了能源供应的革命。先进的地震技术和复杂的钻探方法开启了以前不为人知或无法获取的矿藏。在石油方面,美国、加拿大、巴西(可能还包括墨西哥)的产量将大幅增长。上述国家在未来20年可能会位居全球7大能源生产国之列。美国的能源政策将越来越侧重于在西半球的关系,力求在整个美洲地区促成一个自贸区。
\r\n  地缘政治因素造成的供应中断将不会再产生那么大的影响,石油禁运将不会像1973年阿拉伯国家或1979年伊朗所实施的禁运那样造成严重破坏。国内冲突(如在伊拉克和利比亚发生的冲突)引发的石油产量下降也将不至于产生严重后果。简单来说,稳定产油国的名单将变得更长,这将让任何一个处于动乱状态的国家的影响变得更为有限。对冲基金利用金融工具成功操纵市场的可能性将因能源市场规模巨大而减小。二战后西方曾在能源生产方面引领世界。西方的消费量飙升,中东的产量增加,不稳定性也随之而来,能源从东方向西方输出。如今这种流动即将逆转,国际格局将会改变。中东地区在地缘政治中的核心地位将会减弱,欧佩克作为一个卡特尔组织(已在衰落)的设想将走向尾声。
\r\n  美国坚信,未来世界的经济和政治中心在东亚,美国积极回归西太平洋地区,加紧防范中国崛起。而美国长期部署在海湾地区的军力将减少,美国在海湾的唯一优先事务将是维护沙特阿拉伯和以色列的稳定。另外,美国政府今后的紧缩预算将支持削减阿以两国国防支出,因为这两个国家都已高度军事化。
\r\n  俄罗斯等其他渴望获得国际权力的石油国家在全球的影响力也将遭到削弱。西方国家石油产量的不断飙升,将导致俄罗斯等国家被边缘化。随着美国成为液化天然气出口国,俄罗斯威胁切断对欧洲能源供应的能力将减弱。再加上俄罗斯人口不断减少且经济疲弱,俄罗斯可能将进一步走向衰落。
\r\n  中国将受到很大影响。中国80%的石油需求可能最终依靠进口。中国的石油日进口量预计将从400万桶增至1200万桶。中国已是中东和非洲石油的最大客户,被迫卷入这一地区的冲突调节。随着西方对中东保护减弱,中国将承继美国在此留下的脆弱性负担。
\r\n  石油进口在美国中东战略目标中的重要性下降,虽然这并不意味着美国会放弃中东,但是,美国取得“能源独立”会让其在推进中东民主化、抑制伊朗崛起、保护以色列安全等战略目标时,变得更加强硬。美国若不再依赖国际能源市场,全球能源供应方将更加积极地寻求需求方,尤其是对接东亚。对中国而言,这将会留给中国更多境外能源扩展空间;另一方面,美国若不再积极维护全球主要通道的安全,那么全球能源供给和运输的风险将上升。
\r\n  EIA于2013年6月宣布,俄罗斯页岩油储量750亿桶,居世界第一位。美国页岩油可采储量580亿桶,居第二位;中国320亿桶,居第三位。其后为阿根廷、利比亚、委内瑞拉和墨西哥。全球页岩油总储量评价为3450亿桶,占石油可采储量的10%。
\r\n  页岩气储量排名:中国为31.57万亿立方米,阿根廷为22.71万亿立方米,阿尔及利亚为20万亿立方米。美国页岩气产量第一,但储量排名第四,为18.83万亿立方米。俄罗斯页岩气储量为8万亿立方米,排名第九。全球页岩气资源量为206万亿立方米,为常规可采天然气储量的32%。
\r\n  三、俄罗斯专家对2035年前能源形势的预测
\r\n  俄能源部能源战略研究所专家认为,石油开采的峰值期不断被技术的新突破所推迟。2035年石油消费将增长20%,天然气增长55%。未来25年内,可再生能源将增长70%,在能源平衡中将达到16%。油价预测关涉对世界经济发展态势的研判。2035年油价平衡价位为125美元/桶。2010~2035年,天然气市场的发展要快于石油,分别为56%和21%。全球天然气消费量将达5万亿~5.5万亿立方米,价格将增长50%,主要驱动力是天然气电站。
\r\n  亚洲发展中国家油气消费量占世界新增消费量的65%,这些国家是新增碳排放量的主要贡献国,而发达国家温室气体排放下降。2035年主要能源进口国为欧洲和亚洲国家。北美将减少甚至停止进口某些能源品种。北美走向能源独立,可能形成区域能源价格,2035年可出口LNG为300亿立方米/年。尽管数量不大,但将改写世界天然气分配流向。
\r\n非常规的页岩油、油砂、稠油的开发将对市场产生重大影响,2006~2011年页岩油的开采成本已经下降一半,这是页岩气开采技术的突破对页岩油开发所产生的实际影响。北美地区由此可以实现能源自给自足,这将对世界能源格局和油气价格走势产生深刻影响。随着美国停止石油进口,油价将降低23%,世界所有石油产区包括独联体国家的产油量随着需求的下降而降低。
\r\n  但是,中东和北非作为世界油气的主要供应地仍保持着重要意义和影响力。波斯湾地区持续的动荡和宗教冲突将导致石油产量下降10%,2013~2019年伊朗将停止石油出口,而伊拉克产量已减半。尽管有生物燃料和新能源的发展以及其他地区产量的增长,都不足以替代中东和北非出口的下降。在此情景之下,油价将上行至200美元/桶。
\r\n  世界将在生态安全与能源保障之间寻找平衡点。福岛核泄漏之后,日本德国等国放弃、拒绝发展核能;BP墨西哥漏油灾难之后,出于环保起见,世界开始讨论谨慎对待深海采油。为了维护生态安全所采取的作法将导致能源价格比2010年基准价上涨60%,这将加剧对传统能源的争夺。
\r\n  目前,金砖国家的在建核电站数量占全球总量的75%。当前全球正在运营的核电机组普遍老化,服务20年以下的仅占20%,发达国家大多数机组将要在2030年之前关闭,而以何种燃料填补这一巨大的能源缺口已难以回避。可再生能源发展迅速,尽管最近几年成本有所下降,其较贵的价格无法与常规能源如天然气和煤炭相互竞争,其发展前景取决于相关国家的政策导向和扶持。
\r\n  总体来看,俄罗斯能源业面临日益紧迫的不利于出口的国际能源形势。2035年油气产能达到峰值之后,随着国内需求不断的增加,俄罗斯能源出口量将下降;外部市场情况复杂,俄将回归国内市场。与其产量波动有关的变量涉及以下六方面:俄经济增速、外部市场需求、储量替接、国内外能源资源价格、开采成本、价格政策。
\r\n  目前,俄能源公司对油气勘探领域的储量增长投资严重不足,不利于产能稳定和提高。2035年之前,俄罗斯石油产量稳定,但天然气产量将继续增长。
\r\n  欧洲对传统能源需求的增长有限,又兼市场竞争激烈,俄罗斯的竞争优势不明显。俄罗斯瞄准世界经济增长的重心——东北亚和亚太市场,将减少对欧出口,加快对东部能源的开发以扩大对东部邻国的出口。
', 1, 0, '未知', '中国,能源,如何,应对,全球,格局,的,转变,—,', '2014-09-09 01:22:54', '2020-06-02 02:11:01', NULL), +(88, 97, 7, '营造健康运动氛围,丰富职工业余生活
-省能源环境研究院开展羽毛球比赛', 'admin', '为使我院职工在工作之余放松身心,劳逸结合,经过精心筹备,我院羽毛球比赛于9月28日正式开始,此次活动得到了院领导的大力支持和职工的积极响应。 比赛中选手们挥舞球拍、腾挪', '/uploads/allimg/141011/1-141011112F0224-lp.JPG', '        为庆祝建国六十五周年,丰富我院职工文化生活,使我院职工在工作之余放松身心,劳逸结合,经过精心筹备,我院羽毛球比赛于9月28日正式开始,此次活动得到了院领导的大力支持和职工的积极响应。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n        比赛中选手们挥舞球拍、腾挪跳跃、忘却疲惫、尽情挥洒汗水。最终,男子单打组郭广亮同志凭借出色的发挥,夺得男子单打第一名,女子单打组樊磊同志夺得女子单打第一名。
\r\n
\r\n
\r\n \"\"
\r\n        通过本次羽毛球比赛,不仅增强了同事之间的感情和团队凝聚力,同时也展现了我院全体职工团结活泼、奋发向上的精神风貌。
\r\n
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '营造,健康,运动,氛围,丰富,职工,业余,生活,省,', '2014-10-15 08:21:26', '2020-06-02 02:11:01', NULL), +(89, 98, 7, '知识产权助推创新
--省能源院专利知识培训', 'admin', '11月17日,第八届中国专利周黑龙江省系列活动正式启幕。为配合专利周系列活动,11月20日,黑龙江省能源环境研究院举办了知识产权培训讲座。特邀黑龙江省知识产权服务中心副主任', '/uploads/allimg/141124/1-141124110J93I-lp.jpg', '        11月17日,第八届中国专利周黑龙江省系列活动正式启幕。为配合专利周系列活动,11月20日,黑龙江省能源环境研究院举办了知识产权培训讲座。特邀黑龙江省知识产权服务中心副主任,专利代理研究员单淑梅同志来院讲课。我院全体科技人员参加了这次培训。
\r\n
\r\n \"\"
\r\n
\r\n        首先,单淑梅研究员介绍了专利的概念、特征,申报流程,重点介绍如何确定必要技术特征,如何把握产品、方法发明的实质性特点,撰写专利文件。接着分析了部分专利法律条款,细致解读了相关法条的适用范围、立法宗旨等,并结合多年来的工作实践经验和具体案例展开论述,内容丰富,旁征博引,极具实用性。最后,她结合实际研究项目演示了专利文献的检索和分析全过程。
\r\n        单淑梅研究员的培训内容丰富,案例生动详实。参加培训的科技人员兴致高昂,不时提出问题,参与互动,均表示受益匪浅。

\r\n
\r\n \"\"
\r\n
\r\n        此次知识产权培训,提高了我院科技人员的知识产权保护意识和专利撰写实务能力。今后我院还将针对知识产权创造、保护、运用和管理等各个环节,组织不同主题的知识产权讲座和培训,进一步强化知识产权知识,不断提高我院自主创新能力。
\r\n', 1, 0, '未知', '知识产权,助推,创新,省,能源,院,专利,知识,', '2014-11-24 03:05:14', '2020-06-02 02:11:01', NULL), +(90, 99, 20, '黑龙江省科学技术进步一等奖', 'admin', '科学技术发明一等奖 科学技术进步一等奖 全国化工系统技术二等奖', '/kjfh/uploads/allimg/130707/1-130FH2593T91-lp.jpg', '
\r\n \"\"
\r\n', 1, 0, '未知', '科学技术,进步,一等奖,科学技术,发明,一等奖,', '2017-05-12 09:35:58', '2020-06-02 02:11:01', NULL), +(91, 102, 21, '论文《木焦油预处理制取加氢原料的方法》', 'admin', '以廊乡林业局木焦油为原料,采取萃取破乳液固分离蒸馏脱水的方法对木焦油原料进行净化预处理,脱除原料中的水分和杂质等非理想组分,使木焦油的含水量降至0.56%,固体含量降至', '', '        以廊乡林业局木焦油为原料,采取“萃取—破乳—液固分离—蒸馏脱水”的方法对木焦油原料进行净化预处理,脱除原料中的水分和杂质等非理想组分,使木焦油的含水量降至0.56%,固体含量降至0.23%,明显改善木焦油的质量。经预处理的木焦油可作为催化加氢制取运输燃料油的原料。', 1, 0, '未知', '论文,《,木焦油预处理制取加氢原料的方法,', '2014-11-28 08:17:25', '2020-06-02 02:11:01', NULL), +(92, 103, 21, '论文《轻质木焦油加氢脱氧的影响因素》', 'admin', '摘要:在固定床加氢微反装置上,采用硫化态NiMoW/Al 2 O 3 催化剂,以廊乡林业局轻质木焦油(<300℃馏分)为原料考察反应条件对加氢脱氧性能的影响。结果表明,适当降低反应空速、', '', '        摘要:在固定床加氢微反装置上,采用硫化态NiMoW/Al2O3催化剂,以廊乡林业局轻质木焦油(<300℃馏分)为原料考察反应条件对加氢脱氧性能的影响。结果表明,适当降低反应空速、提高反应压力、提高反应温度均有利于提高催化剂加氢脱氧反应活性,提高加氢产物的热值。在反应温度380℃、反应压力8.0MPa、体积空速0.8h-1、氢/油体积比800:1的条件下,加氢生成油的氧含量明显降低,热值显著提高。轻质馏分油可作为化工轻油原料进行下游加工,中质馏分油主要技术指标均符合船用馏分燃料油(GB/T17411-1998)标准要求,可直接作为船用燃料油调和组分使用。', 1, 0, '未知', '论文,《,轻质木焦油加氢脱氧的影响因素,》,', '2014-11-28 08:18:31', '2020-06-02 02:11:01', NULL), +(93, 104, 21, '论文《企业标准解读》', 'admin', '摘要:为推动车用燃料的多元化发展,拓展代用燃料的应用领域,经黑龙江省科技厅推介,黑龙江省能源环境研究院与哈尔滨市依兰巨澜清洁能源发展有限公司共同签订了《产研技术研', '', '        摘要:为推动车用燃料的多元化发展,拓展代用燃料的应用领域,经黑龙江省科技厅推介,黑龙江省能源环境研究院与哈尔滨市依兰巨澜清洁能源发展有限公司共同签订了《产研技术研发协议》,开展了“M25车用甲醇汽油”的技术研究、工艺过程与控制以及试验品生产应用工作。为了科学、规范地推进科研性试点工作,双方制定、发布实施了Q/HNH 001—2013《M25车用甲醇汽油》企业标准。本文对该企业标准的制定情况及其主要技术指标作了阐释,以利于在M25车用甲醇汽油的科研性推广应用工作中对标准全面理解和贯彻实施。
\r\n《黑龙江科学》,2014年第2期。
', 1, 0, '未知', '论文,《,M25车用甲醇汽油,》,摘要,为,推动,', '2014-11-28 08:20:22', '2020-06-02 02:11:01', NULL), +(94, 105, 21, '论文《<车用汽油>的胶质指标解析》', 'admin', '摘要:近几年,随着我国汽车工业的快速发展,石油能源快速消耗,车辆尾气排放对环境的污染日益增加。考虑到已经实施国三和将要实施的国四、国五标准要求,国家发布了GB1793020', '', '        摘要:近几年,随着我国汽车工业的快速发展,石油能源快速消耗,车辆尾气排放对环境的污染日益增加。考虑到已经实施国三和将要实施的国四、国五标准要求,国家发布了GB 17930—2011/XG1—2012《车用汽油》国家标准第1号修改单(于2012年5月1日起实施)。其中胶质指标在原标准的基础上,增加了未洗胶质含量(加入清净剂前)不大于30mg/100mL,试验方法执行GB/T 8019—2008《燃料胶质含量的测定喷射蒸发法》。本文分析阐述了标准修改的目的、未细胶质和溶剂洗胶质的特点、检测方法等,并提出了待商榷问题。
\r\n《黑龙江科学》,2014年第2期。
', 1, 0, '未知', '论文,《,<车用汽油>的胶质指标解析,》,摘要,', '2014-11-28 08:20:46', '2020-06-02 02:11:01', NULL), +(95, 106, 21, '论文《调和国IV标准车用汽油的抗爆剂研究》', 'admin', '摘要:针对提高油品辛烷值,使调和后汽油的质量指标符合GB17930-2011/XG1-2012国家《车用汽油》IV标准的目的。本文创新了一种由0.365%MMT、60%MTBE、8%TBAC、3.635%二氯甲烷、28%抗爆助剂(m/m)', '', '摘要:针对提高油品辛烷值,使调和后汽油的质量指标符合GB 17930-2011/XG1-2012国家《车用汽油》IV标准的目的。本文创新了一种由0.365% MMT、60% MTBE、8% TBAC、3.635%二氯甲烷、28%抗爆助剂(m/m)复配而成的新型复合抗爆剂。通过对汽油感受性、符合性以及储存性等实验方法,结果表明:该复合抗爆剂对汽油具有良好的感受性,能够显著提高油品的辛烷值,适宜长期存储。得出结论:复合抗爆剂的最适添加比例为2%(m/m),调和后的汽油各项指标均符合国IV标准,能够达到93号无铅汽油的生产规格。
\r\n《化学工程师》,2014年第3期。
', 1, 0, '未知', '论文,《,调和国IV标准车用汽油的抗爆剂研究,', '2014-11-28 08:21:35', '2020-06-02 02:11:01', NULL), +(96, 107, 21, '论文《沼气工程工艺参数的优化模型研究》', 'admin', '《自动化技术与应用》2014.06', '', '
\r\n 《自动化技术与应用》2014.06
\r\n', 1, 0, '未知', '论文,《,沼气工程工艺参数的优化模型研究,', '2014-11-27 08:28:00', '2020-06-02 02:11:01', NULL), +(97, 108, 21, '专利《一种搅拌破壳于一体的发酵反应器》', 'admin', '专利名称 申请号 授 权 时 间 一种搅拌破壳于一体的发酵反应器 (实用新型,王玉鹏) 201320512530.5 2014.1.15', '', '

\r\n  

\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n 专利名称\r\n 申请号\r\n 授 权 时 间
\r\n 一种搅拌破壳于一体的发酵反应器
\r\n (实用新型,王玉鹏)
\r\n 201320512530.5\r\n 2014.1.15
\r\n', 1, 0, '未知', '专利,《,一种搅拌破壳于一体的发酵反应器,', '2014-11-27 08:30:00', '2020-06-02 02:11:01', NULL), +(98, 109, 21, '专利《一种太阳能集热控制系统》', 'admin', '专利名称 申请号 授 权 时 间 一种太阳能集热控制系统 (实用新型,罗向东) 201320573185.6 2014.2.19', '', '\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n 专利名称\r\n 申请号\r\n 授 权 时 间
\r\n 一种太阳能集热控制系统
\r\n (实用新型,罗向东)
\r\n 201320573185.6\r\n 2014.2.19
\r\n', 1, 0, '未知', '专利,《,一种太阳能集热控制系统,》,专利,', '2014-11-27 08:33:00', '2020-06-02 02:11:01', NULL), +(99, 110, 21, '一种厌氧发酵分段控温系统', 'admin', '专利名称 申请号 授 权 时 间 一种厌氧发酵分段控温系统 (实用新型,秦国辉) 201320509483.9 2014.1.8', '', '\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n 专利名称\r\n 申请号\r\n 授 权 时 间
\r\n 一种厌氧发酵分段控温系统
\r\n (实用新型,秦国辉)
\r\n 201320509483.9\r\n 2014.1.8
\r\n', 1, 0, '未知', '一种,厌氧,发酵,分段,控温,系统,专利,名称,', '2014-11-27 08:35:00', '2020-06-02 02:11:01', NULL), +(100, 111, 21, '专利《一种高温厌氧发酵运行参数的无线实时监测系统》', 'admin', '专利名称 申请号 授 权 时 间 一种高温厌氧发酵运行参数的无线实时监测系统(实用新型,徐晓秋) 201320509482.4 2014.1.15', 'images/2020/06/03/3e4cdc94cfc265930e1afde110f70697.jpg', '
专利名称申请号授 权 时 间
一种高温厌氧发酵运行参数的无线实时监测系统(实用新型,徐晓秋)201320509482.42014.1.15
', 1, 0, '未知', '专利,《,专利,名称,申请,号,授,权,时,间,一种,', '2014-11-28 08:35:43', '2020-06-03 09:16:39', NULL), +(101, 112, 7, '黑龙江省能源环境研究院两项课题通过省级鉴定', 'admin', '2014年12月4日,在省能源环境研究院嵩山路15号8楼会议室召开了项目鉴定会,会议对我院承担的《轻质木焦油加氢提质转化运输燃料油调和组分的工艺研究》和《利用炼厂90 # 汽油生产国', '/uploads/allimg/141205/1-141205164U1518-lp.JPG', '        2014年12月4日,在省能源环境研究院嵩山路15号8楼会议室召开了项目鉴定会,会议对我院承担的《轻质木焦油加氢提质转化运输燃料油调和组分的工艺研究》和《利用炼厂90#汽油生产国IV标准93#汽油的复合添加剂应用技术研究》两个项目进行了鉴定。参加会议的有省科技厅成果管理与推广处、条财处、院科研处领导,鉴定委员会由黑龙江大学、哈尔滨工业大学、哈尔滨工程大学、哈尔滨理工大学等单位的7位专家组成。
\r\n
\r\n
\r\n \"\"
\r\n  
\r\n        鉴定委员会听取了两个课题组的工作汇报,审查了相关技术资料,经认真质询、讨论,形成鉴定意见:
\r\n        以木焦油为原料,采用预处理—加氢精制工艺路线,制备出运输燃料油调和组分,中油馏分收率可达75.64%。技术路线及工艺方案合理可行。采用页岩油作为稀释油、萃取剂和补碳剂,脱除原料中的杂质,产品热值提高到40.8 MJ/kg,该工艺具有创新性。研究成果达到国内领先水平。
\r\n        制备了非金属有机物不含MMT成分汽油复合添加剂,由此添加剂调和的90#汽油达到了93#国IV标准的汽油,并且降低汽车尾气有害气体40%。该添加剂经用户试用,具有良好的经济效益和社会效益。
\r\n复合添加剂性能达到国内领先水平。

\r\n
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n        鉴定委员会对两个课题给予高度评价的同时,也提出了中肯的建议,鉴于项目成果有着非常好的市场前景,建议课题组要继续降低成本,加速推广应用。
\r\n        此次鉴定是我院首次把承担的省院所基本应用技术研究专项升级为省级成果。这对提升我院科研档次,鼓舞科技人员士气,都起着积极的作用。
', 1, 0, '未知', '黑龙江省,能源,环境,研究院,两项,课题,通过,', '2014-12-05 08:46:02', '2020-06-02 02:11:01', NULL), +(102, 113, 7, '黑龙江省能源环境研究院科技人员参加CHINA EPA STAR MEETING', 'admin', '2014年12月4日至6日,黑龙江省能源环境研究院春苗秦国辉、唐诗洋,青年科技人员周扬参加了在清华大学举办的CHINA EPA STAR MEETING。加拿大麦吉尔大学、美国明尼苏达大学、英国帝国理工', '/uploads/allimg/141208/1-14120Q35642917-lp.jpg', '        2014年12月4日至6日,黑龙江省能源环境研究院春苗秦国辉、唐诗洋,青年科技人员周扬参加了在清华大学举办的CHINA EPA STAR MEETING。加拿大麦吉尔大学、美国明尼苏达大学、英国帝国理工学院、美国威斯康星大学、清华大学、中国科学院等国内外知名院校、研究机构参加了本次大会,大会为全英文形式。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n        会议围绕监测农村室内排放、改善空气质量与大气环境、提高人民身体健康等主题开展交流与讨论,与会专家学者共听取专题报告15篇,内容涵盖寒区农村室内排放监测、农村无烟锅炉燃烧器技术、农村室内家庭PM2.5浓度与个体关系、农村新型清洁加热燃烧锅炉燃烧技术等方面。清华大学杨旭东教授作了题为“Intervention using clean heating and cooking stoves:update and plan”的学术报告。此项目中试工作已经在我院完成,该项目将在我省进行推广应用。
\r\n
\r\n \"\" 
\r\n  
\r\n        能源院选派青年科技人员参加国际学术会议,开阔视野,拓宽思路,及时掌握相关领域的研究前沿和热点,进一步提高我院科技人员英语水平,学习知名学者研究经验,对促进我院创新团队发展,提升我院科研水平具有重要意义。
\r\n', 1, 0, '未知', '黑龙江省,能源,环境,研究院,科技人员,参加,', '2014-12-08 05:55:28', '2020-06-02 02:11:01', NULL), +(103, 114, 7, '清华大学杨旭东博士到省能源环境研究院洽谈合作', 'admin', '12月1日,清华大学建筑环境与设备研究所副所长、清华大学百人计划引进教授、教育部长江学者特聘教授、美国麻省理工学院(MIT)博士、美国迈阿密大学终身教授杨旭东一行两人,携最', '/uploads/allimg/141208/1-14120Q42122206-lp.jpg', '        12月1日,清华大学建筑环境与设备研究所副所长、清华大学百人计划引进教授、教育部长江学者特聘教授、美国麻省理工学院(MIT)博士、美国迈阿密大学终身教授杨旭东一行两人,携最新科研成果从北京抵达哈尔滨,杨旭东教授此行,旨在为进一步巩固清华大学与省能源环境研究院的合作成果,扩大校院合作领域,共同开拓合作商机。
\r\n        杨旭东博士一行首先来到能源院位于嵩山路的办公地点,与能源院科研人员进行了座谈,在现有合作基础上一同商定了深入合作方案,并希望借助能源院在新能源及生物质能源领域的优势,将先进的秸秆处理成果付诸实践,还龙江一片蓝天。
\r\n        下午,杨旭东教授一行在徐晓秋院长陪同下,来到省科学院,与潘忠院长、郭春景院长、王钢副院长及科研处王阳处长,就现阶段与能源院开展合作情况进行了座谈。

\r\n
\r\n \"\"
\r\n
\r\n        潘忠院长代表省科学院对杨教授的到来表示欢迎。随后,杨教授介绍了项目情况。对于新的项目,潘院长和郭院长都十分感兴趣,分别提出了一些问题和建议,杨教授一一进行了解答。
\r\n最后,潘院长再次感谢杨教授能够不辞辛劳,为黑龙江的百姓做实事,做好事。同时希望能源院科研人员要不断提高自身的科研水平,成为杨教授在黑龙江放心的合作伙伴。

\r\n
\r\n \"\"
\r\n
\r\n        2日上午,杨教授一行参观了能源院位于江北的实验室,并在会议室与能源院的科研人员进行了深入交流。下午,杨教授一行在王阳处长和徐晓秋院长的陪同下,驱车来到市农科院位于万宝镇的示范基地进行实地考察,并与省、市政府农村能源办的有关领导进行了座谈,希望通过多方努力,使项目得到进一步推广。
\r\n 
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '清华大学,杨旭东,杨,旭东,博士,到,省,能源,', '2014-12-08 06:20:39', '2020-06-02 02:11:01', NULL), +(104, 115, 20, '黑龙江省科学技术发明一等奖', 'admin', '', '/kjfh/uploads/allimg/130707/1-130FH25Z3220-lp.jpg', '
\r\n \"\"
\r\n', 1, 0, '未知', '科学技术,发明,一等奖,', '2017-05-12 09:39:00', '2020-06-02 02:11:01', NULL), +(105, 116, 20, '中国石油与化工协会科技进步二等奖', 'admin', '', '/kjfh/uploads/allimg/130707/1-130FH3000BQ-lp.jpg', '
\r\n \"\"
\r\n', 1, 0, '未知', '科技,进步,二等奖,', '2017-05-12 09:29:11', '2020-06-02 02:11:01', NULL), +(106, 117, 7, '黑龙江省能源环境研究院三项课题顺利通过鉴定', 'admin', '2014年12月11日,在省能源环境研究院召开了由能源院农业生物环境与能源工程创新团队承担的《秸秆高温厌氧发酵过程关键技术参数研究》、《沼液高效会用及综合处理工艺研究》和《', '/uploads/allimg/141212/1-141212154255N3-lp.jpg', '        2014年12月11日,在省能源环境研究院召开了由能源院农业生物环境与能源工程创新团队承担的《秸秆高温厌氧发酵过程关键技术参数研究》、《沼液高效会用及综合处理工艺研究》和《沼液回流对牛粪厌氧发酵沼气产量的影响及机理研究》项目鉴定会。鉴定委员会由东北农业大学、东北林业大学、黑龙江省农业科学院、哈尔滨理工大学、哈尔滨商业大学等单位的7位专家组成,会议由院科研处王阳处长主持。
\r\n 
\r\n
\r\n \"\"
\r\n 
\r\n        项目组首先对“秸秆高温厌氧发酵过程关键技术参数研究”项目进行了汇报,得出了秸秆预处理的最佳条件,以此为基础,采用先进的实验方法,确定了秸秆高温厌氧发酵工艺;然后,项目组对“沼液高效会用及综合处理工艺研究”项目进行了汇报,总结了当前大型沼气工程沼液处理的现状,并根据沼液的理化性质,采用回流工艺、混凝工艺、厌氧往复折流工艺相结合,研发出沼液综合处理的全套工艺,得到了专家的高度认可;最后,项目组对“沼液回流对牛粪厌氧发酵沼气产量的影响及机理研究”项目进行了汇报,确定了沼液的最佳回流比率,以及采用PCR-DGGE技术进行了反应器中微生物菌群的变化趋势分析,为团队进行沼气工程领域的基础研究打下了基础。
\r\n        鉴定委员会听取了项目组的总结报告与技术报告,审查了相关技术资料,经认真质询、讨论,对团队的研究方向和当前的工作给予了较高的评价,对项目的意义给予高度肯定,经审议一致同意三个项目研究成果均达到了国内领先水平。 

\r\n', 1, 0, '未知', '黑龙江省,能源,环境,研究院,三项,课题,顺利,', '2014-12-12 07:42:13', '2020-06-02 02:11:01', NULL), +(107, 118, 7, '黑龙江省能源环境研究院两项课题通过鉴定', 'admin', '2014年12月16日,黑龙江省科学院科研基金项目《寒地沼气发电机余热回收仿真优化研究》与院青年基金项目《厌氧发酵反应器温度监控及补偿系统的研究》鉴定会在省能源环境研究院召', '', '        2014年12月16日,黑龙江省科学院科研基金项目《寒地沼气发电机余热回收仿真优化研究》与院青年基金项目《厌氧发酵反应器温度监控及补偿系统的研究》鉴定会在省能源环境研究院召开。鉴定委员会由哈尔滨理工大学周浩然教授、哈尔滨工程大学蔡绍宾教授等7位专家组成,会议由院科研处隋月梅副处长主持。
\r\n        鉴定委员会听取了项目组的汇报后,认真审查了相关材料,对项目组的工作给予了高度肯定,两个项目研究成果均达到了国内先进水平。
', 1, 0, '未知', '黑龙江省,能源,环境,研究院,两项,课题,2014年,', '2014-12-16 01:37:00', '2020-06-02 02:11:01', NULL), +(108, 119, 7, '热烈祝贺我院选手在省科学院TRIZ大赛中获得二等奖', 'admin', '2014年12月17日,我院有两组TRIZ作品参加了黑龙江省科学院第三届TRIZ理论创新大赛,经过作品展示、答辩及评审委员会的评审等环节,我院参赛选手不负众望,取得了优异的成绩,其中参', '/uploads/allimg/141222/1-14122209493E19-lp.jpg', '        2014年12月17日,我院有两组TRIZ作品参加了黑龙江省科学院第三届TRIZ理论创新大赛,经过作品展示、答辩及评审委员会的评审等环节,我院参赛选手不负众望,取得了优异的成绩,其中参赛作品“随动性机械密封装置设计”获得二等奖,参赛作品“新型免烧结快速挂膜生物填料的制备及性能研究”也得到与会评委一致好评。
\r\n        经过此次TRIZ大赛,增强了选手们的团队合作意识,锻炼了个人创新能力,坚信我院今后的科研创新工作一定会再上新台阶。

\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '热烈,祝贺,我院,选手,在,省,科学院,TRIZ,大,', '2014-12-17 01:50:00', '2020-06-02 02:11:01', NULL); +INSERT INTO `articles` (`id`, `oldid`, `category_id`, `title`, `writer`, `description`, `cover`, `content`, `status`, `sort`, `source`, `keywords`, `created_at`, `updated_at`, `deleted_at`) VALUES +(109, 120, 7, '我院三项省科学院青年科学基金项目通过验收', 'admin', '2014年12月22日,黑龙江省能源环境研究院召开了省科学院青年创新基金资助项目《浮选技术在油砂分离中的应用研究》、《木醋液成份分析及对肿瘤细胞杀伤作用初探》和《微米稀土粉', '/uploads/allimg/141225/1-14122510251V35-lp.jpg', '        2014年12月22日,黑龙江省能源环境研究院召开了省科学院青年创新基金资助项目《浮选技术在油砂分离中的应用研究》、《木醋液成份分析及对肿瘤细胞杀伤作用初探》和《微米稀土粉体表面改性技术的研究》的验收会。会议由院科研处马雪松同志主持,验收委员会由黑龙江大学袁福龙教授、哈尔滨工程大学王革教授等5位专家组成。
\r\n
\r\n \"\"
\r\n        验收委员会听取了三个项目组的总结汇报后,认真审查了相关技术材料,对各项目组的工作给予了充分肯定,认为课题技术路线可行,工作量饱满,达到了锻炼年轻人的目的,经审议一致同意三个课题通过验收。', 1, 0, '未知', '我院,三项省,科学院,青年科学,基金,项目,', '2014-12-25 02:23:45', '2020-06-02 02:11:01', NULL), +(110, 121, 7, '黑龙江省能源环境研究院召开2014年全体职工大会', 'admin', '2014年12月19日上午,省能源环境研究院召开了全体职工大会,领导班子及全体职工参加了会议,会议由工会主席李福裿同志主持。 会上,能源院院长徐晓秋同志做能源院2014年工作总结报', '/uploads/allimg/150115/1-1501151A33E11.JPG', '
\r\n         2014年12月19日上午,省能源环境研究院召开了全体职工大会,领导班子及全体职工参加了会议,会议由工会主席李福裿同志主持。
\r\n  
\r\n
\r\n \"\"
\r\n  
\r\n
\r\n
\r\n         会上,能源院院长徐晓秋同志做能源院2014年工作总结报告,报告从科研成绩、团队建设、对外合作、强化党建、行政管理等面充分肯定了我院全年工作,同时指出2015年,能源院全体职工要竖立新的目标,同心协力,扎实工作,为能源院的腾飞跨越不懈努力。报告经全体职工举手表决全票通过。
\r\n
\r\n         随后,财务科长樊磊同志就新财务制度运行以来的相关情况及效果进行了总结汇报。大会还通过民主、公开表决的方式,全票通过了能源院2015年计划开展的两项工作。
\r\n
\r\n         最后,徐晓秋院长对2015年的工作做出了展望,并希望能源院全体职工能够不断总结成功经验,共同努力进取,进一步统一思想,提高认识,厘清思路,在新的一年里取得更加出色的成绩。
\r\n', 1, 0, '未知', '黑龙江省,能源,环境,研究院,召开,2014年,全体,', '2014-12-29 08:02:00', '2020-06-02 02:11:01', NULL), +(111, 122, 9, '页岩油不是“页岩油”', 'admin', '金银岛财经 石油价格高位暴跌,评论纷纷,从评论的字里行间经常出现打压美国页岩油发展等,好多人不知道,这里所指的页岩油不是页岩油,而是致密油。美国能源信息署(EIA)将页', '/uploads/allimg/150121/1-150121095P2X7.JPG', '
\r\n 金银岛财经
\r\n        石油价格高位暴跌,评论纷纷,从评论的字里行间经常出现打压美国页岩油发展等,好多人不知道,这里所指的“页岩油”不是页岩油,而是致密油。美国能源信息署(EIA)将页岩油(shale oil)和致密油(tight oil)作为同样的概念使用,但同时也解释说,美国油气界通常所谓页岩油,其实是指致密油。致密油也是来自页岩,开采方法与页岩气相同,由于页岩气革命的影响太过于轰动,干脆称之为“页岩革命”,在中国把致密油和页岩气合并简称为页岩油气。因此,阅读页岩油之类的资料时,要分辨清楚常规石油、致密油和页岩油之间是什么关系。
\r\n        从液态烃金字塔来看,常规石油较非常规石油少得多。而非常规石油中富含干酪根的油页岩储量最大。
\r\n
\r\n \"说明:
\r\n        非常规石油是指储集层中的致密油、重质原油或超重质原油以及在烃源岩中的油页岩和页岩油。按干酪根熟化的程度,烃源岩又分为未成熟的烃源岩(即油页岩)和成熟的烃源岩(即页岩油)。烃源岩(source rock)是富含有机质的沉积物,可以沉积在各种环境,包括深水、湖泊,它能够产生或已经产生可运移的烃类,所以烃源岩也称为“生油岩”。在学术上,页岩油是指油页岩(oil shale)制取的重质原油。油页岩在烃源岩中是未经运移的未成熟的烃源岩,或称“干酪根页岩(kerogen shale)”。它是一种富含有机质、具有微细层理、可以燃烧的细粒沉积岩。油页岩中绝大部分有机质是不溶于普通有机溶剂的成油物质,俗称“油母”。因此,又称为“油母页岩”。油页岩的含油量一般为4~20%,有的高达30%,可以直接提炼石油。从油页岩炼制页岩油必须经过人工加热加氢,通过干馏提炼出类似于原油的页岩油,也称为人造石油。页岩油主要采用地上干馏法生产,生产方式可分为内部燃烧法、热循环固体法、隔壁传热法、外部注入热气法、反应流体法等,以内部燃烧法为主。
\r\n        由于不同的油页岩有不同的化学组分,因而干酪根含量差别很大,所采取的提取技术也随之不同,因此,定义油页岩储量很困难。页岩油生产主要在中国、巴西、俄罗斯和爱沙尼亚。中国是页岩油生产大国,而不是美国。中国在20世纪20年代已经建立了油页岩工业。随后生产衰退,到21世纪初才有所回升。已有几家公司生产页岩油和用于发电。2005年后,中国成为世界上最大的页岩油生产国之一。2011年中国约生产65万吨页岩油。许多生产采用抚顺干馏法。2006年底,抚顺矿业集团拥有世界上最多的油页岩生产装置。
\r\n        在烃源岩中,成熟的烃源岩即页岩油,如果页岩油运移出烃源岩,进入有盖层的储层,就成为常规石油;如果页岩油运移到致密地层滞留,被称为致密油。致密油中的原油品质与常规油藏相同,都属于轻质原油,而从油页岩制取的页岩油是重质油,其区别是两者API重度和黏度不同以及提取的方式不同。
\r\n        在石油价格大战中提及的页岩油是指致密油。根据美国能源情报署资助的先进资源国际公司于2013年的评价,俄罗斯致密油技术可采资源量最多,居世界第一,其次为美国和中国,三个国家的致密油技术可采资源量之和占世界总量的43.6%。目前,美国对页岩气的勘探开发已进入快速发展阶段,同时也带动了页岩地层内致密油的开发。美国是现今开采致密油最成功的国家,致密油生产都靠近页岩气产区。
\r\n
\r\n \"说明:
\r\n        梳理一下本文,看中国。从油页岩制取页岩油最大的生产国是中国,而不是美国。美国页岩气开采成功带动了致密油生产,成为世界上最大的致密油生产国,而中国致密油的技术可采资源量居世界第三位,国人很少提起此事,其原因是页岩气开采尚未成功。如果我国页岩气开采一旦成功,致密油开采自然而然提上日程。', 1, 0, '未知', '页岩,油,不是,“,页岩油,”,金银,岛,财经,', '2015-01-21 02:29:23', '2020-06-02 02:11:01', NULL), +(112, 123, 9, '2015年全球将重新进入廉价石油时代', 'admin', '华夏时报 2014年全球大宗商品市场最瞩目的事件是石油暴跌的黑天鹅事件引发了俄罗斯卢布危机。2014年7月初,国际原油价格还在100美元之上,12月25日,纽约原油价格已经跌到56美元,短', '', '
\r\n 华夏时报
\r\n        2014年全球大宗商品市场最瞩目的事件是石油暴跌的“黑天鹅事件”引发了俄罗斯卢布危机。2014年7月初,国际原油价格还在100美元之上,12月25日,纽约原油价格已经跌到56美元,短短半年之内,国际原油价格跌去一半。蹊跷的是,石油输出国组织欧佩克居然坐视油价暴跌拒绝减产自救。欧佩克为何推动国际油价暴跌呢?《华夏时报》记者采访了知名能源专家中海油能源经济研究院首席能源分析师陈卫东
\r\n        在陈卫东看来,欧佩克推动国际油价暴跌有两个目的:一方面是因为自身生产成本很低,要挤掉比它成本高的一些产能,争夺市场份额;另一个重要原因是要延缓欧洲对可再生能源储能技术的投资,新能源储能电池技术一旦获得突破,化石能源的命运将走向终结。“石油价格的这轮下降时间会很长,它要充分挤出竞争对手,价格再回来,生产者也舒服,消费者也舒服的同时,还要挤压可再生能源,尤其是储能技术的投资,延缓替代品的出现,就是延长石油天然气的寿命,这是石油输出国最大的利益所在。”陈卫东说。他判断2015年全球将重新进入廉价石油的时代。
\r\n        一、全球能源的中国因素
\r\n        40年前的一场石油禁运把西方经济搞得一塌糊涂,这就是发生在上世纪七十年代的石油危机。从此,世界各国都把石油当做最重要的战略资源。陈卫东说,大概从那时开始,人类地缘政治格局就围绕争夺石油等资源来布局;一个真实的例子是,美国在西太平洋仅仅部署了一个第七舰队,而在中东就部署了第三和第五舰队,目标就是要控制石油。
\r\n现在,以石油为首的全球大宗商品市场的格局正在发生变化,石油从卖方市场变成了买方市场,进入买方市场,大家的目标开始从争夺资源转向争夺市场,中国需求减少也是国际石油暴跌的重要推手。
\r\n“购买力就是话语权,而不是有资源就有话语权,我们还没有意识到这个话语权已经掌握在自己手中。”陈卫东说,“中国是这次石油降价的受益者之一,过去5年中国需求的增长占全球能源增长的一半,而过去10年全球能源供给增长部分,美国占了一半,美国从全球最大能源进口国变成了出口国;利比亚还增加了输出,对伊朗的制裁放松了,伊拉克出口也在增加,这些因素一叠加,石油价格能不跌吗?”
\r\n        陈卫东告诉记者,中国和俄罗斯石油天然气大单为何十几年一直签不下来,现在,俄罗斯追着中国签订石油天然气大单,这不仅是因为欧美制裁俄罗斯要寻找新的出口替代国,国际油价暴跌也不存在阴谋论,主要的原因是全球能源格局发生了改变,产能过剩,金融去杠杆,大家都争夺市场,而中国是全球能源需求增长最快的市场。“我们的能源战略思维还是争夺资源,而不是好好利用我们的市场。”陈卫东说,“过去,我们干了很多傻事,在煤炭时代,英国是第一大能源消费国,它同时也是世界领导者,在石油时代,美国是第一大能源消费国,它也是世界领导者;今天,中国是第一大能源消费国,我们把全球煤炭消费拉起来了。”
\r\n        “中国的煤炭消费还会继续往上走,一个是3美元,一个是12美元,这就是能源消费的现实主义和环境保护的理想主义,这可是4倍的差别。”在陈卫东看来,这不是单个能源的问题,能源之间可以相互替代,它就变成一个能源价格体系的问题;两百年前煤炭时代伦敦的“雾都”又在中国出现。“电价不市场化,哪有其他能源的市场化?”陈卫东说,中国需要以电力为基础重构中国能源体系,无论是煤炭、水能还是核能,它都要转化成电,送到最终消费者;能源回归商品的核心是电力价格的市场改革,而不是解决单个能源问题。
\r\n        二、能源革命的两条道路
\r\n        过去30多年,三次大的石油价格起伏都是自身的供求原因。这一次欧佩克已经看到可替代品的出现。陈卫东告诉记者,世界上同时进行着两场能源革命:一个是以美国页岩气为代表,把原来开采不出来、不作为能源的贫矿开出来了,美国页岩气革命是在延长石油和天然气的寿命。第二个是德国和北欧等国家进行着另一场可再生能源革命,目标是要弃核、弃化石。从木材时代到煤炭时代,从煤炭时代到石油时代,从石油时代到多元化的天然气时代,全球能源消费趋势是从高碳走向低碳,从低浓度能源向高浓度能源转型。
\r\n        让欧佩克紧张的是,可再生能源领域已经清晰地看到储能技术迭代的摩尔指数。最近媒体报道,以色列出现了锂空电池技术,储电量比目前的锂镁电池增加了8倍;而西班牙最近出现的石墨烯电池技术,从锂空到石墨烯又增加了5倍。下一代技术至少是5的立方,也就是锂镁电池技术的125倍。同样是1.5吨电池到时候就缩小到100公斤。如今,汽车一箱油也是七八十公斤,加上变速箱、动力系统起码也有四五百公斤;而电动汽车只需要电机,如果电池能做到100公斤,整个动力系统也只有四五百公斤。
\r\n        石油之所以成为战略资源,因为它在交通运输领域是不可替代的。“电动汽车为何不能普及?因为锂镁电池一公斤储电量200瓦时,以汽车开300到500公里计算,电池自重就要1.5吨,已经没有什么富余荷载,这个汽车没什么用。”陈卫东说,“储电技术发展就像电脑储存和记忆芯片,90年代一个几百兆的硬盘有几十公斤,现在64G存储在手机上就实现了,因为人们发现了新的储存机理。”储能技术的突破是下一个能源时代的关键。无论风能还是太阳能这些离散的能源都可以聚沙成塔,集腋成裘,转化成高密度的电能,聚集变得简单,使用起来也简单。这种高浓度的电池既可以供应全家的能源消费,也可以装在汽车上作为动力。
\r\n        陈卫东告诉记者,欧佩克坐视国际原油暴跌背后就是要打压欧洲对储能电池技术上的投资,延缓化石能源的寿命,2015年全球将重新迎来廉价石油的时代。
', 1, 0, '未知', '2015年,全球,将,重新,进入,廉价,石油,时代,', '2015-01-21 02:48:02', '2020-06-02 02:11:01', NULL), +(113, 124, 9, '煤化工与石油化工“嫁接”新路径', 'admin', '中国科学报 在煤价下行和天然气荒愈演愈烈的背景下,发展现代煤化工已是大势所趋。现代煤化工包括煤制油、煤制天然气、煤制甲醇、煤制烯烃等。截至目前,虽然我国煤化工仍处于', '', '
\r\n 中国科学报
\r\n        在煤价下行和天然气荒愈演愈烈的背景下,发展现代煤化工已是大势所趋。现代煤化工包括煤制油、煤制天然气、煤制甲醇、煤制烯烃等。截至目前,虽然我国煤化工仍处于大规模示范阶段,但已是世界上最大的煤化工生产国,煤制合成氨、煤制甲醇等产量已位居世界第一位。“十二五”期间,国内煤化工项目建设进入高峰期。近日,《中国科学报》记者从中国石油化工集团公司(简称中石化)获悉,继甲醇制烯烃(MTO)之后,该公司在“煤化”技术领域又取得一项重大进展和突破:成功开发出甲苯甲醇甲基化制二甲苯(MTX)技术并加以应用。MTX技术利用甲苯为原料、以甲醇为甲基化试剂,可实现最大化增产二甲苯。
\r\n        石油化工主要有两大分支:一是烯烃,一是芳烃。芳烃包括苯、甲苯、二甲苯等,是重要的基础化工原料。MTX技术将石油化工与煤化工技术有机结合,不仅为二甲苯等芳烃产品生产装置的增产扩能、芳烃生产过程中原料和产品的结构调整提供了技术支撑,而且对实现芳烃技术生产原料的多元化、推动芳烃生产的技术升级和转型发展具有重要战略意义。据中石化相关专家透露,在MTX技术实现的过程中,有两个关键性问题需要解决,即高效和稳定性。鉴于该技术的突出优势,从20世纪70年代起,国内外多家机构即开展了甲苯甲基化技术的研发工作。但是,由于催化剂稳定性差、甲醇利用率低等问题,一直没能取得实质性突破。
\r\n        在我国能源结构“缺油、富煤、少气”、国际原油价格高企、“煤化”产业蓄势待发的背景之下,中石化提出了“积极发展煤化工”的战略规划和部署,并于2000年立项开展甲苯甲基化技术的研究工作。
\r\n针对该技术中催化剂稳定性这一关键技术难关,项目组依托“新结构高性能多孔催化材料创制的基础研究(“973”项目)”项目平台,形成了对适用于甲苯甲基化分子筛材料及催化剂认识的重大突破,开发了一种高结构稳定性、具有良好烷基化反应活性及较高容碳能力的分子筛及催化剂。同时,为提高技术开发的效率,中石化有效整合催化剂开发、工艺开发、工程设计和工业生产等多学科全方位的技术力量,经过十多年的持续攻关,先后完成了小试研究、工业侧线试验和20万吨/年工艺包的设计工作,成功开发了高性能的甲苯甲醇甲基化催化剂、以甲苯作为段间冷激物料的多床层反应工艺、含油废水处理工艺、热联合及低温热利用等工艺和技术,形成了包括催化剂制备、关键设备、反应工艺等多项创新成果,申请了涵盖催化材料、催化剂和工艺技术在内的国内外专利11件,形成了具有自主知识产权的MTX成套工艺技术,具备了在国际上率先实现甲苯甲醇甲基化技术工业化的技术条件。
\r\n        为加快推进MTX技术的工业化,2012年9月,中石化旗下的扬子石化就此开展了工业试验。在没有工业运行经验可借鉴的困难情况下,扬子石化20万吨/年MTX甲苯甲基化装置一次投料开车成功并实现满负荷运转。反应系统操作稳定,反应温升与冷激控制系统符合预期,换热网络运行平稳,工程设计满足要求,甲醇转化率100%,二甲苯选择性大于80%,产出高质量的二甲苯,率先实现了甲醇原料直接引入芳烃联合装置,实现了世界首套甲苯甲醇甲基化工业装置的商业化运行,为芳烃的“甲基管理”提供了更加直接和有效的手段。
\r\n        中石化专家表示,与传统石油化工结合,是今后煤化工发展的方向之一。借助石油化工技术,煤化工的产物—甲醇可以实现有效增值。目前,中石化正在MTX的基础上,研究开发新的技术,使得甲醇的利用和芳烃的生产更加多元和有效。

\r\n', 1, 0, '未知', '煤化工,与,石油化工,“,嫁接,”,新路径,新,', '2015-01-21 02:48:19', '2020-06-02 02:11:01', NULL), +(114, 125, 9, '煤化工重新开闸 环境约束待考', 'admin', '21世纪经济报道 核心提示:面对中国重启的煤化工大幕,水资源、环境、能耗以及将要出台的碳税,成为发展这一产业必须克服的风险,国家高层对煤化工产业的态度也不无谨慎,截至', '', '
\r\n 21世纪经济报道
\r\n        核心提示:面对中国重启的煤化工大幕,水资源、环境、能耗以及将要出台的碳税,成为发展这一产业必须克服的风险,国家高层对煤化工产业的态度也不无谨慎,截至目前,国家发改委共计批复了15个煤炭深加工示范工程。
\r\n        煤炭的黄金十年戛然而止,在中国西部,一场由电力企业主导的煤炭变革正拉开帷幕。毛乌素沙漠东南缘的陕西榆林,华电百万吨级煤制芳烃项目蓄势待发,并计划在未来10年投资千亿元在新疆、内蒙古建设煤、电、化一体化基地;华能规划了至少7个煤化工项目,产品涉及煤制天然气、烯烃、甲醇;最早布局煤化工产业的大唐已投入千亿,其管理层将煤化工定义为“产业结构调整,成败在此一举”;国电、中电投也纷纷在中国西部布局煤化工产业链。在陆续控制了数量庞大的煤炭资源后,电力企业不再满足于降低发电成本抑或贩运煤炭这种较低层次的利用方式,而煤价的迅速下跌则加速了这一进程。
\r\n        随着煤炭深加工领域掀起的浪潮,中国的煤化工产业重新开闸。今年一季末,西部地区5个煤制天然气、4个煤烯烃和1个煤制油项目获得了国家发改委的“路条”,总投资达2000-3000亿元。据统计,全国范围内共上报煤化工项目104个,投资规模高达2万亿元。在国家及地方规划中,至少包括陕西榆林,宁夏宁东,内蒙古鄂尔多斯、赤峰,新疆准东、吐哈、伊犁、库拜等地意欲建立大型煤化工基地。然而,面对中国重启的煤化工大幕,水资源、环境、能耗以及将要出台的碳税,成为发展这一产业必须克服的风险,国家高层对煤化工产业的态度也不无谨慎,截至目前,国家发改委共计批复了15个煤炭深加工示范工程。
\r\n        一、电企涌进煤化工
\r\n        巨大的市场需求及不菲的利润令电企欲罢不能。2013年8月,陕西华电榆横煤化工有限公司总经理梁彦鸿表示,距离华电榆横万吨级煤制芳烃中试技术通过国家能源局验收已过去5月有余,但该项目扩产至百万吨产量还未得到批复。自2003年电力体制改革落定,华电的主业即确立为发电、煤炭两大板块,但华电煤业并不满足于降低发电成本甚至贩运煤炭。为了在陕西榆林转型煤化工产业,华电集团下属华电煤业计划投资285亿元建设百万吨煤制芳烃项目。芳烃主要指苯、甲苯和对二甲苯,是一种重要的基础化工原料,利用它可以生产服装、保温材料、橡胶、日用品等,几乎渗透了人类衣食住行的各个方面。巨大的市场需求及不菲的利润令电企欲罢不能。近年来,我国芳烃产品的进口量接近需求量的一半,以对二甲苯为例,2012年国内产量775万吨,进口量628.6万吨,表观消费量1384万吨,自给率仅有56%,进口主要来自韩国、日本、印尼。紧俏的市场行情促使芳烃的销售价格达到万元/吨,其生产成本约7000元/吨,较几十元每吨的售煤利润高出不少。更为重要的是,煤制芳烃可以替代石油。生产一吨芳烃需要耗费标煤不到6吨,但石油制芳烃需要消耗原油8-12吨,目前,国内石油路线生产的芳烃约占芳烃总产量的97%,而我国的石油对外依赖率达到60%。梁彦鸿告诉本报记者:“一个百万吨级的煤制芳烃相当于一个千万吨级的炼油厂的产能。”通过多年的兼并收购,目前电力企业坐拥数量庞大的煤炭资源,为其发展煤炭深加工领域奠定了基础。以华电榆林为例,在控、参股小纪汗、可可盖、隆德和榆阳煤矿后,2015年华电在陕西的煤炭产能可达2800万吨/年。
\r\n        二、路线选择考量
\r\n        选择错误路线,转型将面临进退两难的窘地。国家能源局组织编写的一份西部地区煤电化研究报告明确支持煤制天然气、煤制烯烃及煤制乙二醇;对于煤制油产业的发展,持有“适时”态度;而严重过剩的煤制二甲醚则采取限制政策。按照国家能源局的表述,随着人民生活水平的提高及西气东输、陕京线等天然气管线投入使用,城市燃气的需求量日益增长。据预测,2015年、2020年国内天然气消费量分别为2600亿立方米和3500亿立方米,而同期国内天然气生产量分别为1500亿立方米和2200亿立方米,市场缺口分别为1150亿立方米和1300亿立方米,即使考虑已建和拟建的LNG设施及陆上天然气通道项目,仍存在500-800亿立方米的缺口。目前上马最多的煤制甲醇、二甲醚项目的前景不容乐观。目前,我国甲醇、二甲醚市场早已出现严重的产能过剩,推广使用甲醇汽油是一个庞大的系统工程,在部分省市制定了《车用燃料甲醇》和《车用甲醇汽油M85》后,至今尚未出台配套措施,由于渗透至人们生活的方方面面,煤制烯烃、芳烃项目路线大有可为。据预测,未来十年,我国聚乙烯需求将保持稳定增长,2015年供需缺口为450万吨,2020年将扩大到730万吨;聚丙烯在上述两个年度的供需缺口达到240万吨和540万吨;乙二醇在2015年的供需缺口达到600万吨,但仍需警惕中东地区即将投产的几套大型乙二醇装置,其目标市场主要是中国,并具有原料成本低的竞争优势。华电煤业集团有限公司董事长丁焕德告诉本报记者:“华电选择煤制芳烃路线,是经过深思熟虑的。”
\r\n        三、面临环境约束挑战
\r\n        煤炭资源和水资源呈逆向分布。电企转型煤化工的路途似乎比预想的遥远,2013年3月重启的大门只是透出一缕阳光,截至目前,国家发改委批复的煤炭深加工项目仅有15个示范工程,国家高层对煤化工的态度是安全、谨慎发展煤化工。发展煤化工将耗费大量的水资源并有可能污染环境,而其能源转化效率也存在提高的空间,在 “两会”上,以煤企为代表的政协委员曾呼吁限制电力企业发展新型煤化工。中国中煤能源集团公司原总经理经天亮在提案中表示,新型煤化工对煤炭资源和水资源有较高要求,同时受生态环境、基础设施、相关产业发展的制约,绝不能遍地开花,可以作为国家战略储备,还不宜商业化。水资源是煤化工产业发展的重要制约因素,由于地理、气候等客观因素,我国水资源分布严重不均,煤炭资源和水资源呈逆向分布。据统计,目前我国煤制烯烃耗水量为32吨/万元产值,煤制乙二醇为45吨/万元产值,煤制油耗水量为0.214吨/吉焦,煤制天然气为0.229吨/吉焦。神华鄂尔多斯煤制油项目曾遭到环保组织绿色和平发文抵制。水利部水科院总工程师贾仰文表示:“能源化工等耗水量大的规划,应适当加入‘水评’”。
\r\n        煤炭深加工也将不可避免地释放二氧化碳,如煤制天然气的二氧化碳排放量约为0.137吨/吉焦,煤制烯烃为12吨/万元产值。我国近年来二氧化碳排放量的快速增长将使我国不得不面临越来越大的国际压力。煤制燃料的能源利用率同样存在提升的空间,据统计,煤制油的能量利用率为59%,煤制天然气为47%,煤制二甲醚仅为40%。即使能够解决上述问题,即将实行的碳税亦将蚕食煤化工产业的利润率,据财政部“中国碳税税制框架设计”,在碳税征收初期的税率为10元/吨二氧化碳,以后逐渐上升至70元/吨,碳税制度或将对我国的煤化工行业带来深刻影响。
\r\n        四、难以逾越的煤化工之路?
\r\n        日韩是化工产业大国,中国可借鉴他国的成功经验。尽管煤化工未必是最佳路径,但却是中国发展难以逾越的阶段。世界自然基金会(瑞士)全球淡水项目主任李利锋告诉本报记者:“目前中国还没有跨越重化工阶段的有效途径。”清华大学化工系教授魏飞对本报记者表达了同样的观点:“这是一种现实的抉择。”在电力企业看来,煤化工并非人们想象的可以完全摒弃。煤炭行业资深分析师李廷认为,中国现有以煤炭为主的能源结构在短期内很难发生改变。“如能做到水资源循环高效利用、执行最严格的环保制度,认真地选择产品路线,煤化工不仅可以降低我国的石油对外依存度,还可带来西部地区的持续发展。” 丁焕德告诉本报记者。据悉,华电榆横煤化工万吨级项目已通过国家能源局验收,其用水来自榆林距厂区17公里、年可供水1.22亿立方米的王乾堵,该水库水源来自黄河支流,通过水权置换取得。据称其“工业三废”也进行了通盘考虑。梁彦鸿对本报记者表示:“废水在进行处理后重新回流至厂区利用,废渣则被收集至甲醇厂前端,再次作为生产甲醇的原料,废气在经过处理后,可达标排放。”
\r\n        未来煤化工的重要基地新疆则利用众多的盆地构造封存生产排放的二氧化碳,据悉,新疆拟建准噶尔盆地、吐哈盆地、伊犁、塔里木盆地等7个二氧化碳封存地,总容量达到451亿吨。不过,仍有业内人士担忧一窝蜂的煤化工爆发式增长,丁焕德告诉本报记者:“只有在通盘考虑水资源、环境承载力,以及下游产品的长期市场需求后,才可适度发展煤化工。”
\r\n实际上,主管单位国家能源局已确定了煤化工产业发展的原则和思路:以市场需求确定建设规模、按照煤化工产业用水量占基地可供水量的一半比例规划、以及符合国家相关产业政策和运输要求。
', 1, 0, '未知', '煤化工,重新,开闸,环境,约束,待考,21世纪,', '2015-01-21 02:53:22', '2020-06-02 02:11:01', NULL), +(115, 126, 9, '现代煤化工:心急难吃热豆腐', 'admin', '中国化工报 近十年来,我国现代煤化工在争议声中从起步磕磕绊绊走到今天,就像时下的天气一样由暖转寒不断降温。从当初的争先恐后,到如今的观望退出,现代煤化工似乎走到了发', '', '
\r\n 中国化工报
\r\n        近十年来,我国现代煤化工在争议声中从起步磕磕绊绊走到今天,就像时下的天气一样由暖转寒不断降温。从当初的争先恐后,到如今的观望退出,现代煤化工似乎走到了发展的十字路口。是就此罢手,偃旗息鼓,还是重新定位,继续前行?需要行业理性思考,凝聚智慧,找准方向。
\r\n        其实,我国发展现代煤化工有着特定的时代背景,富煤、贫油、少气的资源禀赋,近十年来一路飙升的国际原油价格,对煤炭清洁利用的不懈追求,成为我国发展现代新型煤化工的强大推力,也是我国工业化进程中“煤代油”的现实选择。因此,我国发展现代煤化工的方向并没有错。虽然当下的国际环境对我国油气进口较为有利,但错综复杂的世界形势变幻莫测,必须以长远的眼光看待我国现代煤化工技术储备及战略规划。虽然一些示范项目进展的不尽如人意为现代煤化工的发展蒙上了一层阴影,但我们绝不能因噎废食,而应该在总结一些示范项目经验教训的基础上,重新调整思路,坚持稳中求进,做好技术储备,等待现代煤化工利好时期的到来。
\r\n        回顾过去,自我国开展现代煤化工示范以来,散见于政府多次发文强调的原则有:“不能停止发展、不宜过热发展、禁止违背规律无序建设”和“坚持示范先行、坚持科学合理布局、坚持自主创新”等。这种先示范、再推广的思路本来是完全正确的,但错在“心急吃了热豆腐”。所谓“示范先行”,就是由个别企业先行先示,在前面趟路;待项目从设计到营运取得一个完整的商业周期后,再视情况决定发展规模。应该说,这些原则如果得到贯彻执行,我国现代煤化工一定会得到健康发展。但令人遗憾的是,在GDP崇拜的年代,这些原则根本无法抑制地方政府和各类企业对现代煤化工的投资冲动,加之有关部门把关不严,开闸放水,导致“示范先行”沦为一纸空文,往往示范项目还没有一个满意的结果,大家就一哄而上,其结果是给好端端的一个新兴产业添了堵。因此,当务之急是理性回归到“示范先行”的路子上来,在示范项目没有成功之前,后续项目应谨慎观察,耐性等待,做好准备,切忌头脑发热,盲目跟进。
\r\n        事实上,我国现代煤化工降温从根子上说是由于技术的不成熟所致,需要从国家层面加以重视和解决。从我国现代煤化工示范的情况来看,虽然国家鼓励的五大类煤化工示范项目各个工艺技术路线均已打通,但离技术成熟还有相当一段距离。煤化工项目作为庞大复杂的系统工程,目前尚处于优化阶段,项目整体的成熟度不够,各个环节远未到“标配”的程度。尤其是气化技术的不成熟,导致已建成的一些项目系统不够稳定,难以实现长周期满负荷连续稳定运行,严重影响到项目的经济性。而各自为战的企业又心有余而力不足。因此,急需从国家层面实施煤化工科技战略,发挥体制机制优势,组织力量开展技术攻关,使每一个工艺路径的示范项目在技术层面达到完全成熟可靠的“标配”程度。惟如此,我国现代煤化工才有可能实现规模化发展。
', 1, 0, '未知', '现代,煤化工,心急,难吃,热,豆腐,中国,化工,报,', '2015-01-21 02:55:10', '2020-06-02 02:11:01', NULL), +(116, 127, 9, '新型煤化工五路径:谁能走得更远?', 'admin', '中化新网 2014年7月以来,国际原油价格暴跌近50%。有机构研究认为,本轮油价下跌远未见底,后期仍有下跌空间。若参照煤炭及主要大宗商品近几年的跌幅,预计国际原油价格最低将探', '', '
\r\n 中化新网
\r\n        2014年7月以来,国际原油价格暴跌近50%。有机构研究认为,本轮油价下跌远未见底,后期仍有下跌空间。若参照煤炭及主要大宗商品近几年的跌幅,预计国际原油价格最低将探至50美元/桶,并将长期在70~90美元/桶波动。石油价格的大幅波动,必将引发煤化工与油气化工产品竞争力此消彼长,使刚刚起步的新型煤化工竞争力面临新的考验。那么,五大新型煤化工到底会遭遇怎样的挑战和考验?其前景如何?怎样才能实现稳健发展?
\r\n        一、煤制烯烃:依然具有竞争力只怕油价跌跌不休
\r\n        煤制烯烃堪称新型煤化工的典型代表。这不仅因为中国成功开发了代表当代先进水平的甲醇制烯烃一代、二代技术,而且因为中国最早实现了甲醇制烯烃技术的工业化应用,于2010年5月28日建成投产了全球首套煤经甲醇制烯烃工业化示范装置—神华包头180万吨/年煤制甲醇、60万吨/年甲醇制烯烃项目,并很快实现了商业化运营,产生了良好的经济与社会效益。在示范项目成功刺激下,全国煤制烯烃项目建设提速。截至2014年12月,国内已经有13套甲醇制烯烃项目投产,煤经甲醇制烯烃(或甲醇制烯烃)总产能将达606万吨/年。另据了解,全国在建和已经开始前期工作的甲醇制烯烃项目有29个,合计产能1300万吨;规划的甲醇制烯烃项目合计产能1500万吨。上述项目若全部按期投产,中国甲醇制烯烃产能将达3400万吨/年,与2013年中国乙烯+丙烯总和相当。
\r\n        煤制烯烃(或甲醇制烯烃)之所以被热捧,缘于投资者看好其前景。陕煤化蒲城清洁能源化工有限公司副总经理姚继峰说。一方面,煤制烯烃产品市场广阔。目前,国内乙烯当量自给率50%左右,对外依存度超过40%。虽然随着众多炼化一体化项目的建成投产,国内烯烃产能大幅提升,但随着经济社会的发展和人民生活水平的提高,国内乙烯需求量继续保持快速增长。加之中国是一个“富煤贫油少气”的国家,随着家庭轿车的普及和汽车保有量的增加,国内成品油消费量大幅攀升。而目前国内绝大多数乙烯装置又以石脑油为原料,乙烯产能扩张与汽车争油的矛盾愈演愈烈,使得石油路线乙烯面临原料紧缺和成本不断抬高的双重制约,产能无法持续大幅扩张,从而为煤制烯烃留下了较大的发展空间。另一方面,石油价格近几年持续高位运行,抬高了石油路线乙烯生产成本。而煤炭及甲醇价格的下行,又降低了煤制烯烃(或甲醇制烯烃)成本,此消彼长,煤制烯烃产品竞争力显著提升。更为重要的是,乙烯被称为工业之母,烯烃的衍生品多达几十上百种,广泛应用于国民经济各个领域,这使得投资煤制烯烃项目的市场风险大为降低,相关企业尤其国有企业更乐意在该领域投资,以期取得良好的经济与社会效益。
\r\n        延长石油集团总经理助理李大鹏赞同姚继峰的看法。他说,神华包头60万吨/年DMTO示范项目商业化运营以来的实践表明,与石油路线相比,西部地区煤制烯烃项目具有绝对的成本优势——当国际原油价格在100美元/桶左右波动、煤炭价格300元/吨时,DMTO装置吨烯烃完全成本不足7000元,而石油路线吨烯烃完全成全已高达9600元,煤制烯烃的成本优势显而易见。“由于相比石油路线,煤制烯烃具有绝对的成本优势,后期,即便国内烯烃真的出现产能过剩,首先关停的也必然是石油路线乙烯装置。从这个层面讲,在现有的五大新型煤化工路径中,煤制烯烃前景最好、风险最小。”姚继峰乐观地表示。
\r\n但陕煤化集团党委书记华炜、陕煤化集团常务副总经理尤西蒂对此有不同看法。他们表示:后期石油价格的走势难以把握。一旦石油价格继续下跌,甚至跌破70美元/桶,而国内煤炭价格受综合生产成本高企支撑跌无可跌,甚至可能反弹。那么,煤制烯烃与石脑油制乙烯竞争力就会发生微妙变化,甚至出现逆转。因此,在没有对石油市场中长期走势做出准确判断前,不宜对煤制烯烃前景过分乐观,更不能一窝蜂上项目。尤其不能只拿高成本的石脑油制乙烯与煤制烯烃相比。因为中国经济已经融入全球经济,世界上除了石脑油裂解制乙烯副产丙烯外,还有中东廉价乙/丙烷制烯烃和北美天然气凝析液制烯烃等多种工艺路径,煤制烯烃有无竞争力还要面临上述两种工艺的挑战。两位专家提醒:上马煤制烯烃项目必须通盘考虑国内外多种资源与工艺路径,慎重决策。由于目前国内在建拟建煤制烯烃规模已经很大,有过剩风险,建议已经完成前期工作的项目继续推进外,那些规划但未开始实施的煤制烯烃项目最好暂缓推进。对于那些已经建成和在建项目,则应尽快谋划烯烃下游产品,通过产品多元化、产业长链条,不断增加产品附加值和项目竞争力,防止后期陷入产能过剩泥潭无法自拔。
\r\n        二、煤制气:技术成熟市场看好但环保关难过
\r\n        如果说,业内对煤制烯烃的前景总体看好的话,对于煤制天然气的前景,看法则大相径庭。中国化工学会理事贺永德是看好煤制气前景的专家代表。他看好煤制气有三大理由:
\r\n        一是富煤地区建设煤制气项目具有成本优势。当煤炭价格在400~500元/吨时,煤制天然气的制造成本约1.8~1.9元/立方米,而进口气到达中国口岸价普遍超过2元/立方米,入管网价在2.48元/立方米以上,前者比后者拥有0.5元/立方米的成本优势。如果采用陕西榆林地区优质烟煤(平均发热量6000大卡/千克)作原料,生产1立方米天然气,原料煤+动力煤消耗仅2~2 .3千克。目前榆林地区煤炭售价仅300元/吨,折算煤制气原料成本不足0.7元/立方米,与进口管道天然气相比,优势扩大至1元/立方米以上;若与进口LNG相比,煤制气优势更扩大到1.5元/立方米以上。
\r\n        二是无产能过剩之忧。中国是一个“富煤贫油少气”的国家,天然气资源量和产量都十分有限,而需求增长却异常迅猛。2000~2010年,中国天然气消费量年均增长16%;2005年~2013年,中国城市天然气消费量年均增长25.2%。据中国石油经济技术研究院预计:2014年,中国天然气需求量将达2061亿立方米,而国产天然气(常规天然气、煤层气、煤制气)产量预计为1325亿立方米,算上全年可能进口的600亿立方米天然气,总缺口仍达136亿立方米,比2013年放大1倍。后期,随着居民天然气用量的进一步增加、各地煤改气工程的推进,以及政府为改善大气质量推动的天然气发电项目的增多,以及交通运输领域油改气范围的扩大,都将推动中国天然气消费量持续大幅增长。预计到2020年,国内天然气消费量将达3600亿立方米,20年内年均需求增长将保持10%以上,无产能过剩之忧。
\r\n        第三,煤制气对改善城镇空气质量和节能减排效果明显。煤制气由于采用了现代化气化、净化、合成工艺,以及先进高效的脱硫、脱硝、除尘与废水处理技术,能大幅减少污染物排放。尤其我国煤制气项目大多布局于新疆、内蒙古等煤炭资源丰富、运输条件受限地区,通过煤制气项目将所得天然气通过管道输送到京津唐鲁及东部省份,即为上述地区提供了清洁能源、缓解了其环境压力。又相当于通过管道将本来难以输送的资源低成本地输送到全国各地,减少了运输过程的能源消耗和排放污染。
\r\n        “有人担心加征碳税后会削减煤制气的竞争力。事实上,目前包括法国、加拿大在内的一些发达国家都取消了碳税。不少国家对加征碳税争议很大。在这种背景下,中国“十三五”期间能否如期加征碳税存在较大变数。即便真的加征碳税,按10元/吨CO2计算,1000立方米煤制气所缴碳税不过45元,与进口天然气相比,同样具有竞争力。”贺永德信心满满地对记者说。
\r\n        但包括美国杜克大学教授杨启仁、国土资源部矿产资源评价中心主任张大伟等专家却不看好煤制气前景。杨启仁表示,国内众多煤制气项目在进行前期论证时,大多以美国大平原煤制气项目为例描绘项目前景及上马的必要性。但事实上,大平原项目是个多输的结局------投产后10年累计亏损13亿美元。现在之所以有少许利润,主要得益于新股东在接手该厂时无须偿还95%以上的建厂费用,且实现了多元化经营。据了解,2011年,美国国家能源科技实验室以大平原厂为参考,评估北达科州褐煤为原料生产天然气的经济可行性。结果发现:建设一个15亿立方米/年的煤制气工厂,总投资额高达42亿美元,合成气生产成本约21美元/百万英热单位。而近几年美国天然气价格始终在2.5~8美元/百万英热单位徘徊,最终认为煤制气无获利可能。
\r\n        “无论从经济效益、环保要求还是能源利用效率考虑,煤制气项目都没有前景。”延长石油集团总经理助理李大鹏说。据他介绍,根据美国大平原厂的经验,煤炭转换成合成气再发电,能源转换效率仅30%。而一般大型燃煤电厂能源转换效率可达40%以上。同样发1千瓦时电,煤制气发电耗煤量较煤直接发电多1/3。另外,目前国内煤制气项目为了使粗合成气中尽量增加甲烷,普遍选用鲁奇炉。该工艺最大的问题是易产生大量含酚等难处理的废水。试想,一个40亿立方米煤制气工厂,将有48台煤气化炉矗在那儿,形成一排“炉林”,即便正常运行,产生的废水和废气、废渣也是惊人的。若遇工艺不正常或开停车倒炉,其产生的污染量会更大,甚至可能会使项目所在地形成铺天盖地的烟霾。
\r\n        “不少煤制气项目上马时,喜欢以进口天然气价格甚至进口液化天然气价格作参照,说明煤制气具有较好的成本和价格优势。但这一点并不现实。”国土资源部矿产资源评审中心主任张大伟提醒。他说,目前进口天然气到达中国口岸价均超过2元/立方米,进口液化天然气价格更高达3元/立方米左右。照此推断,以目前的煤炭价格计算,煤制气项目似乎均有竞争力。然而事实是,随着天然气供应量的增加,价格承受力较强的民用领域将趋于饱和。工业、化工及发电领域虽然需求巨大,也是西方国家天然气消费大户,但中国上述企业如果全部使用高昂的进口天然气,将会全面巨额亏损。导致上述领域用不起或不敢使用天然气,最终导致国内天然气供大于求,价格下行,相关煤制气企业在计入高额的财务成本后,根本无利可图。也许正是综合考虑了煤制气项目的潜在风险,2013年以来17个喜获“路条”的煤制气项目,绝大多数至今仍在等待观望。“十三五”期间,我国煤制气规模将控制在300亿立方米/年以内,比业内预计的规模压缩了一倍多,表明国家层面对煤制气项目的态度再度发生微妙变化,对其可对带来的影响与风险保持警惕。
\r\n        三、煤制乙二醇:若不能进入聚酯市场成本优势无意义
\r\n        中国服装业的持续快速发展,对聚酯纤维的需求不断增加,继而推动生产聚酯的原料乙二醇需求激增。由于中国乙二醇产能有限,巨大的供需缺口只能通过进口填补。2010年~2013年,中国进口乙二醇分别达664万吨、727万吨、796万吨和825万吨,对外依存度始终保持在70%左右。国内乙二醇市场严重的供不应求,不仅推高乙二醇市场价格一度突破9000元/吨关口,也刺激煤制制乙二醇项目投资不断升温。据了解,截至2014年9月底,国内已经有10套煤(或合成气)制乙二醇装置投产,合计产能150万吨/年;在建项目12个,合计产能317万吨/年;拟建项目4个,合计产能180万吨/年;规划中的煤制乙二醇项目3个,合计产能90万吨/年。预计到2015年底,中国煤制乙二醇产能将达420万吨/年;2017年将达467万吨/年;2020年将达557万吨/年。即便算上现有以及在建和规划中的石油路线乙二醇项目产能,到“十三五”末,我国乙二醇自给率也只有60%,对外依存度仍高达40%。另据测算,当煤炭价格250~300元/吨、国际石油价格100美元/桶时,煤制乙二醇相比乙烯法拥有1400~1600元/吨的成本优势。
\r\n        一方面市场缺口较大,产品销路没问题;另一方面,与主流的乙烯路线相比具有明显的成本优势。投资煤制乙二醇岂不等于抱了“金娃娃”?“钱景”十分光明?但业内专家提醒:煤制乙二醇有市场未必有钱景。中国化学理事会理事贺永德表示:一方面,受全球经济不景气影响,中国服装出口已经并将继续面临较大压力,减少了涤纶需求并打压其价格下行,聚酯需求增速因此放缓、价格下移,最终将导致乙二醇价跌量减,压缩其利润空间。另一方面,国内93%的乙二醇用于聚酯生产,3%用于聚氨酯生产,3%用于防冻液生产,1%用于其他领域。所谓的乙二醇供需缺口,主要指能满足生产涤纶长丝、涤纶短纤,以及瓶级聚酯的乙二醇。而目前国内已经投产的煤制乙二醇装置,只有新疆天业5万吨/年合成气制乙二醇等少数装置的产品被上游聚酯企业接受。其余大多数厂家的煤制乙二醇产品尚未被聚酯企业完全接受,只能销往树脂及防冻液等领域,既限制了需求,也削减了煤制乙二醇的盈利能力。后期,如果国际石油价格继续下跌,而煤炭价格企稳并反弹,将缩小煤制乙二醇与乙烯路线乙二醇的成本优势。若届时煤制乙二醇企业仍不能保证装置安稳长运行并彻底解决产品质量不稳定等问题,则煤制乙二醇企业只能望着巨大的聚酯市场兴叹。
\r\n        “若不能顺利进入聚酯市场,煤制乙二醇就没有前景,其与乙烯法相比所谓的成本优势也毫无意义,只会误导投资者。”延长石油集团总经理助理李大鹏说。他说,国内企业在考察投资项目时,大多属“理想主义者”:把可能的需求当作现实需求;把理论上的竞争优势当作真实竞争力;高估生产成本的比较优质而忽略财务费用及其他成本上升的负面影响;重视项目可行性而忽略其不可行性;眼光只盯国内市场很少放眼国际大环境……这会导致项目论证缺乏应有的客观公正性,以致于许多论证时钱景广阔的项目,投产之日就开始亏损。煤制乙二醇就是一个典型的例子。目前,所有上马煤制乙二醇的企业,眼光只盯着国内巨大的供需缺口,却避而不谈全球乙二醇实际已经过剩;只将低煤价时的煤制乙二醇与高油价时的乙烯路线乙二醇相比,却忽略了北美页岩气革命、中东石化业崛起,以及全球经济增长放缓将导致国际石油价格下跌、煤制乙二醇与乙烯路线成本差距缩小的可能性,使项目潜在的风险加大。
\r\n        中宇资讯分析师于晓红亦表示:煤制乙二醇的质量尚无法满足聚合级对原料的性能要求,这将长期制约该产业发展。如果后期国际石油价格跌破60美元/桶并长期在90美元/桶以下波动,而煤制乙二醇又无法在短期内解决质量不稳定难题,则其前景远未预想的乐观。
\r\n        国内首套煤制乙二醇工业化示范装置——通辽金煤化工公司20万吨/年装置近几年的表现也让业内对煤制乙二醇的钱景疑虑重重。公开资料显示:该项目自2011年投产以来,不仅鲜有盈利,反而成为其母公司丹化科技股份公司的亏损大户。2013年,更以亏损1.92亿元拖累丹化科技业绩由盈转亏。今年前三季度,虽然帐面上显示项目已经盈利,但扣除通辽经济技术开发区管委会给予的6000万元自主创新奖励资金、内蒙古自治区给予的550万元科技经费拨款等共计6790万元政府奖励拨付资金,乙二醇装置对企业的利润贡献微乎其微。
\r\n        渭化集团副总经理张小军则表示,今年上半年,虽然我国服装出口总量增速下滑7.2%,但化纤制服出口量逆势增长24.8%,对乙二醇行业拉动明显。尽管如此,国内乙二醇价格仍出现大幅下跌,表明全球乙二醇过剩已经对中国市场产生冲击。后期,一旦中东、北美低成本乙二醇装置陆续投产并打入中国市场,尤其美国一家公司研发的二氧化碳电化法与水、氢气合成乙二醇新技术取得实质性突破并工业化应用后,其仅125美元/吨的生产成本,将对现在看来颇具优势的煤制乙二醇行业产生巨大冲击。他建议国内企业加快煤制乙二醇关键技术攻关,尽快推出先进、实用、低能耗技术,而非一味扩大产能,以应对未来竞争。
\r\n        四、煤制油:项目表现良好但“高大上”投资引风险
\r\n中国日益增大的成品油需求与资源量及产量有限的矛盾,使得原油进口量连年大幅增加,石油对外依存度连续数年维持在55%以上的国际超高警戒线。这一状况严重威胁着中国能源战略安全。为此,稳妥地发展煤基油品燃料不仅成为能源专家的呼声,也引起国家层面关注。以致于“十一五”以来,国家每次在规范煤化工产业健康发展时,都要特别点到煤制油。
\r\n        而从神华宁煤400万吨/年煤间接液化项目获得批准,到兖矿榆林110万吨/年、伊泰鄂尔多斯200万吨/年、潞安集团150万吨/年、贵州渝富能源开发公司200万吨/年等数个煤制油项目获得国家发改委“路条”不难看出,国家层面对煤制油,尤其已经被几套16万吨/年工业化示范项目初步验证的煤间接液化项目的管控悄然松绑。据了解,即便不再增加新的业主,仅上述几家煤制油企业规划的项目全部实施后,中国每年就将新增煤基油品6080万吨。如果算上延长石油集团规划的煤油共炼、陕西煤业化工集团规划的煤炭分质利用制油项目,以及全国其他企业在建和规划的约800万吨煤焦油加氢制取燃料油项目,2020年前后,中国煤基油品规模将超过8000万吨/年。
\r\n        “众多企业之所以在国家严格管控下热上煤制油项目,主要还是认为煤制油的前景比较乐观。”内蒙古伊泰煤制油有限责任公司董事长齐亚平表示。他以伊泰16万吨/年煤制油项目为例。该装置于2012年底首次达产后,2013年全年生产油品18.2万吨,装置平均负荷达108%,油品综合成本平均每吨降低5%,实现了消耗低、效益好的预期目标。虽然齐亚平并未透露煤间接液化产品的利润到底有多高,但公开资料显示:2013年1~9月,伊泰煤间接液化项目生产各类油品和化工品13.2万吨,上缴税费2.06亿元,实现净利润1.2亿元。照此推算,煤间接液化的液体产品净利润高达909元/吨。而据了解,2013年以来,包括神华百万吨煤直接制油、18万吨/年煤间接液化、潞安16万吨/年煤间接液化、陕煤天元50万吨/年煤焦油轻质化、陕煤富油12万吨/年煤焦油全馏分加氢、以及宝泰隆煤公司的10万吨/年高温煤焦油加氢制取燃料油等煤基油品项目,均取得了可观收益。
\r\n        “我国石油对外依存度一度接近60%,发展煤基油品已经成为中国确保能源安全的战略选择。从这个层面讲,煤制油项目拥有一定的民意、政策与政治基础。加上巨大的消费需求与良好的盈利等市场手段推动,煤制油的前景十分光明。”中科合成油技术有限公司技术顾问唐宏青尤其看好煤间接液化的前景。
\r\n        但也有专家认为煤制油的前景远没那么乐观。“根据国家税务总局2012年第47号公告,纳税人以原油或其他原料生产加工的在常温常压条件下呈液态状(沥青除外)的产品,将分别加征1元/升(石脑油)和0.8元/升(燃料油)消费税,这等于将煤制油综合成本增加了20%。以一个100万吨/年煤制油项目为例,每年上缴消费税高达10亿元,极大地压缩煤制油项目的利润空间。后期,如果国际油价进一步下跌引发成品油价格下跌,煤制油项目是否还能盈利存在悬念。”陕西省决策咨询委员会委员贺永德提醒说。
\r\n        投资强度大、污染大、资源利用效率低则是延长石油集团总经理助理李大鹏不看好煤制油前景的三大理由。他说,建设一个500万吨/年炼油厂,只需200亿元投资;而建设一个在煤制油路径中还算投资强度较低的相同规模的煤间接液化项目,总投资额高达600亿元。超高的投资强度,必然导致煤制油项目财务成本居高不下,影响其产品市场竞争力。而从产品收率和资源利润效率看,煤直接制油的液体收率不足35%,能源转化率仅33%;煤间接液化吨产品耗水超过7吨……在中国经济发展受资源与环境约束越来越明显的情况下,煤制油的上述弊端将严重影响其综合效益,甚至会影响产业健康发展。“中国应以全球视权衡自身的能源安全,并重新考虑发展煤制油的紧迫性、必要性与重要性”。李大鹏建议。他说,既然经济已经全球化了,就应有资源分配全球化的视野。中国缺油不等于其他地区也缺油,我们完全可以凭借充足的外汇储备,以及不断上升的综合国力和国际地位,利用政治、外交、经济等手段,大量利用境外油气资源,实现外油中用,何必急于发展投资强度大、资源消耗高、污染排放大的煤制油产业。况且,近两年一些煤制油项目之所以取得较好收益,是国际油价高位运行、国内汽车业快速发展助推成品油需求猛增,以及煤炭价格大幅下跌等多种因素共同作用的结果,是一种特殊情况,并不能代表煤制油项目本身的竞争力。后期一旦煤炭价格触低回升,国际油气价格再度回调。尤其中国汽车工业增速放缓,成品油需求减少后,煤制油的钱景将难言乐观。
\r\n        “即便要发展煤制油,也应打破煤直接或间接制油等单一模式,而应采取煤炭分质利用方式,在条件允许的情况下,先对煤进行干馏提油,再将提油后的洁净焦炭通过煤直接或间接制油等途径制油,或与其他化工、电力、钢铁、建材等装置对接,实现煤的‘两头见油’和产品多元化,提升项目的资源利用效率和抗风险能力。”陕煤化集团常务副总经理尤西蒂这样表示。
\r\n        一位专家透露:正是综合考虑了国内、国际环境与资源供需格局变化,以及煤制油项目的利弊与业内的不同意见,国家高层初步决定:“十三五”期间,我国煤制油规模将控制在1000万吨/年以内,而非此前传言的4000万吨/年。
\r\n        五、煤制芳烃:技术看上去都很美推广应用却不易
\r\n        据清华大学教授魏飞介绍,全球95%以上芳烃来自石油炼化装置的催化重整、裂解汽油加氢抽提。即常压石脑油和减压石脑油,分别通过连续重整和加氢裂化,再经芳烃抽提获得苯、甲苯和二甲苯等。甲苯选择性岐化、烷基化转移后生成二甲苯,二甲苯异构化后转化为PX(对二甲苯)。随着石油资源的减少和价格的攀升,以及原油重质化程度的加剧,石油路线获取高纯PX的成本越来越高,加之中国本身“富煤贫油少气”,获取PX的难度日益增大。为此,国内科研院所纷纷组织团队,锲而不舍地开发非石油路线PX技术,先后有中科院山西煤化所的固定床一步法甲醇制烃类技术、陕煤化集团与中科院大连化物所联合开发的甲醇甲苯制PX联产低碳烯烃循环流化床技术,以及中石化自主开发的甲苯甲醇甲基化制取PX等技术问世。
\r\n        2013年1月13日,由中国华电集团与清华大学合作开发的万吨级甲醇制芳烃工业试验装置一次投料成功并生产出合格PX,这也是世界首套原料仅为甲醇的甲醇流化床制PX装置。其芳烃单程收率达55%~65%,烯烃80%转化为芳烃,芳烃总收率达80%,是目前最先进的非石油路线芳烃生产工艺。至此,中国分别掌握了固定床、流化床甲苯甲醇制PX和甲醇直接制PX等多项技术,且全部通过了中试或工业化运行验证,煤制芳烃整体技术世界领先。
\r\n        “但仔细梳理上述技术,发现均不同程度地受到限制,投资者很难长期获得良好收益。”陕煤化集团副总工程师何迎庆如是说。
\r\n        比如,山西煤化和赛鼎工程公司合作开发的固定床一步法甲醇制烃类技术,虽然具有能灵活生产芳烃与烯烃的优势,但因采用的是固定床,存在规模难放大、设备投资多、占地大、工艺流程长、催化剂需经常倒炉活化(或更换)等弊端;另两种甲醇甲苯制PX技术,虽然使用了甲醇减少了甲苯消耗,但依然需要甲苯作原料。而国内甲苯资源本来就短缺,以致许多企业因甲苯来源无保证而不愿上马新项目;清华大学的技术最好,可以完全以甲醇为原料生产芳烃,但其80%芳烃总收率所得的是混合芳烃,并非市场真正紧俏的、前景向好的纯PX,导致项目盈利预期大打折扣。
\r\n        蒲城清洁能源化工公司副总经理姚继峰亦不看好煤制芳烃的前景。他说,由于原料全部采用甲醇,清华大学开发的FMTA技术是真正意义的煤制芳烃技术,也最具工业化推广应用的条件。但一方面,其所得产品80%为苯+甲苯+二甲苯,属混合芳烃(而非价格高出烯烃20%~30%的纯PX),这种混合芳烃市场价仅7000~8000元/吨。根据工业化中试结果,每生产1吨混合芳烃,需消耗3吨甲醇,而同样3吨甲醇,采用DMTO技术能生产1吨烯烃。目前,烯烃售价10000元/吨以上,煤制芳烃与煤制烯烃的经济性谁优谁劣一目了然。这也正是众多企业宁肯一窝蜂上马煤制烯烃项目,而不愿涉足煤制芳烃的根源。
\r\n        另一方面,目前煤制芳烃尚无一套大型工业化示范装置运行,存在一定的工业化风险。尤其近几年因PX被妖魔化后,各地民众纷纷拒绝PX项目,更增加了煤制芳烃项目的成本、难度和风险,使这一先进技术难以推广应用。
\r\n        而据中国科学院院士何鸣元介绍,芳烃的重要来源和用途为:原油炼制—石脑油—MX(混二甲苯)—PX(对二甲苯)—PTA(精对苯二甲酸)/MEG(乙二醇)—PET(聚酯)—涤纶长丝/短纤—纺织面料—服装。因此,无论石油路线PX还是煤基PX,最好能与下游PTA、PET建成联合装置,并接近化纤与纺织服装市场。由于我国大多数炼厂分布在东南沿海,这些地区又是化纤与服装业最集中的地区,从而很容易形成PX上下游一体化产业集群,彰显良好的经济与社会效益。煤制芳烃主要是要利用西部廉价的煤炭与甲醇资源,显然不具备建设靠近终端消费市场的PX上下游产业链的条件,也即不能实现各环节利益最大化,最终将削弱项目总体收益。
\r\n        专家们认为,在石油价格高位运行、煤炭价格持续下跌、国内PX货紧价扬等有利形势下,煤制芳烃尚因种种原因没有获得投资者追捧,那么一旦国际石油价格继续下跌,国际PX价格下挫,则煤制芳烃的成本优势将会减弱,产业发展的道路将曲折而漫长。
\r\n        魏飞却表示,清华大学联手中国华电集团开发的FMTA工业化技术,不足3吨甲醇即可生产一吨混合芳烃,混合芳烃收率达80%以上,且90%的混合芳烃最终都能转化为市场急需的PX。当烯烃价格在10000元/吨时,纯PX售价一个度高达14000元/吨,照此推断,煤制芳烃经济效益并不逊于煤制烯烃。况且,由于石油中芳烃含量较少,我国又是一个富煤贫油少气的国家,煤制芳烃既是中国的无奈之举也是战略选择,又怎么能简单地以经济效益衡量其前景?至于说会否遭遇类似石油路线PX风波导致该技术难以推广的担心,则完全没有必要。因为“PX断子绝孙说”本身不仅荒谬,而且带有一定政治目的,是一些所谓的专家学者在替国外利益集团误导甚至愚弄中国老百性。目前京、沪、穗等地应用的国Ⅴ汽油,其中芳烃含量为40%,将来国Ⅴ汽油还要在全国推广。如果照某些所谓专家的说法,全世界都别用汽油了。因此,FMTA技术绝不会因为所谓的环境风险而无法推广应用。
\r\n        上海新佑能源科技有限公司董事长韩保平则建议采用煤焦油加氢路径获取芳烃。
\r\n        他说,由于石油侧链多,经常压蒸馏得到的石脑油中,芳烃仅占45%;而煤焦油中的侧链组分少,用其加氢制得的石脑油中,芳烃含量超过70%。目前大多数煤焦油要么只经简单加工处理,获得葸、萘等初级产品;好一点的企业将煤焦油加氢制取调和燃料油,这两种方法显然均未做到对资源的最大化利用。如果我们在有条件的地区建设大型煤炭提质装置,将获得的煤焦油加氢生产石脑油+柴油,再用高含芳烃的石脑油制取芳烃,无论经济、环境还是节能减排效益都将十分显著,其投资强度也将明显低于煤-甲醇-芳烃一体化装置。(陈继军 陈光达)

\r\n', 1, 0, '未知', '新型,煤化工,五,路径,谁能,走得,更远,中化,', '2015-01-21 02:56:09', '2020-06-02 02:11:01', NULL), +(117, 128, 7, '黑龙江省能源环境研究院召开全体职工大会', 'admin', '2015年1月26日,黑龙江省能源环境研究院召开全体职工大会,会议由能源院徐晓秋院长主持,院班子及全体职工参加了会议。 徐晓秋院长首先传达了省科学院郭春景院长在省科学院2015年', '/uploads/allimg/150126/1-150126122I43W.JPG', '        2015年1月26日,黑龙江省能源环境研究院召开全体职工大会,会议由能源院徐晓秋院长主持,院班子及全体职工参加了会议。 \r\n
\r\n
\r\n
\r\n  
\r\n        徐晓秋院长首先传达了省科学院郭春景院长在省科学院2015年工作会议上的报告并结合能源院实际部署近期工作。徐院长指出,省科学院工作会议的召开,为今后一段时期我院相关工作明确了行动纲领,是我院今后发展的工作指南。全院干部职工要充分领会,迅速行动,积极落实,全力开展能源院2015年的科研工作。
\r\n        随后,徐院长介绍了1月25日参加黑龙江省千户科技型企业动员会的相关情况,并传达了陆昊省长《黑龙江省千户科技型企业三年行动计划》的讲话精神。
\r\n        最后,徐院长强调,要坚持借船出海理念,勇于攻坚克难,开展好与清华大学的相关合作,同时要求能源院全体职工围绕两个会议精神,制定2015年工作计划,借此促进科研水平快速提升,并推动各项工作有序开展。
', 1, 0, '未知', '黑龙江省,能源,环境,研究院,召开,全体,职工,', '2015-01-26 04:32:03', '2020-06-02 02:11:01', NULL), +(118, 129, 7, '我院召开科研人员座谈会', 'admin', '1月27日,黑龙江省能源环境研究院召开了科研人员座谈会,院长徐晓秋、副院长关春玲与我院一线科研骨干、高级职称人员参加了座谈,院长徐晓秋主持会议。 与会科研人员认真总结了', '', '       1月27日,黑龙江省能源环境研究院召开了科研人员座谈会,院长徐晓秋、副院长关春玲与我院一线科研骨干、高级职称人员参加了座谈,院长徐晓秋主持会议。
\r\n       与会科研人员认真总结了过去一年的工作情况,围绕科研院所改革及如何开展下一步科研工作提出了一些设想,同时围绕“五年会战”既定目标,就我院如何加强高标准科研团队建设、如何有效开展新技术研究等展开了热烈讨论,提出了很多建设性的意见和建议,成效显著。
\r\n       院长徐晓秋对与会科研人员取得的成绩给予了充分肯定,同时对大家提出了几点要求:一是要继续发挥我院在油页岩方面的研究优势,争取用两年时间进入国家四大平台;二是要围绕目标任务,注重发挥我院的科技支撑作用,突破国家项目,同时不断加强自身宣传展示、人才队伍建设、科研条件建设和科研管理服务;三是要善于学习,注重能力提高,善于对外交流与合作、善于向实践学习、善于在工作中不断思考,提高自己分析问题和解决问题的能力;四是要有强烈的责任感和使命感,崇高的敬业奉献精神,转变观念,革新理念,发挥主观能动性和积极性,为能源院的发展奉献力量。
', 1, 0, '未知', '我院,召开,科研,人员,座谈会,1月,27日,', '2015-01-27 05:00:00', '2020-06-02 02:11:01', NULL), +(119, 130, 7, '黑龙江省能源环境研究院召开青年科研人员座谈会', 'admin', '1月29日,我院召开了青年科研人员座谈会,院长徐晓秋、副院长关春与青年科研人员10余人参加了会议,会议由院长徐晓秋主持。徐院长指出,希望通过此次会议,为我院青年人提供交', '', '        1月29日,我院召开了青年科研人员座谈会,院长徐晓秋、副院长关春与青年科研人员10余人参加了会议,会议由院长徐晓秋主持。徐院长指出,希望通过此次会议,为我院青年人提供交流的机会,让青年科研工作者通过交流,提出自己的工作设想和打算。
\r\n        会议上,青年人员畅所欲言,纷纷围绕自身科研内容提出了很多好的想法,同时也提出了自己在工作中遇到的困惑及困难。院长领导对青年人员的工作热情和工作思路给予了肯定,并对相应的问题进行了解答。
\r\n        最后徐院长指出,我院将以全面提高青年科研工作者能力素质、充分发挥青年科研工作者的创造力为重点,以全面提高服务水平为目标,尽全力为我院的青年科研工作者创造更多的机会,打造良好的科研环境。
', 1, 0, '未知', '黑龙江省,能源,环境,研究院,召开,青年,科研,', '2015-01-29 05:10:00', '2020-06-02 02:11:01', NULL), +(120, 131, 7, '我院召开庆“三八”座谈会', 'admin', '3月6日上午,我院召开了三八妇女节座谈会,院长徐晓秋、副院长关春玲与十余名女同志参加了座谈会。院长徐晓秋向全体女同志表示节日的问候和祝贺,感谢大家一年来在各自岗位上', '/uploads/allimg/150309/1-1503091A309593-lp.JPG', '        3月6日上午,我院召开了“三八”妇女节座谈会,院长徐晓秋、副院长关春玲与十余名女同志参加了座谈会。院长徐晓秋向全体女同志表示节日的问候和祝贺,感谢大家一年来在各自岗位上为本院创新发展做出的辛勤努力和贡献。
\r\n
\r\n \"\"
\r\n
\r\n        座谈会上,女同志们就如何扮演好工作家庭的双重角色、如何加强创新团队建设、提高业务技能等方面畅所欲言、各抒己见。大家纷纷表示,不但要内外兼修成为一道美丽的风景线,而且要充分发挥“半边天”的作用,增加工作中的积极性和主动性,把智慧和力量凝聚到科研工作上,为我院的发展贡献自己的力量。座谈会气氛融洽愉快,充分展示了新时代女性的风采。
\r\n        最后徐院长表示,希望女同志们以“巾帼不让须眉”的精神,立足岗位、奋发有为,贯彻落实2015年院工作会议精神,不断学习业务,提高个人素质,成长为一专多能知识型人才的同时保持健康心态,鼓励大家再接再厉,再创佳绩。
', 1, 0, '未知', '我院,召开,庆,“,三八,”,座谈会,3月,6日,上午,', '2015-03-06 08:55:00', '2020-06-02 02:11:01', NULL), +(121, 132, 8, '我院召开全体党员会议学习习近平总书记2月2日讲话精神', 'admin', '4月7日,省能源院党委在一楼会议室召开了全体党员会议,党委书记、院长徐晓秋同志、党委委员、副院长关春玲同志、各支部书记及全体党员参加了会议。会议由徐晓秋同志主持。 会', '', '        4月7日,省能源院党委在一楼会议室召开了全体党员会议,党委书记、院长徐晓秋同志、党委委员、副院长关春玲同志、各支部书记及全体党员参加了会议。会议由徐晓秋同志主持。
\r\n        会议有三项内容,徐晓秋院长首先传达了4月1日省科学院会议内容及郭春景院长的讲话精神。随后全文传达了2月2日习近平总书记在省部级主要领导干部学习贯彻十八届四中全会精神全面推进依法治国专题研讨班开班式上的讲话内容。最后传达了省科学院关于召开“在新常态下如何做好党建工作”专题座谈会的通知,并推荐了参会人员。
\r\n        徐院长特别指出,此次省科学院专题座谈会是指导我院适应新常态下经济社会发展要求,协调推进“四个全面”战略布局,圆满完成五年发展规划目标的重要会议,参会人员一定要高度重视,结合能源院工作实际,积极参与,要以此次会议为契机,全面推进我院快速发展。
', 1, 0, '未知', '我院,召开,全体,党员,会议,4月,7日,省,能源,院,', '2015-04-07 06:43:00', '2020-06-02 02:11:01', NULL), +(122, 133, 7, '我院与天津大学签订合作协议', 'admin', '2015年3月16日,应天津大学内燃机燃烧学国家重点实验室主任、博士生导师姚春德教授的邀请,黑龙江省科学院科研处王阳处长、黑龙江省能源环境研究院徐晓秋院长和油品助剂研发中心', '/uploads/allimg/150417/1-15041G3004TT-lp.JPG', '        2015年3月16日,应天津大学内燃机燃烧学国家重点实验室主任、博士生导师姚春德教授的邀请,黑龙江省科学院科研处王阳处长、黑龙江省能源环境研究院徐晓秋院长和油品助剂研发中心张树华主任一行三人,赴天津大学进行交流访问。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n        天津大学内燃机燃烧学国家重点实验室是我国内燃机学科唯一的国家重点实验室,在甲醇燃料内燃动力工程领域拥有很高的国际知名度,黑龙江省能源环境研究院在非常规能源领域特别是甲醇燃料的研究方面拥有丰富的经验和实例。双方根据各自科研领域的技术特点,就如何充分发挥自身研究优势,实现技术互补,寻找合作契机召开了技术合作交流会,并针对相应需求开展合作探讨。最终,双方就共同研发“柴油、甲醇双燃料供油系统”达成了合作共识,签订了院、校联合创新合作模式框架协议,同时计划在相应标准制定、完成节能减排目标、人才培养和交流学习等方面开展一系列合作。
\r\n        我省是煤基甲醇产量大省,如“柴油、甲醇双燃料供油系统”得到广泛应用,将节省燃料费30%以上,并有效降低NOx化合物、PM2.5等有害物质排放30%-50%,在全面改善环境质量的同时助力我省煤化产业发展。
', 1, 0, '未知', '我院,与,天津,大学,签订,合作,协议,2015年,3月,', '2015-04-17 04:58:22', '2020-06-02 02:11:01', NULL), +(123, 134, 7, '黑龙江省能源环境研究院参加国家行业标准编制', 'admin', '2015年4月27日,国家行业标准《住宅建筑室内装修污染控制技术规程》启动会暨编制组第一次工作会议在深圳市召开。黑龙江省能源环境研究院作为编制组成员单位,由徐晓秋院长带队,', '/uploads/allimg/150504/1-150504145242U3-lp.jpg', '
\r\n         2015年4月27日,国家行业标准《住宅建筑室内装修污染控制技术规程》启动会暨编制组第一次工作会议在深圳市召开。黑龙江省能源环境研究院作为编制组成员单位,由徐晓秋院长带队,环境与节能技术研究室王志成主任及助理研究员张玥同志随行赴深圳参加了此次会议。
\r\n
\r\n
\r\n \"\"
\r\n  
\r\n
\r\n         此次会议共有来自国家住建部标准定额所、深圳市建筑科学研究院股份有限公司、清华大学、中国建筑科学研究院、上海市建筑科学研究院(集团)有限公司等19个参编单位参加。会议围绕《住宅建筑室内装修污染控制技术规程》编制大纲进行热烈地交流与讨论,确定了编制原则、需要解决的问题、补充研究的内容、标准的章节目录、进度计划及编制分工等事项。
\r\n         会议结束后,深圳市建筑科学研究院股份有限公司毛洪伟总监和徐晓秋院长就双方今后合作进行了深入探讨和交流。2015年4月28日,双方就共同完善“室内空气质量预评估”达成合作共识,计划在国家行业标准制定、完善室内空气预评估数据库、高层次人才培养和交流学习等方面开展一系列紧密合作。

\r\n
\r\n  
\r\n
\r\n \"\"
\r\n  
\r\n
\r\n         参编国家行业标准《住宅建筑室内装修污染控制技术规程》,是我院近年来首次承担国家级课题,也是我院在室内环境领域首次与国内著名大学、院所展开紧密的合作。此次合作,起点高,影响大,标志着我院正式进军室内环境污染防控领域。
\r\n', 1, 0, '未知', '黑龙江省,能源,环境,研究院,参加,国家,2015年,', '2015-05-04 06:56:15', '2020-06-02 02:11:01', NULL), +(124, 135, 7, '农业部沼气科学研究所专家团访问黑龙江省能源环境研究院', 'admin', '2015年5月12日,农业部沼气科学研究所生物质能中心主任胡启春研究员一行四人到黑龙江省能源环境研究院进行交流与访问。 胡启春研究员首先来到能源院江北实验室,在会议室做了沼', '/uploads/allimg/150526/1-150526192050T1-lp.jpg', '        2015年5月12日,农业部沼气科学研究所生物质能中心主任胡启春研究员一行四人到黑龙江省能源环境研究院进行交流与访问。\r\n
\r\n \"\"
\r\n  
\r\n 
\r\n        胡启春研究员首先来到能源院江北实验室,在会议室做了沼气工程领域的报告,报告详细的分析与解读了国内最新科研技术的相关情况,省能源院领导及相关科研人员参加了会议,并对胡研究员一行的到来表示热烈欢迎,同时省能源院也介绍了东北地区特别是黑龙江省各型沼气工程的发展现状,随后双方围绕各自技术优势进行了深入交流,并积极寻找合作契机。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n        5月13日在省能源院工作人员的陪同下参观了我院在大庆杜尔伯特的IMUS项目,并对黑龙省部分地区的生物质能源技术发展情况进行了调研。
\r\n        临别时,省能源院徐晓秋院长再次感谢胡启春研究员一行四人的到访,同时希望省能源院与农业部沼气研究所建立紧密的合作与联系。
', 1, 0, '未知', '农业部,沼气,科,学研究所,专家团,访问,2015年,', '2015-05-26 11:18:35', '2020-06-02 02:11:01', NULL), +(125, 136, 7, '我院召开“三严三实”专题教育动员会', 'admin', '根据省科学院通知要求,6月4日,黑龙江省能源环境研究院在一楼会议室召开了党委扩大会议暨省能源院三严三实专题教育动员会,省能源院领导班子、全体党员、部门负责人及副科级', '/uploads/allimg/150608/1-15060Q0232O11.jpg', '        根据省科学院通知要求,6月4日,黑龙江省能源环境研究院在一楼会议室召开了党委扩大会议暨省能源院“三严三实”专题教育动员会,省能源院领导班子、全体党员、部门负责人及副科级以上民主党派人士参加了会议。
\r\n
\r\n \"\"
\r\n
\r\n        大会通过了省能源院“三严三实”专题教育实施方案,省能源院党委书记、院长徐晓秋同志就深入开展“三严三实”专题教育进行了动员和全面部署。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n        徐晓秋同志指出,要坚决贯彻落实中央、省委及省科学院的部署和要求,从严从实开展“三严三实”专题教育,要明确责任,紧扣主题,聚焦对党忠诚、个人干净、敢于担当,坚持高标准严要求,注重思想引领,解决实际问题。同时要求党办、党支部及团委负责同志要在“三严三实”专题教育中讲一次党课。各部门主要负责同志,要充分提高认识,积极配合,带头搞好学习教育、确保省能源院“三严三实”专题教育取得实效。', 1, 0, '未知', '我院,召开,“,三严三实,”,专题,教育,动员会,', '2015-06-04 03:40:00', '2020-06-02 02:11:01', NULL), +(126, 137, 7, '省知识产权局张毅副局长到我院调研', 'admin', '5月27日,省知识产权局张毅副局长率综合协调处负责同志就全省高校院所专利提质促量工作,到黑龙江省能源环境研究院进行调研。省能源院徐晓秋院长、关春玲副院长、科研与产业化', '/uploads/allimg/150608/1-15060PU64Q64-lp.JPG', '        5月27日,省知识产权局张毅副局长率综合协调处负责同志就全省高校院所专利“提质促量”工作,到黑龙江省能源环境研究院进行调研。省能源院徐晓秋院长、关春玲副院长、科研与产业化办公室主任王志成等有关同志参加会议,并作情况介绍。
\r\n
\r\n \"\"
\r\n
\r\n        徐晓秋院长介绍,2013年省能源环境研究院与省科学院科技孵化中心合并。省科学院科技孵化中心为2012年度省知识产权局高校、科研院所专利项目支持单位,在项目支持下专利工作发展取得实质性突破。合并后,省能源院更加重视专利工作,近两年申请专利41项,人均专利超1项。院科研与产业化办公室王志成主任介绍了院专利申报、维护管理,专利转移和产业化工作情况。建立知识产权月报制度、各技术科室联络员制度,定期对院管理层、知识产权管理人员和技术人员进行知识产权的相关培训,要求各科室设立专项资金,提高专利撰写人员的业务水平等措施,使知识产权工作再上新台阶。
\r\n        张毅副局长对省能源院承担省高校院所专利项目取得的效果表示赞赏,认为之前项目执行成效好、产出大,特别是对建立“知识产权联络员”制度予以充分肯定,同时重点介绍了2015年度我省高校院所专利“提质促量”工作,建议省能源院更加重视发明专利拥有量,做好新发明专利的挖掘及已有发明专利的保持工作,进一步强化专利转化应用工作。张毅副局长同时还介绍了省知识产权局有关专利创造、运用等方面的政策措施,建议双方加强沟通联系,促进专利“提质促量”工作,进一步将能源领域的科研水平转化为专利优势,为改善我省生态环境发挥更大的作用。

\r\n', 1, 0, '未知', '省,知识产权局,张毅,副局长,到,我院,调研,5月,', '2015-06-08 01:00:05', '2020-06-02 02:11:01', NULL), +(127, 138, 7, '我院参加省高校、科研院所知识产权专题培训班学习', 'admin', '2015年6月4日至5日,省知识产权局举办了黑龙江省高校、科研院所知识产权专题培训班。我院科研办王志成主任、设计部王玉鹏和环境与节能研究室张玥参加了此次培训。 此次培训课程', '/uploads/allimg/150608/1-15060Q13402934-lp.JPG', '        2015年6月4日至5日,省知识产权局举办了黑龙江省高校、科研院所知识产权专题培训班。我院科研办王志成主任、设计部王玉鹏和环境与节能研究室张玥参加了此次培训。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n        此次培训课程由来自省知识产权局的张毅副局长、北京隆源智信知识产权咨询有限公司的闫冬总经理、哈尔滨工程大学经济管理学院陈伟教授及北京科技大学科学研究与发展部张超副部长授课,不仅解释了知识产权为何是建设创新型国家的核心竞争力,还重点讲解了专利转化运用的重要性,并结合具体的案例加以分析,更加易于理解和记忆。
\r\n        此次培训班旨在增强我省高校及科研院所相关技术人员的知识产权转化意识,提高知识产权的运用率,使得知识产权能够有效的创造实用价值。课程内容丰富,含义深刻,重点明确,使我们受益匪浅。
', 1, 0, '未知', '我院,参加省,高校,、,科研院所,知识产权,', '2015-06-08 03:31:46', '2020-06-02 02:11:01', NULL), +(128, 139, 7, '黑龙江省能源环境学会成立', 'admin', '2015年6月8日,由黑龙江省能源环境研究院发起的黑龙江省能源环境学会正式成立。学会由黑龙江省民政厅批准,并发放《社会团体法人登记证书》,业务主管部门为黑龙江省科学技术协', '/uploads/allimg/150610/1-150610161231964-lp.JPG', '        2015年6月8日,由黑龙江省能源环境研究院发起的黑龙江省能源环境学会正式成立。学会由黑龙江省民政厅批准,并发放《社会团体法人登记证书》,业务主管部门为黑龙江省科学技术协会。
\r\n
\r\n\"\"
\r\n
\r\n          能源化学学会为非营利组织性质的社会团体,属独立法人机构。致力于在能源和环境建设领域发挥桥梁和纽带作用,协助有关部门制定政策战略,充分运用市场机制,着力于能源环境领域先进的技术和产品全方位推广,加速产学研结合,促进企事业单位、科研院所间的对外交流与合作、宣传推广等工作。
\r\n学会可开展学术交流,组织研讨会、论坛,促进能源环境事业和谐发展。反映科学技术工作者的意愿和要求,维护科学技术工作者的合法权益。依法编辑内部参考资料和学会刊物及相关书籍。依法开展科学技术交流活动和业务培训,提高人员素质。宣传能源环境领域的方针和政策,促进企业节能减排,提高能源利用效率。承办政府及相关部门的委托工作。
\r\n          学会的成立标志着省能源院在领域内学术地位的提升,同时也标志着省能源院的工作得到各级领导和同行专家的认可。
', 1, 0, '未知', '黑龙江省,能源,环境,学会,成立,2015年,6月,8日,', '2015-06-10 08:25:55', '2020-06-02 02:11:01', NULL), +(129, 140, 7, '黑龙江省能源环境研究院党委书记徐晓秋同志带头讲“三严三实”专题党课', 'admin', '6月15日,在省能源院一楼会议室,省能源院党委书记、院长徐晓秋同志以《践行三严三实要求,聚力五年会战》为题,为全体党员、副科级以上人员讲了一堂三严三实专题党课。 徐晓秋', '/uploads/allimg/150616/1-150616130424M7.jpg', '        6月15日,在省能源院一楼会议室,省能源院党委书记、院长徐晓秋同志以《践行“三严三实”要求,做忠诚干净担当的好干部》为题,为全体党员、副科级以上人员讲了一堂“三严三实”专题党课。\r\n
\r\n
\r\n \"\"
\r\n  
\r\n        徐晓秋书记围绕准确把握“三严三实”要求的精神内涵、充分认识“三严三实”要求的重大意义、深入挖掘不严不实的具体表现等方面的作了深入浅出的论述和讲解。\r\n
\r\n
\r\n \"\"
\r\n  
\r\n        徐晓秋书记同时要求每位党员干部都要自觉践行“三严三实”,按照“三严三实”的要求对照检查、提升自己,从思想深处、从履职行权、从日常生活等方方面面,摒弃歪风邪气,树立昂扬正气,以更加严谨的工作作风和更加积极的工作态度聚力“五年会战”,推动省能源院科研事业新发展。', 1, 0, '未知', '黑龙江省,能源,环境,研究院,党委书记,徐晓,', '2015-06-15 05:29:00', '2020-06-02 02:11:01', NULL), +(130, 141, 7, '低碳环保,健康生活
-省能源院举办职工徒步活动', 'admin', '6月18日清晨,省能源院举办了首届能源杯徒步活动,活动的主题为 低碳环保,健康生活。 本次活动全程约8公里,环绕阿勒锦岛一周,历时两个 小时。一路上大家奋勇争先、相互鼓励,', '/uploads/allimg/150623/1-150623100631N0-lp.jpg', '        6月18日清晨,省能源院举办了首届“能源杯”徒步活动,活动的主题为 “低碳环保,健康生活”。
\r\n
\r\n \"\"
\r\n
\r\n        本次活动全程约8公里,环绕阿勒锦岛一周,历时两个 小时。一路上大家奋勇争先、相互鼓励,时而疾走如飞,时而舒缓脚步,在欣赏沿途美景享受运动快乐的同时激发了大家热爱自然、热爱生活的感情,提高了低碳环保意识。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n        此次活动让大家放松了心情、愉悦了身心、磨练了意志、增进了友谊。在行走间凝心聚力,彰显了省能源院全体职工“奋勇争先、和谐健康”的精神风貌和时代追求。
\r\n', 1, 0, '未知', '低碳,环保,健康生活,省,能源,院,举办,职工,', '2015-06-23 02:30:51', '2020-06-02 02:11:01', NULL); +INSERT INTO `articles` (`id`, `oldid`, `category_id`, `title`, `writer`, `description`, `cover`, `content`, `status`, `sort`, `source`, `keywords`, `created_at`, `updated_at`, `deleted_at`) VALUES +(131, 142, 7, '黑龙江省能源环境研究院开展系列庆祝活动
为中国共产党成立94周年献礼', 'admin', '为喜迎中国共产党成立94周年,继承和发扬党的优良传统和作风,切实加强基层党组织建设,七一期间,省能源环境研究开展内了容丰富、形式多样的庆祝活动,通过主题鲜明、广泛参', '/uploads/allimg/150706/1-150F6145634K6-lp.JPG', '        为喜迎中国共产党成立94周年,继承和发扬党的优良传统和作风,切实加强基层党组织建设,“七一”期间,省能源环境研究开展内了容丰富、形式多样的庆祝活动,通过主题鲜明、广泛参与的活动,切实提升党组织的号召力、凝聚力和战斗力,使广大党员干部以更加饱满的热情迎接中国共产党成立94周年盛典。
\r\n        6月29日,省能源院开展了庆“七一”系列活动之一《书画摄影作品展》,为党的生日献礼。此次活动得到了全院职工的热情响应,全院共征集书画摄影作品50余件,经过评比、优选出优秀作品35件入选此次展览,其中书法作品“三严三实”,笔锋流畅有力、大气潇洒,充分展现了作者对“严与实”的深刻理解;绘画作品《庆》,用花开盛世的美好景象,祝福祖国欣欣向荣,繁荣昌盛;摄影作品内容积极向上,传递着正能量,其中有的歌颂祖国大好河山,有的缅怀历史,勿忘国耻,有的记录丰富多彩的业余生活。通过此次展览,全面地展示出省能源院职工爱自然、爱生活,爱工作的情怀。

\r\n
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n        6月30日,省能源院开展了庆“七一”系列活动之二《党员带头捐书、共建院图书共享平台》。经过积极策划、精心准备,党员干部带头捐书活动顺利开展,同时建立了省能源院自己的图书共享平台——博知苑,并且制定了相关借阅准则。此次捐书活动得到了省能源院全院职工的积极响应,大家纷纷把自己喜欢的书籍放到博知苑与大家一起分享,此次活动共收到书籍近百本,类别涵盖文史、社科、电子、机械、化工、生物、心理类等。在成立博知苑的当天,院里的很多同志就已经借阅了自己喜欢的书籍,相信在省能源院全院职工的共同努力下,博知苑一定会越办越好。\r\n
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n        7月1日,省能源院开展了庆“七一”系列活动之三《欢庆“七一 ”为党庆生》。此次活动得到了省科学院直属机关党委的大力支持,刘颖同志参加了系列活动。\r\n
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n
\r\n        活动第一项,举行老党员重温入党誓词、新党员入党宣誓仪式,新党员张帆、陆海玲同志及全体党员面对党旗庄严宣誓。入党宣誓是对党员进行教育的一种形式,体现了入党的庄重性和严肃性,同时激励新党员牢记党的誓言,更加严格地要求自己,也让老党员重温对党的承诺。宣誓活动结束后,作为领誓人的优秀老党员刘岩同志激动不已,表示即为省能源院得到新鲜力量的充实感到高兴,也为自己是省能源院的一员感到由衷的自豪。\r\n
\r\n
\r\n \"\"
\r\n
\r\n        活动第二项,举行“三严三实”知识竞答活动。省能源院按照“三严三实”专题教育实施方案的工作安排,固定将每周三定为“三严三实”专题学习日,本次竞答活动即是一次对“三严三实”的学习,也是对多次开展的专题学习进行一次检验,并通过问答活动,让广大党员进一步加深了对“三严三实”深刻内涵和意义的理解,使全院党员干部以更加严谨的工作作风和更加积极的工作态度投入到科研工作中,推动能源院不断向前发展。
\r\n
\r\n \"\"
\r\n 
\r\n        活动最后一项,集体观看专题电视片《周总理的严与实》,在严肃认真的氛围中,省能源院全体党员共同感受了伟人对待工作的认真与严谨,同时周总理严于律己的优秀品质和实干兴邦的治国理念,也让大家得到了深刻的启示,并认识到在科学研究的道路上要求真务实,用责任和担当坚守自己平凡的岗位,用真招实措换来实实在在的进步,用自身行动向社会传递正确的价值导向。
\r\n
\r\n
\r\n \"\"
\r\n 
\r\n        此次系列活动通过不同的形式使省能源院广大党员干部受到了教育,也充分展现了省能源院全体党员的精神风貌和对党的无限热爱,在祥和、愉悦的气氛中,省能源院庆“七一”系列活动圆满落幕。

\r\n', 1, 0, '未知', '黑龙江省,能源,环境,研究院,开展,系列,为,', '2015-07-06 05:28:00', '2020-06-02 02:11:01', NULL), +(132, 143, 7, '我院与加拿大阿尔伯塔技术创新研究院签订框架协议', 'admin', '2015年7月3日,在省科学院四楼会议室,黑龙江省科学院与加拿大阿尔伯塔省技术创新研究院合作协议签约仪式正式举行。省科学院院长郭春景、黑龙江省能源环境研究院院长徐晓秋及加', '/uploads/allimg/150713/1-150G30U9244D.JPG', '        2015年7月3日,在省科学院四楼会议室,黑龙江省科学院与加拿大阿尔伯塔省技术创新研究院合作协议签约仪式正式举行。省科学院院长郭春景、黑龙江省能源环境研究院院长徐晓秋及加方代表等参加签约仪式。
\r\n
\r\n \"\"
\r\n
\r\n        黑龙江省科学院以国家“十二五”规划提出的“推动非常规油气资源开发利用”为契机,紧抓我省发展重油沥青资源的良好时机,以黑龙江省能源环境研究院作为合作项目承担的主体,助力我省重油沥青资源精/深加工和综合利用。
\r\n
\r\n \"\"
\r\n
\r\n        根据协议内容,双方将在中国黑龙江省和加拿大阿尔伯塔省同时建立“黑龙江省/阿尔伯塔省沥青及重油联合研究中心”,并以该中心作为依托,利用重油及沥青等非常规能源作为原料,共同研究开发该领域的最新技术和产品,推进高端技术和产品融入黑龙江省的重点石化工业园区。协议内容还包括信息共享、成果转化、市场推广和人才培养等方面。
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '我院,与,加拿大,阿尔伯塔,技术创新,研究院,', '2015-07-13 01:05:06', '2020-06-02 02:11:02', NULL), +(133, 144, 7, '我院组织全体职工观看记录片《筑梦中国》', 'admin', '根据省科学院机关党委关于观看大型历史文献记录片《筑梦中国》相关要求,我院高度重视,积极部署观看学习活动。于7月24日、27日、28日每天下午13:30在能源院一楼会议室组织全院职', '/uploads/allimg/150731/1-150I1100346239.JPG', '        根据省科学院机关党委关于观看大型历史文献记录片《筑梦中国》相关要求,我院高度重视,积极部署观看学习活动。于7月24日、27日、28日每天下午13:30在能源院一楼会议室组织全院职工进行观看。
\r\n
\r\n
\r\n
\r\n  
\r\n        《筑梦中国》纪录片内容丰富,生动详实,振奋人心。该片展示了1840年鸦片战争以来中国人民在屈辱苦难中奋起抗争,为实现民族复兴进行的种种探索,特别是中国共产党领导全国各族人民争取民族独立、人民解放和国家富强、人民幸福的光辉历程,充分诠释了中华民族的复兴之路,生动阐释了中国梦的深刻内涵。
\r\n
\r\n
\r\n
\r\n  
\r\n        观看结束后,院职工表示,该片不仅仅是重温了中国的革命史,更重要的是看到了中国共产党在实现中华民族伟大复兴的道路上的披荆斩棘与力挽狂澜。该片同时教育我们要增强“三个自信”,要坚定不移走中国特色社会主义道路,为实现中华民族伟大复兴的中国梦而不懈奋斗。', 1, 0, '未知', '我院,组织,全体,职工,观看,记录片,《,根据省,', '2015-07-31 05:28:00', '2020-06-02 02:11:02', NULL), +(134, 145, 7, '我院参加全国科学院联盟能源分会启动仪式', 'admin', '2015年8月13日-14日黑龙江省能源环境研究院院长徐晓秋同志应邀参加了全国科学院联盟能源分会启动仪式。本次会议由中国科学院科技促进发展局和中国科学院沈阳分院主办,由中国科学', '/uploads/allimg/150819/1-150Q9130104925-lp.jpg', '        2015年8月13日-14日黑龙江省能源环境研究院院长徐晓秋同志应邀参加了全国科学院联盟能源分会启动仪式。本次会议由中国科学院科技促进发展局和中国科学院沈阳分院主办,由中国科学院大连化学物理研究所和新兴能源科技有限公司承办。
\r\n        参加会议的有中国科学院科技促进发展局陈文开副局长、中国科学院沈阳分院马越红副院长、中国科学院大连化学物理研究所党委书记王华研究员及各研究院所的领导同志等。英国石油公司、LUMMUS等国外公司的总裁、项目经理和国内石化产业相关企业的人员参加了此次会议。参会的能源领域领导、专家及企业家多达160人,盛况空前。

\r\n
\r\n
\r\n \"QQ图片20150819103946.jpg\"
\r\n  
\r\n        2015年8月13日9:00中国科学院科技促进发展局、山东省科学院、大连市政府、大连化学物理所领导致辞,并且进行全国科学院联盟能源分会揭牌仪式,全国科学院联盟能源分会正式启动。8月14日与会专家审议了分会章程,成立能源分会理事会,推选理事长、副理事长、秘书长等领导机构,对各参会单位的合作模式进行研讨。
\r\n        两天的会议在热烈的气氛中结束,全国科学院联盟能源分会成立标志着中国科学院系统能源领域强强联合,谱写共同发展的新篇章。
', 1, 0, '未知', '我院,参加,全国,科学院,联盟,能源,分会,启动,', '2015-08-19 02:59:00', '2020-06-02 02:11:02', NULL), +(135, 146, 7, '省科学院督研委对能源环境研究院
科研基金项目的执行情况进行督导和检查', 'admin', '2015年8月26日,省科学院督研委对院基金项目页岩油深加工工艺关键技术的执行情况进行阶段性督导和检查。会议由院科研处隋月梅副处长主持。 督研委专家们听取了课题组的工作汇报', '/uploads/allimg/150827/1-150RG14423309-lp.JPG', '        2015年8月26日,省科学院督研委对院基金项目“页岩油深加工工艺关键技术”的执行情况进行阶段性督导和检查。会议由院科研处隋月梅副处长主持。\r\n
\r\n
\r\n        督研委专家们听取了课题组的工作汇报,对项目充分利用黑龙江省赋存丰富的非常规能源—油页岩资源,开发页岩油深加工制取运输燃料和化工轻油技术,助力我省替代能源的开发和利用给予高度评价。经认真质询、讨论,对该项目阶段总结工作给予充分肯定,同意继续支持该项目研发,并对下阶段的研发工作提出了合理化建议。
\r\n        最后,隋月梅副处长做了总结性发言,希望课题组按照专家们的建议修改调整研发思路,圆满完成科研项目,为我院的学科发展提供有力的技术支撑。
', 1, 0, '未知', '省,科学院,督研,委,对,能源,环境,研究院,科研,', '2015-08-27 03:42:18', '2020-06-02 02:11:02', NULL), +(136, 147, 7, '热烈祝贺我院选手在省科学院“三严三实”青年党史知识竞赛中获三等奖', 'admin', '9 月9日 ,由省科学院团委主办的 三严三实 青年党史知识竞赛在嵩山路15号8楼会议室拉开帷幕。此次竞赛内容涵盖了党章,党史,十八大报告,十八届三中、四中全会精神,习总书记系', '/uploads/allimg/150916/1-15091614595c35-lp.JPG', '        9月9日,由省科学院团委主办的三严三实 青年党史知识竞赛在嵩山路15号8楼会议室拉开帷幕。此次竞赛内容涵盖了党章,党史,十八大报告,十八届三中、四中全会精神,习总书记系列重要讲话精神,时事政治等内容,旨在通过此竞赛,使全体青年党员重温党的光辉历程,进一步推动三严三实专题教育工作。比赛共有9支代表队参加,代表我院参赛的杨光、陆佳、潘良3名队员团结拼搏,经过必答题、抢答题和风险题三轮激烈比拼,获得三等奖,为我院争得了荣誉。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '热烈,祝贺,我院,选手,在,省,科学院,“,月,9日,', '2015-09-09 07:05:00', '2020-06-02 02:11:02', NULL), +(137, 148, 7, '黑龙江省科学院党组书记赵梅同志莅临黑龙江省能源环境研究院调研指导工作', 'admin', '10月13日下午,省科学院党组书记赵梅同志在院办公室主任章力同志的陪同下莅临黑龙江省能源环境研究院调研指导工作。省能源院徐晓秋院长、关春玲副院长参加了此次调研。 调研会', '/uploads/allimg/151015/1-151015113633c1-lp.JPG', '          10月13日下午,省科学院党组书记赵梅同志在院办公室主任章力同志的陪同下莅临黑龙江省能源环境研究院调研指导工作。省能源院徐晓秋院长、关春玲副院长参加了此次调研。\r\n
\r\n \"\"
\r\n        调研会议上赵梅书记与参会同志进行了广泛讨论。徐晓秋院长首先向赵梅书记详细汇报了能源院的发展概况,其间,赵书记询问了能源院的人员结构和发展历程。随后,赵书记就能源院重点项目、学科建设、人才培养、发展规划等方面进行了调研。赵书记对省能源院近几年在能源环境领域取得的成绩和进步给予了充分肯定,赵书记指出,能源院的重点项目在能源环境领域的特点突出,作为公益一类科研单位,在科研工作的推进过程中应准确把握需求、调动好各方的积极性,要最大程度发挥领域优势,为我省经济社会发展和政府决策提供支撑和保障。
\r\n 
\r\n
\r\n
\r\n        会后,赵梅书记一行参观了能源院各实验室,并与科研人员进行了交流探讨。', 1, 0, '未知', '黑龙江省,科学院,党组书记,赵梅,同志,莅临,', '2015-10-14 05:44:00', '2020-06-02 02:11:02', NULL), +(138, 149, 7, '黑龙江省能源环境学会成立大会暨首届学术年会在哈顺利召开', 'admin', '2015年10月18日,黑龙江省能源环境学会成立大会暨首届学术年会在哈隆重举行。此次活动由省能源环境学会筹备委员会主办,省能源环境研究院、哈工大城市水资源与水环境国家重点实', '/uploads/allimg/151021/1-15102112162D17.jpg', '        2015年10月18日,黑龙江省能源环境学会成立大会暨首届学术年会在哈隆重举行。此次活动由省能源环境学会筹备委员会主办,省能源环境研究院、哈工大城市水资源与水环境国家重点实验室承办。黑龙江省科学院郭春景院长、省环保厅李平厅长、哈尔滨工业大学安实副校长、黑龙江省科学院王刚副院长、黑龙江省科协苏凤仙副主席、省民间组织管理局孙俭太副局长、城市水资源与水环境国家重点实验室常务副主任马放教授出席了此次会议。 
\r\n
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n        省内能源环境领域的领导、各研究院所、高校学科带头人和骨干教师等共计110人出席了大会。会议通过了黑龙江省能源环境学会章程,并按照相关规定投票选举出了黑龙江省能源环境学会第一届理事及学会领导人员。马放当选为首届能源环境学会理事长、高德玉当选为秘书长。
\r\n
\r\n \"\"
\r\n
\r\n         黑龙江省能源环境学会(HSEE:Heilongjiang Society for Energy and Environment)是经黑龙江省科学技术协会批准,在黑龙江省民间组织管理登记注册的学术性、公益性、非盈利性法人社会团体,办事机构常设在黑龙江能源环境研究院。黑龙江省能源环境学会集中了全省最优秀的能源环境领域科技人才,首批个人会员为123人,团体会员为5个。学会将根据业务发展情况,设立相关专业技术委员会。
\r\n
\r\n \"\"
\r\n
\r\n        上午9点成立大会正式举行,会议由省能源环境研究院徐晓秋院长主持。省科学院王钢副院长致开幕词。省民间组织管理局孙俭太副局长宣读了关于同意成立省能源环境学会的批复文件。省科学院郭春景院长、省环保厅李平厅长、哈工大安实副校长、省科协苏凤仙副主席、城市水资源与水环境国家重点实验室马放主任分别围绕能源环境学会成立的意义和成立后的各项工作发表重要讲话。
\r\n郭春景院长指出,学会近期工作要围绕两点,一要主动作为,敢于担当。要充分调动发挥本学会中的专业技术优势,积极参与解决我省能源供求矛盾突出的现状。二是不断创新,培养人才。要探索创新型科研技术,培养综合型科技人才,积极为我省能源环境研究工作提供技术支持,搭建科研平台,为我省新能源的开发与环境保护工作开辟出一条自主创新的发展之路。

\r\n
\r\n \"\"
\r\n
\r\n        下午,省内能源环境领域的专家一起就环境保护、能源发展等方面进行了学术研讨。', 1, 0, '未知', '黑龙江省,能源,环境,学会,成立,大会,暨,首届,', '2015-10-19 04:20:00', '2020-06-02 02:11:02', NULL), +(139, 150, 7, '关于转发《中国共产党廉政自律准则》和《中国共产党纪律处分条例》的通知', 'admin', '能源院全体党员: 为扎实开展三严三实专题教育工作,紧扣《中国共产党巡视工作条例》对六大纪律的要求,引导和教育全体党员牢固树立自觉遵守党章党纪党规的政治意识和大局观念', '', '
\r\n 能源院全体党员:
\r\n
\r\n         为扎实开展“三严三实”专题教育工作,紧扣《中国共产党巡视工作条例》对“六大纪律”的要求,引导和教育全体党员牢固树立自觉遵守党章党纪党规的政治意识和大局观念,守住“不想腐”的思想防线,筑牢“不能腐”的制度笼子,坚持“不敢腐”的高压态势,营造风清气正的发展环境。现将《中国共产党廉政自律准则》及《中国共产党纪律处分条例》转发给你们,请全体党员认真自学。
\r\n
\r\n
\r\n         附件1:中国共产党廉政自律准则
\r\n
\r\n        附件2:中国共产党纪律处分条例
\r\n', 1, 0, '未知', '关于,转发,《,中国共产党廉政自律准则,》,和,', '2015-11-03 03:32:43', '2020-06-02 02:11:02', NULL), +(140, 151, 7, '中共中央关于制定国民经济和社会发展第十三个五年规划的建议', 'admin', '(2015年10月29日中国共产党第十八届中央委员会第五次全体会议通过) 到二〇二〇年全面建成小康社会,是我们党确定的两个一百年奋斗目标的第一个百年奋斗目标。十三五时期是全面', '', '
\r\n (2015年10月29日中国共产党第十八届中央委员会第五次全体会议通过)
\r\n  
\r\n        到二〇二〇年全面建成小康社会,是我们党确定的“两个一百年”奋斗目标的第一个百年奋斗目标。“十三五”时期是全面建成小康社会决胜阶段,“十三五”规划必须紧紧围绕实现这个奋斗目标来制定。
\r\n    中国共产党第十八届中央委员会第五次全体会议全面分析国际国内形势,认为如期全面建成小康社会既具有充分条件也面临艰巨任务,必须在新中国成立特别是改革开放以来打下的坚实基础上坚定信心、锐意进取、奋发有为。全会研究了“十三五”时期我国发展的一系列重大问题,就制定“十三五”规划提出以下建议。
\r\n    一、全面建成小康社会决胜阶段的形势和指导思想
\r\n    (一)“十二五”时期我国发展取得重大成就。“十二五”时期是我国发展很不平凡的五年。面对错综复杂的国际环境和艰巨繁重的国内改革发展稳定任务,我们党团结带领全国各族人民顽强拼搏、开拓创新,奋力开创了党和国家事业发展新局面。
\r\n    我们妥善应对国际金融危机持续影响等一系列重大风险挑战,适应经济发展新常态,不断创新宏观调控方式,推动形成经济结构优化、发展动力转换、发展方式转变加快的良好态势。我国经济总量稳居世界第二位,十三亿多人口的人均国内生产总值增至七千八百美元左右。第三产业增加值占国内生产总值比重超过第二产业,基础设施水平全面跃升,农业连续增产,常住人口城镇化率达到百分之五十五,一批重大科技成果达到世界先进水平。公共服务体系基本建立、覆盖面持续扩大,新增就业持续增加,贫困人口大幅减少,生态文明建设取得新进展,人民生活水平和质量加快提高。全面深化改革有力推进,人民民主不断扩大,依法治国开启新征程。全方位外交取得重大进展,对外开放不断深入,我国成为全球第一货物贸易大国和主要对外投资大国。中华民族伟大复兴的中国梦和社会主义核心价值观深入人心,国家文化软实力不断增强。中国特色军事变革成就显著,强军兴军迈出新步伐。全面从严治党开创新局面,党的群众路线教育实践活动成果丰硕,党风廉政建设成效显著,赢得了党心民心。“十二五”规划目标即将胜利实现,我国经济实力、科技实力、国防实力、国际影响力又上了一个大台阶。
\r\n    尤为重要的是,党的十八大以来,以习近平同志为总书记的党中央毫不动摇坚持和发展中国特色社会主义,勇于实践、善于创新,深化对共产党执政规律、社会主义建设规律、人类社会发展规律的认识,形成一系列治国理政新理念新思想新战略,为在新的历史条件下深化改革开放、加快推进社会主义现代化提供了科学理论指导和行动指南。
\r\n    (二)“十三五”时期我国发展环境的基本特征。和平与发展的时代主题没有变,世界多极化、经济全球化、文化多样化、社会信息化深入发展,世界经济在深度调整中曲折复苏,新一轮科技革命和产业变革蓄势待发,全球治理体系深刻变革,发展中国家群体力量继续增强,国际力量对比逐步趋向平衡。同时,国际金融危机深层次影响在相当长时期依然存在,全球经济贸易增长乏力,保护主义抬头,地缘政治关系复杂变化,传统安全威胁和非传统安全威胁交织,外部环境不稳定不确定因素增多。
\r\n    我国物质基础雄厚、人力资本丰富、市场空间广阔、发展潜力巨大,经济发展方式加快转变,新的增长动力正在孕育形成,经济长期向好基本面没有改变。同时,发展不平衡、不协调、不可持续问题仍然突出,主要是发展方式粗放,创新能力不强,部分行业产能过剩严重,企业效益下滑,重大安全事故频发;城乡区域发展不平衡;资源约束趋紧,生态环境恶化趋势尚未得到根本扭转;基本公共服务供给不足,收入差距较大,人口老龄化加快,消除贫困任务艰巨;人们文明素质和社会文明程度有待提高;法治建设有待加强;领导干部思想作风和能力水平有待提高,党员、干部先锋模范作用有待强化。我们必须增强忧患意识、责任意识,着力在优化结构、增强动力、化解矛盾、补齐短板上取得突破性进展。
\r\n    综合判断,我国发展仍处于可以大有作为的重要战略机遇期,也面临诸多矛盾叠加、风险隐患增多的严峻挑战。我们要准确把握战略机遇期内涵的深刻变化,更加有效地应对各种风险和挑战,继续集中力量把自己的事情办好,不断开拓发展新境界。
\r\n    (三)“十三五”时期我国发展的指导思想。高举中国特色社会主义伟大旗帜,全面贯彻党的十八大和十八届三中、四中全会精神,以马克思列宁主义、毛泽东思想、邓小平理论、“三个代表”重要思想、科学发展观为指导,深入贯彻习近平总书记系列重要讲话精神,坚持全面建成小康社会、全面深化改革、全面依法治国、全面从严治党的战略布局,坚持发展是第一要务,以提高发展质量和效益为中心,加快形成引领经济发展新常态的体制机制和发展方式,保持战略定力,坚持稳中求进,统筹推进经济建设、政治建设、文化建设、社会建设、生态文明建设和党的建设,确保如期全面建成小康社会,为实现第二个百年奋斗目标、实现中华民族伟大复兴的中国梦奠定更加坚实的基础。
\r\n    如期实现全面建成小康社会奋斗目标,推动经济社会持续健康发展,必须遵循以下原则。
\r\n    ——坚持人民主体地位。人民是推动发展的根本力量,实现好、维护好、发展好最广大人民根本利益是发展的根本目的。必须坚持以人民为中心的发展思想,把增进人民福祉、促进人的全面发展作为发展的出发点和落脚点,发展人民民主,维护社会公平正义,保障人民平等参与、平等发展权利,充分调动人民积极性、主动性、创造性。
\r\n    ——坚持科学发展。发展是硬道理,发展必须是科学发展。我国仍处于并将长期处于社会主义初级阶段,基本国情和社会主要矛盾没有变,这是谋划发展的基本依据。必须坚持以经济建设为中心,从实际出发,把握发展新特征,加大结构性改革力度,加快转变经济发展方式,实现更高质量、更有效率、更加公平、更可持续的发展。
\r\n    ——坚持深化改革。改革是发展的强大动力。必须按照完善和发展中国特色社会主义制度、推进国家治理体系和治理能力现代化的总目标,健全使市场在资源配置中起决定性作用和更好发挥政府作用的制度体系,以经济体制改革为重点,加快完善各方面体制机制,破除一切不利于科学发展的体制机制障碍,为发展提供持续动力。
\r\n    ——坚持依法治国。法治是发展的可靠保障。必须坚定不移走中国特色社会主义法治道路,加快建设中国特色社会主义法治体系,建设社会主义法治国家,推进科学立法、严格执法、公正司法、全民守法,加快建设法治经济和法治社会,把经济社会发展纳入法治轨道。
\r\n    ——坚持统筹国内国际两个大局。全方位对外开放是发展的必然要求。必须坚持打开国门搞建设,既立足国内,充分运用我国资源、市场、制度等优势,又重视国内国际经济联动效应,积极应对外部环境变化,更好利用两个市场、两种资源,推动互利共赢、共同发展。
\r\n    ——坚持党的领导。党的领导是中国特色社会主义制度的最大优势,是实现经济社会持续健康发展的根本政治保证。必须贯彻全面从严治党要求,不断增强党的创造力、凝聚力、战斗力,不断提高党的执政能力和执政水平,确保我国发展航船沿着正确航道破浪前进。
\r\n    二、“十三五”时期经济社会发展的主要目标和基本理念
\r\n    (一)全面建成小康社会新的目标要求。党的十六大提出全面建设小康社会奋斗目标以来,全党全国各族人民接续奋斗,各项事业取得重大进展。今后五年,要在已经确定的全面建成小康社会目标要求的基础上,努力实现以下新的目标要求。
\r\n    ——经济保持中高速增长。在提高发展平衡性、包容性、可持续性的基础上,到二〇二〇年国内生产总值和城乡居民人均收入比二〇一〇年翻一番。主要经济指标平衡协调,发展空间格局得到优化,投资效率和企业效率明显上升,工业化和信息化融合发展水平进一步提高,产业迈向中高端水平,先进制造业加快发展,新产业新业态不断成长,服务业比重进一步上升,消费对经济增长贡献明显加大。户籍人口城镇化率加快提高。农业现代化取得明显进展。迈进创新型国家和人才强国行列。
\r\n    ——人民生活水平和质量普遍提高。就业比较充分,就业、教育、文化、社保、医疗、住房等公共服务体系更加健全,基本公共服务均等化水平稳步提高。教育现代化取得重要进展,劳动年龄人口受教育年限明显增加。收入差距缩小,中等收入人口比重上升。我国现行标准下农村贫困人口实现脱贫,贫困县全部摘帽,解决区域性整体贫困。
\r\n    ——国民素质和社会文明程度显著提高。中国梦和社会主义核心价值观更加深入人心,爱国主义、集体主义、社会主义思想广泛弘扬,向上向善、诚信互助的社会风尚更加浓厚,人民思想道德素质、科学文化素质、健康素质明显提高,全社会法治意识不断增强。公共文化服务体系基本建成,文化产业成为国民经济支柱性产业。中华文化影响持续扩大。
\r\n    ——生态环境质量总体改善。生产方式和生活方式绿色、低碳水平上升。能源资源开发利用效率大幅提高,能源和水资源消耗、建设用地、碳排放总量得到有效控制,主要污染物排放总量大幅减少。主体功能区布局和生态安全屏障基本形成。
\r\n    ——各方面制度更加成熟更加定型。国家治理体系和治理能力现代化取得重大进展,各领域基础性制度体系基本形成。人民民主更加健全,法治政府基本建成,司法公信力明显提高。人权得到切实保障,产权得到有效保护。开放型经济新体制基本形成。中国特色现代军事体系更加完善。党的建设制度化水平显著提高。
\r\n    (二)完善发展理念。实现“十三五”时期发展目标,破解发展难题,厚植发展优势,必须牢固树立创新、协调、绿色、开放、共享的发展理念。
\r\n    创新是引领发展的第一动力。必须把创新摆在国家发展全局的核心位置,不断推进理论创新、制度创新、科技创新、文化创新等各方面创新,让创新贯穿党和国家一切工作,让创新在全社会蔚然成风。
\r\n    协调是持续健康发展的内在要求。必须牢牢把握中国特色社会主义事业总体布局,正确处理发展中的重大关系,重点促进城乡区域协调发展,促进经济社会协调发展,促进新型工业化、信息化、城镇化、农业现代化同步发展,在增强国家硬实力的同时注重提升国家软实力,不断增强发展整体性。
\r\n    绿色是永续发展的必要条件和人民对美好生活追求的重要体现。必须坚持节约资源和保护环境的基本国策,坚持可持续发展,坚定走生产发展、生活富裕、生态良好的文明发展道路,加快建设资源节约型、环境友好型社会,形成人与自然和谐发展现代化建设新格局,推进美丽中国建设,为全球生态安全作出新贡献。
\r\n    开放是国家繁荣发展的必由之路。必须顺应我国经济深度融入世界经济的趋势,奉行互利共赢的开放战略,坚持内外需协调、进出口平衡、引进来和走出去并重、引资和引技引智并举,发展更高层次的开放型经济,积极参与全球经济治理和公共产品供给,提高我国在全球经济治理中的制度性话语权,构建广泛的利益共同体。
\r\n    共享是中国特色社会主义的本质要求。必须坚持发展为了人民、发展依靠人民、发展成果由人民共享,作出更有效的制度安排,使全体人民在共建共享发展中有更多获得感,增强发展动力,增进人民团结,朝着共同富裕方向稳步前进。
\r\n    坚持创新发展、协调发展、绿色发展、开放发展、共享发展,是关系我国发展全局的一场深刻变革。全党同志要充分认识这场变革的重大现实意义和深远历史意义,统一思想,协调行动,深化改革,开拓前进,推动我国发展迈上新台阶。
\r\n    三、坚持创新发展,着力提高发展质量和效益
\r\n    在国际发展竞争日趋激烈和我国发展动力转换的形势下,必须把发展基点放在创新上,形成促进创新的体制架构,塑造更多依靠创新驱动、更多发挥先发优势的引领型发展。
\r\n    (一)培育发展新动力。优化劳动力、资本、土地、技术、管理等要素配置,激发创新创业活力,推动大众创业、万众创新,释放新需求,创造新供给,推动新技术、新产业、新业态蓬勃发展,加快实现发展动力转换。
\r\n    发挥消费对增长的基础作用,着力扩大居民消费,引导消费朝着智能、绿色、健康、安全方向转变,以扩大服务消费为重点带动消费结构升级。促进流通信息化、标准化、集约化。
\r\n    发挥投资对增长的关键作用,深化投融资体制改革,优化投资结构,增加有效投资。发挥财政资金撬动功能,创新融资方式,带动更多社会资本参与投资。创新公共基础设施投融资体制,推广政府和社会资本合作模式。
\r\n    发挥出口对增长的促进作用,增强对外投资和扩大出口结合度,培育以技术、标准、品牌、质量、服务为核心的对外经济新优势。实施优进优出战略,推进国际产能和装备制造合作,提高劳动密集型产品科技含量和附加值,营造资本和技术密集型产业新优势,提高我国产业在全球价值链中的地位。
\r\n    (二)拓展发展新空间。用发展新空间培育发展新动力,用发展新动力开拓发展新空间。
\r\n    拓展区域发展空间。以区域发展总体战略为基础,以“一带一路”建设、京津冀协同发展、长江经济带建设为引领,形成沿海沿江沿线经济带为主的纵向横向经济轴带。发挥城市群辐射带动作用,优化发展京津冀、长三角、珠三角三大城市群,形成东北地区、中原地区、长江中游、成渝地区、关中平原等城市群。发展一批中心城市,强化区域服务功能。支持绿色城市、智慧城市、森林城市建设和城际基础设施互联互通。推进重点地区一体发展,培育壮大若干重点经济区。推进城乡发展一体化,开辟农村广阔发展空间。
\r\n    拓展产业发展空间。支持节能环保、生物技术、信息技术、智能制造、高端装备、新能源等新兴产业发展,支持传统产业优化升级。推广新型孵化模式,鼓励发展众创、众包、众扶、众筹空间。发展天使、创业、产业投资,深化创业板、新三板改革。
\r\n    拓展基础设施建设空间。实施重大公共设施和基础设施工程。实施网络强国战略,加快构建高速、移动、安全、泛在的新一代信息基础设施。加快完善水利、铁路、公路、水运、民航、通用航空、管道、邮政等基础设施网络。完善能源安全储备制度。加强城市公共交通、防洪防涝等设施建设。实施城市地下管网改造工程。加快开放电力、电信、交通、石油、天然气、市政公用等自然垄断行业的竞争性业务。
\r\n    拓展网络经济空间。实施“互联网+”行动计划,发展物联网技术和应用,发展分享经济,促进互联网和经济社会融合发展。实施国家大数据战略,推进数据资源开放共享。完善电信普遍服务机制,开展网络提速降费行动,超前布局下一代互联网。推进产业组织、商业模式、供应链、物流链创新,支持基于互联网的各类创新。
\r\n    拓展蓝色经济空间。坚持陆海统筹,壮大海洋经济,科学开发海洋资源,保护海洋生态环境,维护我国海洋权益,建设海洋强国。
\r\n    (三)深入实施创新驱动发展战略。发挥科技创新在全面创新中的引领作用,加强基础研究,强化原始创新、集成创新和引进消化吸收再创新。推进有特色高水平大学和科研院所建设,鼓励企业开展基础性前沿性创新研究,重视颠覆性技术创新。实施一批国家重大科技项目,在重大创新领域组建一批国家实验室。积极提出并牵头组织国际大科学计划和大科学工程。
\r\n    推动政府职能从研发管理向创新服务转变。完善国家科技决策咨询制度。坚持战略和前沿导向,集中支持事关发展全局的基础研究和共性关键技术研究,加快突破新一代信息通信、新能源、新材料、航空航天、生物医药、智能制造等领域核心技术。瞄准瓶颈制约问题,制定系统性技术解决方案。
\r\n    强化企业创新主体地位和主导作用,形成一批有国际竞争力的创新型领军企业,支持科技型中小企业健康发展。依托企业、高校、科研院所建设一批国家技术创新中心,形成若干具有强大带动力的创新型城市和区域创新中心。完善企业研发费用加计扣除政策,扩大固定资产加速折旧实施范围,推动设备更新和新技术应用。
\r\n    深化科技体制改革,引导构建产业技术创新联盟,推动跨领域跨行业协同创新,促进科技与经济深度融合。加强技术和知识产权交易平台建设,建立从实验研究、中试到生产的全过程科技创新融资模式,促进科技成果资本化、产业化。构建普惠性创新支持政策体系,加大金融支持和税收优惠力度。深化知识产权领域改革,加强知识产权保护。
\r\n    扩大高校和科研院所自主权,赋予创新领军人才更大人财物支配权、技术路线决策权。实行以增加知识价值为导向的分配政策,提高科研人员成果转化收益分享比例,鼓励人才弘扬奉献精神。
\r\n    (四)大力推进农业现代化。农业是全面建成小康社会、实现现代化的基础。加快转变农业发展方式,发展多种形式适度规模经营,发挥其在现代农业建设中的引领作用。着力构建现代农业产业体系、生产体系、经营体系,提高农业质量效益和竞争力,推动粮经饲统筹、农林牧渔结合、种养加一体、一二三产业融合发展,走产出高效、产品安全、资源节约、环境友好的农业现代化道路。
\r\n    稳定农村土地承包关系,完善土地所有权、承包权、经营权分置办法,依法推进土地经营权有序流转,构建培育新型农业经营主体的政策体系。培养新型职业农民。深化农村土地制度改革。完善农村集体产权权能。深化农村金融改革,完善农业保险制度。
\r\n    坚持最严格的耕地保护制度,坚守耕地红线,实施藏粮于地、藏粮于技战略,提高粮食产能,确保谷物基本自给、口粮绝对安全。全面划定永久基本农田,大规模推进农田水利、土地整治、中低产田改造和高标准农田建设,加强粮食等大宗农产品主产区建设,探索建立粮食生产功能区和重要农产品生产保护区。优化农业生产结构和区域布局,推进产业链和价值链建设,开发农业多种功能,提高农业综合效益。
\r\n    推进农业标准化和信息化。健全从农田到餐桌的农产品质量安全全过程监管体系、现代农业科技创新推广体系、农业社会化服务体系。发展现代种业,提高农业机械化水平。持续增加农业投入,完善农业补贴政策。改革农产品价格形成机制,完善粮食等重要农产品收储制度。加强农产品流通设施和市场建设。
\r\n    (五)构建产业新体系。加快建设制造强国,实施《中国制造二〇二五》。引导制造业朝着分工细化、协作紧密方向发展,促进信息技术向市场、设计、生产等环节渗透,推动生产方式向柔性、智能、精细转变。
\r\n    实施工业强基工程,开展质量品牌提升行动,支持企业瞄准国际同行业标杆推进技术改造,全面提高产品技术、工艺装备、能效环保等水平。更加注重运用市场机制、经济手段、法治办法化解产能过剩,加大政策引导力度,完善企业退出机制。
\r\n    支持战略性新兴产业发展,发挥产业政策导向和促进竞争功能,更好发挥国家产业投资引导基金作用,培育一批战略性产业。
\r\n    实施智能制造工程,构建新型制造体系,促进新一代信息通信技术、高档数控机床和机器人、航空航天装备、海洋工程装备及高技术船舶、先进轨道交通装备、节能与新能源汽车、电力装备、农机装备、新材料、生物医药及高性能医疗器械等产业发展壮大。
\r\n    开展加快发展现代服务业行动,放宽市场准入,促进服务业优质高效发展。推动生产性服务业向专业化和价值链高端延伸、生活性服务业向精细和高品质转变,推动制造业由生产型向生产服务型转变。大力发展旅游业。
\r\n    (六)构建发展新体制。加快形成有利于创新发展的市场环境、产权制度、投融资体制、分配制度、人才培养引进使用机制。
\r\n    深化行政管理体制改革,进一步转变政府职能,持续推进简政放权、放管结合、优化服务,提高政府效能,激发市场活力和社会创造力。
\r\n    坚持公有制为主体、多种所有制经济共同发展。毫不动摇巩固和发展公有制经济,毫不动摇鼓励、支持、引导非公有制经济发展。推进产权保护法治化,依法保护各种所有制经济权益。
\r\n    深化国有企业改革,增强国有经济活力、控制力、影响力、抗风险能力。分类推进国有企业改革,完善现代企业制度。完善各类国有资产管理体制,以管资本为主加强国有资产监管,防止国有资产流失。健全国有资本合理流动机制,推进国有资本布局战略性调整,引导国有资本更多投向关系国家安全、国民经济命脉的重要行业和关键领域,坚定不移把国有企业做强做优做大,更好服务于国家战略目标。
\r\n    鼓励民营企业依法进入更多领域,引入非国有资本参与国有企业改革,更好激发非公有制经济活力和创造力。
\r\n    优化企业发展环境。开展降低实体经济企业成本行动,优化运营模式,增强盈利能力。限制政府对企业经营决策的干预,减少行政审批事项。清理和规范涉企行政事业性收费,减轻企业负担,完善公平竞争、促进企业健康发展的政策和制度。激发企业家精神,依法保护企业家财产权和创新收益。
\r\n    加快形成统一开放、竞争有序的市场体系,建立公平竞争保障机制,打破地域分割和行业垄断。深化市场配置要素改革,促进人才、资金、科研成果等在城乡、企业、高校、科研机构间有序流动。
\r\n    深化财税体制改革,建立健全有利于转变经济发展方式、形成全国统一市场、促进社会公平正义的现代财政制度,建立税种科学、结构优化、法律健全、规范公平、征管高效的税收制度。建立事权和支出责任相适应的制度,适度加强中央事权和支出责任。调动各方面积极性,考虑税种属性,进一步理顺中央和地方收入划分。建立全面规范、公开透明预算制度,完善政府预算体系,实施跨年度预算平衡机制和中期财政规划管理。建立规范的地方政府举债融资体制。健全优先使用创新产品、绿色产品的政府采购政策。
\r\n    加快金融体制改革,提高金融服务实体经济效率。健全商业性金融、开发性金融、政策性金融、合作性金融分工合理、相互补充的金融机构体系。构建多层次、广覆盖、有差异的银行机构体系,扩大民间资本进入银行业,发展普惠金融,着力加强对中小微企业、农村特别是贫困地区金融服务。积极培育公开透明、健康发展的资本市场,推进股票和债券发行交易制度改革,提高直接融资比重,降低杠杆率。开发符合创新需求的金融服务,推进高收益债券及股债相结合的融资方式。推进汇率和利率市场化,提高金融机构管理水平和服务质量,降低企业融资成本。规范发展互联网金融。加快建立巨灾保险制度,探索建立保险资产交易机制。
\r\n    加强金融宏观审慎管理制度建设,加强统筹协调,改革并完善适应现代金融市场发展的金融监管框架,健全符合我国国情和国际标准的监管规则,实现金融风险监管全覆盖。完善国有金融资本和外汇储备管理制度,建立安全高效的金融基础设施,有效运用和发展金融风险管理工具。防止发生系统性区域性金融风险。
\r\n    (七)创新和完善宏观调控方式。按照总量调节和定向施策并举、短期和中长期结合、国内和国际统筹、改革和发展协调的要求,完善宏观调控,采取相机调控、精准调控措施,适时预调微调,更加注重扩大就业、稳定物价、调整结构、提高效益、防控风险、保护环境。
\r\n    依据国家中长期发展规划目标和总供求格局实施宏观调控,稳定政策基调,增强可预期性和透明度,创新调控思路和政策工具,在区间调控基础上加大定向调控力度,增强针对性和准确性。完善以财政政策、货币政策为主,产业政策、区域政策、投资政策、消费政策、价格政策协调配合的政策体系,增强财政货币政策协调性。运用大数据技术,提高经济运行信息及时性和准确性。
\r\n    减少政府对价格形成的干预,全面放开竞争性领域商品和服务价格,放开电力、石油、天然气、交通运输、电信等领域竞争性环节价格。
\r\n    建立风险识别和预警机制,以可控方式和节奏主动释放风险,重点提高财政、金融、能源、矿产资源、水资源、粮食、生态环保、安全生产、网络安全等方面风险防控能力。
\r\n    四、坚持协调发展,着力形成平衡发展结构
\r\n    增强发展协调性,必须坚持区域协同、城乡一体、物质文明精神文明并重、经济建设国防建设融合,在协调发展中拓宽发展空间,在加强薄弱领域中增强发展后劲。
\r\n    (一)推动区域协调发展。塑造要素有序自由流动、主体功能约束有效、基本公共服务均等、资源环境可承载的区域协调发展新格局。
\r\n    深入实施西部大开发,支持西部地区改善基础设施,发展特色优势产业,强化生态环境保护。推动东北地区等老工业基地振兴,促进中部地区崛起,加大国家支持力度,加快市场取向改革。支持东部地区率先发展,更好辐射带动其他地区。支持革命老区、民族地区、边疆地区、贫困地区加快发展,加大对资源枯竭、产业衰退、生态严重退化等困难地区的支持力度。
\r\n    培育若干带动区域协同发展的增长极。推动京津冀协同发展,优化城市空间布局和产业结构,有序疏解北京非首都功能,推进交通一体化,扩大环境容量和生态空间,探索人口经济密集地区优化开发新模式。推进长江经济带建设,改善长江流域生态环境,高起点建设综合立体交通走廊,引导产业优化布局和分工协作。
\r\n    (二)推动城乡协调发展。坚持工业反哺农业、城市支持农村,健全城乡发展一体化体制机制,推进城乡要素平等交换、合理配置和基本公共服务均等化。
\r\n    发展特色县域经济,加快培育中小城市和特色小城镇,促进农产品精深加工和农村服务业发展,拓展农民增收渠道,完善农民收入增长支持政策体系,增强农村发展内生动力。
\r\n    推进以人为核心的新型城镇化。提高城市规划、建设、管理水平。深化户籍制度改革,促进有能力在城镇稳定就业和生活的农业转移人口举家进城落户,并与城镇居民有同等权利和义务。实施居住证制度,努力实现基本公共服务常住人口全覆盖。健全财政转移支付同农业转移人口市民化挂钩机制,建立城镇建设用地增加规模同吸纳农业转移人口落户数量挂钩机制。维护进城落户农民土地承包权、宅基地使用权、集体收益分配权,支持引导其依法自愿有偿转让上述权益。深化住房制度改革。加大城镇棚户区和城乡危房改造力度。
\r\n    促进城乡公共资源均衡配置,健全农村基础设施投入长效机制,把社会事业发展重点放在农村和接纳农业转移人口较多的城镇,推动城镇公共服务向农村延伸。提高社会主义新农村建设水平,开展农村人居环境整治行动,加大传统村落民居和历史文化名村名镇保护力度,建设美丽宜居乡村。
\r\n    (三)推动物质文明和精神文明协调发展。坚持“两手抓、两手都要硬”,坚持社会主义先进文化前进方向,坚持以人民为中心的工作导向,坚持把社会效益放在首位、社会效益和经济效益相统一,坚定文化自信,增强文化自觉,加快文化改革发展,加强社会主义精神文明建设,建设社会主义文化强国。
\r\n    坚持用邓小平理论、“三个代表”重要思想、科学发展观和习近平总书记系列重要讲话精神武装全党、教育人民,用中国梦和社会主义核心价值观凝聚共识、汇聚力量。深化马克思主义理论研究和建设工程,加强思想道德建设和社会诚信建设,增强国家意识、法治意识、社会责任意识,倡导科学精神,弘扬中华传统美德,注重通过法律和政策向社会传导正确价值取向。
\r\n    扶持优秀文化产品创作生产,加强文化人才培养,繁荣发展文学艺术、新闻出版、广播影视事业。实施哲学社会科学创新工程,建设中国特色新型智库。构建中华优秀传统文化传承体系,加强文化遗产保护,振兴传统工艺,实施中华典籍整理工程。加强和改进基层宣传思想文化工作,深化各类群众性精神文明创建活动。
\r\n    深化文化体制改革,实施重大文化工程,完善公共文化服务体系、文化产业体系、文化市场体系。推动基本公共文化服务标准化、均等化发展,引导文化资源向城乡基层倾斜,创新公共文化服务方式,保障人民基本文化权益。推动文化产业结构优化升级,发展骨干文化企业和创意文化产业,培育新型文化业态,扩大和引导文化消费。普及科学知识。倡导全民阅读。发展体育事业,推广全民健身,增强人民体质。做好二〇二二年北京冬季奥运会筹办工作。
\r\n    牢牢把握正确舆论导向,健全社会舆情引导机制,传播正能量。加强网上思想文化阵地建设,实施网络内容建设工程,发展积极向上的网络文化,净化网络环境。推动传统媒体和新兴媒体融合发展,加快媒体数字化建设,打造一批新型主流媒体。优化媒体结构,规范传播秩序。加强国际传播能力建设,创新对外传播、文化交流、文化贸易方式,推动中华文化走出去。
\r\n    (四)推动经济建设和国防建设融合发展。坚持发展和安全兼顾、富国和强军统一,实施军民融合发展战略,形成全要素、多领域、高效益的军民深度融合发展格局。
\r\n    同全面建成小康社会进程相一致,全面推进国防和军队建设。以党在新形势下的强军目标为引领,贯彻新形势下军事战略方针,加强军队党的建设和思想政治建设,加强各方向各领域军事斗争准备,加强新型作战力量建设,加快推进国防和军队改革,深入推进依法治军、从严治军。到二〇二〇年,基本完成国防和军队改革目标任务,基本实现机械化,信息化取得重大进展,构建能够打赢信息化战争、有效履行使命任务的中国特色现代军事力量体系。
\r\n    健全军民融合发展的组织管理体系、工作运行体系、政策制度体系。建立国家和各省(自治区、直辖市)军民融合领导机构。制定统筹经济建设和国防建设专项规划。深化国防科技工业体制改革,建立国防科技协同创新机制。推进军民融合发展立法。在海洋、太空、网络空间等领域推出一批重大项目和举措,打造一批军民融合创新示范区,增强先进技术、产业产品、基础设施等军民共用的协调性。
\r\n    加强全民国防教育和后备力量建设。加强现代化武装警察部队建设。密切军政军民团结。党政军警民合力强边固防。各级党委和政府要积极支持国防建设和军队改革,人民解放军和武警部队要积极支援经济社会建设。
\r\n    五、坚持绿色发展,着力改善生态环境
\r\n    坚持绿色富国、绿色惠民,为人民提供更多优质生态产品,推动形成绿色发展方式和生活方式,协同推进人民富裕、国家富强、中国美丽。
\r\n    (一)促进人与自然和谐共生。有度有序利用自然,调整优化空间结构,划定农业空间和生态空间保护红线,构建科学合理的城市化格局、农业发展格局、生态安全格局、自然岸线格局。设立统一规范的国家生态文明试验区。
\r\n    根据资源环境承载力调节城市规模,依托山水地貌优化城市形态和功能,实行绿色规划、设计、施工标准。
\r\n    支持绿色清洁生产,推进传统制造业绿色改造,推动建立绿色低碳循环发展产业体系,鼓励企业工艺技术装备更新改造。发展绿色金融,设立绿色发展基金。
\r\n    加强资源环境国情和生态价值观教育,培养公民环境意识,推动全社会形成绿色消费自觉。
\r\n    (二)加快建设主体功能区。发挥主体功能区作为国土空间开发保护基础制度的作用,落实主体功能区规划,完善政策,发布全国主体功能区规划图和农产品主产区、重点生态功能区目录,推动各地区依据主体功能定位发展。以主体功能区规划为基础统筹各类空间性规划,推进“多规合一”。
\r\n    推动京津冀、长三角、珠三角等优化开发区域产业结构向高端高效发展,防治“城市病”,逐年减少建设用地增量。推动重点开发区域提高产业和人口集聚度。重点生态功能区实行产业准入负面清单。加大对农产品主产区和重点生态功能区的转移支付力度,强化激励性补偿,建立横向和流域生态补偿机制。整合设立一批国家公园。
\r\n    维护生物多样性,实施濒危野生动植物抢救性保护工程,建设救护繁育中心和基因库。强化野生动植物进出口管理,严防外来有害物种入侵。严厉打击象牙等野生动植物制品非法交易。
\r\n    以市县级行政区为单元,建立由空间规划、用途管制、领导干部自然资源资产离任审计、差异化绩效考核等构成的空间治理体系。
\r\n    (三)推动低碳循环发展。推进能源革命,加快能源技术创新,建设清洁低碳、安全高效的现代能源体系。提高非化石能源比重,推动煤炭等化石能源清洁高效利用。加快发展风能、太阳能、生物质能、水能、地热能,安全高效发展核电。加强储能和智能电网建设,发展分布式能源,推行节能低碳电力调度。有序开放开采权,积极开发天然气、煤层气、页岩气。改革能源体制,形成有效竞争的市场机制。
\r\n    推进交通运输低碳发展,实行公共交通优先,加强轨道交通建设,鼓励自行车等绿色出行。实施新能源汽车推广计划,提高电动车产业化水平。提高建筑节能标准,推广绿色建筑和建材。
\r\n    主动控制碳排放,加强高能耗行业能耗管控,有效控制电力、钢铁、建材、化工等重点行业碳排放,支持优化开发区域率先实现碳排放峰值目标,实施近零碳排放区示范工程。
\r\n    实施循环发展引领计划,推行企业循环式生产、产业循环式组合、园区循环式改造,减少单位产出物质消耗。加强生活垃圾分类回收和再生资源回收的衔接,推进生产系统和生活系统循环链接。
\r\n    (四)全面节约和高效利用资源。坚持节约优先,树立节约集约循环利用的资源观。
\r\n    强化约束性指标管理,实行能源和水资源消耗、建设用地等总量和强度双控行动。实施全民节能行动计划,提高节能、节水、节地、节材、节矿标准,开展能效、水效领跑者引领行动。
\r\n    实行最严格的水资源管理制度,以水定产、以水定城,建设节水型社会。合理制定水价,编制节水规划,实施雨洪资源利用、再生水利用、海水淡化工程,建设国家地下水监测系统,开展地下水超采区综合治理。坚持最严格的节约用地制度,调整建设用地结构,降低工业用地比例,推进城镇低效用地再开发和工矿废弃地复垦,严格控制农村集体建设用地规模。探索实行耕地轮作休耕制度试点。
\r\n    建立健全用能权、用水权、排污权、碳排放权初始分配制度,创新有偿使用、预算管理、投融资机制,培育和发展交易市场。推行合同能源管理和合同节水管理。
\r\n    倡导合理消费,力戒奢侈浪费,制止奢靡之风。在生产、流通、仓储、消费各环节落实全面节约。管住公款消费,深入开展反过度包装、反食品浪费、反过度消费行动,推动形成勤俭节约的社会风尚。
\r\n    (五)加大环境治理力度。以提高环境质量为核心,实行最严格的环境保护制度,形成政府、企业、公众共治的环境治理体系。
\r\n    推进多污染物综合防治和环境治理,实行联防联控和流域共治,深入实施大气、水、土壤污染防治行动计划。实施工业污染源全面达标排放计划,实现城镇生活污水垃圾处理设施全覆盖和稳定运行。扩大污染物总量控制范围,将细颗粒物等环境质量指标列入约束性指标。坚持城乡环境治理并重,加大农业面源污染防治力度,统筹农村饮水安全、改水改厕、垃圾处理,推进种养业废弃物资源化利用、无害化处置。
\r\n    改革环境治理基础制度,建立覆盖所有固定污染源的企业排放许可制,实行省以下环保机构监测监察执法垂直管理制度。建立全国统一的实时在线环境监控系统。健全环境信息公布制度。探索建立跨地区环保机构。开展环保督察巡视,严格环保执法。
\r\n    (六)筑牢生态安全屏障。坚持保护优先、自然恢复为主,实施山水林田湖生态保护和修复工程,构建生态廊道和生物多样性保护网络,全面提升森林、河湖、湿地、草原、海洋等自然生态系统稳定性和生态服务功能。
\r\n    开展大规模国土绿化行动,加强林业重点工程建设,完善天然林保护制度,全面停止天然林商业性采伐,增加森林面积和蓄积量。发挥国有林区林场在绿化国土中的带动作用。扩大退耕还林还草,加强草原保护。严禁移植天然大树进城。创新产权模式,引导各方面资金投入植树造林。
\r\n    加强水生态保护,系统整治江河流域,连通江河湖库水系,开展退耕还湿、退养还滩。推进荒漠化、石漠化、水土流失综合治理。强化江河源头和水源涵养区生态保护。开展蓝色海湾整治行动。加强地质灾害防治。
\r\n    六、坚持开放发展,着力实现合作共赢
\r\n    开创对外开放新局面,必须丰富对外开放内涵,提高对外开放水平,协同推进战略互信、经贸合作、人文交流,努力形成深度融合的互利合作格局。
\r\n    (一)完善对外开放战略布局。推进双向开放,促进国内国际要素有序流动、资源高效配置、市场深度融合。
\r\n    完善对外开放区域布局,加强内陆沿边地区口岸和基础设施建设,开辟跨境多式联运交通走廊,发展外向型产业集群,形成各有侧重的对外开放基地。支持沿海地区全面参与全球经济合作和竞争,培育有全球影响力的先进制造基地和经济区。提高边境经济合作区、跨境经济合作区发展水平。
\r\n    加快对外贸易优化升级,从外贸大国迈向贸易强国。完善对外贸易布局,创新外贸发展模式,加强营销和售后服务网络建设,提高传统优势产品竞争力,巩固出口市场份额,推动外贸向优质优价、优进优出转变,壮大装备制造等新的出口主导产业。发展服务贸易。实行积极的进口政策,向全球扩大市场开放。
\r\n    完善投资布局,扩大开放领域,放宽准入限制,积极有效引进境外资金和先进技术。支持企业扩大对外投资,推动装备、技术、标准、服务走出去,深度融入全球产业链、价值链、物流链,建设一批大宗商品境外生产基地,培育一批跨国企业。积极搭建国际产能和装备制造合作金融服务平台。
\r\n    (二)形成对外开放新体制。完善法治化、国际化、便利化的营商环境,健全有利于合作共赢并同国际贸易投资规则相适应的体制机制。建立便利跨境电子商务等新型贸易方式的体制,健全服务贸易促进体系,全面实施单一窗口和通关一体化。提高自由贸易试验区建设质量,在更大范围推广复制。
\r\n    全面实行准入前国民待遇加负面清单管理制度,促进内外资企业一视同仁、公平竞争。完善境外投资管理,健全对外投资促进政策和服务体系。有序扩大服务业对外开放,扩大银行、保险、证券、养老等市场准入。
\r\n    扩大金融业双向开放。有序实现人民币资本项目可兑换,推动人民币加入特别提款权,成为可兑换、可自由使用货币。转变外汇管理和使用方式,从正面清单转变为负面清单。放宽境外投资汇兑限制,放宽企业和个人外汇管理要求,放宽跨国公司资金境外运作限制。加强国际收支监测,保持国际收支基本平衡。推进资本市场双向开放,改进并逐步取消境内外投资额度限制。
\r\n    推动同更多国家签署高标准双边投资协定、司法协助协定,争取同更多国家互免或简化签证手续。构建海外利益保护体系。完善反洗钱、反恐怖融资、反逃税监管措施,完善风险防范体制机制。
\r\n    (三)推进“一带一路”建设。秉持亲诚惠容,坚持共商共建共享原则,完善双边和多边合作机制,以企业为主体,实行市场化运作,推进同有关国家和地区多领域互利共赢的务实合作,打造陆海内外联动、东西双向开放的全面开放新格局。
\r\n    推进基础设施互联互通和国际大通道建设,共同建设国际经济合作走廊。加强能源资源合作,提高就地加工转化率。共建境外产业集聚区,推动建立当地产业体系,广泛开展教育、科技、文化、旅游、卫生、环保等领域合作,造福当地民众。
\r\n    加强同国际金融机构合作,参与亚洲基础设施投资银行、金砖国家新开发银行建设,发挥丝路基金作用,吸引国际资金共建开放多元共赢的金融合作平台。
\r\n    (四)深化内地和港澳、大陆和台湾地区合作发展。全面准确贯彻“一国两制”、“港人治港”、“澳人治澳”、高度自治的方针,发挥港澳独特优势,提升港澳在国家经济发展和对外开放中的地位和功能,支持港澳发展经济、改善民生、推进民主、促进和谐。
\r\n    支持香港巩固国际金融、航运、贸易三大中心地位,参与国家双向开放、“一带一路”建设。支持香港强化全球离岸人民币业务枢纽地位,推动融资、商贸、物流、专业服务等向高端高增值方向发展。支持澳门建设世界旅游休闲中心、中国与葡语国家商贸合作服务平台,促进澳门经济适度多元可持续发展。
\r\n    加大内地对港澳开放力度,加快前海、南沙、横琴等粤港澳合作平台建设。加深内地同港澳在社会、民生、科技、文化、教育、环保等领域交流合作。深化泛珠三角等区域合作。
\r\n    坚持“九二共识”和一个中国原则,秉持“两岸一家亲”,以互利共赢方式深化两岸经济合作。推动两岸产业合作协调发展、金融业合作及贸易投资等双向开放合作。推进海峡西岸经济区建设,打造平潭等对台合作平台。扩大两岸人员往来,深化两岸农业、文化、教育、科技、社会等领域交流合作,增进两岸同胞福祉,让更多台湾普通民众、青少年和中小企业受益。
\r\n    (五)积极参与全球经济治理。推动国际经济治理体系改革完善,积极引导全球经济议程,促进国际经济秩序朝着平等公正、合作共赢的方向发展。加强宏观经济政策国际协调,促进全球经济平衡、金融安全、经济稳定增长。积极参与网络、深海、极地、空天等新领域国际规则制定。
\r\n    推动多边贸易谈判进程,促进多边贸易体制均衡、共赢、包容发展,形成公正、合理、透明的国际经贸规则体系。支持发展中国家平等参与全球经济治理,促进国际货币体系和国际金融监管改革。
\r\n    加快实施自由贸易区战略,推进区域全面经济伙伴关系协定谈判,推进亚太自由贸易区建设,致力于形成面向全球的高标准自由贸易区网络。
\r\n    (六)积极承担国际责任和义务。坚持共同但有区别的责任原则、公平原则、各自能力原则,积极参与应对全球气候变化谈判,落实减排承诺。
\r\n    扩大对外援助规模,完善对外援助方式,为发展中国家提供更多免费的人力资源、发展规划、经济政策等方面咨询培训,扩大科技教育、医疗卫生、防灾减灾、环境治理、野生动植物保护、减贫等领域对外合作和援助,加大人道主义援助力度。主动参与二〇三〇年可持续发展议程。
\r\n    维护国际公共安全,反对一切形式的恐怖主义,积极支持并参与联合国维和行动,加强防扩散国际合作,参与管控热点敏感问题,共同维护国际通道安全。加强多边和双边协调,参与维护全球网络安全。推动国际反腐败合作。
\r\n    七、坚持共享发展,着力增进人民福祉
\r\n    按照人人参与、人人尽力、人人享有的要求,坚守底线、突出重点、完善制度、引导预期,注重机会公平,保障基本民生,实现全体人民共同迈入全面小康社会。
\r\n    (一)增加公共服务供给。坚持普惠性、保基本、均等化、可持续方向,从解决人民最关心最直接最现实的利益问题入手,增强政府职责,提高公共服务共建能力和共享水平。
\r\n    加强义务教育、就业服务、社会保障、基本医疗和公共卫生、公共文化、环境保护等基本公共服务,努力实现全覆盖。加大对革命老区、民族地区、边疆地区、贫困地区的转移支付。加强对特定人群特殊困难的帮扶。
\r\n    创新公共服务提供方式,能由政府购买服务提供的,政府不再直接承办;能由政府和社会资本合作提供的,广泛吸引社会资本参与。加快社会事业改革。
\r\n    (二)实施脱贫攻坚工程。农村贫困人口脱贫是全面建成小康社会最艰巨的任务。必须充分发挥政治优势和制度优势,坚决打赢脱贫攻坚战。
\r\n    实施精准扶贫、精准脱贫,因人因地施策,提高扶贫实效。分类扶持贫困家庭,对有劳动能力的支持发展特色产业和转移就业,对“一方水土养不起一方人”的实施扶贫搬迁,对生态特别重要和脆弱的实行生态保护扶贫,对丧失劳动能力的实施兜底性保障政策,对因病致贫的提供医疗救助保障。实行低保政策和扶贫政策衔接,对贫困人口应保尽保。
\r\n    扩大贫困地区基础设施覆盖面,因地制宜解决通路、通水、通电、通网络等问题。对在贫困地区开发水电、矿产资源占用集体土地的,试行给原住居民集体股权方式进行补偿,探索对贫困人口实行资产收益扶持制度。
\r\n    提高贫困地区基础教育质量和医疗服务水平,推进贫困地区基本公共服务均等化。建立健全农村留守儿童和妇女、老人关爱服务体系。
\r\n    实行脱贫工作责任制。进一步完善中央统筹、省(自治区、直辖市)负总责、市(地)县抓落实的工作机制。强化脱贫工作责任考核,对贫困县重点考核脱贫成效。加大中央和省级财政扶贫投入,发挥政策性金融和商业性金融的互补作用,整合各类扶贫资源,开辟扶贫开发新的资金渠道。健全东西部协作和党政机关、部队、人民团体、国有企业定点扶贫机制,激励各类企业、社会组织、个人自愿采取包干方式参与扶贫。把革命老区、民族地区、边疆地区、集中连片贫困地区作为脱贫攻坚重点。
\r\n    (三)提高教育质量。全面贯彻党的教育方针,落实立德树人根本任务,加强社会主义核心价值观教育,培养德智体美全面发展的社会主义建设者和接班人。深化教育改革,把增强学生社会责任感、创新精神、实践能力作为重点任务贯彻到国民教育全过程。
\r\n    推动义务教育均衡发展,全面提高教育教学质量。普及高中阶段教育,逐步分类推进中等职业教育免除学杂费,率先从建档立卡的家庭经济困难学生实施普通高中免除学杂费。发展学前教育,鼓励普惠性幼儿园发展。完善资助方式,实现家庭经济困难学生资助全覆盖。
\r\n    促进教育公平。加快城乡义务教育公办学校标准化建设,加强教师队伍特别是乡村教师队伍建设,推进城乡教师交流。办好特殊教育。
\r\n    提高高校教学水平和创新能力,使若干高校和一批学科达到或接近世界一流水平。建设现代职业教育体系,推进产教融合、校企合作。优化学科专业布局和人才培养机制,鼓励具备条件的普通本科高校向应用型转变。
\r\n    落实并深化考试招生制度改革和教育教学改革。建立个人学习账号和学分累计制度,畅通继续教育、终身学习通道。推进教育信息化,发展远程教育,扩大优质教育资源覆盖面。完善教育督导,加强社会监督。支持和规范民办教育发展,鼓励社会力量和民间资本提供多样化教育服务。
\r\n    (四)促进就业创业。坚持就业优先战略,实施更加积极的就业政策,创造更多就业岗位,着力解决结构性就业矛盾。完善创业扶持政策,鼓励以创业带就业,建立面向人人的创业服务平台。
\r\n    统筹人力资源市场,打破城乡、地区、行业分割和身份、性别歧视,维护劳动者平等就业权利。加强对灵活就业、新就业形态的支持,促进劳动者自主就业。落实高校毕业生就业促进和创业引领计划,带动青年就业创业。加强就业援助,帮助就业困难者就业。
\r\n    推行终身职业技能培训制度。实施新生代农民工职业技能提升计划。开展贫困家庭子女、未升学初高中毕业生、农民工、失业人员和转岗职工、退役军人免费接受职业培训行动。推行工学结合、校企合作的技术工人培养模式,推行企业新型学徒制。提高技术工人待遇,完善职称评定制度,推广专业技术职称、技能等级等同大城市落户挂钩做法。
\r\n    提高劳动力素质、劳动参与率、劳动生产率,增强劳动力市场灵活性,促进劳动力在地区、行业、企业之间自由流动。建立和谐劳动关系,维护职工和企业合法权益。
\r\n    完善就业服务体系,提高就业服务能力。完善就业失业统计指标体系。
\r\n    (五)缩小收入差距。坚持居民收入增长和经济增长同步、劳动报酬提高和劳动生产率提高同步,持续增加城乡居民收入。调整国民收入分配格局,规范初次分配,加大再分配调节力度。
\r\n    健全科学的工资水平决定机制、正常增长机制、支付保障机制,推行企业工资集体协商制度。完善最低工资增长机制,完善市场评价要素贡献并按贡献分配的机制,完善适应机关事业单位特点的工资制度。
\r\n    实行有利于缩小收入差距的政策,明显增加低收入劳动者收入,扩大中等收入者比重。加快建立综合和分类相结合的个人所得税制。多渠道增加居民财产性收入。规范收入分配秩序,保护合法收入,规范隐性收入,遏制以权力、行政垄断等非市场因素获取收入,取缔非法收入。
\r\n    支持慈善事业发展,广泛动员社会力量开展社会救济和社会互助、志愿服务活动。完善鼓励回馈社会、扶贫济困的税收政策。
\r\n    (六)建立更加公平更可持续的社会保障制度。实施全民参保计划,基本实现法定人员全覆盖。坚持精算平衡,完善筹资机制,分清政府、企业、个人等的责任。适当降低社会保险费率。完善社会保险体系。
\r\n    完善职工养老保险个人账户制度,健全多缴多得激励机制。实现职工基础养老金全国统筹,建立基本养老金合理调整机制。拓宽社会保险基金投资渠道,加强风险管理,提高投资回报率。逐步提高国有资本收益上缴公共财政比例,划转部分国有资本充实社保基金。出台渐进式延迟退休年龄政策。发展职业年金、企业年金、商业养老保险。
\r\n    健全医疗保险稳定可持续筹资和报销比例调整机制,研究实行职工退休人员医保缴费参保政策。全面实施城乡居民大病保险制度。改革医保支付方式,发挥医保控费作用。改进个人账户,开展门诊费用统筹。实现跨省异地安置退休人员住院医疗费用直接结算。整合城乡居民医保政策和经办管理。鼓励发展补充医疗保险和商业健康保险。鼓励商业保险机构参与医保经办。将生育保险和基本医疗保险合并实施。
\r\n    统筹救助体系,强化政策衔接,推进制度整合,确保困难群众基本生活。
\r\n    (七)推进健康中国建设。深化医药卫生体制改革,实行医疗、医保、医药联动,推进医药分开,实行分级诊疗,建立覆盖城乡的基本医疗卫生制度和现代医院管理制度。
\r\n    全面推进公立医院综合改革,坚持公益属性,破除逐利机制,建立符合医疗行业特点的人事薪酬制度。优化医疗卫生机构布局,健全上下联动、衔接互补的医疗服务体系,完善基层医疗服务模式,发展远程医疗。促进医疗资源向基层、农村流动,推进全科医生、家庭医生、急需领域医疗服务能力提高、电子健康档案等工作。鼓励社会力量兴办健康服务业,推进非营利性民营医院和公立医院同等待遇。加强医疗质量监管,完善纠纷调解机制,构建和谐医患关系。
\r\n    坚持中西医并重,促进中医药、民族医药发展。完善基本药物制度,健全药品供应保障机制,理顺药品价格,增加艾滋病防治等特殊药物免费供给。提高药品质量,确保用药安全。加强传染病、慢性病、地方病等重大疾病综合防治和职业病危害防治,通过多种方式降低大病慢性病医疗费用。倡导健康生活方式,加强心理健康服务。
\r\n    实施食品安全战略,形成严密高效、社会共治的食品安全治理体系,让人民群众吃得放心。
\r\n    (八)促进人口均衡发展。坚持计划生育的基本国策,完善人口发展战略。全面实施一对夫妇可生育两个孩子政策。提高生殖健康、妇幼保健、托幼等公共服务水平。帮扶存在特殊困难的计划生育家庭。注重家庭发展。
\r\n    积极开展应对人口老龄化行动,弘扬敬老、养老、助老社会风尚,建设以居家为基础、社区为依托、机构为补充的多层次养老服务体系,推动医疗卫生和养老服务相结合,探索建立长期护理保险制度。全面放开养老服务市场,通过购买服务、股权合作等方式支持各类市场主体增加养老服务和产品供给。
\r\n    坚持男女平等基本国策,保障妇女和未成年人权益。支持残疾人事业发展,健全扶残助残服务体系。
\r\n    八、加强和改善党的领导,为实现“十三五”规划提供坚强保证
\r\n    发展是党执政兴国的第一要务。各级党委必须深化对发展规律的认识,提高领导发展能力和水平,推进国家治理体系和治理能力现代化,更好推动经济社会发展。
\r\n    (一)完善党领导经济社会发展工作体制机制。坚持党总揽全局、协调各方,发挥各级党委(党组)领导核心作用,加强制度化建设,改进工作体制机制和方式方法,强化全委会决策和监督作用。提高决策科学化水平,完善党委研究经济社会发展战略、定期分析经济形势、研究重大方针政策的工作机制,健全决策咨询机制。完善信息发布制度。
\r\n    优化领导班子知识结构和专业结构,注重培养选拔政治强、懂专业、善治理、敢担当、作风正的领导干部,提高专业化水平。深化干部人事制度改革,完善政绩考核评价体系和奖惩机制,调动各级干部工作积极性、主动性、创造性。
\r\n    加强党的各级组织建设,强化基层党组织整体功能,发挥战斗堡垒作用和党员先锋模范作用,激励广大干部开拓进取、攻坚克难,更好带领群众全面建成小康社会。
\r\n    反腐倡廉建设永远在路上,反腐不能停步、不能放松。要坚持全面从严治党,落实“三严三实”要求,严明党的纪律和规矩,落实党风廉政建设主体责任和监督责任,健全改进作风长效机制,强化权力运行制约和监督,巩固反腐败成果,构建不敢腐、不能腐、不想腐的有效机制,努力实现干部清正、政府清廉、政治清明,为经济社会发展营造良好政治生态。
\r\n    (二)动员人民群众团结奋斗。充分发扬民主,贯彻党的群众路线,提高宣传和组织群众能力,加强经济社会发展重大问题和涉及群众切身利益问题的协商,依法保障人民各项权益,激发各族人民建设祖国的主人翁意识。
\r\n    加强思想政治工作,创新群众工作体制机制和方式方法,注重发挥工会、共青团、妇联等群团组织的作用,正确处理人民内部矛盾,最大限度凝聚全社会推进改革发展、维护社会和谐稳定的共识和力量。高度重视做好意识形态领域工作,切实维护意识形态安全。
\r\n    巩固和发展最广泛的爱国统一战线,全面落实党的知识分子、民族、宗教、侨务等政策,充分发挥民主党派、工商联和无党派人士作用,深入开展民族团结进步宣传教育,引导宗教与社会主义社会相适应,促进政党关系、民族关系、宗教关系、阶层关系、海内外同胞关系和谐,巩固全国各族人民大团结,加强海内外中华儿女大团结。
\r\n    (三)加快建设人才强国。深入实施人才优先发展战略,推进人才发展体制改革和政策创新,形成具有国际竞争力的人才制度优势。
\r\n    推动人才结构战略性调整,突出“高精尖缺”导向,实施重大人才工程,着力发现、培养、集聚战略科学家、科技领军人才、企业家人才、高技能人才队伍。实施更开放的创新人才引进政策,更大力度引进急需紧缺人才,聚天下英才而用之。发挥政府投入引导作用,鼓励企业、高校、科研院所、社会组织、个人等有序参与人才资源开发和人才引进。
\r\n    优化人力资本配置,清除人才流动障碍,提高社会横向和纵向流动性。完善人才评价激励机制和服务保障体系,营造有利于人人皆可成才和青年人才脱颖而出的社会环境,健全有利于人才向基层、中西部地区流动的政策体系。
\r\n    (四)运用法治思维和法治方式推动发展。厉行法治是发展社会主义市场经济的内在要求。必须坚持依法执政,全面提高党依据宪法法律治国理政、依据党内法规管党治党的能力和水平。
\r\n    加强党对立法工作的领导。加快重点领域立法,坚持立改废释并举,深入推进科学立法、民主立法,加快形成完备的法律规范体系。
\r\n    加强法治政府建设,依法设定权力、行使权力、制约权力、监督权力,依法调控和治理经济,推行综合执法,实现政府活动全面纳入法治轨道。深化司法体制改革,尊重司法规律,促进司法公正,完善对权利的司法保障、对权力的司法监督。弘扬社会主义法治精神,增强全社会特别是公职人员尊法学法守法用法观念,在全社会形成良好法治氛围和法治习惯。
\r\n    (五)加强和创新社会治理。建设平安中国,完善党委领导、政府主导、社会协同、公众参与、法治保障的社会治理体制,推进社会治理精细化,构建全民共建共享的社会治理格局。健全利益表达、利益协调、利益保护机制,引导群众依法行使权利、表达诉求、解决纠纷。增强社区服务功能,实现政府治理和社会调节、居民自治良性互动。
\r\n    加强社会治理基础制度建设,建立国家人口基础信息库、统一社会信用代码制度和相关实名登记制度,完善社会信用体系,健全社会心理服务体系和疏导机制、危机干预机制。
\r\n    完善社会治安综合治理体制机制,以信息化为支撑加快建设社会治安立体防控体系,建设基础综合服务管理平台。落实重大决策社会稳定风险评估制度,完善社会矛盾排查预警和调处化解综合机制,加强和改进信访和调解工作,有效预防和化解矛盾纠纷。严密防范、依法惩治违法犯罪活动,维护社会秩序。
\r\n    牢固树立安全发展观念,坚持人民利益至上,加强全民安全意识教育,健全公共安全体系。完善和落实安全生产责任和管理制度,实行党政同责、一岗双责、失职追责,强化预防治本,改革安全评审制度,健全预警应急机制,加大监管执法力度,及时排查化解安全隐患,坚决遏制重特大安全事故频发势头。实施危险化学品和化工企业生产、仓储安全环保搬迁工程,加强安全生产基础能力和防灾减灾能力建设,切实维护人民生命财产安全。
\r\n    贯彻总体国家安全观,实施国家安全战略,落实重点领域国家安全政策,完善国家安全审查制度,完善国家安全法治,建立国家安全体系。依法严密防范和严厉打击敌对势力渗透颠覆破坏活动、暴力恐怖活动、民族分裂活动、极端宗教活动,坚决维护国家政治、经济、文化、社会、信息、国防等安全。
\r\n    (六)确保“十三五”规划建议的目标任务落到实处。制定“十三五”规划纲要和专项规划,要坚决贯彻党中央决策部署,落实本建议确定的发展理念、主要目标、重点任务、重大举措。各地区要从实际出发,制定本地区“十三五”规划。各级各类规划要增加明确反映创新、协调、绿色、开放、共享发展理念的指标,增加政府履行职责的约束性指标,把全会确定的各项决策部署落到实处。
\r\n    实现“十三五”时期发展目标,前景光明,任务繁重。全党全国各族人民要更加紧密地团结在以习近平同志为总书记的党中央周围,万众一心,艰苦奋斗,共同夺取全面建成小康社会决胜阶段的伟大胜利!
\r\n 

\r\n', 1, 0, '未知', '中共中央,关于,制定,国民经济,和,社会发展,', '2015-11-13 05:53:00', '2020-06-02 02:11:02', NULL), +(141, 152, 7, '关于转发《黑龙江省人民政府关于深化体制机制改革加快实施创新驱动发展战略的实施意见》的通知', 'admin', '按照赵梅书记批示和我院16日会议部署,现将《黑龙江省人民政府关于深化体制机制改革加快实施创新驱动发展战略的实施意见》(黑政发[2015]32号)上传到院网站和群共享,请各部门认', '', '
\r\n         按照赵梅书记批示和我院16日会议部署,现将《黑龙江省人民政府关于深化体制机制改革加快实施创新驱动发展战略的实施意见》(黑政发[2015]32号)上传到院网站和群共享,请各部门认真学习贯彻落实。
\r\n
\r\n 附件:黑政发[2015]32号
\r\n', 1, 0, '未知', '关于,转发,《,黑龙江省,人民政府,深化,体制,', '2015-11-16 08:51:09', '2020-06-02 02:11:02', NULL), +(142, 153, 7, '黑龙江省能源环境研究院召开中心组学习(扩大)会议', 'admin', '11月16日,在省能源院会议室,省能源院党委中心组召开学习贯彻十八届五中全会精神和三严三实专题教育第三专题研讨扩大会议。省能源院领导班子、省科学院机关党委刘颖书记及能源', '/uploads/allimg/151120/1-15112014063YY-lp.JPG', '
\r\n         11月16日,在省能源院会议室,省能源院党委中心组召开学习贯彻十八届五中全会精神和“三严三实”专题教育第三专题研讨扩大会议。省能源院领导班子、省科学院机关党委刘颖书记及能源院中层干部参加了会议。会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n
\r\n
\r\n \"\"
\r\n  
\r\n
\r\n  
\r\n
\r\n         会议全文传达了《中共中央关于制定国民经济和社会发展第十三个五年规划的建议》内容,省能源院领导班子与参会人员交流了学习体会,并围绕“严以用权、为民务实创业”作了主题发言。徐晓秋院长指出,严以用权,要树立正确的政绩观、发挥监督作用,同时强化制度落实。务实创业,要真抓实干敢于担当,面对改革的关键时刻要不讲条件、不计得失、敢于承担、敢于负责。关春玲副院长指出,“修身”和“律己”主要是为用好权。权力是人民赋予的,行使权力必须为人民服务,一丝一毫都不能私用。官越大、权越重,为人民服务的担子就越重,越应该做出成绩。
\r\n         徐晓秋院长围绕“十三五规划”谈了自己的学习体会并部署了近期工作,强调“十三五规划”中提出要坚持绿色发展,着力改善生态环境,这与省能源院研究方向和研究领域相符合,同时也为省能源院未来的发展提供了指引和机会。省能源院全体科研人员要认真学习领会“十三五规划”中各项重要政策、举措、计划,充分结合各自研究领域开展科研工作,大胆扩展思路、树立超前发展理念,把握契机,执行好各项决策部署,确保我院的各项发展目标和任务圆满完成。
\r\n', 1, 0, '未知', '黑龙江省,能源,环境,研究院,召开,中心组,11月,', '2015-11-20 06:12:38', '2020-06-02 02:11:02', NULL); +INSERT INTO `articles` (`id`, `oldid`, `category_id`, `title`, `writer`, `description`, `cover`, `content`, `status`, `sort`, `source`, `keywords`, `created_at`, `updated_at`, `deleted_at`) VALUES +(143, 154, 7, '我院承办国家行业标准《住宅建筑室内装修污染控制技术规程》编制组第二次工作会议', 'admin', '2015年12月15日,由深圳市建筑科学研究院股份有限公司主办的国家行业标准《住宅建筑室内装修污染控制技术规程》编制组第二次工作会议在哈尔滨召开,黑龙江省能源环境研究院作为', '/uploads/allimg/151225/1-151225110013332-lp.JPG', '        2015年12月15日,由深圳市建筑科学研究院股份有限公司主办的国家行业标准《住宅建筑室内装修污染控制技术规程》编制组第二次工作会议在哈尔滨召开,黑龙江省能源环境研究院作为参编单位,承办了此次大会。来自深圳市建筑科学研究院股份有限公司、清华大学、黑龙江省能源环境研究院、中国建筑科学研究院、中国林科院木材工业研究所、上海市建筑科学研究院(集团)有限公司、福建第一建筑集团公司、河南省建筑科学研究院有限公司、甘肃省建材科研设计院以及建筑装饰企业的23位代表参加了此次会议。省科学院王钢副院长和能源院徐晓秋院长在会议上发言,并对与会各单位代表表示热烈欢迎。
\r\n
\r\n \"\"
\r\n
\r\n        会议上,各编制组成员单位分别介绍了工作开展情况及研究工作中出现的问题,并由主编单位介绍了该标准编制的情况。会议围绕《住宅建筑室内装修污染控制技术规程》讨论稿初稿展开了广泛而深入的交流与讨论,各参编单位均发表了各自的观点和建议。最后,各参编单位讨论了下一步的工作计划及任务分工。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n        此次会议的召开,广泛征求了编制组各成员单位与会专家的意见和建议,有利于促进标准编制工作顺利有序进行,同时,也全面考虑了我国各地区的特殊气候情况,对提高该标准的适用范围和准确性起到了积极的推动作用。
\r\n 
\r\n
\r\n 黑龙江省能源环境研究院                
\r\n', 1, 0, '未知', '我院,承办,国家,行业标准,《,2015年,12月,15日,', '2015-12-16 02:56:00', '2020-06-02 02:11:02', NULL), +(144, 155, 7, '省科学院科研处莅临省能源环境研究院指导检查学科创新团队建设工作', 'admin', '2015年12月17日,院科研处王阳处长一行3人莅临能源环境研究院检查学科创新团队发展情况和团队一年来的主要工作。 王阳处长逐一听取了能源院三个学科创新团队2015年的工作进展情况', '/uploads/allimg/151225/1-15122511042EC-lp.JPG', '        2015年12月17日,院科研处王阳处长一行3人莅临能源环境研究院检查学科创新团队发展情况和团队一年来的主要工作。
\r\n 
\r\n
\r\n
\r\n        王阳处长逐一听取了能源院三个学科创新团队2015年的工作进展情况和2016年的发展规划,针对学科创新团队发展过程中存在的突出问题与能源院领导和团队带头人进行了深入分析和讨论,同时,对各学科创新团队未来的发展方向,人员结构,年度目标等提出了具体要求。\r\n
\r\n
\r\n 
\r\n        王阳处长指出:1、能源院的三个团队要积极把握好国家“十三五”发展规划,努力寻求合作,积极拓展科研合作伙伴,把握好方向,找准定位,合理制定发展目标;2、要优化团队人员结构、努力培养科研骨干,促进团队科研能力整体提升;3、要积极开展国际合作与交流,不断提升学科团队在国内外的学术影响力;4、要加强高水平基金项目的申报和SCI/EI高水平论文的产出。
\r\n 
\r\n
\r\n 黑龙江省能源环境研究院         
\r\n', 1, 0, '未知', '省,科学院,科研处,莅临省,能源,环境,研究院,', '2015-12-18 03:02:00', '2020-06-02 02:11:02', NULL), +(145, 156, 7, '黑龙江省能源环境研究院省院科技合作项目顺利通过鉴定', 'admin', '2016年1月14日,黑龙江省科技厅在哈尔滨市组织专家对黑龙江省能源环境研究院承担的省院科技合作项目寒区农业固体废弃物高值化利用关键技术研究进行了成果鉴定。 鉴定委员会由哈', '/uploads/allimg/160122/1-160122093932Z9-lp.JPG', '        2016年1月14日,黑龙江省科技厅在哈尔滨市组织专家对黑龙江省能源环境研究院承担的省院科技合作项目“寒区农业固体废弃物高值化利用关键技术研究”进行了成果鉴定。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n        鉴定委员会由哈尔滨工业大学、哈尔滨工程大学等高校专家组成,会议由省科技厅成果处领导主持,省院士办、省科学院科研处领导参加会议。
\r\n        与会专家认真听取了项目组的工作总结报告和技术报告,审查了相关技术资料,经质询、讨论,对项目组研究的高温湿法-干法耦合工艺给予了较高的评价,鉴定委员会认为,研究成果达到了国内领先水平,并建议进一步扩大农业废弃物处理范围。 
\r\n        此项目的圆满完成,标志中我院在农业废弃物利用领域又迈出坚实的一步,与中科院的合作又结出新的硕果。
', 1, 0, '未知', '黑龙江省,能源,环境,研究院省,院,科技,2016年,', '2016-01-15 01:41:00', '2020-06-02 02:11:02', NULL), +(146, 157, 7, '我院两项黑龙江省应用技术研究与开发计划项目通过验收', 'admin', '2015年1月,黑龙江省科技厅组织鉴定委员会对黑龙江省能源环境研究院和科技孵化中心承担的省应用技术研究与开发计划项目《煤与废弃有机制品共焦化技术开发与应用》和《M25车用甲', '', '        2016年1月,黑龙江省科技厅组织鉴定委员会对黑龙江省能源环境研究院和科技孵化中心承担的省应用技术研究与开发计划项目《煤与废弃有机制品共焦化技术开发与应用》和《M25车用甲醇汽油应用技术研究》进行函审鉴定。鉴定委员会由哈工大、哈工程、哈理工的5位专家组成。
\r\n        鉴定专家认真审查了项目组提供的技术材料,并听取了二个项目组的工作汇报后,对各项目组的工作给予了充分肯定,认为项目组完成了课题任务书要求的各项内容,煤与废弃有机制品共焦化技术有良好的经济和社会效益,其技术性能达到国内领先水平。M25车用甲醇汽油应用技术拓展煤基甲醇替代石油资源,其技术性能达到国内先进水平。
\r\n        我院(中心)在煤化工领域及其下游产品应用领域又开拓出新的出路,为我省产业结构调整,提供新思路。这两项省级项目顺利通过鉴定,标志着我院(中心)煤化工领域部分成果水平已处于省内乃至国内的前列, 对能源化学省级领军人才梯队建设和发展也
到了重要的支撑作用。', 1, 0, '未知', '我院,两项,黑龙江省,应用技术,研究,与,开发,', '2016-01-29 02:38:00', '2020-06-02 02:11:02', NULL), +(147, 158, 19, '黑龙江省能源环境研究院
部分科技成果汇编目录(2008-2015)', 'admin', '序号 成果名称 鉴定时间 1 油页岩低温热解条件对页岩油性质的影响研究 2015 2 煤与废弃有机制品共焦化技术开发与应用 2015 3 M25车用甲醇汽油应用技术研究 2015 4 寒区农业固体废弃物高', 'images/2020/06/03/878bb5fb31b3b02b416190e082d32acc.jpg', '
序号成果名称鉴定时间
1油页岩低温热解条件对页岩油性质的影响研究2015
2煤与废弃有机制品共焦化技术开发与应用2015
3M25车用甲醇汽油应用技术研究2015
4寒区农业固体废弃物高值化利用关键技术研究2015
5重质油乳化剂及乳化方式的优化研究2015
6乳化柴油提高燃烧效率研究2015
7一种亲水性无纺布的制备方法研究2015
8水包油型乳化重油的稳定性研究2015
9太阳能等清洁能源替代小型燃煤锅炉建筑采暖的关键技术研究及示范2015
10太阳能空气采暖智能控制装置的应用研究2015
11基于“一村一厂”生物质加工和清洁利用的寒区“无煤生态村”应用技术研究2015
12中试沼气发酵系统节能控制研究2015
13基于ZigBee和WLAN技术的中试沼气发酵监测系统2015
14沼液回流喷淋对秸秆沼气产量的影响研究2015
15酸预处理玉米秸秆与奶牛粪便混合厌氧消化工艺优化研究2015
16三塔变压吸附沼气提纯技术研究2015
17沼液超滤膜分离浓缩方法优化及膜再生机理研究2015
18液相色谱法分析鸡粪中残留四环素类抗生素的研究2015
19调和国Ⅴ标准车用汽油的抗爆剂技术研究2015
20太阳能空气采暖系统的优化控制研究2015
21页岩油加氢精制-延迟焦化组合工艺的研究2015
22沼气工程进料固含量在线监测方法的研究2015
23轻质木焦油加氢提质转化运输燃料油调和组分的工艺研究2014
24寒地沼气发电机余热回收仿真优化研究2014
25秸秆高温厌氧发酵过程关键技术参数研究2014
26沼液高效回用及综合处理工艺研究2014
27沼液回流对牛粪厌氧发酵沼气产量的影响及机理研究2014
28厌氧发酵反应器温度监控及补偿系统的研究2014
29复合调节剂(润滑性能)中试研究2014
30利用炼厂90#汽油生产国Ⅳ标准93#汽油的复合添加剂应用2014
31产油微藻的一体式培养及柴油提取的研究2014
32从废源培养的产油微藻中提取生物柴油的研究2014
33甲醇乳化柴油技术研究2014
34利用页岩油制取油砂分离剂的研究2013
35全馏分页岩油改质转化轻质运输燃料工艺的研究2013
36膜生物反应器中改性复合膜的制备与性能研究2013
37车用汽油复合调节剂技术研究2013
38油页岩中有机质的分离和分析2013
39发酵原料水解率对提高CSTR反应器产气率的机理研究2013
40寒区牛粪两级厌氧高效发酵工艺研究2013
41不同搅拌方式对反应器上层浮渣影响高温厌氧发酵产气率的研究2013
42高温厌氧发酵过程中沼气净化系统的研究2013
43基于混合模型的牛粪高温厌氧发酵过程参量监测2013
44环氧树脂固化程度在线监测系统2013
45沼气工程无线网络化系统控制与方法设计2013
46工业化封闭环式沼气、发电系统2012
47集成牛粪便综合利用系统(IMUS)示范工程2012
48生物质资源综合利用的研究2012
49厌氧消化过程中发酵原料的不同滞留时间对发酵过程的影响研究2012
50厌氧发酵工艺过程仿真系统的研制2012
51牛粪碱法与生物法联合预处理方法及机理研究2012
52物理参数对提高牛粪高温厌氧性能影响机理的研究2012
53接种物对牛粪高温厌氧消化过程的影响机理研究2012
54大掺量甲醇汽油催化燃烧技术2012
55黑龙江省油页岩分布及含油率分析研究2012
56全馏分页岩油改质转化轻质运输燃料工艺的研究2012
57M15车用甲醇汽油复合添加剂2012
58加拿大直贮热太阳能技术2011
59γ-射线辐照对牛粪厌氧消化过程影响的研究2011
60牛粪高温厌氧消化动力学研究2011
61奶牛场粪污水综合处理工艺研究2011
62直贮热太阳能技术(DHS)示范温室2011
63M20甲醇汽油工业应用及性能考核2011
64工业燃煤锅炉烟气净化技术2011
65褐煤低温催化制油气研究2011
66燃煤锅炉催化脱硫技术研究2011
67烟气中二氧化硫催化固硫性能研究2011
68油气分离系统的研究科技成果2011
69中国加拿大油砂炼制技术合作研究2011
70牛粪高温厌氧发酵机理研究2009
71沼气生物脱硫机理研究2009
72牛粪厌氧发酵工艺关键技术参数研究2009
73沼气脱硫技术研究2009
74高寒地区牛粪高温发酵工艺研究2009
75以沼气为纽带的生态农场模式及经济评价体系2008
76黑龙江省省属科研机构科技孵化器建设2008
77黑龙江省科学院院属科研机构科技孵化器建设的研究2008


', 1, 0, '未知', '黑龙江省,能源,环境,研究院,部分,科技成果,', '2016-02-15 01:37:22', '2020-06-03 09:12:57', NULL); +INSERT INTO `articles` (`id`, `oldid`, `category_id`, `title`, `writer`, `description`, `cover`, `content`, `status`, `sort`, `source`, `keywords`, `created_at`, `updated_at`, `deleted_at`) VALUES +(148, 159, 21, '黑龙江省能源环境研究院
专利目录(2008-2015)', 'admin', '序号 专利名称 专利号 类型 1 利用高温厌氧发酵运行参数无线实时监测系统对高温厌氧发酵运行参数监测的方法 ZL201310364454.2 发明专利 2 一种基于沼气发电的余热回收利用系统 ZL201310', 'images/2020/06/03/0c14a33a8a5685c4077d63b1dd792155.jpg', '
序号专利名称专利号类型
1利用高温厌氧发酵运行参数无线实时监测系统对高温厌氧发酵运行参数监测的方法ZL201310364454.2发明专利
2一种基于沼气发电的余热回收利用系统ZL201310674344.6发明专利
3一种车用燃料油抗水复合添加剂ZL201410445460.5发明专利
4一种含超细稀土粉体润滑油添加剂ZL201310631999.5发明专利
5车用汽油复合调节剂ZL201310140441.7发明专利
6有机无灰类M15车用甲醇汽油复合添加剂ZL201210258097.7发明专利
7采用全馏分页岩油生产低硫低凝柴油的方法ZL201310484593.9发明专利
8一种沼气旋转冷凝的装置ZL201310381690.5发明专利
9一种搅拌破壳于一体的发酵反应器ZL201310367177发明专利
10一种改性聚对苯二甲酸乙二醇酯无纺布复合膜的制备方法ZL201310484592.4发明专利
11甲醇乳化柴油及其制备方法ZL201410091283.5发明专利
12一种利用啤酒厂污水培养产油微藻的方法ZL201310625139.0发明专利
13一种基于沼气发电的余热回收利用系统201310674345发明专利
14一种温度自控风力制热装置201310692604发明专利
15一种环氧树脂固化程度在线监控系统及采用该系统对环氧树脂固化程度监控的方法201310511396发明专利
16一种太阳能集热控制系统及其集热控制方法201310421572发明专利
17可测定出料位置的CSTR反应器201310470071发明专利
18利用高温厌氧发酵运行参数无线实时监测系统对高温厌氧发酵运行参数监测的方法201310364454发明专利
19一种厌氧发酵分段控温系统及方法201310364456发明专利
20一种沼气旋转冷凝的装置201310381691发明专利
21一种搅拌破壳于一体的发酵反应器及搅拌破壳方法201310367177发明专利
22联合使用的厌氧发酵反应器201210338447发明专利
23厌氧发酵罐体沼气贮量的测量方法及实现该方法的装置201110078502发明专利
24一种原料预处理装置及利用该装置实现沼气收集的系统201110058808发明专利
25一种利用太阳能的直贮热厌氧消化装置201110056367发明专利
26厌氧往复折流复合消化装置201110042375发明专利
27一种用于牛场污水处理的二次厌氧消化装置201010611390发明专利
28一种60Coγ-射线辐照牛粪提高沼气产量的方法 发明专利
29可测定出料位置的CSTR反应器201320623818实用新型
30一种高温厌氧发酵运行参数的无线实时监测系统201320509482实用新型
31联合使用的厌氧发酵反应器201220466304实用新型
32一种沼气发酵过程状态检测系统ZL201420711902.1实用新型
33太阳能空气智能采暖装置ZL201420688401.6实用新型
34一种厌氧发酵分段控温系统ZL201320509483.9实用新型
35一种高温厌氧发酵运行参数的无线实时监测系统ZL201320509482.4 实用新型
36一种太阳能集热控制系统ZL201320573185.6实用新型
37基于Buck变换器的无刷直流电机驱动电路ZL201420663823.8实用新型
38无刷直流电机反电动势三次谐波检测电路ZL201420678192.7实用新型
39一种高温厌氧发酵装置ZL201420670351.9实用新型
40太阳能助力式风力发电装置ZL201420759477.3实用新型
41电线固定装置ZL201420711843.8实用新型
42一种带有供热系统的恒温建筑ZL201420697172.4 实用新型
43一种带有沼液回流管线的畜禽粪便厌氧发酵装置ZL201420697135.3实用新型
44一种利用回收的沼液喷淋秸秆的干式厌氧发酵装置ZL201420707710.3实用新型
45一种高温厌氧发酵装置ZL201420670351.9实用新型
46可测定出料位置的CSTR反应器ZL201320623817.5实用新型
47一种沼气旋转冷凝的装置ZL201320529632.8实用新型
48一种搅拌破壳于一体的发酵反应器ZL201320512530.5实用新型
49产油微藻的一体式培养装置ZL201420312552.1实用新型
50一种太阳能集热控制系统201320573186实用新型
51一种厌氧发酵分段控温系统201320509484实用新型
52一种沼气旋转冷凝的装置201320529633实用新型
53一种搅拌破壳于一体的发酵反应器201320512531实用新型
54厌氧往复折流复合消化装置201120045415实用新型
55一种用于牛场污水沉降净化处理的二次厌氧消化装置201020686844实用新型
56用于恒温实验室的相转变太阳能贮热装置200920317606实用新型


', 1, 0, '未知', '黑龙江省,能源,环境,研究院,专利,目录,序号,', '2016-02-15 02:16:49', '2020-06-03 09:16:13', NULL); +INSERT INTO `articles` (`id`, `oldid`, `category_id`, `title`, `writer`, `description`, `cover`, `content`, `status`, `sort`, `source`, `keywords`, `created_at`, `updated_at`, `deleted_at`) VALUES +(149, 160, 21, '黑龙江省能源环境研究院
论文目录(2012-2015)', 'admin', '序号 文章名称 类别 期刊名 作者 发表时间 1 沼气脱碳提纯技术研究进展 一般 黑龙江科学 潘良;徐晓秋;高德玉;王欣;刘伟; 2015 2 依兰油页岩逐级氧化/萃取及其产物的红外分析 一般 黑龙', 'images/2020/06/03/f5d3940b203b10ea68e0e7a5f9441369.jpg', '
序号文章名称类别期刊名作者发表时间
1沼气脱碳提纯技术研究进展一般黑龙江科学潘良;徐晓秋;高德玉;王欣;刘伟;2015
2依兰油页岩逐级氧化/萃取及其产物的红外分析一般黑龙江科技大学学报吴鹏;张星宇;周扬;解丽萍;朱秀栋;宋微娜;2015
3微米稀土粉体表面改性技术研究核心化学工程师唐诗洋;张树华;刘岩;李健;陈庆海;2015
4寒地《M25车用煤基甲醇汽油》企业标准一般化工管理张树华;唐诗洋;刘岩;刘维;2015
5寒地M25车用(煤基)甲醇汽油性能研究核心化学工程师张树华;唐诗洋;刘岩;李健;陈庆海;2015
6页岩油深加工产业发展评述一般黑龙江科学陈松;周扬;王晓栋;2015
7水包油型乳化重油的制备条件及稳定性研究一般黑龙江科学张玥;张宇;马宁;王志成;2015
8基于ZigBee和WLAN技术的厌氧发酵中试监控系统一般黑龙江科学秦国辉;王钢;王玉鹏;周闯;罗向东;2015
9油页岩抚顺炉低温干馏的影响因素分析一般黑龙江科学周扬;陈松;王晓栋;2015
10沼气发酵过程状态监控系统设计一般黑龙江科学李福裿;王玉鹏;周闯;秦国辉;罗向东;2015
11分子印迹固相萃取技术在抗生素检测中的应用进展一般黑龙江科学杨光;徐晓秋;高德玉;陆佳;潘良;2015
12浅谈沼液处理与纳滤膜技术一般黑龙江科学陆佳;徐晓秋;高德玉;刘伟;王欣;2015
13页岩油预处理制取加氢原料的研究核心化学工程师陈松;周扬;王晓栋;2015
14紫外辐照接枝甲基丙烯酸对无纺布性能影响的研究核心化学与黏合张玥;王志成;张宇;2015
15在俄罗斯境内发展炼化一体化项目的工艺论证核心化学工程师陈松;2015
16变性梯度凝胶电泳(DGGE)技术在畜禽粪便厌氧发酵液中的研究进展一般黑龙江科学王欣;苏小红;郭广亮;刘伟;徐晓秋;高德玉;2015
17沼液回流对牛粪高温厌氧发酵产气性能的影响一般黑龙江科学苏小红;刘伟;王欣;郭广亮;徐晓秋;高德玉;2015
18秸秆厌氧消化预处理技术研究进展一般黑龙江科学王欣;苏小红;郭广亮;刘伟;徐晓秋;高德玉;2015
19寒地沼气发电机组余热回收的控制策略与设计核心自动化技术与应用秦国辉;罗向东;王志成;王玉鹏;周闯;2015
20太阳能空气采暖智能控制系统的研究一般黑龙江科学秦国辉;王玉鹏;周闯;罗向东;2015
21木焦油预处理制取加氢原料的方法核心化学工程师陈松;周扬;王晓栋;2014
22轻质木焦油加氢脱氧的影响因素核心化学工程师陈松;周扬;王晓栋;2014
23亲水性无纺布复合膜的制备及性能研究核心化学与黏合张玥;王志成;张宇;2014
24《M25车用甲醇汽油》企业标准解读一般黑龙江科学张树华;刘辉;唐诗洋;刘维;刘岩;李健;2014
25国际标准GB 17930-2011/XG1-2012《车用汽油》的胶质指标解析一般黑龙江科学唐诗洋;张树华;刘岩;李健;2014
26醇醚燃料在车用替代能源中的发展趋势一般黑龙江科学陆海玲;2014
27调和国IV标准车用汽油的抗爆剂研究核心化学工程师唐诗洋;张树华;刘岩;李健;2014
28石油产品脱硫技术研究进展一般黑龙江科学马宁;张宇;张玥;王志成;2014
29生物柴油的应用前景一般黑龙江科学马宁;张玥;张宇;王志成;2014
30国有单位科技人员培养的实践与思考一般黑龙江科学陆海玲;2014
31科技计划项目全过程管理研究一般黑龙江科学张帆;2014
32我国科技计划项目管理现状与对策分析一般黑龙江科学陆海玲;2014
33科研单位对科研仪器设备管理方案一般黑龙江科学张帆;2014
34微藻培养条件优化研究一般应用能源技术张宇;王志成;张玥;马宁;周红霞;2014
35应用浮选技术分离油砂的实验研究核心化学工程师周扬;陈松;2014
36太阳能空气集热控制系统的研究一般应用能源技术王阳;秦国辉;罗向东;王玉鹏;刘旭丹;2014
37发酵原料水解率对CSTR反应器产气率影响的研究一般应用能源技术王欣;刘伟;徐晓秋;赵娴;王玉鹏;秦国辉;刘旭丹;2014
38沼气工程工艺参数的优化模型研究一般自动化技术与应用秦国辉;罗向东;王玉鹏;刘旭丹;2014
39不同搅拌方式对浮渣层影响高温厌氧发酵产气率的研究一般黑龙江科学王欣;王玉鹏;刘伟;苏小红;徐晓秋;2014
40油砂分离剂的实验研究核心化学工程师周扬;陈松;2013
41科研成果转化中科技管理部门作用的探析一般黑龙江科学张帆;2013
42反应条件对轻质页岩油加氢脱氮性能的影响核心化学工程师陈松;周扬;2013
43我国中小企业技术创新的现状及对策一般黑龙江科技信息陆海玲;2013
44大掺量甲醇汽油初步探讨核心化学与黏合王志成;2013
45油页岩综合开发利用现状一般黑龙江科学周红霞;王志成;陆海玲;张帆;2013
46车用醇基燃料及其应用性能评价一般化学工程师张树华;刘岩;唐诗洋;李健;2013
47解读新修订的《科学事业单位财务管理制度》一般黑龙江科学关春玲;2013
48微藻研究进展及产油的影响因素一般黑龙江科学张宇;王志成;张玥;周红霞;2013
49全馏分页岩油改质转化运输燃料技术进展及其评价核心化学工程师陈松;周扬;2013
50汽油含硫量对排放的影响研究核心化学工程师张树华;唐诗洋;刘岩;李健;2013
51沼气发电工程沼气净化技术研究一般黑龙江科学刘伟;王欣;徐晓秋;赵娴;2013
52使用数学方法监测热固树脂固化程度的研究一般科技创新与应用刘旭丹;秦国辉;王玉鹏;2013
53沼气发电工程的无线监测系统一般黑龙江科学秦国辉;罗向东;王玉鹏;刘旭丹;2013
54寒区牛粪两级厌氧高效发酵工艺参数研究一般黑龙江科学王欣;刘伟;赵娴;王玉鹏;秦国辉;刘旭丹;徐晓秋;2013
55基于最小二乘向量机的厌氧发酵沼气产量建模研究一般黑龙江科学秦国辉;刘伟;刘旭丹;2013
56混合建模方法研究及其在牛粪高温厌氧发酵过程中的监测应用一般黑龙江科学范庆丽;秦国辉;章力;2013
57Marathon 5kpro复用器配置介绍一般黑龙江科学韩涛;刘旭丹;2013
58ADWR多普勒天气雷达伺服系统故障分析与处理一般黑龙江科学韩涛;刘旭丹;2013
59基于单片机的高温厌氧发酵罐温度控制系统一般黑龙江科学赵娴;2013
60MTBE的国内外研究进展一般黑龙江科学鞠春红;张伟君;李福裿;2012
61褐煤热水干燥改质后的性能研究核心化学与黏合鞠春红;张伟君;王志成;李福裿;2012
62光催化还原二氧化碳的发展一般黑龙江科学鞠春红;张伟君;王志成;李福裿;2012
63M15车用甲醇汽油复合添加剂的技术研究核心化学工程师张树华;刘岩;唐诗洋;李健;2012
64对我国醇醚燃料产业的发展思路与对策探讨一般农机使用与维修刘岩;张树华;唐诗洋;李健;2012
65臭氧助燃技术在柴油发动机中的应用一般农机使用与维修张树华;刘岩;唐诗洋;李健;2012
66蛇纹石粉体作为机械摩擦副磨损表面自修复添加剂的研究一般化学工程师张树华;刘岩;唐诗洋;李健;2012
67焦化废水中苯酚含量的测定方法研究一般中国给水排水张宏森;周国江;周扬;王彦彪;2012
68车用汽油复合调节剂技术研究核心化学工程师张树华;刘岩;唐诗洋;李健;2012
69关于车用替代燃料的发展状况与前景探析一般农机使用与维修张树华;刘岩;唐诗洋;李健;2012
70内燃机替代燃料的尴尬境地一般农机使用与维修张树华;刘岩;唐诗洋;李健;2012
71搅拌时间对高固含量奶牛粪便高温厌氧消化的影响研究一般应用能源技术刘伟;王欣;徐晓秋;秦国辉;王玉鹏;刘旭丹;2012


', 1, 0, '未知', '黑龙江省,能源,环境,研究院,论文目录,2012-2015,', '2016-02-15 02:17:17', '2020-06-03 09:15:55', NULL), +(150, 161, 7, '黑龙江能源环境研究院召开会议学习贯彻2016年省科学院党风廉政建设工作会议和省科学院工作会议精神', 'admin', '2月15日下午,省能源院召开会议,传达和贯彻2016年省科学院党风廉政建设工作会议和院工作会议精神。会议由省能源院党委书记、院长徐晓秋同志主持。 徐晓秋院长首先传达了省科学', '/uploads/allimg/160225/1-160225123025Z2-lp.JPG', '        2月15日下午,省能源院召开会议,传达和贯彻2016年省科学院党风廉政建设工作会议和院工作会议精神。会议由省能源院党委书记、院长徐晓秋同志主持。\r\n
\r\n
\r\n        徐晓秋院长首先传达了省科学院赵梅书记在院2016年党风廉政建设工作会议上的讲话精神,同时全文学习了省科学院郭春景院长在院工作会议上的工作报告和赵梅书记在院工作会议上的总结讲话,参会人员结合省能源院工作实际对 “一院(所)两制”、搭建“三大工作平台”、激励科研人员制度措施、学科团队建设、成果转化等方面进行了深入交流和讨论。
\r\n        徐晓秋院长围绕贯彻两个工作会议精神,提出了几点要求,一是继续强化学习贯彻落实各级精神要求,制定相关学习制度,要细化到具体日期,对需要长期学习、常态化学习和已经学习过的内容进行再学习、再巩固、再提高。二是将省科学院工作会议文件印发到各部门,各部门要围绕文件要求,把各项工作任务落到实处。最后,徐晓秋院长强调,各部门要提高认识,准确领会会议精神,把握好改革机遇,提高创新发展意识,在省科学院党组的领导下,全面推进省能源院2016年相关工作稳步开展。

\r\n', 1, 0, '未知', '黑龙江,能源,环境,研究院,召开,会议,2月,15日,', '2016-02-16 04:31:00', '2020-06-02 02:11:02', NULL), +(151, 162, 7, '省科学院人事处党支部与能源院能源化学创新团队召开党建联系点工作对接会', 'admin', '2016年3月23日,省科学院人事处党支部与省能源环境研究院能源化学创新团队党建联系点工作对接会在能源院会议室召开。人事处党支部书记、处长张兴、副处长王向伟、盛力、曲恒峰、', '/uploads/allimg/160325/1-160325100Z33M-lp.JPG', '        2016年3月23日,省科学院人事处党支部与省能源环境研究院能源化学创新团队党建联系点工作对接会在能源院会议室召开。人事处党支部书记、处长张兴、副处长王向伟、盛力、曲恒峰、周磊,省能源院党委书记、院长徐晓秋及能源化学创新团队全体党员参加了会议。
\r\n 
\r\n
\r\n
\r\n 
\r\n        首先,院人事处党支部成员与能源化学创新团队成员就人员、工作内容、研究方向等情况进行了介绍。随后由院人事处张兴同志和能源化学创新团队负责人王志成同志分别宣读了《黑龙江省科学院2016年度党建联系点机关党支部与创新团队责任书》及《科学院人事处党支部与能源院创新团队建立党建联系点工作方案》。
\r\n        座谈中,张兴处长表示要全面落实《黑龙江省科学院2016年度党建联系点机关党支部与创新团队责任书》及《院人事处党支部与创新团队党建联系点工作方案》内容,不但做到积极互动、互相带动,还要帮助培养基层科研人员、创造良好科研环境。此外,还将持续深入开展共建活动,积极为创新团队探寻解决实际问题的有效举措,同时形成良好的沟通机制,提升党建工作水平、加强创新团队建设。
\r\n 
\r\n
\r\n
\r\n 
\r\n        徐晓秋院长指出,院人事处党支部与能源化学创新团队建立党建联系点将机关和基层党建工作融为一体,极大地促进了能源院的党建及科研工作。创新团队全体成员决心以党建联系点工作为契机,在人事处党支部的支持与帮助下,以院党组“四管四严”的要求为核心,积极开展党建活动,将党建联系点工作落到实处,同时将以科研发展为中心,为能源院培养尖端科技人才、建设一流的科研队伍而努力奋斗。
', 1, 0, '未知', '省,科学院,人事处,党支部,与,能源,院,化学,', '2016-03-24 02:10:00', '2020-06-02 02:11:02', NULL), +(152, 163, 7, '创学习型组织 做知识型女性
省能源院召开“三八”妇女节女职工座谈会', 'admin', '3月7日上午,省能源院召开以创学习型组织、做知识型女性为主题的女职工座谈会。省能源院领导班子及全体女职工参加了会议,会议由能源院党委书记、院长徐晓秋同志主持。 参会人', '/uploads/allimg/160328/1-16032P9321T09.jpg', '        3月7日上午,省能源院召开以“创学习型组织、做知识型女性”为主题的女职工座谈会。省能源院领导班子及全体女职工参加了会议,会议由能源院党委书记、院长徐晓秋同志主持。\r\n
\r\n
\r\n        参会人员首先观看了2015年诺贝尔医学奖获得者屠呦呦女士的记录片。随后,大家围绕此次座谈会的主题,就女职工的工作、生活、健康等方面进行了交流,大家积极建言献策,提出了许多宝贵的意见和建议,会议在热烈的氛围中进行,参加会议女职工踊跃发言。
\r\n        最后徐晓秋院长强调,省能源院女职工人数约占全院人数的一半,女职工立足岗位,恪尽职守,为省能源院的发展和建设做出了积极贡献,充分体现了女职工的责任意识,大局意识,希望省能源院全体女职工在今后的工作中要沉得下心来,继续发挥女性专注与坚韧的特点,不断提高自己,十年磨一剑,取得更好的成绩。
', 1, 0, '未知', '创,学习型,组织,做,知识型,女性,省,能源,院,', '2016-03-08 01:38:00', '2020-06-02 02:11:02', NULL); +INSERT INTO `articles` (`id`, `oldid`, `category_id`, `title`, `writer`, `description`, `cover`, `content`, `status`, `sort`, `source`, `keywords`, `created_at`, `updated_at`, `deleted_at`) VALUES +(153, 164, 7, '黑龙江省能源环境研究院召开全体职工大会学习贯彻落实习近平总书记参加黑龙江代表团审议时的重要讲话精神', 'admin', '3月29日上午,黑龙江省能源环境研究院召开全体职工专题学习会议,学习宣传和贯彻落实习近平总书记参加黑龙江代表团审议时的重要讲话精神、王宪魁同志在省委中心组学习上的讲话', '/uploads/allimg/160329/1-160329163HYG-lp.JPG', '        3月29日上午,黑龙江省能源环境研究院召开全体职工专题学习会议,学习宣传和贯彻落实习近平总书记参加黑龙江代表团审议时的重要讲话精神、王宪魁同志在专题研讨班上的讲话、杨汭部长在研讨班上的总结讲话等3个文件精神,以及《中共黑龙江省委关于深入学习宣传贯彻落实习近平总书记重要讲话精神的决定》。会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n  
\r\n        徐晓秋院长首先传达了习近平总书记在黑龙江省代表团参加审议时的重要讲话和《中共黑龙江省委关于深入学习宣传贯彻落实习近平总书记重要讲话精神的决定》,关春玲副院长全文传达了王宪魁同志在省管主要领导干部专题研讨班上的讲话,和杨汭部长在研讨班上的总结讲话。
\r\n        徐晓秋院长强调,今后我院将根据科学院的安排部署,联系实际继续持续、深入地学习宣传贯彻落实习总书记重要讲话和王宪魁同志、杨汭同志的讲话精神,同时结合我院每周三学习日,把学习纳入 “两学一做”长期的学习内容,以支部为单位组织学习研讨,真正做到“铺满盖严,不留死角”,对照讲话谈思想、谈措施。增强广大职工的创新意识,坚定信心,明确工作方向,将科研工作落到实处,切实营造我院创新发展的浓厚氛围。
', 1, 0, '未知', '黑龙江省,能源,环境,研究院,召开,全体,职工,', '2016-03-29 08:23:00', '2020-06-02 02:11:02', NULL), +(154, 165, 7, '黑龙江省能源环境研究院召开“两学一做”学习教育工作会议', 'admin', '2016年4月27日,省能源院召开两学一做学习教育工作会议,省科学院人事处全体党员和省能源院全体党员参加了会议,会议由省能源院党委书记徐晓秋同志主持。 徐晓秋书记传达了省科', '/uploads/allimg/160427/1-16042G02P31c-lp.JPG', '        2016年4月27日,省能源院召开“两学一做”学习教育工作会议,省科学院人事处全体党员和省能源院全体党员参加了会议,会议由省能源院党委书记徐晓秋同志主持。\r\n
\r\n
\r\n        徐晓秋书记传达了省科学院“两学一做”学习教育工作会议精神,宣读了省能源院关于开展“两学一做”学习教育实施方案。
\r\n        徐晓秋书记强调,省能源院各党支部要按照省科学院统一安排,全体党员干部要严格认真进行每日一学、半月研讨、每月一测,通过“两学一做”学习教育的开展,切实加强自我提升,进一步增强党性意识和宗旨意识,始终保持干事创业、开拓进取的精气神,在省能源院振兴发展中当标兵、作模范。
\r\n
\r\n
\r\n        省科学院人事处张兴处长指出,要将“两学一做”学习教育与省科学院党建联系点制度紧密结合,加强与基层院所的联系沟通,切实解决相关实际问题,要充分调动广大党员干事创业的积极性与创造性,有效指导各领域工作。
\r\n
\r\n
\r\n 
\r\n                         黑龙江省科学院人事处    
\r\n                       黑龙江省能源环境研究院   
\r\n                               2016年4月27日      
', 1, 0, '未知', '黑龙江省,能源,环境,研究院,召开,“,2016年,', '2016-04-27 02:31:24', '2020-06-02 02:11:02', NULL), +(155, 166, 7, '中共黑龙江省能源环境研究院委员会召开换届选举大会', 'admin', '根据《中国共产党章程》和相关规定,经省能源院党委研究,报请省科学院机关党委批准,中共黑龙江省能源环境研究院委员会于2016年5月19日召开全体党员大会,省能源院党委书记、院', '/uploads/allimg/160520/1-1605200P531419-lp.JPG', '        根据《中国共产党章程》和相关规定,经省能源院党委研究,报请省科学院机关党委批准,中共黑龙江省能源环境研究院委员会于2016年5月19日召开全体党员大会,省能源院党委书记、院长徐晓秋同志主持会议,省科学院机关党委副书记刘颖同志参加会议并讲话。
\r\n
\r\n
\r\n
\r\n  
\r\n        大会共有两项议程:一是听取和审议《中共黑龙江省能源环境研究院第一届委员会工作报告》,二是选举产生中共黑龙江省能源环境研究院第二届委员会。
\r\n徐晓秋同志作了题为《党建工作是第一要务》的工作报告,总结回顾了第一届党委成立以来的主要工作情况,并对下一步的党建工作提出了思路和建议。
\r\n大会通过了第一届党委工作报告、大会选举办法和监票人、计票人名单。本次大会选举产生了徐晓秋、关春玲、刘伟、王欣、李福裿五名同志为中共黑龙江省能源环境研究院第二届委员会委员,徐晓秋同志为中共黑龙江省能源环境研究院第二届委员会书记。

\r\n
\r\n
\r\n
\r\n  
\r\n        最后,刘颖同志对能源院党建工作给予了肯定,她指出,在省科学院党组的领导下,省能源院党委始终把抓党建作为工作中的重中之重,严格按照省科学党组的相关部署,持续推进学习型、服务型和创新型党组织建设,切实履行两个责任,在思想建设、班子建设、创先争优、特色活动、统战工作等多方面都取得了不错的成绩,希望省能源院党委再接再厉,持续发挥先锋模范带头作用和战斗堡垒作用,不断创新党建工作的思维方式,结合新形势、新任务开拓党建工作的新格局。', 1, 0, '未知', '中共,黑龙江省,能源,环境,研究院,委员会,', '2016-05-19 05:10:00', '2020-06-02 02:11:02', NULL), +(156, 167, 7, '黑龙江省能源环境研究院召开中心组学习扩大会议', 'admin', '6月8日上午,黑龙江省能源环境研究院召开中心组学习扩大会议,学习贯彻落实省科学院党组中心组扩大会议精神和省委十一届七次全体会议上王宪魁书记的讲话及陆昊省长的总结讲话', '/uploads/allimg/160608/1-16060Q421404Q-lp.JPG', '        6月8日上午,黑龙江省能源环境研究院召开中心组学习扩大会议,学习贯彻落实省科学院党组中心组扩大会议精神和省委十一届七次全体会议上王宪魁书记的讲话及陆昊省长的总结讲话精神。能源院领导班子及全体职工参加了此次会议,会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n 
\r\n        会上,徐晓秋书记传达了省科学院党组中心组扩大会议精神和省委十一届七次全体会议的主要内容,强调要深刻领会、准确把握全面振兴指导思想、“三个方面”解放思想、“六个着力”走出新路子、做好“三篇大文章”和强化五个“进一步”的指示精神;深入学习“五头五尾”、“五个发展”工作要求、把握“四个四”精神实质、要牢固树立“四个意识”、强化领导干部的“四个过硬”、要重点把握“四个坚持”重要要求指导工作实践、深刻领会“九个三”重要意义。要结合省能源院实际情况继续推动创新创业发展,激发内生动力,抓住机遇,真正做到“走进去,走下去,走出去”,不惧艰难,奋力走出能源院创新发展的新路子。

\r\n
\r\n \"\"
\r\n 
\r\n        最后,徐晓秋书记指出,省能源院广大职工要将此次学习精神作为今后一段时期内首要学习内容,制定切实有效的工作计划,做到“铺满盖严、不留死角”,同时对青年科技工作者提出殷切希望,鼓励年轻人奋发图强、创新创业,敢于担当,为大科学院的创新发展贡献力量。

\r\n', 1, 0, '未知', '黑龙江省,能源,环境,研究院,召开,中心组,6月,', '2016-06-08 06:19:35', '2020-06-02 02:11:02', NULL), +(157, 168, 7, '缅怀先烈 铭记历史--省能源院开展纪念建党95周年活动', 'admin', '为纪念中国共产党建党九十五周年,省能源院全体职工及党建联系点院机关人事处党支部部分成员共同参观了爱国主义教育基地东北烈士纪念馆,一同缅怀先烈,深受教育,全体党员重', '/uploads/allimg/160720/1-160H01002402E-lp.JPG', '        为纪念中国共产党建党九十五周年,省能源院全体职工及党建联系点院机关人事处党支部部分成员共同参观了爱国主义教育基地——东北烈士纪念馆,一同缅怀先烈,深受教育,全体党员重温入党誓词。\r\n
\r\n
\r\n \"\"
\r\n  
\r\n        纪念馆分为《黑土英魂——东北抗日战争时期烈士事迹》和《伪满哈尔滨警察厅遗址及罪恶展》两部分。直观的图片、雕塑、实物及影像资料真实地再现了自九一八事件以来一直到抗日战争胜利的十四年间,东北抗日烈士的英雄事迹。大家在参观过程中感触很深,表示要继承党的优良传统,坚定革命理想信念,弘扬先烈们面对流血牺牲不改气节的无私奉献精神,努力做弘扬正气的楷模。
\r\n        在重温入党誓词仪式中,全体党员们面对党旗庄严宣誓,立下对党忠诚的誓言,表达了为党的事业奋斗终身的决心。
\r\n        此次活动让广大职工受到了一次深刻的党性洗礼,使大家牢记职责使命,激发攻坚克难、乘势而进的动力,以求真务实的精神深入开展“两学一做”学习教育,同时立足本职岗位,推动能源院又好又快发展,不断开创各项工作的新局面。
\r\n', 1, 0, '未知', '缅怀,先烈,铭记,历史,省,能源,院,开展,纪念,', '2016-07-04 01:59:00', '2020-06-02 02:11:02', NULL), +(158, 169, 7, '黑龙江省能源环境研究院两项课题顺利通过鉴定', 'admin', '2016年7月13日,由黑龙江省科学院组织专家对省能源环境研究院承担的两项黑龙江省院所基本应用技术研究专项《车用甲醇汽油抗水复合添加剂技术研究》、《太阳能空气采暖智能控制装', '/uploads/allimg/160720/1-160H0101Q4226-lp.JPG', '        2016年7月13日,由黑龙江省科学院组织专家对省能源环境研究院承担的两项黑龙江省院所基本应用技术研究专项《车用甲醇汽油抗水复合添加剂技术研究》、《太阳能空气采暖智能控制装置的应用研究》进行了成果鉴定。鉴定委员会由哈尔滨工程大学、哈尔滨理工大学、哈尔滨703研究所、哈尔滨电站设备成套所、黑龙江省节能技术中心等单位的7位学科专家组成。省科学院科研处王阳处长主持了此次鉴定会。
\r\n
\r\n  
\r\n
\r\n \"\"
\r\n
\r\n        鉴定委员会专家认真听取了各项目负责人的工作汇报,审议了项目组提供的全部鉴定材料。经充分质询、讨论,鉴定专家委员会认为项目组提供的鉴定材料齐全、研究路线合理,对项目的实用性给予了较高的评价:抗水复合添加剂解决了甲醇汽油在实际应用中出现的问题,提高了煤基甲醇的经济利用效益;太阳能空气采暖智能装置实现了系统运行的高效性、实用性和室内生活的舒适性,经审议一致同意两个项目的研究成果均达到了国内领先水平。
\r\n        这两个项目的顺利鉴定,将进一步促进我院在节能技术方向的深入研究,对学科团队的建设和发展起到了重要的支撑作用。
', 1, 0, '未知', '黑龙江省,能源,环境,研究院,两项,课题,顺利,', '2016-07-14 02:20:00', '2020-06-02 02:11:02', NULL), +(159, 170, 6, '省科学院与牡丹江市举行院市合作会议-省能源院两项成果成功签约', 'admin', '8月2日,黑龙江省科学院与牡丹江市政府举行院市合作会议暨合作协议签约仪式,省科学院党组书记赵梅、院长郭春景、牡丹江市市委书记 张雨浦、 市长刘忻、副市长王钢出席会议。签', '/uploads/allimg/160804/1-160P411225D57-lp.jpg', '        8月2日,黑龙江省科学院与牡丹江市政府举行院市合作会议暨合作协议签约仪式,省科学院党组书记赵梅、院长郭春景、牡丹江市市委书记张雨浦、市长刘忻、副市长王钢出席会议。签约仪式上,省能源环境研究院党委书记、院长徐晓秋代表省能源院与宁安市佳清化工有限公司、奥通汽车部件制造有限公司成功签订合作协议,未来省能源院将与上述企业在煤基燃料甲醇应用技术、生物质压缩燃料领域开展全面产学研合作。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '省,科学院,与,牡丹江市,举行,院市,合作,会议,', '2016-08-04 03:24:47', '2020-06-02 02:11:02', NULL), +(160, 171, 6, '省科学院郭春景院长一行到省能源院调研检查学科团队发展建设情况', 'admin', '2016年7月13日下午,省科学院郭春景院长,沙长青副院长,科研处王阳处长,隋月梅副处长赴能源院调研检查学科团队发展建设情况。在听取完两个团队的工作汇报后,郭院长结合团队现', '/uploads/allimg/161007/1-16100GH0102Q-lp.jpg', '
\r\n         2016年7月13日下午,省科学院郭春景院长,沙长青副院长,科研处王阳处长,隋月梅副处长赴能源院调研检查学科团队发展建设情况。在听取完两个团队的工作汇报后,郭院长结合团队现状,对团队学科方向、人才队伍构建、未来定位进行了细致点评,沙长青副院长也对团队建设中的关键问题进行了点评。通过此次会议,使能源院两个团队更明确了发展定位,更明确了今后自主创新的发力点。 
\r\n
\r\n \"\"
\r\n
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '省,科学院,郭春景,郭,春景,院长,一行,到,能源,', '2016-07-14 09:17:00', '2020-06-02 02:11:02', NULL), +(161, 172, 6, '穆棱市长一行到省能源院考察调研', 'admin', '8月17日,穆棱市长、工信局局长和相关企业负责人一行到省能源院考察调研,洽谈合作。 省能源院党委书记、院长徐晓秋同志、副院长关春玲同志对来访人员表示欢迎,相关研究室科研', '/uploads/allimg/161007/1-16100GJT1227-lp.JPG', '
\r\n          8月17日,穆棱市长、工信局局长和相关企业负责人一行到省能源院考察调研,洽谈合作。 省能源院党委书记、院长徐晓秋同志、副院长关春玲同志对来访人员表示欢迎,相关研究室科研人员向来访人员介绍我院科研成果。
\r\n  
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '穆棱,市长,一行,到,省,能源,院,考察,调研,8月,', '2016-08-18 09:56:00', '2020-06-02 02:11:02', NULL), +(162, 173, 6, '省能源院党委召开中心组学习扩大会议,深入学习贯彻落实全省“两学一做”学习教育工作座谈会上省委常委、组织部长杨汭同志讲话精神和院党组书记赵梅同志的重要讲话精神', 'admin', '8月18日省能源院党委召开中心组学习扩大会议,深入学习贯彻落实全省两学一做学习教育工作座谈会上省委常委、组织部长杨汭同志讲话精神和院党组书记赵梅同志的重要讲话精神,会', '/uploads/allimg/161007/1-16100GK510356-lp.JPG', '
\r\n          8月18日省能源院党委召开中心组学习扩大会议,深入学习贯彻落实全省“两学一做”学习教育工作座谈会上省委常委、组织部长杨汭同志讲话精神和院党组书记赵梅同志的重要讲话精神,会议由省能源院党委书记、院长徐晓秋同志主持,随后召开支部书记会议,部署下一步“两学一做”学习教育工作任务。 
\r\n
\r\n  
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '省能源院党委召开中心组学习扩大会议,深入学', '2016-08-19 09:52:00', '2020-06-02 02:11:02', NULL), +(163, 174, 6, '省能源院召开会议,传达全省科技创新大会精神和王宪魁书记、陆昊省长及省科学院党组赵梅书记的讲话精神', 'admin', '8月29日上午,省能源院召开会议,传达全省科技创新大会精神和王宪魁书记、陆昊省长及省科学院党组赵梅书记的讲话精神,省能源院党委成员及中层干部参加了会议。按照赵梅书记的', '/uploads/allimg/161007/1-16100GQ01S34-lp.JPG', '
\r\n         8月29日上午,省能源院召开会议,传达全省科技创新大会精神和王宪魁书记、陆昊省长及省科学院党组赵梅书记的讲话精神,省能源院党委成员及中层干部参加了会议。按照赵梅书记的指示,省能源院党委书记、院长徐晓秋同志部署了近期相关工作,要求省能源院全体干部职工,将各文件精神、相关政策学深、深透,围绕国家、省委及省科学院改革总体要求,结合省能源院工作实际,经全体职工充分研究讨论,形成《黑龙江省能源环境研究院科技改革实施方案》。 
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '省,能源,院,召开,会议,传达,全省,科技创新,', '2016-08-29 10:09:00', '2020-06-02 02:11:02', NULL), +(164, 175, 6, '第十八届中国科协年会-暨全国科技工作者创新创业总决赛在西安举行,我院两选手参加比赛', 'admin', '9月22日, 第十八届中国科协年会-暨全国科技工作者创新创业总决赛在西安举行,省能源院关春玲副院长担任领队,省能源院周闯和陆佳两位选手携《工业化封闭环式沼气发电系统1.0》', '/uploads/allimg/161007/1-16100GR35MG-lp.JPG', '
\r\n         9月22日, 第十八届中国科协年会-暨全国科技工作者创新创业总决赛在西安举行,省能源院关春玲副院长担任领队,省能源院周闯和陆佳两位选手携《工业化封闭环式沼气发电系统1.0》参加此次总决赛。 
\r\n  
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '第十,八届,中国科协,年会,暨,全国,科技,9月,', '2016-09-23 10:19:00', '2020-06-02 02:11:02', NULL), +(165, 176, 6, '省能源院举办“情系青山绿水 共庆祖国华诞” 关爱环境社会实践活动', 'admin', '2016年9月30日,能源环境研究院与自动化研究所举行情系青山绿水共庆祖国华诞关爱环境社会实践活动。国庆前夕艳阳天,环保志愿松峰山,能源自动化齐携手,助建环保美家园。沿途尽', '/uploads/allimg/161007/1-16100GS00a37-lp.JPG', '        2016年9月30日,能源环境研究院与自动化研究所举行“情系青山绿水 共庆祖国华诞” 关爱环境社会实践活动。——国庆前夕艳阳天,环保志愿松峰山,能源自动化齐携手,助建环保美家园。沿途尽览秋景色,车内尽情把言欢,兄弟院所增友谊,双创争优齐向前。 
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '省,能源,院,举办,“,情系,青山绿水,共庆,祖国,', '2016-09-30 10:27:00', '2020-06-02 02:11:02', NULL), +(166, 177, 7, '与时俱进,知识产权工作再上新台阶', 'admin', '2016年10月12-14日,黑龙江省能源环境研究院参加了由黑龙江省知识产权局举办的关于举办全省高校、科研院所知识产权管理工作经验交流会,为进一步提升我院所知识产权工作管理水平', '/uploads/allimg/161021/1-1610210Q2193D-lp.jpg', '        2016年10月12-14日,黑龙江省能源环境研究院参加了由黑龙江省知识产权局举办的“关于举办全省高校、科研院所知识产权管理工作经验交流会”,为进一步提升我院所知识产权工作管理水平和能力奠定了基础。
\r\n
\r\n \"\"
\r\n
\r\n        会议在鸡西市委机关招待所举行,省知识产权局张毅副局长和中科院、哈工程专家教授就高校、科研院所知识产权战略实施,专利转化运用等内容进行发言。并选取部分典型单位在会上就本单位知识产权管理体制机制建设进行经验介绍。黑龙江省科学院科研处隋月梅副处长介绍了专利创造、运用、保护、管理等方面情况和知识产权文化建设情况。为我院知识产权及成果转化制定工作策略、启发创新思路提供了有益参考与帮助。
\r\n
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '与时俱进,知识产权,工作,再上,新台阶,新,', '2016-10-14 10:06:00', '2020-06-02 02:11:02', NULL), +(167, 178, 7, '我院参加省科协创新方法培训班-丁会敏同志荣获优秀学员光荣称号', 'admin', '2016年10月13日,省能源院郭广亮、丁会敏、范超三人参加了黑龙江省科协双创活动周一线工程师创新方法培训班课程,三人带着各自在工作中遇到的一些技术机械难题参加培训,在6天的', '/uploads/allimg/161021/1-1610210R624I8-lp.jpg', '      2016年10月13日,省能源院郭广亮、丁会敏、范超三人参加了黑龙江省科协双创活动周一线工程师创新方法培训班课程,三人带着各自在工作中遇到的一些技术机械难题参加培训,在6天的高强度紧张的培训学习中,积极参与小组讨论、与老师沟通探讨,经过培训不但解决了各自的技术机械问题,且顺利通过答辩,表现突出。其中我院丁会敏同志荣获优秀学员光荣称号。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '我院,参加省,科协,创,新方法,培训班,丁会敏,', '2016-10-18 11:17:00', '2020-06-02 02:11:02', NULL), +(168, 179, 7, '我院参加全国科学院联盟能源分会会议', 'admin', '10月13日,我院参加全国科学院联盟能源分会会议。 我院作为全国科学院联盟能源分会的会员单位,与其他成员单位共同推动中科院、地方科学院和骨干院所企业在能源领域的战略合作', '/uploads/allimg/161021/1-1610210T230Y6-lp.jpg', '        我院参加全国科学院联盟能源分会会议。
\r\n        我院作为全国科学院联盟能源分会的会员单位,与其他成员单位共同推动中科院、地方科学院和骨干院所企业在能源领域的战略合作和协同创新,提升能源领域技术创新和产业转型升级。

\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '我院,参加,全国,科学院,联盟,能源,分会,会议,', '2016-10-14 00:44:00', '2020-06-02 02:11:02', NULL), +(169, 180, 7, '省能源院参加全国科学院洁净能源知识产权联盟成立大会', 'admin', '10月13日,省能源院参加全国科学院洁净能源知识产权联盟成立大会。 会上,我院与联盟单位共商能源产业布局、低碳经济发展和知识产权运营事宜,提升产业创新能力,探索实践科技', '/uploads/allimg/161021/1-1610210TZ3J7-lp.JPG', '        10月13日,省能源院参加全国科学院洁净能源知识产权联盟成立大会。
\r\n        会上,我院与联盟单位共商能源产业布局、低碳经济发展和知识产权运营事宜,提升产业创新能力,探索实践科技与经济相结合的体制机制。

\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '省,能源,院,参加,全国,科学院,洁净,知识产权,', '2016-10-14 00:50:00', '2020-06-02 02:11:02', NULL), +(170, 181, 8, '我院召开“两学一做”“双创争优”延安学习培训汇报会', 'admin', '10月19日,我院召开两学一做双创争优延安学习培训汇报会,能源院领导班子和全体党员参加了本次汇报会。 参加省科学院延安培训班的两名党员代表李福裿和王欣,分别做了以学习光', '/uploads/allimg/161021/1-1610210ZK02R-lp.JPG', '        10月19日,我院召开“两学一做”“双创争优”延安学习培训汇报会,能源院领导班子和全体党员参加了本次汇报会。
\r\n
\r\n \"\"
\r\n \"\"
\r\n
\r\n        参加省科学院延安培训班的两名党员代表李福裿和王欣,分别做了以”学习光荣历史,汲取精神力量”和“胜利延安,红色之旅”的学习汇报,与全体党员同志一同分享了延安之行的所见、所学、所悟,并表示将会把延安精神与自身工作结合好,更好的为省能源院的发展贡献力量。', 1, 0, '未知', '我院,召开,“,两学一做,”,双创争优,延安,', '2016-10-19 00:53:00', '2020-06-02 02:11:02', NULL), +(171, 182, 6, '我院组织全院职工观看纪录片《永远在路上》', 'admin', '根据省科学院关于学习贯彻落实《中国共产党问责条例》的相关部署,我院结合两学一做学习教育工作,利用午休时间,组织广大职工观看纪录《永远在路上》。', '/uploads/allimg/161026/1-161026091U3336-lp.JPG', '        根据省科学院关于学习贯彻落实《中国共产党问责条例》的相关部署,我院结合“两学一做”学习教育工作,利用午休时间,组织广大职工观看纪录《永远在路上》。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '我院,组织,全院,职工,观看,纪录片,《,根据省,', '2016-10-26 01:09:39', '2020-06-02 02:11:02', NULL), +(172, 183, 6, '召开职工大会学习共产党成立95周年各项讲话精神', 'admin', '7月7日下午能源院召开了全体职工大会,会议传达了中央办公厅关于学习贯彻习近平总书记在庆祝中国共产党成立95周年大会上的讲话;学习贯彻王宪魁书记在中共黑龙江省委庆祝中国共', '/uploads/allimg/161026/1-16102610150I35-lp.JPG', '
\r\n          7月7日下午能源院召开了全体职工大会,会议传达了中央办公厅关于学习贯彻习近平总书记在庆祝中国共产党成立95周年大会上的讲话;学习贯彻王宪魁书记在中共黑龙江省委庆祝中国共产党成立95周年暨表彰大会上的讲话;以及学习赵梅书记在省科学院纪念建党95周年“两学一做、双创争优”暨先优表彰大会上的讲话,并部署了下一步党建工作。 
\r\n  
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '召开,职工,大会,学习,共产党,成立,95周年,7月,', '2016-07-08 02:14:00', '2020-06-02 02:11:02', NULL), +(173, 184, 6, '我院组织全体职工认真学习贯彻习长征精神', 'admin', '按照省科学院机关党委《关于认真学习贯彻习近平总书记在纪念红军长征胜利80周年大会上的讲话的通知》及学习十八届六中全会精神相关要求,10月28日省能源院召开全体职工会议,会', '/uploads/allimg/161111/1-161111093936144-lp.JPG', '        按照省科学院机关党委《关于认真学习贯彻习近平总书记在纪念红军长征胜利80周年大会上的讲话的通知》及学习十八届六中全会精神相关要求,10月28日省能源院召开全体职工会议,会议围绕赵梅书记在省科学院《中国共产党问责条例》学习大会上的讲话及提出的要求,认真学习习近平总书记在纪念红军长征80周年大会上的讲话,全文宣读学习了十八届六中全会公报,并进行了讨论。\r\n
\r\n \"\"
\r\n        通过学习,大家一致认为,习近平总书记的重要讲话回顾了红军长征这一革命壮举、壮丽史诗和巍峨丰碑,总结了长征的伟大意义和深刻精神内涵,提出了弘扬伟大长征精神、走好今天的长征路的六方面要求,对于我们不忘初心、继续前进,全面做好各项工作,具有重要指导意义,会议要求各党支部要开展好长征精神的学习,并进行集中讨论,会议同时对我院近期科研和党建工作做了进一步部署。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n  
\r\n', 1, 0, '未知', '我院,组织,全体,职工,认真,学习贯彻,习,长征,', '2016-10-28 09:30:00', '2020-06-02 02:11:02', NULL), +(174, 185, 6, '我院组织全体职工认真学习贯彻习长征精神', 'admin', '按照省科学院机关党委《关于认真学习贯彻习近平总书记在纪念红军长征胜利80周年大会上的讲话的通知》及学习十八届六中全会精神相关要求,10月28日省能源院召开全体职工会议,会', '/uploads/allimg/161111/1-161111093936144-lp.JPG', '        按照省科学院机关党委《关于认真学习贯彻习近平总书记在纪念红军长征胜利80周年大会上的讲话的通知》及学习十八届六中全会精神相关要求,10月28日省能源院召开全体职工会议,会议围绕赵梅书记在省科学院《中国共产党问责条例》学习大会上的讲话及提出的要求,认真学习习近平总书记在纪念红军长征80周年大会上的讲话,全文宣读学习了十八届六中全会公报,并进行了讨论。
\r\n
\r\n  
\r\n
\r\n \"\"
\r\n        通过学习,大家一致认为,习近平总书记的重要讲话回顾了红军长征这一革命壮举、壮丽史诗和巍峨丰碑,总结了长征的伟大意义和深刻精神内涵,提出了弘扬伟大长征精神、走好今天的长征路的六方面要求,对于我们不忘初心、继续前进,全面做好各项工作,具有重要指导意义,会议要求各党支部要开展好长征精神的学习,并进行集中讨论,会议同时对我院近期科研和党建工作做了进一步部署。
\r\n
\r\n
\r\n \"\"\"\"
\r\n
\r\n
\r\n  
\r\n', 1, 0, '未知', '我院,组织,全体,职工,认真,学习贯彻,习,长征,', '2014-10-28 08:57:00', '2020-06-02 02:11:02', NULL), +(175, 186, 7, '公示-“黑龙江省能源环境研究院(黑龙江省科学院科技孵化中心)间接费用管理办法(试行)”', 'admin', '黑龙江省能源环境研究院(黑龙江省科学院科技孵化中心)间接费用管理办法(试行),经2017年3月20日全体职工大会审议通过,即日起进行公示,公示期五个工作日。如有任何异议请与', '', '
\r\n         黑龙江省能源环境研究院(黑龙江省科学院科技孵化中心)间接费用管理办法(试行),经2017年3月20日全体职工大会审议通过,即日起进行公示,公示期五个工作日。如有任何异议请与综合办联系。
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \"\"\r\n 黑龙江省能源环境研究院(黑龙江省科学院科技孵化中心)间接费用管理办法(试行)
\r\n
\r\n
\r\n', 1, 0, '未知', '“,黑龙江省,能源,环境,研究院,科学院,科技,', '2017-03-20 03:02:53', '2020-06-02 02:11:02', NULL), +(176, 187, 7, '我院召开党风廉政建设扩大会议', 'admin', '4月28日,省能源院召开党风廉政建设扩大会议,迅速传达省科学院月报会上关于党风廉政建设的相关要求,并部署各项工作,省能源院领导班子,全体职工参加了会议,会议由省能源院', '/uploads/allimg/170502/1-1F5020QH6427-lp.JPG', '
\r\n          4月28日,省能源院召开党风廉政建设扩大会议,迅速传达省科学院月报会上关于党风廉政建设的相关要求,并部署各项工作,省能源院领导班子,全体职工参加了会议,会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         徐晓秋同志全文传达了省委纪委“关于‘五一’和‘端午节’节日期间纪律要求的通知”;“关于加强车辆管理严防节假日期间公车私用的通知”,同时要求省能源院全体干部职工要围绕省科学院2017年党风廉政工作会议上党组书记赵梅同志和纪检组长宫杰同志的讲话要求,时刻严明政治纪律、严肃劳动纪律,严格遵守各项法律及规章条例、严格执行各项制度,用高标准规范自身行为,各部门负责人要发挥“一岗双责”积极作用,坚决杜绝迟到早退、工作态度散漫、从事与无关的事宜,公车私用等现象,并再次强调要严格履行钉钉平台请假审批手续。最后,关春玲副院长指出各部门要做好节假日期间相关安全工作。
\r\n  
\r\n', 1, 0, '未知', '我院,召开,党风,廉政建设,扩大会议,4月,28日,', '2017-04-20 02:04:00', '2020-06-02 02:11:02', NULL), +(177, 188, 7, '我院承担的省院所基本应用技术研究专项顺利通过鉴定', 'admin', '2017年4月19日,由黑龙江省科学院组织专家对省能源环境研究院承担的黑龙江省院所基本应用技术研究专项《基于一村一厂生物质加工和清洁利用的寒区无煤生态村应用技术研究》进行了', '/uploads/allimg/170502/1-1F502100322b4-lp.JPG', '        2017年4月19日,由黑龙江省科学院组织专家对省能源环境研究院承担的黑龙江省院所基本应用技术研究专项《基于“一村一厂”生物质加工和清洁利用的寒区“无煤生态村”应用技术研究》进行了成果鉴定。鉴定委员会由哈尔滨工程大学、哈尔滨理工大学、哈尔滨电站设备成套所等单位的7位专家组成。省科学院科研处王阳处长主持了此次鉴定会。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n \"\"
\r\n
\r\n        鉴定委员会专家认真听取了项目组的工作汇报,审议了项目组提供的全部鉴定材料。经充分质询、讨论,鉴定专家委员会认为项目组提供的鉴定材料齐全、技术路线合理,对项目的实用性给予了较高的评价:采用“一村一厂”运营模式,大幅降低家户式炊事及采暖的煤炭和薪柴消耗,实现了秸秆生物质加工和清洁利用,减轻了环境污染,通过示范村应用,为农村住宅用能提供了节能环保手段,为我国北方“无煤村”建设推广提供了示范。经审议一致同意项目的研究成果达到了国内领先水平。
\r\n        该成果的鉴定和应用为我省秸秆综合利用提供新思路,可以有效处置秸秆,减少环境,节省煤炭资源,产业前景广阔。
', 1, 0, '未知', '我院,承担,的,省,院所,基本,应用技术,研究,', '2017-04-19 01:53:00', '2020-06-02 02:11:02', NULL), +(178, 189, 7, '“成长 责任 理想”我院召开青年职工交流座谈会', 'admin', '为纪念并弘扬五四精神,展现青春风采,激发广大青年科技人员立足本职岗位、投身科研事业的热情,5月5日上午,省能源环境研究院开展了成长责任理想为主题的五四青年节座谈会,', '/uploads/allimg/170512/1-1F512152GCM-lp.JPG', '
\r\n          为纪念并弘扬五四精神,展现青春风采,激发广大青年科技人员立足本职岗位、投身科研事业的热情,5月5日上午,省能源环境研究院开展了“成长 责任 理想”为主题的五四青年节座谈会,院班子成员和全院青年进行了交流座谈。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         会上,院领导与参会青年人一起围绕主题,结合个人经历,立足岗位,分享了成长中的感悟,青年人敞开心扉,畅谈了工作、学习、生活中的体会,展示了当代青年思想活跃,蓬勃朝气的精神风貌。徐晓秋院长在认真听取了青年员工的发言后,鼓励青年员工要敢于担当、勇于创新创造,善于运用科学的工作方法,加强交流沟通,充分利用我院为年轻人搭建的学习交流平台,借鉴先进经验,创造性地开展工作。 
\r\n         最后,院所班子成员对全体青年人寄予厚望,希望青年人有理想有担当,不断加强业务学习锻炼,脚踏实地开展工作,全面提升自身素质修养,肩负起青年人建设能源院的责任,在激情奋斗中绽放青春光芒。 
\r\n', 1, 0, '未知', '“,成长,责任,理想,”,我院,召开,青年,职工,', '2017-05-05 07:19:00', '2020-06-02 02:11:02', NULL), +(179, 190, 7, '省能源院召开全体职工大会传达黑龙江省第十二次党代会精神、科学院党组扩大会议精神及赵梅书记讲话精神', 'admin', '5日上午,黑龙江省能源环境研究院组织召开全体职工大会,院班子成员参加会议,会议由党委书记兼院长徐晓秋同志主持。 会议传达了黑龙江省第十二次党代会精神、科学院党组扩大', '/uploads/allimg/170512/1-1F512153040C1-lp.JPG', '
\r\n          5日上午,黑龙江省能源环境研究院组织召开全体职工大会,院班子成员参加会议,会议由党委书记兼院长徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         会议传达了黑龙江省第十二次党代会精神、科学院党组扩大会议精神及赵梅书记讲话精神,同时对下阶段工作进行部署。会议指出,省第十二次党代会是凝心聚力、团结奋进、风清气正的会议,全体职工要把深入学习贯彻省第十二次党代会精神作为当前和今后一个时期的重要政治任务。要围绕中心工作谋实招,积极把各项工作融入到单位新一轮发展的总体布局之中加以谋划和部署。党员干部要起模范带头作用,以支部为单位开展学习活动,强化制度机制建设、作风效能建设,强化政治纪律,抓细抓小,进一步开拓工作的领域、创新工作的机制。会议还传达了科学院党组扩大会议精神及赵梅书记讲话精神,以新理念引领新路子,要求各支部将把此次学习活动与“两学一做”活动结合起来,坚持学以致用,知行合一,不断团结广大党员干部和群众,加大力气抓建设,以更加富有成效的工作推动党代会精神的全面落实,为决战决胜全面小康贡献力量。 
\r\n', 1, 0, '未知', '省,能源,院,召开,全体,职工,大会,传达,5日,', '2017-05-05 04:29:00', '2020-06-02 02:11:02', NULL), +(180, 191, 7, '省能源院顺利通过省直精神文明单位标兵验收', 'admin', '5日上行,省能源院与其他3家院所一起参加省省直工委文明办文明单位创建工作验收会,并顺利通过验收。', '/uploads/allimg/170512/1-1F512153K3D0-lp.JPG', '        5日上午,省能源院与其他3家院所一起参加省 省直工委文明办文明单位创建工作验收会,并顺利通过验收。
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '省,能源,院,顺利,通过,省直,精神,文明单位,', '2017-05-05 05:12:00', '2020-06-02 02:11:02', NULL), +(181, 192, 7, '省能源院召开党风廉政建设扩大会议迅速传达省科学院党风廉政建设相关要求', 'admin', '4月28日,省能源院召开党风廉政建设扩大会议,迅速传达省科学院月报会上关于党风廉政建设的相关要求,并部署各项工作,省能源院领导班子,全体职工参加了会议,会议由省能源院', '/uploads/allimg/170512/1-1F512154321335-lp.JPG', '
\r\n          4月28日,省能源院召开党风廉政建设扩大会议,迅速传达省科学院月报会上关于党风廉政建设的相关要求,并部署各项工作,省能源院领导班子,全体职工参加了会议,会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         徐晓秋同志全文传达了省委纪委“关于‘五一’和‘端午节’节日期间纪律要求的通知”;“关于加强车辆管理严防节假日期间公车私用的通知”,同时要求省能源院全体干部职工要围绕省科学院2017年党风廉政工作会议上党组书记赵梅同志和纪检组长宫杰同志的讲话要求,时刻严明政治纪律、严肃劳动纪律,严格遵守各项法律及规章条例、严格执行各项制度,用高标准规范自身行为,各部门负责人要发挥“一岗双责”积极作用,坚决杜绝迟到早退、工作态度散漫、从事与无关的事宜,公车私用等现象,并再次强调要严格履行钉钉平台请假审批手续。最后,关春玲副院长指出各部门要做好节假日期间相关安全工作。
\r\n  
\r\n', 1, 0, '未知', '省,能源,院,召开,党风,廉政建设,扩大会议,4月,', '2017-04-28 07:41:00', '2020-06-02 02:11:02', NULL), +(182, 193, 7, '省能源院党委召开中心组学习扩大会议学习贯彻落实省科学院党风廉政会议精神', 'admin', '4月19日,省能源院党委召开中心组学习扩大会议,学习贯彻落实省科学院党风廉政会议精神,省能源院领导班子、党委委员,各党支部书记、部门负责人、职工代表参加了会议,会议由', '/uploads/allimg/170512/1-1F51215542O40-lp.JPG', '
\r\n         4月19日,省能源院党委召开中心组学习扩大会议,学习贯彻落实省科学院党风廉政会议精神,省能源院领导班子、党委委员,各党支部书记、部门负责人、职工代表参加了会议,会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         孵化中心主任姜宏宇同志全文传达了省科学院党组书记赵梅同志的讲话及派驻纪检组组长宫杰同志的讲话精神。随后,徐晓秋同志指出,各部门要持续加强党风廉政建设工作,按照中央、省委及省科学院的要求,牢固树立“四个意识”,严格遵守相关“条例”“准则”,认真落实“一岗双责”,有效执行好已签订的党风廉政建设责任书中的相关工作,全体党员干部要以身作则,做好表率,为省能源院的发展打牢思想基础。最后,徐晓秋同志对近期相关工作进行了部署,副院长关春玲同志对安全工作做出了相应安排。 
\r\n', 1, 0, '未知', '省,能源,院,党委,召开,中心组,学习,扩大会议,', '2017-04-19 09:14:00', '2020-06-02 02:11:02', NULL), +(183, 194, 7, '省能源院党委召开中心组学习会议', 'admin', '3月31日,省能源院党委召开中心组学习会议,院领导班子参加会议,会议由徐晓秋同志主持。 参会人员学习了省科学院第二期关键少数政治理论能力提升班相关学习内容及党组书记赵梅', '/uploads/allimg/170512/1-1F5121556302J-lp.JPG', '
\r\n         3月31日,省能源院党委召开中心组学习会议,院领导班子参加会议,会议由徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         参会人员学习了省科学院第二期“关键少数”政治理论能力提升班相关学习内容及党组书记赵梅同志在学习贯彻党的十八届六中会精神中组心学习研讨班上的讲话,围绕讲政治、强意识、重行动,结合自身学习,相互交流学习心得,同时针对科技体制改革工作,聚集省能源院未来发展,就如何发挥好“关键少数”带头作用,将十八届六中全会精神及赵梅书记讲话精神落实到实处,开展讨论。与会人员一致认为,在今后的工作中,要带头增强“四个意识”,带头坚定理想信念,带头严守党规党纪,不断促进省能源院各项工作取得新成绩、新发展。 
\r\n', 1, 0, '未知', '省,能源,院,党委,召开,中心组,学习,会议,3月,', '2017-03-31 07:55:00', '2020-06-02 02:11:02', NULL), +(184, 195, 7, '省能源院举办女职工观影活动喜迎“三八”妇女节', 'admin', '值此三八妇女节来临之际,省能源院举行庆祝活动,组织全体女职工观看电影,这次活动营造出了浓郁的节日气氛,使广大女职工能在平日繁忙的工作中,放松身心,以更好的状态投入', '/uploads/allimg/170512/1-1F512155PHC-lp.JPG', '
\r\n         值此“三八”妇女节来临之际,省能源院举行庆祝活动,组织全体女职工观看电影,这次活动营造出了浓郁的节日气氛,使广大女职工能在平日繁忙的工作中,放松身心,以更好的状态投入工作,创出新业绩。 
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '省,能源,院,举办,女,职工,观影,活动,喜迎,“,', '2017-03-08 08:00:00', '2020-06-02 02:11:02', NULL), +(185, 196, 7, '省能源环境研究院党委召开“两学一做”专题民主生活会', 'admin', '2月15日,黑龙江省能源环境研究院党委召开两学一做专题民主生活会,省能源院党委书记、院长徐晓秋同志和省能源院党委委员、副院长关春玲同志参加会议,省科学院党组书记赵梅同', '/uploads/allimg/170512/1-1F51216023S96-lp.JPG', '
\r\n         2月15日,黑龙江省能源环境研究院党委召开“两学一做”专题民主生活会,省能源院党委书记、院长徐晓秋同志和省能源院党委委员、副院长关春玲同志参加会议,省科学院党组书记赵梅同志和院机关党委书记刘颖同志列席会议,会议由徐晓秋书记主持。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         民主生活会上,省能源院党委书记徐晓秋同志代表班子及个人紧扣“两学一做”学习教育主题,围绕全面学习党的十八届六中全会精神,重点对照《关于新形势下党内政治生活的若干准则》和《中国共产党党内监督条例》,针对省科学院党建联系点及“三走”战略要求,紧密联系班子和个人思想、工作实际,深入查找剖析了各方面存在的问题及原因,同时坚持问题导向、准确、中恳地对班子成员和个人开展了批评与自我批评,并提出了明确具体、切实可行的整改措施。关春玲同志随后进行了发言,进行了深刻的剖析和批评与自我批评。
\r\n         会上,省科学院党组书记赵梅同志就如何深入落实好党的十八届六中全会的学习,如何高质量的开展、规范、执行好党内政治生活、提高政治生活严肃性,如何把党建工作抓实抓细,如何申报重大事项,如何提高领导班子示范性和如何落实责任等若干问题提出了要求,围绕党内政治生活“怎么看、怎么做、怎么抓”与省能源院领导班子进行了深入交流探讨,最后赵梅书记对省能源院专题民主生活会给予肯定,指出此次会议准备充分,态度端正,希望省能源院领导班子根据自身查找的问题,迅速积极制定出方向性措施,全面推进省能源院党建工作。 
\r\n', 1, 0, '未知', '省,能源,环境,研究院,党委,召开,“,两学一做,', '2017-02-15 08:00:00', '2020-06-02 02:11:02', NULL), +(186, 197, 7, '省能源院各党支部组织全体党员及广大干部职工集体观看省科学院党组赵梅书记受邀坐客人民网视频访谈', 'admin', '20日,省能源院各党支部组织全体党员及广大干部职工集体观看省科学院党组赵梅书记受邀坐客人民网视频访谈。', '/uploads/allimg/170512/1-1F5121605241R-lp.JPG', '
\r\n          20日,省能源院各党支部组织全体党员及广大干部职工集体观看省科学院党组赵梅书记受邀坐客人民网视频访谈。 
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '省,能源,院各,党支部,组织,全体,党员,及,20日,', '2017-02-20 08:04:00', '2020-06-02 02:11:02', NULL), +(187, 198, 7, '省能源院召开全体职工会议宣布关于任命姜宏宇同志为孵化中心主任的任命文件', 'admin', '2月17日上午,省能源院召开全体职工会议,省科学院党组成员曾祥俊同志、人事处处长张兴同志参加了会议,会议由省能源院院长徐晓秋同志主持。会上,张兴处长宣读了关于任命姜宏', '/uploads/allimg/170512/1-1F512160QNN-lp.JPG', '
\r\n        2月17日上午,省能源院召开全体职工会议,省科学院党组成员曾祥俊同志、人事处处长张兴同志参加了会议,会议由省能源院院长徐晓秋同志主持。会上,张兴处长宣读了关于任命姜宏宇同志为孵化中心主任,参与省能源院班子分工的任职文件,省能源院领导班子及全体职工对姜宏宇同志表示热烈的欢迎,姜宏宇同志对日后的工作做出了表态,最后,曾祥俊同志对省能源院的工作给予肯定,同时对姜宏宇同志今后的工作提出了五点要求,祝愿省能源院在班子的带领下,一定会有更加美好的未来。 
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '省,能源,院,召开,全体,职工,会议,宣布,关于,', '2017-02-17 08:07:00', '2020-06-02 02:11:02', NULL), +(188, 199, 7, '省科学院郭春景院长与我院人员一共赴伊春调研', 'admin', '2月16日,省科学院郭春景院长、能源院徐晓秋院长和生物能团队带头人刘伟一同前往伊春格润生态养殖公司的大型沼气工程进行调研,郭院长要求能源院要结合我省养殖业现状,在废弃', '/uploads/allimg/170512/1-1F512161255R0-lp.JPG', '
\r\n          2月16日,省科学院郭春景院长、能源院徐晓秋院长和生物能团队带头人刘伟一同前往伊春格润生态养殖公司的大型沼气工程进行调研,郭院长要求能源院要结合我省养殖业现状,在废弃物处理与利用领域以“坑口电站”模式打造寒地沼气全产业链。 
\r\n  
\r\n
\r\n \"\"
\r\n \"\"
\r\n \"\"
\r\n', 1, 0, '未知', '省,科学院,郭春景,郭,春景,院长,与,我院,人员,', '2017-02-16 08:10:00', '2020-06-02 02:11:02', NULL), +(189, 200, 7, '省能源环境研究院召开职工大会传达省科学院2017年工作会议精神', 'admin', '2017年1月24日上午,省能源环境研究院召开职工大会传达省科学院2017年工作会议精神,会上徐晓秋院长传达了省科学院2017年工作报告及院党组书记赵梅同志的讲话精神,要求各部门会后', '/uploads/allimg/170512/1-1F512161H3134-lp.JPG', '
\r\n         2017年1月24日上午,省能源环境研究院召开职工大会传达省科学院2017年工作会议精神,会上徐晓秋院长传达了省科学院2017年工作报告及院党组书记赵梅同志的讲话精神,要求各部门会后系统学习,领会会议精神,并按照省科学院工作的总体思路和工作目标,明确工作重点,开展好2017年度相关工作,最后,对春节期间安全工作进行了部署。 
\r\n  
\r\n
\r\n \"\"
\r\n \"\"
\r\n', 1, 0, '未知', '省,能源,环境,研究院,召开,职工,大会,传达省,', '2017-01-24 08:16:00', '2020-06-02 02:11:02', NULL), +(190, 201, 7, '省能源院三项课题顺利通过鉴定', 'admin', '2017年1月10日,由黑龙江省科学院组织专家对省能源环境研究院和科技孵化中心承担的三项课题省科学院预研项目《寒区农业固体废弃物循环厌氧发酵关键技术研究》、学部委员指导专项', '/uploads/allimg/170512/1-1F5121619492K-lp.JPG', '
\r\n         2017年1月10日,由黑龙江省科学院组织专家对省能源环境研究院和科技孵化中心承担的三项课题省科学院预研项目《寒区农业固体废弃物循环厌氧发酵关键技术研究》、学部委员指导专项《抗生素对鸡粪厌氧消化过程影响的研究》和院所基本应用技术研究专项《污泥超声预处理对厌氧消化工艺性能的影响研究》进行了成果鉴定。鉴定委员会由来自东北农业大学等多家单位的专家组成。省科学院科研处王阳处长主持了此次鉴定会。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n \"\"

\r\n  
\r\n
\r\n         鉴定委员会专家认真听取了各课题组的工作汇报,审议了课题组提供的全部鉴定材料。经充分质询、讨论,鉴定专家委员会认为课题组提供的鉴定材料齐全、研究路线合理,并对项目的现实指导意义和取得的成果给予了较高的评价,经审议一致同意三个课题的研究成果达到了国内领先水平。
\r\n         这三个课题顺利通过鉴定,将进一步促进我院在废弃物处理技术方向的深入研究,对生物能学科团队的建设和发展起到了重要的支撑作用。 
\r\n', 1, 0, '未知', '省,能源,院,三项,课题,顺利,通过鉴定,2017年,', '2017-01-10 08:18:00', '2020-06-02 02:11:02', NULL), +(191, 202, 7, '省能源院召开全体党员大会及全体职工大会', 'admin', '12月21日,省能源院召开全体党员大会,省能源院党建联系点、党组成员曾祥俊同志,院人事处副处长王向伟同志参加了会议,会议由省能源院党委书记、院长徐晓秋同志主持。 首先,', '/uploads/allimg/170512/1-1F512162430E7-lp.JPG', '
\r\n         12月21日,省能源院召开全体党员大会,省能源院党建联系点、党组成员曾祥俊同志,院人事处副处长王向伟同志参加了会议,会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n          首先,徐晓秋书记就一年的党委书记工作情况进行了述职,述职报告经全体党员表决,全票通过。曾祥俊同志对省能源院党委一年的工作情况给予充分肯定,指出省能源院在班子带领下,无论是在硬实力还是软实力方面都取得了长足突破式的进步,希望省能源院坚定走改革发展探索之路,要重点突破,做到有所为有所不为;内引外联,实现协同创新;注重人才培养,充分发挥青年生力军的优势。王向伟副处长对省能源院与院人事处党建联系点一年来的工作给予了肯定,并希望有更多的机会与省能源院相互学习,共同进步。
\r\n
\r\n          随后,省能源院召开全体职工大会,会议由徐晓秋院长主持,首先,中层干部进行了述职,并选举出2016年先进个人和先进集体,最后,徐晓秋院长就全年工作情况及2017年工作要点,做了题为《深化改革,凝聚力量,创新发展,提质增效》的工作报告,报告经全体职工表决,全票通过。 
\r\n', 1, 0, '未知', '省,能源,院,召开,全体,党员,大会,及,职工,12月,', '2016-12-21 08:23:00', '2020-06-02 02:11:02', NULL), +(192, 203, 7, '省能源院召开会议学习贯彻落实省委十一届八次全会精神、省委书记王宪魁同志讲话精神及省科学院党组书记赵梅同志在省科学院学习全会精神会议上的讲话', 'admin', '11月28日,省能源院召开会议,学习贯彻落实省委十一届八次全会精神、省委书记王宪魁同志讲话精神及省科学院党组书记赵梅同志在省科学院学习全会精神会议上的讲话,会议由省能源', '/uploads/allimg/170512/1-1F512163002V9-lp.JPG', '
\r\n         11月28日,省能源院召开会议,学习贯彻落实省委十一届八次全会精神、省委书记王宪魁同志讲话精神及省科学院党组书记赵梅同志在省科学院学习全会精神会议上的讲话,会议由省能源院党委书记、院长徐晓秋同志主持,省能源院全体班子成员、中层干部、党支部书记、党员和民主人士参加了会议。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         会议学习了省委十一届八次全会精神、省委书记王宪魁同志讲话精神及省科学院党组书记赵梅同志在省科学院学习全会精神会议上的讲话。徐晓秋书记强调,各党支部要组织好党员群众,深入认真学习相关会议精神,准确把握“五位一体”总体布局和“四个全面”战略布局,不断提高“四个意识”,坚持开展好周三学习工作,按照省科学院党组的要求,制定好党的十八届六中全会学习方案,把理论学习与科研工作有机结合,抓住深入开展科技体制改革的有利时机,全面推进省能源院长足发展。 
\r\n', 1, 0, '未知', '省,能源,院,召开,会议,学习贯彻,落实,省委,', '2016-11-28 08:29:00', '2020-06-02 02:11:02', NULL), +(193, 204, 7, '黑龙江省能源环境学会召开第二次年会', 'admin', '11月26日,作为黑龙江省科学技术协会学术年会的重要组成部分,也是第八届黑龙江省科学技术协会学术年会暨太阳岛科技论坛分会场,由黑龙江省能源环境学会,黑龙江省自然辩证法研', '/uploads/allimg/170512/1-1F512163406459-lp.JPG', '
\r\n          11月26日,作为黑龙江省科学技术协会学术年会的重要组成部分,也是第八届黑龙江省科学技术协会学术年会暨太阳岛科技论坛分会场,由黑龙江省能源环境学会,黑龙江省自然辩证法研究会,城市水资源水环境国家重点实验室共同组织的“环境伦理与废弃物循环再利用技术学术研讨会”在哈尔滨工业大学城市水资源与水环境国家重点实验室召开。本次研讨会的主题是废弃物的循环利用与环境伦理思想透析,会议由省能源环境研究院徐晓秋院长主持,省科学院副院长沙长青做重要讲话,多名知名专家学者作精彩学术报告,本次会议对促进我省废弃物循环利用起到积极的推动作用。 
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '黑龙江省,能源,环境,学会,召开,第二次,年会,', '2016-11-26 08:32:00', '2020-06-02 02:11:02', NULL), +(194, 205, 7, '省能源院召开党委中心组学习扩大会议', 'admin', '11月4日,省能源院召开党委中心组学习扩大会议,省能源院领导班子、党委委员、党支部书记、各部门负责人和党外人士出席了会议,会议由党委书记、院长徐晓秋同志主持。 会议第一', '/uploads/allimg/170512/1-1F512164025935-lp.JPG', '
\r\n        11月4日,省能源院召开党委中心组学习扩大会议,省能源院领导班子、党委委员、党支部书记、各部门负责人和党外人士出席了会议,会议由党委书记、院长徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n
\r\n       会议第一项,全文学习十八届六中全会公报,徐晓秋书记从政治立场、思想意识、行为要求、党内民主、群众监督等方面对公报进行了详细解读,参会人员就学习内容进行了认真的讨论。
\r\n       会议第二项,认真学习《关于新形势下党内政治生活的若干准则》和《中国共产党党内监督条例》,并将上述文件共享到工作群,方便广大党员干部及职工学习。
\r\n       徐晓秋书记强调,政治学习不能只局限于党内学习,各党支部会后要组织全体党员干部、党外人士、群众,认真学习十八届六中全会公报内容、政策及要求,并严格执行《关于新形势下党内政治生活的若干准则》和《中国共产党党内监督条例》。
\r\n       最后,徐晓秋书记对近期相关工作作了具体安排及部署。 
\r\n', 1, 0, '未知', '省,能源,院,召开,党委,中心组,学习,扩大会议,', '2016-11-04 08:40:00', '2020-06-02 02:11:02', NULL), +(195, 206, 7, '省能源院召开全体职工会议学习习近平总书记在纪念红军长征80周年大会上的讲话', 'admin', '按照省科学院机关党委《关于认真学习贯彻习近平总书记在纪念红军长征胜利80周年大会上的讲话的通知》及学习十八届六中全会精神相关要求,28日省能源院召开全体职工会议,会议围', '/uploads/allimg/170512/1-1F512164420353-lp.JPG', '
\r\n          按照省科学院机关党委《关于认真学习贯彻习近平总书记在纪念红军长征胜利80周年大会上的讲话的通知》及学习十八届六中全会精神相关要求,28日省能源院召开全体职工会议,会议围绕赵梅书记在省科学院《中国共产党问责条例》学习大会上的讲话及提出的要求,认真学习习近平总书记在纪念红军长征80周年大会上的讲话,全文宣读学习了十八届六中全会公报,并继续观看纪录片《永远在路上》,会议同时对我院近期科研和党建工作做了进一步部署。 
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '省,能源,院,召开,全体,职工,会议,学,习习,近,', '2016-10-28 08:44:00', '2020-06-02 02:11:02', NULL), +(196, 207, 20, '省科学院科技进步一等奖', 'admin', '', '/uploads/allimg/170512/1-1F5121AJEc-lp.JPG', '
\r\n \"\"
\r\n
\r\n  
\r\n', 1, 0, '未知', '省,科学院,科技,进步,一等奖,', '2017-05-12 09:29:41', '2020-06-02 02:11:02', NULL), +(197, 208, 20, '省科学院TRIZ大赛三等奖', 'admin', '', '/uploads/allimg/170512/1-1F5121A922X3-lp.JPG', '\"\"', 1, 0, '未知', '省,科学院,TRIZ,大赛,三等奖,', '2017-05-12 08:59:09', '2020-06-02 02:11:02', NULL), +(198, 209, 20, '省科学院书写党章优秀组织奖', 'admin', '', '/uploads/allimg/170512/1-1F5121F0261R-lp.JPG', '
\r\n \"\"
\r\n', 1, 0, '未知', '省,科学院,书写,党章,优秀,组织奖,', '2017-05-12 09:00:07', '2020-06-02 02:11:02', NULL), +(199, 210, 20, '省科学院TRIZ大赛三等奖', 'admin', '', '/uploads/allimg/170512/1-1F5121F133421-lp.JPG', '
\r\n \"\"
\r\n', 1, 0, '未知', '省,科学院,TRIZ,大赛,三等奖,', '2017-05-12 09:01:18', '2020-06-02 02:11:02', NULL), +(200, 211, 20, '黑龙江省科学技术三等奖', 'admin', '', '/uploads/allimg/170512/1-1F5121F353P8-lp.JPG', '
\r\n \"\"
\r\n', 1, 0, '未知', '黑龙江省,科学技术,三等奖,', '2017-05-12 09:33:58', '2020-06-02 02:11:02', NULL), +(201, 212, 20, '黑龙江省科学技术发明一等奖', 'admin', '', '/uploads/allimg/170512/1-1F5121F522936-lp.JPG', '
\r\n \"\"
\r\n', 1, 0, '未知', '黑龙江省,科学技术,发明,一等奖,', '2017-05-12 09:39:59', '2020-06-02 02:11:02', NULL), +(202, 213, 20, '中国环境科学学会团体会员', 'admin', '', '/uploads/allimg/170512/1-1F5121F614C7-lp.JPG', '
\r\n \"\"
\r\n', 1, 0, '未知', '中国,环境科学,学会,团体,会员,', '2017-05-12 09:05:58', '2020-06-02 02:11:02', NULL), +(203, 214, 20, '省科技厅共享服务平台先进集体、先进个人', 'admin', '', '/uploads/allimg/170512/1-1F5121FH4S2-lp.JPG', '
\r\n \"\"
\r\n', 1, 0, '未知', '省,科技厅,共享,服务平台,先进集体,、,', '2017-05-12 09:07:03', '2020-06-02 02:11:02', NULL), +(204, 215, 20, '省科技厅共享服务平台先进集体、先进个人', 'admin', '', '/uploads/allimg/170512/1-1F5121FT2441-lp.JPG', '
\r\n \"\"
\r\n', 1, 0, '未知', '省,科技厅,共享,服务平台,先进集体,、,', '2017-05-12 09:08:29', '2020-06-02 02:11:02', NULL), +(205, 216, 20, '省科技厅共享服务平台先进集体、先进个人', 'admin', '', '/uploads/allimg/170512/1-1F5121F930448-lp.JPG', '
\r\n \"\"
\r\n', 1, 0, '未知', '省,科技厅,共享,服务平台,先进集体,、,', '2017-05-12 09:09:11', '2020-06-02 02:11:02', NULL); +INSERT INTO `articles` (`id`, `oldid`, `category_id`, `title`, `writer`, `description`, `cover`, `content`, `status`, `sort`, `source`, `keywords`, `created_at`, `updated_at`, `deleted_at`) VALUES +(206, 217, 20, '省直文明单位', 'admin', '', '/uploads/allimg/170512/1-1F5121G015V4-lp.JPG', '
\r\n \"\"
\r\n', 1, 0, '未知', '省直,文明单位,', '2017-05-12 09:09:55', '2020-06-02 02:11:02', NULL), +(207, 218, 20, '省直“五一巾帼奖”集体', 'admin', '', '/uploads/allimg/170512/1-1F5121G10KQ-lp.JPG', '
\r\n \"\"
\r\n', 1, 0, '未知', '省直,“,五一巾帼奖,”,集体,', '2017-05-12 09:10:46', '2020-06-02 02:11:02', NULL), +(208, 219, 20, '省科学院先进党组织', 'admin', '', '/uploads/allimg/170512/1-1F5121G212551-lp.JPG', '
\r\n \"\"
\r\n', 1, 0, '未知', '省,科学院,先进,党组织,', '2017-05-12 09:11:53', '2020-06-02 02:11:02', NULL), +(209, 220, 20, '省直精神文明单位', 'admin', '', '/uploads/allimg/170512/1-1F5121G405D6-lp.JPG', '
\r\n \"\"
\r\n', 1, 0, '未知', '省直,精神,文明单位,', '2017-05-12 09:13:01', '2020-06-02 02:11:02', NULL), +(210, 221, 20, '省直青年文明号', 'admin', '', '/uploads/allimg/170512/1-1F5121G44a92-lp.JPG', '
\r\n \"\"
\r\n', 1, 0, '未知', '省直,青年文明号,', '2017-05-12 09:14:36', '2020-06-02 02:11:02', NULL), +(211, 222, 7, '省科学院审计部进驻我院开展2016年度审计工作', 'admin', '6月5日上午,根据院党组关于开展全院2016年度财务收支审计工作的部署,院党组成员副院长沙长青同志,审计部副处长曹海虹同志率院审计部协同审计师事务所进驻省能源院开展2016年度', '/uploads/allimg/170616/1-1F616091925Y9-lp.jpg', '        6月5日上午,根据院党组关于开展全院2016年度财务收支审计工作的部署,院党组成员副院长沙长青同志,审计部副处长曹海虹同志率院审计部协同审计师事务所进驻省能源院开展2016年度财务收支情况审计工作,省能源院党委书记院长徐晓秋同志,孵化中心主任姜宏宇同志及省能源院财务人员参加了会议。
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '省,科学院,审计部,进驻,我院,开展,2016,年度,', '2017-06-06 01:14:00', '2020-06-02 02:11:02', NULL), +(212, 223, 7, '能源院党委组织全体职工观看中国人民解放军建军90周年大会直播', 'admin', '8月1日上午10:00,庆祝中国人民解放军建军90周年大会在人民大会堂举行,中共中央总书记、国家主席、中央军委主席习近平出席大会并发表重要讲话。按照省委办公厅及省科学院机关党', '/uploads/allimg/170809/1-1FPZ939495X-lp.jpg', '
\r\n                      8月1日上午10:00,庆祝中国人民解放军建军90周年大会在人民大会堂举行,中共中央总书记、国家主席、中央军委主席习近平出席大会并发表重要讲话。按照省委办公厅及省科学院机关党委通知要求,省能源院党委组织能源院全体职工集体观看大会直播。
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '能源,院,党委,组织,全体,职工,观看,8月,1日,', '2017-08-09 01:35:07', '2020-06-02 02:11:02', NULL), +(213, 224, 7, '中国科学院广州能源院所庄新姝研究员、孔晓英博士到我院调研', 'admin', '7月27日上午,作为龙广结合首批抵哈的科研单位,中国科学院广州能源院所庄新姝研究员、孔晓英博士一行到省能源环境研究院调研,就涉及的研究领域进行洽谈交流,同时与生物能创', '/uploads/allimg/170809/1-1FP9151G6105-lp.jpg', '
\r\n
\r\n                  7月27日上午,作为龙广结合首批抵哈的科研单位,中国科学院广州能源院所庄新姝研究员、孔晓英博士一行到省能源环境研究院调研,就涉及的研究领域进行洽谈交流,同时与生物能创新团队开展科研对接,省科学院产业化处、省科技厅成果转化中心及省能源院的领导和部
\r\n
\r\n 分科研人员参加了会议。
\r\n \"\"
\r\n  
\r\n
\r\n', 1, 0, '未知', '中国科学院,广州,能源,院所,庄新,姝,研究员,', '2017-07-27 07:56:00', '2020-06-02 02:11:02', NULL), +(214, 225, 7, '山东大学鲍晓明教授,黑龙江中丹建业生物能源公司总经理王建业一行两人来我院进行洽谈交流', 'admin', '2017年8月22日,山东大学鲍晓明教授,黑龙江中丹建业生物能源公司总经理王建业一行两人来到省能源环境研究院,就纤维素秸秆乙醇工业所涉及的纤维素降解菌及酵母菌的研发与应用进', '/uploads/allimg/170823/1-1FR30T21M20-lp.jpg', '
\r\n
\r\n               2017年8月22日,山东大学鲍晓明教授,黑龙江中丹建业生物能源公司总经理王建业一行两人来到省能源环境研究院,就纤维素秸秆乙醇工业所涉及的纤维素降解菌及酵母菌的研发与应用进行洽谈交流,并就今后的合作方向、优势互补和合作模式等方面进行了深入探讨,能源院院长徐晓秋和相关科研人员参加了此次会议。
\r\n \"\"
\r\n
\r\n         
\r\n
\r\n', 1, 0, '未知', '山东,大学,鲍,晓明,教授,黑龙,江中,丹,建业,', '2017-08-23 00:39:57', '2020-06-02 02:11:02', NULL), +(215, 226, 7, '能源院开展科普活动', 'admin', '9月20日,省能源环境学会到漠河县宏林菌业种植有限公司进行林下产业废弃物再利用技术及室内空气污染控制技术科普活动,并与石忠斌董事长探讨了菌业废弃物综合利用方案等问题。', '/uploads/allimg/170925/1-1F925143Q0603-lp.jpg', '               9月20日,省能源环境学会到漠河县宏林菌业种植有限公司进行林下产业废弃物再利用技术及室内空气污染控制技术科普活动,并与石忠斌董事长探讨了菌业废弃物综合利用方案等问题。\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '能源,院,开展,科普活动,9月,20日,省,能源,环境,', '2017-09-25 06:32:33', '2020-06-02 02:11:02', NULL), +(216, 227, 7, '18日9:00 省能源环境研究院党委组织全体干部职工共同观看十九大召开盛况直播', 'admin', '18日9:00,按照省科学院相关部署,省能源环境研究院党委组织全体干部职工共同观看十九大召开盛况直播,共唱国歌,以饱满的精神工作状态,庆祝十九大胜利召开!', '/uploads/allimg/171020/1-1G020095H4433-lp.jpg', '               18日9:00,按照省科学院相关部署,省能源环境研究院党委组织全体干部职工共同观看十九大召开盛况直播,共唱国歌,以饱满的精神工作状态,庆祝十九大胜利召开!\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '18日,省,能源,环境,研究院,党委,组织,全体,', '2017-10-18 01:55:00', '2020-06-02 02:11:02', NULL), +(217, 228, 7, '10月19日上午省能源院领导班子、全体党员干部对十九大报告全文进行了学习,参会人员围绕省能源院发展实际进行了解读学习和讨论', 'admin', ' 10月19日上午,省能源院召开全体职工大会,全面部署学习贯彻落实十九大会议精神,省能源院党委书记、院长徐晓秋同志主持会议,省能源院领导班子、全体党员干部及民主人士', '/uploads/allimg/171020/1-1G020100J41X-lp.jpg', '
\r\n                    10月19日上午,省能源院召开全体职工大会,全面部署学习贯彻落实十九大会议精神,省能源院党委书记、院长徐晓秋同志主持会议,省能源院领导班子、全体党员干部及民主人士参加会议,会议对报告全文进行了学习,参会人员围绕省能源院发展实际进行了解读学习和讨论,徐晓秋书记指出,各党支部要按照十九大报告中对科研工作提出的新任务、新要求开展形式多样的学习活动,全体党员干部要不忘初心,牢记使命,强化党建引领,推动创新发展,要通过系统学习,广泛讨论,加强宣传,以十九大会议精神武装头脑,指导实践,推进省能源院各项工作再上新台阶,满怀信心迈向新征程。
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '10月,19日,上午省,能源,院,领导班子,、,全体,', '2017-10-19 02:02:20', '2020-06-02 02:11:02', NULL), +(218, 229, 7, '以向善、向上、向阳、向党精气神 打造一流科研创新团队 --省能源院生物能创新团队党支部开展“说讲谈”活动', 'admin', '为深入贯彻落实党的十九大精神,落实院党组提出关于“新思想引领改革发展思路,新征程凝聚创新创业力量”工作的相关部署,11月15日上午,省能源环境研究院生物能创新团队党支部', '/uploads/allimg/171116/1-1G11616001V39-lp.JPG', '                  为深入贯彻落实党的十九大精神,落实院党组提出关于“新思想引领改革发展思路,新征程凝聚创新创业力量”工作的相关部署,11月15日上午,省能源环境研究院生物能创新团队党支部支部开展了“以向善、向上、向阳、向党精气神 打造一流科研创新团队”为主题的“说讲谈”活动,院党组书记赵梅同志,院直属机关党委、人事处领导,省能源院领导班子、党员代表及石化院、塑料所代表参加了此次活动。会议由生物能创新团队党支部书记王欣同志主持。\r\n
\r\n         活动开始,王欣同志首先介绍了生物能创新团队党支部概况,展示了支部建在团队上的发展理念及支部“三创”(创新学、创新做、创新用)工作成果,并围绕“向善、向上、向阳、向党”,从党务工作者的角度解读了要以积极向上,风雨兼程的精气神的开展各项工作;党支部其他成员和生物能创新团队民主人士代表,围绕十九大报告中与自身研究领域和工作实际联系最紧密的内容,与参会同事一同分享了学习工作心得,并结合对“向善、向上、向阳、向党”深刻理解,分别从科研建设、创新工作、科研新思路、学习感想、人文关怀和团队合作等多角度多视角,深入谈及党对自身工作的引领和对学习生活的积极影响;期间,在北京出差的支部成员也通过语音连线的方式参加了活动。与会同志一致表示,作为一名科技工作者,在党的十九大精神指引下,要不忘初心,牢记使命,以“加快生态文明体制改革 建设美丽中国”为目标,扎实做好本职工作,不负重托,做科技创新的引领者、成果转化的实践者、科学知识的传播者,在科研领域干事创业,共建大科学院。随后,省能源院党建联系点院人事处张兴处长与大家交流了学习党的十九大报告的方法和对本次活动的观摩体会,石化院、塑料所代表也分别谈了观摩体会。
\r\n
\r\n         院党组书记赵梅同志对省能源院生物能创新团队党支部“说讲谈”活动给予了充分肯定,并对此次活动作出点评,赵书记指出,此次活动一是从不同角度展示了活动主题,丰富了党建文化;二是活动方向明确,主题紧密联系科研工作实际;三是党建文化开展的好,体现出对十九大报告的突出学习能力,同时赵书记对下一阶段学习重点进行了部署,指出要进一步深入学习贯彻落实党的十九大精神和加强基层党支部建设,一是要进一步深入学习领会理解党的十九大精神,这是一项长期的政治任务,将这“说讲谈”活动持续开展下去,将十九大的学习常态化;二是要强化基层党支部的政治功能建设,以政治建设作为统领,促进科研工作与政治功能互相融合推进,构建政治生态良好的党建文化;三是,通过对十九大会议精神的学习带动科研创新,立足岗位,发挥作用,为国家和社会做出贡献。
\r\n
\r\n         活动最后,与会全体人员全体起立,与习总书记一起重温入党誓词,不忘初心,牢记使命,不断激发前进动力。
\r\n \"\"\"\"
\r\n', 1, 0, '未知', '以,向善,、,向上,向阳,向,党,精气神,打造,为,', '2017-11-16 07:56:45', '2020-06-02 02:11:02', NULL), +(219, 230, 7, ' 为进一步巩固并发挥省能源院生物能创新团队在寒区固体废弃物处理处置、清洁能源领域的科研技术优势,经过省能源院与农业部沼气科学研究所的前期准备,11月13日上午,省科学院郭春景院长与来访的农业部沼气科学研究所邓宇副所长一行,在省科学院会议室进行了座谈,省科学院产业化处李骏处长,省能源院徐晓秋院长,省能源院相关科研人员参加了会议。 双方就在省能源院建立“寒区生物能源利用联合实验室”相关工作进行了深入交流。郭院长首先对邓副所长一行的到来表示欢迎,郭院长指出,要充分发挥好沼气所和能源院各自在生物质', 'admin', ' 为进一步巩固并发挥省能源院生物能创新团队在寒区固体废弃物处理处置、清洁能源领域的科研技术优势,经过省能源院与农业部沼气科学研究所的前期准备,11月13日上午,省科学院郭', '/uploads/allimg/171116/1-1G116161130414-lp.JPG', '
\r\n              为进一步巩固并发挥省能源院生物能创新团队在寒区固体废弃物处理处置、清洁能源领域的科研技术优势,经过省能源院与农业部沼气科学研究所的前期准备,11月13日上午,省科学院郭春景院长与来访的农业部沼气科学研究所邓宇副所长一行,在省科学院会议室进行了座谈,省科学院产业化处李骏处长,省能源院徐晓秋院长,省能源院相关科研人员参加了会议。
\r\n
\r\n         双方就在省能源院建立“寒区生物能源利用联合实验室”相关工作进行了深入交流。郭院长首先对邓副所长一行的到来表示欢迎,郭院长指出,要充分发挥好沼气所和能源院各自在生物质能源上的技术优势,拿出更好的技术和成果,解决好养殖业末端处理能力不强的问题,更好的为省域经济服务,要用“场口气站”模式,建设寒区沼气示范工程,实现寒区养殖业、种植业废弃物的高效循环利用,打造以沼气为纽带的循环经济产业。
\r\n
\r\n         随后邓副所长介绍了农业部沼气科学研究所的相关情况,包括历史沿革、科学设置、平台条件、团队配置,邓副所长表示,此次合作即是机遇也是挑战,第一要通过建立联合实验室,针对黑龙江省农村生态环境、产业转型进行准确的战略布局;第二要建立更加完善的合作运行机制;第三要真正把合作落实落靠,让寒区生物质成果成规模成体系,实现预期目标。
\r\n
\r\n         最后,郭院长与邓副所长共同签署了《农业部沼气科学研究所与黑龙江省科学院共建“寒区生物能源利用联合实验室”》协议。
\r\n \"\"\"\"
\r\n
\r\n  
\r\n', 1, 0, '未知', '为,进一步,巩固,并,发挥省,能源,院,生物能,为,', '2017-11-13 08:10:00', '2020-06-02 02:11:02', NULL), +(220, 231, 7, '省能源院召开全体职工会议 传达贯彻落实省委第十二届二次全会精神', 'admin', '11月27日下午,省能源院召开全体党员会议,传达贯彻落实省委第十二届二次全会精神,省能源院领导班子,全体党员干部,民主人士代表参加了会议,会议由省能源院党委书记、院长徐', '/uploads/allimg/171204/1-1G2040S9332A-lp.jpg', '
\r\n                 11月27日下午,省能源院召开全体党员会议,传达贯彻落实省委第十二届二次全会精神,省能源院领导班子,全体党员干部,民主人士代表参加了会议,会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n         会议首先学习传达了省委第十二届二次全会精神和全文学习了陆昊省长到自动化所调研时的讲话。会议要求,省能源院全体党员干部要认真学习、深入领会省委第十二届二次全会精神和陆昊省长讲话精神,切实提高认识,深刻理解全会鲜明主题;深刻理解建设现代化新龙江时代特征;深刻理解建设现代化新龙江战略安排;深刻理解建设现代化新龙江政治保证。
\r\n         最后,徐晓秋同志强调,学习贯彻党的十九大和省委第十二届二次全会精神,是当前和今后一个时期的重要政治任务。各党支部要以多种形式,组织、指导、推动全体党员干部开展学习,班子成员要以身作则、率先垂范、先学深学,作出表率,要把学习宣传贯彻党的十九大精神和省委第十二届二次全会精神紧密结合,围绕陆昊省长讲话精神,学深悟透、知行合一,迅速掀起学习宣传贯彻热潮,确保学习贯彻落实取得实效。
\r\n
\r\n                \"\"
\r\n', 1, 0, '未知', '省,能源,院,召开,全体,职工,会议,传达,贯彻,', '2017-11-28 00:30:00', '2020-06-02 02:11:02', NULL), +(221, 232, 7, '省能源院召开2017年度总结表彰大会', '李福裿', '1月2日上午,省能源院在会议室隆重召开2017年度总结表彰大会,省科学院郭春景院长,省能源院领导班子及全体职工参加了大会,会议由院长徐晓秋同志主持。', '/uploads/allimg/180108/1-1P10PZ0464B-lp.JPG', '
\r\n               1月2日上午,省能源院在会议室隆重召开2017年度总结表彰大会,省科学院郭春景院长,省能源院领导班子及全体职工参加了大会,会议由院长徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n
\r\n               徐晓秋院长首先代表省能源院全体干部职工对郭春景院长一年来对省能源院的关心、支持表示衷心感谢。随后孵化中心主任姜宏宇同志、省能源院副院长关春玲同志分别做了2107年度省能源院工作总结报告及2018年度工作要点报告,徐晓秋院长宣读了2017年省能源院表彰决定,并由郭春景院长为获得表彰的集体和个人颁奖。郭院长对省能源院过去一年的工作情况给予肯定,指出未来一年省能源院要持续围绕科研创新、学科团队建设、创新工程、人才培养、对外交流等方面重点开展工作。会上郭院长还与职工亲切座谈,鼓舞广大青年科技工作者要立足岗位,不驰于空想,不骛于虚声,脚踏实地努力工作。
\r\n
\r\n \"\"\"\"
\r\n
\r\n  
\r\n
\r\n               会后,全体职工纷纷表示此次大会深受鼓舞,在新的一年中将牢记使命,实干担当,走好能源院创新发展之路。
\r\n', 1, 0, '未知', '省,能源,院,召开,2017,年度,总结,表彰大会,1月,', '2018-01-05 08:58:00', '2020-06-02 02:11:02', NULL), +(222, 233, 7, '省能源院组织全体党员干部集中收看全国人大一次会议开幕盛况', 'admin', '3月5日上午9:00时,按照省科学院部署,省能源院组织全体党员干部集中收看全国人大一次会议开幕盛况', '/uploads/allimg/180305/1-1P305114129A6-lp.JPG', '                      3月5日上午9:00时,按照省科学院部署,省能源院组织全体党员干部集中收看全国人大一次会议开幕盛况\r\n
\r\n \"\"\"\"\"\"\"\"
\r\n', 1, 0, '未知', '省,能源,院,组织,全体,党员,干部,集中,收看,', '2018-03-12 01:26:54', '2020-06-02 02:11:02', NULL), +(223, 234, 7, '能源院开展庆祝“三八国际妇女节"系列活动', 'admin', '为庆祝全国人大召开,喜迎三八国际妇女节的到来,省能院开展系列活动,3月7日召开“聪慧时尚,自信坚韧,创新进取”主题女职工座谈会,能源院领导班子与全体女职工一同畅谈工作', '/uploads/allimg/180309/1-1P309105GR46-lp.jpg', '
\r\n                    为庆祝全国人大召开,喜迎三八国际妇女节的到来,省能院开展系列活动,3月7日召开“聪慧时尚,自信坚韧,创新进取”主题女职工座谈会,能源院领导班子与全体女职工一同畅谈工作心得,共叙新时代女性风貌;3月8日组织全体职工观看爱国题材影片《厉害了我的国》,共同领略祖国桑田碧海须臾改的巨大变化以及取得的卓著成就,共同感受中国共产党直挂云帆济沧海的伟大信念。
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n', 1, 0, '未知', '能源,院,开展,庆祝,“,三八国际妇女节,系列,', '2018-03-12 01:26:18', '2020-06-02 02:11:02', NULL), +(224, 235, 7, '省能源院召开全中心组学习扩大会议,学习传达3月23日省科学院党组扩大会议精神', 'admin', ' 3月26日上午9:00,省能源院召开全中心组学习扩大会议,学习传达3月23日省科学院党组扩大会议精神。会议由党委书记、院长徐晓秋同志主持,能源院全体职工参加了会议。', '/uploads/allimg/180328/1-1P32Q513193L-lp.jpg', '
\r\n            3月26日上午9:00,省能源院召开全中心组学习扩大会议,学习传达3月23日省科学院党组扩大会议精神。会议由党委书记、院长徐晓秋同志主持,能源院全体职工参加了会议。
\r\n
\r\n         会上,徐晓秋同志、姜宏宇同志、关春玲同志分别传达了“第十三届全国人民代表大会第一次会议”、“十三届全国人大一次会议期间习总书记重要讲话”、“栗战书同志在十三届全国人大一次会议闭幕会上的讲话”、“中国人民政治协商会议第十三届全国委员会第一次会议”的主要内容和“张庆伟同志在全省领导干部大会上的讲话”。
\r\n
\r\n         徐晓秋书记要求能源院全体职工要把学习贯彻两会精神作为当前重要的政治任务及工作目标,持续加强基层支部建设及作风整顿工作,要把学习重要讲话与贯彻习近平新时代中国特色社会主义思想结合起来,与贯彻党的十九大精神部署结合起来,切实将两会精神学在深处落在实处。
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n', 1, 0, '未知', '省,能源,院,召开,全,中心组,学习,扩大会议,', '2018-03-28 07:16:58', '2020-06-02 02:11:02', NULL), +(225, 236, 7, '能源院开展“汇聚读书力量 托起明日希望”文化扶贫慰问活动', 'admin', ' 按照省科学院团委的安排部署,省能源院组织全体干部职工开展“汇聚阅读力量 托起明日希望”文化扶贫慰问活动。\r\n', '/uploads/allimg/180517/1-1P51G61053292-lp.jpg', '
\r\n        按照省科学院团委的安排部署,省能源院组织全体干部职工开展“汇聚阅读力量 托起明日希望”文化扶贫慰问活动。
\r\n
\r\n        省能源院全院上下对此次文化扶贫工作高度重视,2018年5月14日,全体职工在江北会议室举办捐书仪式,班子成员带头为贫困村的孩子们捐献了儿童文学、儿童教育、青少年成长等方面的书籍,共计170余本。
\r\n
\r\n        2018年5月15日,省能源院副院长关春玲同志等一行4人到我院精准扶贫对接点七台河市勃利县吉兴乡合庆村进行帮扶活动。 活动中,首先对扶贫点进行文化帮扶,将职工捐赠的170余本爱心书籍送到合庆村委会主任手中。然后,关春玲同志详细询问了合庆村新建住房的室内环境情况,我院专业人员为其进行了室内甲醛等有害气体的检测及室内环境的评估,并为改善其室内环境提出了合理化建议。扶贫工作从“扶志”与“扶智”做起,生物质领域的专家还对帮扶点进行了秸秆综合利用的科普宣传,此次帮扶工作圆满完成。
\r\n
\r\n         吉兴乡合庆村委会主任对省科学院给予的支持和对帮扶工作的高度重视表示感谢,同时对我院此次的文化扶贫慰问活动表示感谢。   
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n', 1, 0, '未知', '能源,院,开展,“,汇聚,读书,力量,托起,明日,', '2018-05-17 08:12:20', '2020-06-02 02:11:02', NULL), +(226, 237, 7, '省科学院科研处到省能源院进行科研情况调研', 'admin', '5月24日上午,在院科研处倪宏伟处长带领下,院科研处一行三人到省能源院开展科研情况调研工作,省能源院领导班子及科研办相关人员参加了调研,省能源院分别从科研总体情况、项', '/uploads/allimg/180709/1-1PF9153620917-lp.JPG', '               5月24日上午,在院科研处倪宏伟处长带领下,院科研处一行三人到省能源院开展科研情况调研工作,省能源院领导班子及科研办相关人员参加了调研,省能源院分别从科研总体情况、项目情况、研究领域、研究方向、创新团队等方面进行了汇报。\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n', 1, 0, '未知', '省,科学院,科研处,到,能源,院,进行,科研,情况,', '2018-07-09 07:29:07', '2020-06-02 02:11:02', NULL), +(227, 238, 7, '省能源环境研究院与化工学院项目对接会', 'admin', '6月28日下午,能源院徐晓秋院长带队一行4人赴理工大学化学与环境工程学院洽谈合作事宜,双方围绕废弃物厌氧处理、木质纤维素降解转化等方面展开深入交流,并对学生培养、互聘导', '/uploads/allimg/180709/1-1PF91546132Y-lp.jpg', '                      6月28日下午,能源院徐晓秋院长带队一行4人赴理工大学化学与环境工程学院洽谈合作事宜,双方围绕废弃物厌氧处理、木质纤维素降解转化等方面展开深入交流,并对学生培养、互聘导师、建立联合实验室等方面进行商讨。双方最终商定将建立联合科研教学基地、学生实践实习基地及互聘导师机制。会后,双方座谈人员建立了微信群,便于后续工作开展。\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n', 1, 0, '未知', '省,能源,环境,研究院,与,化工学院,项目,对接,', '2018-06-28 07:43:00', '2020-06-02 02:11:02', NULL), +(228, 239, 7, '2018年斯里兰卡城市固体废弃物处理研修班访问黑龙江省能源环境研究院', '刘伟', '2018年7月4-6日,2018年斯里兰卡城市固体废弃物处理研修班在哈尔滨举办。本次研修班由商务部主办,农业农村部沼气科学研究所承办,共有20名来自斯里兰卡不同地区的市政官员参加了此', '/uploads/allimg/180709/1-1PF9155404438-lp.jpg', '                       2018年7月4-6日,2018年斯里兰卡城市固体废弃物处理研修班在哈尔滨举办。本次研修班由商务部主办,农业农村部沼气科学研究所承办,共有20名来自斯里兰卡不同地区的市政官员参加了此次培训,黑龙江省能源环境研究院作为协办单位组织了本次研修班。7月4日上午,培训专题讲座在省科学院会议中心举行,能源院徐晓秋院长首先对来自斯里兰卡的20名学员表示热烈欢迎,随后王欣副研究员做了“城市固废处理的方法和技术”的专题培训报告,普及了中国先进的城市固废处理技术,对斯里兰卡学员的提问做了专业解答。7月5日,研修班在徐晓秋院长的陪同下来到了方正县,方正县县委书记董文琴代表县委县政府对斯里兰卡友人的到来表示了热烈的欢迎,并且在董文琴书记的陪同下,研修班来到天门乡垃圾处理中心,参观了ERCM垃圾处理示范项目,董文琴书记、徐晓秋院长及企业技术人员在现场给研修班学员进行了项目讲解。7月6日,能源院刘伟副研究员与斯里兰卡学员进行了深入交流,学员们对能源院的协办工作给予肯定和感谢,希望将中国先进的有机固废处理技术引进到斯里兰卡,提高斯里兰卡的有机固废处理水平。通过此次培训,加强了能源院在有机固废处理领域的宣传力度,为一带一路发展中国家的发展提供了帮助。\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '2018年,斯里兰卡,城市,固体,废弃物,处理,2018年,', '2018-07-09 07:51:55', '2020-06-02 02:11:02', NULL), +(229, 240, 7, '省能源环境研究院党委开展庆“七一”不忘初心跟党走、牢记使命有作为系列主题活动', 'admin', '为热烈庆祝中国共产党成立97周年,进一步增强党组织的凝聚力和战斗力,不断深入学习贯彻党的十九大精神,不断强化党员\"四个意识\",不断深化“两学一做”学习教育,不断夯实基层', '/uploads/allimg/180710/1-1PG0113625596-lp.jpg', '
\r\n                          省能源环境研究院党委开展庆“七一”不忘初心跟党走、牢记使命有作为系列主题活动
\r\n 
\r\n        为热烈庆祝中国共产党成立97周年,进一步增强党组织的凝聚力和战斗力,不断深入学习贯彻党的十九大精神,不断强化党员"四个意识",不断深化“两学一做”学习教育,不断夯实基层党建全面提升工程基础,不断提升基层党组织的引导力、号召力和凝聚力,“七一”期间,省能源院党委开展了以“不忘初心跟党走、牢记使命有作为”为主题的系列纪念活动,持续展现省能源院党员干部的精神风貌。
\r\n一、重温入党誓词
\r\n       省能源院党委与党建联系点院人事处党支部全体同志共同重温入党誓词,不忘初心牢记使命,坚定入党信念和为共产主义奋斗终生的决心,激励党员以自身的实际行动积极实践誓词,以更加饱满的热情发挥共产党员的先锋模范作用,永葆共产党员的政治本色。
\r\n
\r\n \"\"
\r\n  
\r\n二、参观爱国主义教育基地
\r\n       省能源院与党建联系点院人事处党支部全体党员沿着习近平总书记考察调研的足迹,重温总书记的殷切嘱托及东北抗日联军的英雄事迹,牢记历史、不忘过去,从思想和心灵深处接受了一次深刻的党性教育,使大家倍加珍惜无数先烈用生命给我们换来的幸福生活,激励大家克服一切艰难险阻,勤勉务学,努力工作,珍爱和平、开创未来!
\r\n      1.“东北抗日联军政治军事干部学校遗址纪念碑”
\r\n
\r\n \"\"
\r\n
\r\n       2.“抗联遗址老钱柜纪念碑”\r\n
\r\n \"\"
\r\n
\r\n 三、钉钉“两学一做“答题活动
\r\n        围绕今年中央和省委重要会议精神、领导重要讲话精神和习近平谈治国理政内容,能源院全体党员干部每日登陆钉钉“ 两学一做”进行学习和答题,既检验了党员“两学一做”学习教育的成果,以及掌握党章党规知识水平,又激发了广大党员的学习热情,在今后的工作和生活中积极发挥党员的先锋模范带头作用。
\r\n
\r\n \"\"
\r\n
\r\n 四、井冈山红色教育学习心得报告会
\r\n        为纪念建党97周年,我院陈松同志以“不忘初心牢记使命,坚定理想信念跟党走”为题,分享培训心得。会上反响热烈,与会人员深受鼓舞,表示在今后潜心专研本职工作,增强党性修养,在科研战线上为党和国家做出贡献。
\r\n
\r\n \"\"
\r\n
\r\n 五、基层支部“说讲谈”
\r\n       为纪念建党97周年和改革开放40周年,三个党支部组织党员重温入党志愿书并结合个人成长历程和组织发展历程,围绕“习近平看重的'三个担当'”内容,分别开展一了次支部“说讲谈”活动,每名支部党员充分结合实际阐述观点、讲述感悟。
\r\n
\r\n \"\"
\r\n
\r\n        1. 省能源院行政管理党支部召开了“坚定理想信念,敢于担当尽职,牢记初心使命,助力科研一线”说讲谈活动,整场座谈会气氛热烈。 王书可同志表示 ,发展没有终点,改革没有停顿,未来还有更多的四十年需要我们去拼搏奋斗。姜宏宇同志表示人民美好的生活离不开党的领导,我们由原来的贫穷落后发展到现在的小康社会,人民的幸福感和满意度极大的增强。大家表示,坚决贯彻院党委的决策部署,立足岗位,踏实肯干,实实在在为一线办实事。
\r\n        2. 省能源院能源化学创新团队党支部结合建党97周年和改革开放40周年,以及习近平看重的“三个担当”内容,召开了主题为“初心逐梦诵改革,砥砺迈进新时代”的说讲谈活动。会上支部同志踊跃发言,气氛热烈。关春玲同志讲述了赵一曼、赵尚志、杨靖宇等东北抗联战士的英雄事迹,大家从不忘初心艰苦奋斗的老一辈红色精神说起,谈到了改革开放四十年来国家发生的巨大变化,都感到无比自豪,表示在今后工作中要不忘初心,坚守信仰,勇于担当,开拓未来。
\r\n        3. 正时七一建党97周年和改革开放40周年纪念之际,省能源院生物能创新团队党支部组织党员谈认识 、谈感受。王欣同志深情诵读入党志愿书,畅谈心路历程、表明践诺决心。徐晓秋同志表示合格党员就要有敢担当、能担当、善担当的样子。党建联系点院人事处党支部张兴同志表示这次说讲谈气氛热烈,同志们理解深刻,在新时代我们应该初心如磐、使命在肩,坚守入党时的信仰信念,始终铭记誓言和志愿、始终永葆共产党员政治本色。
\r\n 六、 基层党建提升工程总结表彰活动
\r\n        为巩固基层党建全面提升工程成果,推进服务型党组织建设,总结党建工作的成效和经验,发挥先进典型的示范引领作用,我院开展“2017年党建提升工程优秀个人、优秀基层组织、优秀团队”等评选表彰活动。此次表彰活动推动了党建工作落地见效,形成了“党委有号召力、党支部有凝聚力、党员有向心力”的党建发展局面,有效推动了各项工作上台阶上水平。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n  
\r\n
\r\n', 1, 0, '未知', '省,能源,环境,研究院,党委,开展,庆,“,七一,', '2018-07-01 03:34:00', '2020-06-02 02:11:02', NULL), +(230, 241, 7, '省能源院同哈理工化学与工程学院签署共建协议,成立教学科研实践基地', 'admin', '7月12日下午,哈尔滨理工大学化学与环境工程学院党委书记徐春霖带队到能源院进行第二次深入交流。双方首先签署了“教学科研实践基地共建协议”和“研究生导师互聘协议”,共同', '/uploads/allimg/180712/1-1PG2205959203-lp.jpg', '
\r\n                              7月12日下午,哈尔滨理工大学化学与环境工程学院党委书记徐春霖带队到能源院进行第二次深入交流。双方首先签署了“教学科研实践基地共建协议”和“研究生导师互聘协议”,共同为“哈尔滨理工大学教学科研实践基地”揭牌,随后,徐春霖书记走访了实验室,对双方的合作的交叉点进行了细致探讨。通过第二次交流和合作协议的签订,为双方在科研、教学、互聘导师等方面的长久合作奠定了基础。石化院王阳书记带队一行,也到我院和哈尔滨理工大学化学与环境工程学院进行了深入交流。
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n', 1, 0, '未知', '省,能源,院同,哈理工,哈,理工,化学,与,7月,', '2018-07-12 12:58:41', '2020-06-02 02:11:02', NULL), +(231, 242, 7, '省能源院召开 “深入学习张庆伟书记调研讲话精神”会议', 'admin', '8月16日上午,省能源院召开 “深入学习张庆伟书记调研讲话精神”会议,会议由徐晓秋院长主持,全体职工参加了会议。', '/uploads/allimg/180816/1-1PQ6141P1545-lp.jpg', '
\r\n                    8月16日上午,省能源院召开 “深入学习张庆伟书记调研讲话精神”会议,会议由徐晓秋院长主持,全体职工参加了会议。徐院长传达和讲解了“关于在省科学院系统开展学习贯彻落实张庆伟书记调研讲话精神的通知”、“张庆伟书记在省科学院调研座谈会上的讲话”两项重要文件,要求全体职工立足本职岗位,认真学习贯彻张庆伟书记调研时的讲话精神,采取行之有效的学习方式,积极组织开展支部“说讲坛”等专题学习活动。创新团队要以庆伟书记在我院的调研精神为引领加强顶层设计,合理规划构建协同创新体系。院所要牢牢把握正确的改革方向,探索改革创新发展新思路,推动科研事业单位深化改革。
\r\n
\r\n \"\"
\r\n \"\"
\r\n
\r\n  
\r\n', 1, 0, '未知', '省,能源,院,召开,“,深入,学习,张庆伟,书记,', '2018-08-16 06:12:48', '2020-06-02 02:11:02', NULL), +(232, 243, 7, '能源院召开2019年度储备项目评审会', 'admin', '8月17日,能源院组织召开2019年度储备项目评审会,两个创新团队共组织10项科研项目参与本次储备项目评审。评审委员会由来自哈尔滨工业大学、哈尔滨工程大学、黑龙江大学等七名省', '/uploads/allimg/180817/1-1PQGH33B13-lp.jpg', '                 8月17日,能源院组织召开2019年度储备项目评审会,两个创新团队共组织10项科研项目参与本次储备项目评审。评审委员会由来自哈尔滨工业大学、哈尔滨工程大学、黑龙江大学等七名省内知名专家组成。
\r\n       上午,先进行了院所基本应用技术研究专项和中试基地建设项目的评审,省科学院条财处陆凯参加会议。专家结合指南分别对院所基本应用技术储备项目给与了充分的建议和评价,对团队提出科研仪器设备进行了相关性、均衡性和匹配性的评价,并对储备项目进行了量化打分,一致同意进入项目储备库。
\r\n
\r\n \"\"
\r\n            下午,召开了院基金项目、院青年基金项目、中试熟化项目、院长基金项目的储备项目评审会,与会专家对项目的选题、研究思路、技术路
\r\n 线、考核指标等方面提出了细致的修改意见,并对入库项目进行的打分排序,形成推荐意见。
\r\n
\r\n \"\"
\r\n                 本次评审会本着公开、公平、公正的原则,聘请的专家全部由系统外专家组成,同时,专家组对项目给与了充分、细致的评价,充分发挥了专家的咨询作用,对提升储备项目质量具有重要的指导作用。
\r\n
\r\n  
\r\n', 1, 0, '未知', '能源,院,召开,2019,年度,储备,项目,评审会,8月,', '2018-08-17 09:20:38', '2020-06-02 02:11:02', NULL), +(233, 244, 7, '省能源院贯彻落实中央、省委及省科学院党组各项精神', 'admin', '为深入贯彻落实中央、省委及省科学院相关精神,同时围绕法制年建设,11月5日,省能源院党委召开中心组学习扩大会议,能源院全体党员参加会议,会议由党委书记、院长徐晓秋同志', '/uploads/allimg/181109/1-1Q10Z929492R-lp.jpg', '                  为深入贯彻落实中央、省委及省科学院相关精神,同时围绕法制年建设,11月5日,省能源院党委召开中心组学习扩大会议,能源院全体党员参加会议,会议由党委书记、院长徐晓秋同志主持。\r\n
\r\n         会前徐晓秋同志带领全体党员再学新修订的《中国共产党纪律处分条例》。
\r\n
\r\n         会议传达了中共黑龙江省第十二届委员会第四次全体会议决议、省科学院党组《关于学习宣传贯彻习近平总书记在深入推进东北振兴座谈会上重要讲话和考察黑龙江时重要指示精神的通知》和院党组书记赵梅同志在11月2日全院处级以上干部会议上提出的三点学习贯彻落实意见。
\r\n
\r\n         会议要求全体党员要将上述各项学习精神作为当前和今后一个时期首要政治任务,深刻领会全会精神实质。坚持以问题为导向,结合自身工作学以致用,进一步解放思想、统一思想、形成共识,认真开展“支部说讲谈”活动,每一名职工都要自觉肩负创新驱动的历史重任,要以实际行动助力我院振兴发展。
\r\n \"\"\"\"
\r\n
\r\n  
\r\n', 1, 0, '未知', '省,能源,院,贯彻,落实,中央,、,省委,及,为,', '2018-11-09 01:16:02', '2020-06-02 02:11:02', NULL), +(234, 245, 7, '2018能源环境可持续发展论坛 暨省能源环境学会第四届学术年会召开', 'admin', '2018年11月17日,太阳岛科技论坛系列活动——2018能源环境可持续发展论坛暨省能源环境学会第四届学术年会在哈尔滨工业大学城市水资源与水环境国家重点实验室隆重举行。本次会议的', '/uploads/allimg/181121/1-1Q12110005D08-lp.png', '             2018年11月17日,太阳岛科技论坛系列活动——2018能源环境可持续发展论坛暨省能源环境学会第四届学术年会在哈尔滨工业大学城市水资源与水环境国家重点实验室隆重举行。本次会议的主题为“能源环境可持续发展”,围绕秸秆综合利用技术、乡村厕所革命关键技术、生物制氢、土壤修复等主要议题进行大会报告。
\r\n       哈尔滨工业大学副校长任南琪院士、黑龙江省科学院院长郭春景研究员、城市水资源开发利用(北方)国家工程研究中心主任石广济教授、哈尔滨工业大学环境学院党委书记齐晶瑶教授、黑龙江省能源环境研究院院长徐晓秋研究员、东北农业大学资源与环境学院院长张颖教授等领导出席论坛。省内能源环境领域的高校、院所、企业的领导、学科带头人和骨干教师、学生等共计140余人参加了论坛。 
\r\n        论坛邀请了哈工大副校长、中国工程院院士任南琪教授、同济大学周雪飞教授、东北农业大学资源与环境学院院长张颖教授等七位知名专家学者做了精彩的学术报告。此次论坛的召开使科技人员能够结合我省的实际情况,立足服务发展需要,把握领域前沿动态,在提升学术水平的同时把理论应用于实践,最终实现我省能源环境的可持续发展。这次论坛对生态文明理念的提升、环境污染源头治理的加强以及资源循环利用能力的升级,具有重大的现实意义。
\r\n\"\"\"\"
\r\n\"\"\"\"
\r\n\"\"\"\"
\r\n\"\"\"\"
\r\n\"\"\"\"
\r\n\"\"

\r\n', 1, 0, '未知', '2018,能源,环境,可,持续,发展论坛,暨省,学会,', '2018-11-21 01:58:35', '2020-06-02 02:11:02', NULL), +(235, 246, 7, '“解放思想,开放办院,协同创新”副院长赵立涛同志来能源院调研', 'admin', ' 12月7日上午,省科学院党组成员、副院长赵立涛同志、院对外合作处处长刘志忠同志以及对外合作处全体同志来到能源院调研座谈。此次调研的主题为“解放思想,开放办院,协同创新', '/uploads/allimg/181210/1-1Q210094431926-lp.jpg', '
\r\n         12月7日上午,省科学院党组成员、副院长赵立涛同志、院对外合作处处长刘志忠同志以及对外合作处全体同志来到能源院调研座谈。此次调研的主题为“解放思想,开放办院,协同创新”。
\r\n
\r\n         能源院介绍了2018年外事工作情况、合作平台建设及运转情况、海外人才工作站专家及聘请院级客座研究员情况 、明年外事工作计划。赵院长对我院外事工作给予较高评价,并对每项具体工作都进行了点评,直接指导我院外事工作健康有序推进。特别是叮嘱我院要高度关注各种渠道的国合项目,提前谋划,签署合作协议,争取参与指南编写,认真对待项目申报和答辩,才有可能获得资助。明确了技术引进、消化吸收再创新、服务第三世界国家的工作思路。对引智工作和援外培训等工作也给予了指导。
\r\n
\r\n         赵院长一行的到来明晰了我院外事工作思路,给我院树立起对外合作工作的信心和决心,2019年,我院要解放思想、提前谋划、凝心聚力,外事工作再谱新篇。
\r\n \"\"\"\"
\r\n', 1, 0, '未知', '“,解放思想,开放,办院,协同,创新,”,副院长,', '2018-12-07 05:43:00', '2020-06-02 02:11:02', NULL), +(236, 247, 7, '省能源院集体观看中共中央国务院庆祝改革开放40周年大会', 'admin', '12月18上午10点,根据省委办公厅要求,能源环境研究院认真组织全体职工收看中共中央国务院召开的庆祝改革开放40周年大会。', '/uploads/allimg/181220/1-1Q220103332364-lp.png', '                12月18上午10点,根据省委办公厅要求,能源环境研究院认真组织全体职工收看中共中央国务院召开的庆祝改革开放40周年大会。\r\n
\r\n \"\"\"\"
\r\n', 1, 0, '未知', '省,能源,院,集体,观看,中共中央,国务院,庆祝,', '2018-12-20 02:32:18', '2020-06-02 02:11:02', NULL), +(237, 248, 7, '能源院全体党员干部收看第十三届全国人民代表大会第二次会议开幕', 'admin', '3月5日上午9时,能源院全体党员干部集体收看第十三届全国人民代表大会第二次会议开幕。', '/uploads/allimg/190305/1-1Z305093T4X8-lp.JPG', '                 3月5日上午9时,能源院全体党员干部集体收看第十三届全国人民代表大会第二次会议开幕。\r\n
\r\n \"\"\"\"
\r\n', 1, 0, '未知', '能源,院,全体,党员,干部,收看,第十,三届,全国,', '2019-03-05 01:36:27', '2020-06-02 02:11:02', NULL), +(238, 249, 7, '能源院召开全体职工大会 传达学习贯彻省科学院2019年工作会议精神', 'admin', '2019年03月28日,能源院召开全体职工大会,传达学习贯彻省科学院2019年工作会议精神', '/uploads/allimg/190319/1-1Z31Z93452143-lp.JPG', '
\r\n             2019年2月28日,省能源院召开了全体职工大会,传达学习贯彻省科学院2019年工 作会议精神,能源院领导班子及全体职工参加了会议。
\r\n       会议全文传达了郭春景院长的工作会议报告及赵梅书记的总结讲话。省能源院党 委书记、院长徐晓秋同志围绕“双提行动计划”和打造“五新”科学院的发展目标, 及认真学习贯彻落实2019年各项工作任务及9项重点工作,进行了深入全面部署,同时 加强三点工作,一是加强政治建设,引领优良工作作风;二是着力攻坚克难,为科研 高质量发展提供科技和人才支撑;三是加强科技宣传,营造和谐安全稳定发展环境, 能源院全体干部职工,将以百倍的热情,深入学习贯彻落实中央、省委及省科学院各项精神,不断加强支部建设,树立优良作风,加快实现创新引领和关键核心技术突破,扎实推进科研工作,完善机制,落实责任,以优异成绩向中华人民共和国成立70周年献礼。
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '能源,院,召开,全体,职工,大会,传达,2019年,2月,', '2019-03-19 01:30:49', '2020-06-02 02:11:02', NULL), +(239, 250, 7, '能源院举办“聚巾帼力量 筑美丽未来”座谈会庆祝“三八”国际妇女节', 'admin', ' 为庆祝“三八”国际妇女节,省能源院举办“聚巾帼力量 筑美丽未来”座谈会,全院女职工和班子成员参加了座谈会,能源院党委书记、院长徐晓秋同志主持会议。', '/uploads/allimg/190319/1-1Z31Z94359601-lp.JPG', '
\r\n           为庆祝“三八”国际妇女节,省能源院举办“聚巾帼力量 筑美丽未来”座谈会,全院女职工和班子成员参加了座谈会,能源院党委书记、院长徐晓秋同志主持会议。
\r\n
\r\n        徐院长首先对全体女职工致以节日的祝福,对女同胞们多年来在能源院的建设和发展过程中做出的贡献给予了充分的肯定。女职工们纷纷发言,一致表示,作为新时代的女性,要认真学习领会全国“两会”精神,落实院工作会议精神,立足本职岗位,解放思想、勇于担当、锐意进取、奋发作为,不断提升科技创新能力和质量,为实现全院“双提”目标任务和我院创新发展做贡献。随后,我院邀请的专业老师为女职工们奉上了一堂精彩的服装搭配课程,受到了女职工们的热烈欢迎。
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n', 1, 0, '未知', '能源,院,举办,“,聚巾帼力量,筑,美丽,未来,”,', '2019-03-08 01:42:00', '2020-06-02 02:11:02', NULL), +(240, 251, 7, '省能源院参加的国家重点研发计划“村镇低成本清洁能源供暖及蓄热技术研究”项目启动会顺利召开', 'admin', '2019年3月27日,由中国建筑科学研究院有限公司作为项目牵头单位、建筑环境与节能研究院李忠研究员作为项目负责人的“十三五”国家重点研发计划“绿色宜居村镇技术创新”重点专项', '/uploads/allimg/190409/1-1Z40Z929251W-lp.JPG', '
\r\n 国家重点研发计划“村镇低成本清洁能源供暖及蓄热技术研究”项目启动会顺利召开
\r\n
\r\n
\r\n           2019年3月27日,由中国建筑科学研究院有限公司作为项目牵头单位、建筑环境与节能研究院李忠研究员作为项目负责人的“十三五”国家重点研发计划“绿色宜居村镇技术创新”重点专项“村镇低成本清洁能源供暖及蓄热技术研究”项目启动会在北京顺利召开。
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n
\r\n  
\r\n
\r\n
\r\n         项目主管、中国农村技术开发中心副处长王峻,项目专员朱浩、流动专员张志伟、张志强;住房和城乡建设部标准定额司副调研员姚秋实;中国建筑科学研究院有限公司副总经理王清勤、科技处副处长张靖岩、财务处副处长杨如冰;建筑环境与节能研究院副院长邹瑜;专项及项目咨询专家、21家项目参与单位共60余名研究人员参加了此次会议。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n           项目启动会由建筑环境与节能研究院副院长邹瑜主持。院公司王清勤副总经理代表项目承担单位致辞,住房和城乡建设部标准定额司副调研员姚秋实代表项目推荐单位、中国农村技术开发中心王峻副处长代表项目管理团队发表讲话。
\r\n
\r\n \"\" 
\r\n
\r\n
\r\n         项目专员朱浩详细讲解了国家层面关于“十三五”重点研发计划的各项制度文件,以及中国农村技术开发中心对项目管理的各项要求。华建会计师事务所张小艳高级会计师就重点研发计划项目资金管理的相关事项做出了细致的培训与专业的讲解。
\r\n         随后,会议进入实施方案咨询阶段。项目启动会咨询专家组由专项咨询专家中国建设科技集团股份有限公司教授级高工李宏,天津大学教授朱能,华建会计师事务所高级会计师张小艳;项目咨询专家中国建筑标准设计研究院有限公司教授级高工李军,北京工业大学教授陈超,中国建筑节能协会秘书长李德英共六人组成。此次启动会的咨询专家也被聘为项目的特聘专家,并由项目负责人李忠研究员向各位专家颁发了聘书。 
\r\n
\r\n
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         项目实施方案讨论会由李宏教授级高工主持。项目负责人李忠研究员汇报项目实施方案,重点介绍研究内容、统筹与分解、年度计划、组织保障和风险控制对策及加强项目内部控制的各项措施等内容。随后,各课题负责人李忠研究员、朱民教授、谭羽非教授、刘猛教授、张景高级工程师就课题实施方案进行汇报。
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n
\r\n
\r\n        汇报结束后,专家组通过质询和论证,并为项目和课题后期实施提出了意见和建议,指出项目的实施按照以课题服务于项目为宗旨,课题各项考核指标应制定详实周密的研究计划,落实到具体时间节点,同时对于国拨经费的使用应严格按照研究进度支出。另外,示范工程建设项目任务繁重,需要周密计划与部署,为后续测试、总结与验收预留充足的时间。
\r\n
\r\n        最后,项目负责人李忠研究员做总结发言,他感谢与会专家提出的宝贵意见,指出项目实施之前需要定好规矩,将项目考核指标进展落到实处,确保项目能够顺利完成,不负嘱托,切实为推动乡村振兴战略的落实提供有力的技术支撑。
\r\n
\r\n 此次启动会的顺利召开标志着本项目正式启动。该项目中央财政经费4295万元,项目执行周期为2018年12月到2022年12月。项目针对我国绿色宜居村镇建设的需求,将为绿色宜居村镇建设提供战略和技术决策支撑。
\r\n
\r\n  
\r\n', 1, 0, '未知', '省,能源,院,参加,的,国家,重点,研发,计划,“,', '2019-04-09 01:22:02', '2020-06-02 02:11:02', NULL), +(241, 252, 7, '省能源院召开全院职工大会,学习传达贯彻省科学院落实机构改革方案动员大会的精神', 'admin', '5月6日下午14时,省能源院召开全院职工大会,学习传达贯省科学院落实机构改革方案动员大会的精神。会议由党委书记、院长徐晓秋同志主持。', '/uploads/allimg/190507/1-1Z50G44049615-lp.JPG', '            (一) 5月6日下午14时,省能源院召开全院职工大会,学习传达贯彻省科学院落实机构改革方案动员大会的精神。会议由党委书记、院长徐晓秋同志主持。
\r\n    会上,徐晓秋同志传达了《关于印发<黑龙江省科学院及所属事业单位机构改革方案>的通知》、全文传达了赵梅书记在省科学院落实机构改革方案动员大会上的讲话精神及郭春景院长提出的三点要求。会议要求全体干部职工,认真领会机构改革方案的精神,结合实际抓好落实,要按照科学院党组的要求,把会上布置的十一项工作落实落靠,要以改革为动力,为实现我院“双提”计划,打造"五新"科学院继续努力。动员全体党员积极开展“说讲谈”活动,要求各支部围绕落实动员大会精神,切实全面推进改革工作。
\r\n           (二)下午15时许,省科学院党组赵梅书记一行来到省能源院,与省能源院领导班子进行了亲切的交流,省能源院党委书记、院长徐晓秋同志将省能源院基本情况及改革涉及工作开展情况向赵书记一行进行了汇报,赵梅书记和四位院机关部门领导,根据省能源院实际情况,给予了现场指导,赵梅书记对落实改革工作中的责任任务、时间节点、人员组织、职能融合、队伍建设等重点工作做了进一步部署。
\r\n
\r\n \"\"
\r\n \"\"
\r\n', 1, 0, '未知', '省,能源,院,召开,全院,职工,大会,学习,传达,', '2019-05-07 06:45:14', '2020-06-02 02:11:02', NULL), +(242, 253, 7, '守初心、担使命、找差距、抓落实', 'admin', '--省能源环境研究院党委“不忘初心、牢记使命”主题教育开展情况汇总\r\n\r\n“不忘初心、牢记使命”主题教育活动开展以来,省能源院党委始终把党的政治建设摆在突出位置,坚定政治', '', '
\r\n 守初心、担使命、找差距、抓落实
\r\n 
\r\n                     --省能源环境研究院党委“不忘初心、牢记使命”主题教育开展情况汇总
\r\n 
\r\n      “不忘初心、牢记使命”主题教育活动开展以来,省能源院党委始终把党的政治建设摆在突出位置,坚定政治信仰、增强“四个意识”、维护党中央权威和集中统一领导、严明党的政治纪律和政治规矩、加强和规范新形势下党内政治生活,确保各项工作取得实效。现将主题教育开展情况汇报如下。
\r\n一、以理论学习为基础
\r\n1.坚持读原著学原文悟原理。以习近平新时代中国特色社会主义思想为主题教育的主线,在学懂弄通做实上下功夫。组织党员干部学习党章、十九大报告,学习《习近平新时代中国特色社会主义思想学习纲要》《习近平关于“不忘初心、牢记使命”重要论述选编》《中共共产党党内法规汇编》,深入学习习近平总书记在振兴东北座谈会和到我省视察时的重要指示精神,以及习近平总书记最新重要讲话精神。党委成员带头认真开展学习,深学细悟,深入开展研讨,各党支部、各部门坚持自学、集中学习相结合,夯实学习基础。
\r\n2.开展集中学习研讨。召开中心组学习扩大学习会,带头深入开展专题研讨,集中研讨将自学、研讨、交流相结合,将革命传统教育和先进典型教育相结合,坚持领导带头、上下联动、同频共振。
\r\n3.丰富学习教育形式。结合观看纪录片《丰碑》、《楷模》,组织全体党员干部和党外人士集体参观《丰碑》中“北大荒精神”的代表-农垦北大荒博物馆,学习践行“艰苦奋斗、勇于开拓、顾全大局、无私奉献”的北大荒精神;组织全体党员干部与党建联系点省科学院人事处党支部共赴纪录片《楷模》中尚志市元宝村,开展“观《丰碑》 学《楷模》 促‘双提’ 助‘落地’”主题教育活动,此行受到了元宝村村委会成员的亲切接待,村党总支书记也是“楷模”人物之一的张宝金同志对我们的到来表示热烈欢迎。全体人员首先来到抗日烈士赵尚志赵一曼纪念馆,追寻英雄足迹,缅怀英雄事迹,随后参观了以作家周立波长篇小说命名的暴风骤雨纪念馆,深入了解土地改革运动,以及改革前后元宝村发生的翻天覆地的变化,并重温入党誓词,以坚定有力的宣誓表达时刻不忘初心、牢记使命的信念和决心,并在元宝村围绕活动主题,现场召开了“不忘初心、牢记使命”主题座谈会。
\r\n二、以调查研究为载体
\r\n1.坚持问题导向。按照主题教育要求认真制定调研方案,聚焦党中央重大决策部署、群众反映突出的热点问题、党的建设面临的突出矛盾,切实把调查研究与履职尽责结合起来。在调研中紧盯问题,摸清实情,分析症结,理清思路,找出办法。
\r\n2.调查研究注重实际。紧密结合履职实际,分别制定调研方案,领导班子成员带头开展调研,聚焦问题,及时了解掌握干部职工思想动态,分别召开各层面座谈会,听取相关意见建议。
\r\n3.讲好专题党课。在学习调研的基础上,领导班子认真撰写党课提纲,为党员干部讲授党课。党委书记围绕“学党史、知党情、强党性”为全体党员干部讲授专题党课,并在支部围绕“聚焦两会,助力科院”、“守初心 严律己 担使命”分别讲授党课2次。
\r\n三、以检视问题为契机
\r\n1.广泛听取意见建议。突出主题教育目标之一“为民服务解难题”,通过谈话、问卷、座谈、设置征求意见箱等方式,广泛征集广大党员群众意见。
\r\n2.自觉对标查摆问题,深刻剖析反思。带头坚持高标准、严要求,按照总书记关于“四个对照”、“四个找一找”的要求,在征求意见基础上,把职责摆进去,把问题找出来,进一步细化问题,列出清单,从思想、政治、作风、能力、廉政方面全面检视,不留死角。认领问题,深入剖析症结,深刻反思原因,逐一对标,逐条逐项制定整改措施。
\r\n四、以整改落实为驱动
\r\n1.突出重点整改。认真研究制定主题教育专项整治实施方案,进一步强化宗旨意识,从政治站位上找差距,从思想深处找根源,从工作落实上找不足,从责任担当上找缺失。集中开展问题治理,对调硏发现的重点问题、群众反映强烈的问题和专项整治的问题列出清单、建立台账,逐条研究制定具体的解决办法和整改方案,有序有力抓整改,确保整改到位。
\r\n2.坚持立行立改。坚持把“改”字贯穿始终,注重将学习教育、调查研究和检视反思发现的问题纳入其中,明确整改任务。召开专项整治工作推进会议,对调研发现的问题、群众反映的问题、自身查找的问题列出清单、建立台账,逐条研究制定具体的解决办法和整改措施,能够当下改的,立行立改、即知即改,确保各项问题整改全部落实到位。
\r\n3.高质量开好专题民主生活会。高度重视、精心筹备、进一步认真开展学习、广泛征集意见,深入谈心交心,严格査摆问题并撰写检视剖析材料,为高质量的召开民主生活会夯实基础。
\r\n
\r\n', 1, 0, '未知', '守初,心,、,担,使命,找,差距,抓,落实,守初,心,', '2019-11-06 07:19:13', '2020-06-02 02:11:02', NULL), +(243, 254, 7, '能源院全体职工学习贯彻落实传达党的十九届四中全会精神', 'admin', '11月7日上午,省能源院召开全体职工大会,学习贯彻落实传达党的十九届四中全会精神,全文学习了中国共产党第十九届中央委员会第四次全体会议公报,会议由能源院党委书记、院长', '/uploads/allimg/191107/1-19110G45100394-lp.jpg', '        11月7日上午,省能源院召开全体职工大会,学习贯彻落实传达党的十九届四中全会精神,全文学习了中国共产党第十九届中央委员会第四次全体会议公报,会议由能源院党委书记、院长徐晓秋同志主持。
\r\n       会议要求全体职工,坚持以马克思列宁主义、毛泽东思想、邓小平理论、“三个代表”重要思想、科学发展观、习近平新时代中国特色社会主义思想为指导,全面贯彻党的十九届四中全会精神,准确把握大局,着力抓好发展,攻坚克难、砥砺前行,推动能源院科研事业取得新的进展。
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '能源,院,全体,职工,学习贯彻,落实,传达,党的,', '2019-11-07 06:45:49', '2020-06-02 02:11:02', NULL), +(244, 255, 7, '能源院全体党员干部观看《榜样4》', 'admin', ' 10月24日,按照省委“不忘初心、牢记使命”主题教育领导小组办公室《关于转发<关于认真做好《榜样4》专题节目学习收看工作的通知>的通知》和省科学院机关党委通知要求,省能源院', '/uploads/allimg/191107/1-19110G501592Q-lp.jpg', '          10月24日,按照省委“不忘初心、牢记使命”主题教育领导小组办公室《关于转发<关于认真做好《榜样4》专题节目学习收看工作的通知>的通知》和省科学院机关党委通知要求,省能源院组织全体党员干部,集体观看《榜样4》。
\r\n        《榜样4》讲述了“本色英雄”张富清、“吃亏”书记李连成、“扶贫之花”黄文秀、“大湖鸿雁”唐真亚、“环卫天使”李萌、扶贫“硬汉”隋耀达、揽月“天团”嫦娥四号参研参试人员群体代表的感人故事,彰显了优秀共产党员坚定入党初心、无私敬业奉献、热心服务群众的精神风貌,深刻诠释了中国共产党人不忘初心、牢记使命的执着坚守。
\r\n        全体党员干部纷纷表示深受感动和鼓舞,作为一名共产党员,要以榜样为镜,在以后的工作中自觉向榜样看齐,自足本职、主动作为、敢于担当。
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '能源,院,全体,党员,干部,观看,《,榜样4,》,', '2019-10-24 07:00:00', '2020-06-02 02:11:02', NULL), +(245, 256, 7, '能源院协办“2019年刚果(金)环保可持续发展研修班”在哈尔滨举办', 'admin', '2019年8月11-15日,“2019年刚果(金)环保和可持续发展研修班”在哈尔滨举办。本次研修班由商务部主办,农业农村部沼气科学研究所承办,共有25名来自刚果(金)政府部门、企业协会', '/uploads/allimg/191107/1-19110G52120A4-lp.jpg', '         2019年8月11-15日,“2019年刚果(金)环保和可持续发展研修班”在哈尔滨举办。本次研修班由商务部主办,农业农村部沼气科学研究所承办,共有25名来自刚果(金)政府部门、企业协会、基金会的官员和学者参加了此次培训,黑龙江省能源环境研究院作为协办单位组织了本次研修班。
\r\n        8月12日,研修班在徐晓秋院长和方正县农业局的陪同下来到了得莫利镇,参观了得莫利镇垃圾处理中心,鼎地科技公司技术人员对ERCM垃圾处理示范项目给研修班学员进行了详细讲解。
\r\n        8月13日,研修班参观了黑龙江省能源环境研究院生物质能实验室,生物质能团队刘伟副研究员对实验室的研究领域、研究内容进行了详细介绍,并与研修班学员进行了细致交流。
\r\n        8月14日,生物质能团队王欣副研究员做了“城市固废处理的方法和技术”的专题培训报告,普及了中国先进的城市固废处理技术,对研修班学员的提问做了专业解答。
\r\n        通过此次培训,加强了能源院在有机固废处理领域的宣传力度,为“一带一路”发展中国家的发展提供了帮助。
\r\n
\r\n \"\"
\r\n \"\"
\r\n
\r\n', 1, 0, '未知', '能源,院,协办,“,2019年,刚果,金,环保,2019年,', '2019-08-15 07:32:00', '2020-06-02 02:11:02', NULL), +(246, 257, 7, '省能源院与七台河市相关门、企业赴湖南省、江西省就低热值固废(煤矸石)资源化利用开展项目对接', 'admin', '为贯彻落实张庆伟同志《在全省工业强省暨产业发展大会上的讲话》精神和《黑龙江省委、省政府关于加快煤炭资源型城市转型推动高质量发展的指导意见》,进一步做好低热值固废(', '/uploads/allimg/191112/1-19111209164Y48-lp.png', '
\r\n        为贯彻落实张庆伟同志《在全省工业强省暨产业发展大会上的讲话》精神和《黑龙江省委、省政府关于加快煤炭资源型城市转型推动高质量发展的指导意见》,进一步做好低热值固废(煤矸石)燃烧项目对接工作,应七台河市相关企业要求,2019年10月20日至23日省科学院能源环境研究院徐晓秋院长带队,由七台河市科技局牵头市直部门及七台河市吉伟煤焦有限公司、黑龙江省德利能源股份有限公司、亿达信煤焦化能源有限公司、联顺能源有限责任公司等相关企业赴湖南乾能新能源科技开发有限公司、江西省萍乡市安源电厂等地对低热值固废(煤矸石)燃烧(35吨—40吨)项目进行实地考察。
\r\n\"\"\"\"\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '赴,湖南省,、,江西省,对接,低,热值,固废,赴,', '2019-10-20 05:05:00', '2020-06-02 02:11:02', NULL); +INSERT INTO `articles` (`id`, `oldid`, `category_id`, `title`, `writer`, `description`, `cover`, `content`, `status`, `sort`, `source`, `keywords`, `created_at`, `updated_at`, `deleted_at`) VALUES +(247, 258, 7, '省能源院组织全体党员干部,集体学习省委关于《切实加强党的建设、严明党的政治纪律和政治规矩》主题教育宣传片', 'admin', '8月21日上午,省能源院组织全体党员干部,集体学习省委关于《切实加强党的建设、严明党的政治纪律和政治规矩》主题教育宣传片,“不忘初心、牢记使命”主题教育活动开展以来,', '/uploads/allimg/191118/1-19111Q11400524-lp.JPG', '        8月21日上午,省能源院组织全体党员干部,集体学习省委关于《切实加强党的建设、严明党的政治纪律和政治规矩》主题教育宣传片,“不忘初心、牢记使命”主题教育活动开展以来,省能源院党委始终把党的政治建设摆在突出位置,坚定政治信仰、增强“四个意识”、维护党中央权威和集中统一领导、严明党的政治纪律和政治规矩、加强和规范新形势下党内政治生活,确保在各项工作中取得实效。\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '省,能源,院,组织,全体,党员,干部,集体,学习,', '2019-08-21 03:10:00', '2020-06-02 02:11:02', NULL), +(248, 259, 7, '省能源院党委组织全体党员干部与党建联系点省科学院人事处党支部共赴纪录片《楷模》中尚志市元宝村,开展观《丰碑》,学《楷模》,促“双提”,助落地主题教育活动', 'admin', '省能源院党委组织全体党员干部与党建联系点省科学院人事处党支部共赴纪录片《楷模》中尚志市元宝村,开展观《丰碑》,学《楷模》,促“双提”,助落地主题教育活动', '/uploads/allimg/191118/1-19111Q13RCL-lp.jpg', '           7月10日,省能源院党委组织全体党员干部与党建联系点省科学院人事处党支部共赴纪录片《楷模》中尚志市元宝村,开展观《丰碑》,学《楷模》,促“双提”,助落地主题教育活动。
\r\n        上午10时许,全体人员来到抗日烈士赵尚志赵一曼纪念馆,追寻英雄足迹,缅怀英雄事迹,深刻感受革命先烈不怕牺牲、艰苦奋斗、矢志报国的爱国情怀。
\r\n        下午13时许,全体人员抵达“中国土改文化第一村”元宝镇元宝村,受到了元宝村村委会成员的亲切接待,村总支张宝金书记对我们的到来表示热烈欢迎。全体人员参观了以作家周立波长篇小说命名的暴风骤雨纪念馆,深入了解土地改革运动,以及改革前后元宝村发生的翻天覆地的变化,并重温入党誓词,以坚定有力的宣誓表达时刻不忘初心、牢记使命的信念和决心。随后全体人员在元宝村围绕活动主题现场召开了“不忘初心、牢记使命”主题座谈会,并参观了元宝村雪莲笔业有限公司。
\r\n\"\"\"\"
\r\n\"\"\"\"

\r\n
\r\n', 1, 0, '未知', '省,能源,院,党委,组织,全体,党员,干部,与,7月,', '2019-07-10 03:18:00', '2020-06-02 02:11:02', NULL), +(249, 260, 7, '黑龙江省能源环境研究院党委组织全体党员和部分党外人士参观北大荒博物馆', 'admin', '为进一步深入开展“不忘初心、牢记使命”主题教育活动,7月4日,黑龙江省能源环境研究院党委组织全体党员和部分党外人士参观北大荒博物馆,学习践行“艰苦奋斗、勇于开拓、顾全', 'images/2020/06/03/fffe441dd743b4d2aea299587b4f1fd5.jpg', '

         为进一步深入开展“不忘初心、牢记使命”主题教育活动,7月4日,黑龙江省能源环境研究院党委组织全体党员和部分党外人士参观北大荒博物馆,学习践行“艰苦奋斗、勇于开拓、顾全大局、无私奉献”的北大荒精神。
       通过此次参观学习,大家都深刻体会到几代北大荒人献青春、献终身的无私伟大,大家纷纷表示本次活动不仅是一次学习教育,更是一次深刻的精神洗礼,应铭记历史,在今后工作生活中继续弘扬北大荒精神,初心不改,敢担当、顾大局、乐于奉献、奋勇向前!

', 1, 0, '未知', '黑龙江省,能源,环境,研究院,党委,组织,全体,', '2019-07-04 05:06:00', '2020-06-03 09:10:42', NULL), +(250, 261, 7, '能源院组织全体党员干部开展“不忘初心,牢记使命”主题教育启动会', 'admin', '根据中央、省委和省科学院党组关于开展“不忘初心,牢记使命”主题教育相关部署,省能源院迅速响应,组织全体党员干部,以主题教育为主导,将各项工作全面推向深入。', '/uploads/allimg/191118/1-19111Q314514H-lp.jpg', '           根据中央、省委和省科学院党组关于开展“不忘初心,牢记使命”主题教育相关部署,省能源院迅速响应,组织全体党员干部,以主题教育为主导,将各项工作全面推向深入。
\r\n        1.6月13日,省能源院召开全体党员大会暨省能源院“不忘初心、牢记使命”主题教育启动会,省能源院领导班子,全体党员参加会议,会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n会议深入学习贯彻落实了中央、省委及省科学院关于开展“不忘初心、牢记使命”主题教育各项工作精神,全文学习了《关于开展“不忘初心、牢记使命”主题教育实施方案》、赵梅书记重要讲话精神、第九巡回督导组组长刘杰同志讲话精神。会议强调,要紧跟上级主题教育各项步伐,根据相关要求,迅速制定实施方案,准确把握目标要求,明确学习内容,强加组织领导,以上率下,层层传导,各支部要严格按照方案要求,切实行动起来,确保主题教育高质量完成。
\r\n        2.6月14日,省能源院召开党委会议,为保障主题教育全面开展,成立“不忘初心、牢记使命”主题教育领导小组,研讨制定省能源环境研究院“不忘实心、牢记使命”主题教育理论学习方案。
\r\n        省能源院党委书记、院长徐晓秋同志在会议中指出:一要提高认识站位。要站在战略和全局的高度,充分认识主题教育的重要意义,坚定不移贯彻落实中央、省委和省科学院的部署要求,把理论学习作为严肃党内政治生活、强化党性修养的重要举措,切实把学习任务落到实处。二要突出学习重点。要坚持以学习贯彻习近平总书记系列重要讲话精神为重点,以学习贯彻习近平新时代中国特色社会主义思想为首要任务,原原本本学、原汁原味学,结合“不忘初心、牢记使命”主题教育,对标思想和工作实际,明方向、找差距、定措施,提升境界,改进工作。三要创新学习形式。要根据学习内容及实际情况,不断改进学习方式和拓展学习载体。坚持把个人自学思考与集体学习研讨相结合、把理论学习与专题调研相结合、把常规学习与线上学习相结合,进一步增强学习的吸引力、感染力。积极拓宽学习渠道、丰富学习手段,运用网络、移动新媒体、客户端等新技术新应用,不断激发学习兴趣,提高学习的主动性和自觉性。
\r\n        3.6月21日,根据省科学院相关要求和省能源院理论学习方案安排,组织全体党员干部集体观看纪录片《丰碑》(抗联精神,北大荒精神,大庆铁人精神)、《楷模》(于海河,张宝金,张秀林,星火变电所,前哨林场)、《英雄的本色-张富清》、《初心无悔-马旭》,省能源院全体党员干部身受感动与鼓舞,会后主动撰写观后感,纷纷表示,这些英雄和楷模经在经历困难和面对牺牲时,心中始终怀揣着共产党人坚定不移的共产主义信念以及不畏艰难、不怕牺牲的大无畏精神,是共产党人舍己为公、无私奉献、忠诚担当的高贵品质,是共产党人为人民谋幸福、为民族谋复兴的高尚情怀,是所有共产党员学习的楷模和标准。回顾过去的艰苦创业、奋斗历程和光辉成就,是为了坚定今天的理想信念,激励全省党员干部不忘初心、牢记使命,锐意进取、担当作为,不断开创龙江全面振兴全方位振兴新局面。
\r\n        4.6月26日,省能源院召开党委中心组学习扩大会议,党委委员、支部书记参加会议。党委书记、院长徐晓秋同志主持并领学习近平关于“不忘初心,牢记使命”重要论述选编中《走的再远都不能忘记来时的路》《党必须勇于自我革命》。副院长关春玲同志领学习近平关于“不忘初心,牢记使命”重要论述选编中《牢固树立“四个意识”,维护党中央权威》《坚持和发展中国特色社会主义要一以贯之》,徐晓秋同志强调,全体党员干部要提高政治站位,增强思想自觉、政治自觉、行动自觉。开展主题教育是初心所在,是党心所系,是民心所向,党员领导干部只有打牢思想之基,不断增强“四个意识”、坚定“四个自信”、做到“两个维护”,才能确保改革发展沿着正确方向前进;只有勇于自我革命,坚持不懈地推动全面从严治党向纵深发展,才能全身心的投入改革发展大业中去;只有牢固树立群众观念、自觉践行群众路线,才能使职工群众满意,最终凝聚成砥砺奋进的强大力量。
\r\n\"\"\"\"
\r\n
\r\n \"\"
\r\n', 1, 0, '未知', '能源,院,组织,全体,党员,干部,开展,“,根据,', '2019-06-26 05:13:00', '2020-06-02 02:11:02', NULL), +(251, 262, 7, '能源院承办第五届学术年会暨生态文明建设与资源环境技术研讨会', 'admin', '2019年11月30日,由黑龙江省能源环境学会主办,黑龙江省能源环境研究院承办的“2019黑龙江省能源环境学会第五届学术年会暨生态文明建设与资源环境技术研讨会”在哈尔滨北大荒国际', '/uploads/allimg/191220/1-191220110U3Q4-lp.jpg', '
\r\n         2019年11月30日,由黑龙江省能源环境学会主办,黑龙江省能源环境研究院承办的“2019黑龙江省能源环境学会第五届学术年会暨生态文明建设与资源环境技术研讨会”在哈尔滨北大荒国际饭店举行。
\r\n
\r\n         省科协学会部吕强部长到会,并发表贺词。他感谢省能源环境学会对科协工作的支持,对学会的发展壮大表示祝贺,对今后加强学会建设、促进创新驱动助力龙江发展等方面提出殷切希望。会议以“生态文明建设与资源环境”为主题,特邀了哈尔滨工业大学马放教授、城市水资源开发利用(北方)国家工程研究中心陈志强教授、黑龙江省农业科学院农村能源与环保研究所刘杰研究员、黑龙江八一农垦大学王伟东教授、黑龙江省能源环境研究院王志成研究员级高工做会议主旨报告。
\r\n
\r\n         与会专家学者围绕“生态文明建设与资源环境技术”等方面,开展学术交流和研讨,探讨如何发挥资源环境技术的作用,促进我省生态文明建设,为龙江经济社会发展服务。
\r\n
\r\n         2019黑龙江省能源环境学会学术年会在浓重的学术氛围中取得了圆满成功。
\r\n
\r\n
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n', 1, 0, '未知', '能源,院,承办,第五届,学术年会,暨,生态,简讯,', '2019-12-20 05:53:00', '2020-06-02 02:11:02', NULL), +(252, 263, 7, '省能源环境研究院召开2019年度总结大会', 'admin', '2019年12月31日,省能源院召开2019年度总结大会,院领导班子,全体职工参加会议,会议由省能源院党委书记、院长徐晓秋同志主持。', '/uploads/allimg/200115/1-200115150132C6-lp.jpg', '      2019年12月31日,省能源院召开2019年度总结大会,院领导班子,全体职工参加会议,会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n       会议认真总结了省能源院2019年各项工作情况,并对全体职工进行了年终考核。2019年在省科学院党组的正确领导下,省能源紧跟新时代奋斗新征程,以“双提行动”和“省科学院新时代科技创新发展规划”为工作重点,以全面推进高质量发展为总要求,不断发扬“双创争优”精神,明确发展目标、坚持发展战略,建团队、强机制,全体科研人员用品质和创新突破自我,真抓实干,勇于奉献,圆满完成了各项目标任务。
\r\n       随后开展了省能源院“学习强国”知识竞赛,竞赛分三个部分,分别为“持续巩固主题教育成果”;“不断夯实党建提升工程”;“突出党建全面引领中心工作”,此次活动意在提高全体干部职工善于学习、善于总结、善于提高的能力,激励干部职工不懈努力,为省能源院全面发展贡献力量。\r\n
\r\n \"\"\"\"
\r\n
\r\n  
\r\n 
\r\n', 1, 0, '未知', '省,能源,环境,研究院,召开,2019,年度,总结,省,', '2019-12-31 07:23:00', '2020-06-02 02:11:02', NULL), +(253, 264, 7, '省科学院伍跃辉院长一行 莅临省能源院指导工作', 'admin', '1月3日下午,省科学院伍跃辉院长,人事处机、关党委相关同志一行莅临省能源院,对省能源院领导班子及成员进行年终考核,并指导工作。省能源院全体干部职工参加会议。', '/uploads/allimg/200115/1-200115154154124-lp.jpg', '      1月3日下午,省科学院伍跃辉院长,人事处机、关党委相关同志一行莅临省能源院,对省能源院领导班子及成员进行年终考核,并指导工作。省能源院全体干部职工参加会议。
\r\n      省能源院党委书记、院长徐晓秋代表领导班子就省能源院2019年目标完成情况、重点亮点工作、改革情况、存在问题及取得成绩等方面向伍院长一行进行全面了汇报,随后班子成员就分管领域工作完成情况进行了汇报。伍院长对省能源院2019年度工作给予了充分肯定,高度评价省能源院领导班子在各项工作中发挥的强有力作用,指出省能源院班子、团队坚强有力、科研工作稳中创新,并希望省能源院在2020年取得更大的成绩。
\r\n      随后,为更好的调动和鼓舞广大干部职工干事创业的积极性和创造性,伍院长为省能源院在创新发展中取得显著业绩获得表彰的先进个人颁奖。
\r\n      \"\"\"\"
\r\n 

\r\n', 1, 0, '未知', '省,科学院,伍跃,辉,院长,一行,莅临省,能源,院,', '2019-12-31 07:43:00', '2020-06-02 02:11:02', NULL), +(254, 0, 1, '简介', 'admin', NULL, 'images/2020/06/03/644875e12c15da180ccd9612b8407159.jpg', '

 

黑龙江省能源环境研究院(孵化中心)组织结构

\r\n  

1、科研开发部门

    ·环境科学与节能技术研究室

    ·能源化学研究室

    ·油品助剂研发中心

    ·控制实验室

    ·生物质能源实验室

    ·寒区生物质能源基地

2、行政管理部门

    ·科研与产业化办公室

    ·综合管理办公室

    ·财务管理办公室

3、领军人才梯队

    ·能源化学

4、省重点室验室

    ·燃油燃煤清洁能源重点实验室

', 1, 0, '未知', '', '2020-06-02 02:26:56', '2020-06-03 09:08:18', NULL), +(255, 0, 2, '能源院简介', 'admin', '黑龙江省能源环境研究院创建于1995年,前身为“黑龙江省节油技术开发中心”,隶属于黑龙江省科技厅,2003年更名为“黑龙江省能源环境研究院”。2010年隶属于黑龙江省科学院,属公益一类事业单位。黑龙江省能源环境研究院在能源和环境领域是一个基础研究与应用研究并重、公益服务与技术创新相结合的综合性研究院。二十多年来,黑龙江省能源环境研究院根据地域特点,不断完善学科体系,稳步提高科研水平,形成了鲜明的科研特色。\r\n黑龙江省能源环境研究院创建于1995年,前身为“黑龙江省节油技术开发中心”,\r\n黑龙江省能源环境研究院创建于1995年,前身为“黑龙江省节油技术开发中心”,\r\n黑龙江省能源环境研究院创建于1995年,前身为“黑龙江省节油技术开发中心”,', 'images/2020/06/03/1c356b5861880114bf640fc8a175783c.jpg', '

黑龙江省能源环境研究院简介

       黑龙江省能源环境研究院创建于1995年,前身为“黑龙江省节油技术开发中心”,隶属于黑龙江省科技厅,2003年更名为“黑龙江省能源环境研究院”。2010年隶属于黑龙江省科学院,属公益一类事业单位。

        黑龙江省能源环境研究院在能源和环境领域是一个基础研究与应用研究并重、公益服务与技术创新相结合的综合性研究院。二十多年来,黑龙江省能源环境研究院根据地域特点,不断完善学科体系,稳步提高科研水平,形成了鲜明的科研特色。其职能为“围绕国家重大战略需求,面向黑龙江省政府决策和公益事业发展的战略需求,在环境工程、一次能源、二次能源等学科领域开展基础性、系统性和前瞻性研究,掌握和突破关键核心技术,为国家和黑龙江省战略、经济和社会发展提供科技支撑”。拥有能源化学省级领军人才梯队和黑龙江省燃油燃煤清洁能源重点实验室。
        近年来形成了能源化学、生物质能和固废处理与环境改善三个学科领域六个重点研究方向的科研体系。在黑龙江省建成了首座可全年连续稳定运行的大型沼气发电工程,在催化油浆制备新材料形成技术创新,在油页岩综合利用形成技术储备。在煤矸石处理、室内空气质量改善、农村垃圾、厕所革命、秸秆固体燃料等方向积极与国内知名高校、科研院所和企业开展联合,大力推进废弃物处理技术联合研发和成果落地,改善农村和城市环境,助推污染防治攻坚战。
        建院以来,累计完成国家攻关项目4项,科技部国际科技合作项目2项,黑龙江省重大项目1项,黑龙江省科技攻关项目11项,省自然科学基金2项,各级科研项目120余项。获得省科技进步一等奖1项,省科技发明一等奖2项,中国石油和化学协会科技进步二等奖1项,省科技进步三等奖1项,省科学院科技进步一等奖2项,二等奖1项;获得国家专利100余项;发表科技论文200余篇。
        进入新时代的黑龙江省能源环境研究院,将“不忘初心,牢记使命”,面向政府战略需求,面向技术创新前沿,面向公益事业发展,通过“协同创新、开放合作”的办院理念,推动高质量发展,为黑龙江省在能源和环境领域的全方位发展提供技术引领,为国家和地方经济、社会发展做出应有的贡献。

', 1, 0, '未知', '', '2020-06-02 02:26:56', '2020-06-03 09:24:21', NULL), +(256, 0, 3, '历史沿革', 'admin', NULL, 'images/2020/06/03/5c71322a112ecd7f552a02b0b317b3b6.jpg', '

        黑龙江省能源环境研究院成立于1995年,前身为黑龙江省节油技术开发中心,单位性质为公益三类事业单位,隶属于黑龙江省科学技术厅,2003年更名为黑龙江省能源环境研究院,2006年单位性质转变为公益一类事业单位,2010年隶属关系由黑龙江省科学技术厅变更为黑龙江省科学院,2013年3月与黑龙江省科学院科技孵化中心合并。

 

', 1, 0, '未知', '', '2020-06-02 02:26:56', '2020-06-03 09:08:28', NULL), +(258, 0, 10, '联系我们', 'admin', NULL, 'images/2020/06/03/9fb0929bafd7d70db892cb705a83de9a.jpg', '

邮箱:hljnyfh@163.com   hljnyhj@163.com

电话:0451-88071351   0451-82387268

', 1, 0, '未知', '', '2020-06-02 02:26:56', '2020-06-03 09:08:08', NULL), +(259, 0, 11, '机构设置', 'admin', NULL, 'images/2020/06/03/4013993fe12d4c5f0de82eedec144e03.jpg', '

 

黑龙江省能源环境研究院组织结构

\r\n  

1、科研开发部门

    ·环境科学研究室

    ·能源化学研究室

    ·能源微生物研究室

    ·节能技术研究室

    ·生物质能源实验室

    ·控制实验室

2、行政管理部门

    ·科研管理办公室

    ·综合管理办公室

    ·财务管理办公室

3、领军人才梯队

    ·能源化学

4、省重点室验室

    ·燃油燃煤清洁能源重点实验室

', 1, 0, '未知', '', '2020-06-02 02:26:56', '2020-06-03 09:08:00', NULL), +(260, 0, 12, '环境科学研究室', 'admin', NULL, 'images/2020/06/03/86194e4c360f2abc9f5dc850fae68cac.jpg', '

环境科学研究室简介

 

        环境科学研究室一直致力于节能减排技术和室内环境污染分析方面的研究工作。主要从事生物法处理生活、工业污水和室内空气中污染物的源解析及治理研究。
\r\n         环境科学研究室曾完成过多项省部级科研项目,如:《奥里油脱硫技术研制及应用 》、《燃煤锅炉催化脱硫技术研究》和《工业燃煤锅炉烟气净化技术 》等项目,为我国固定污染源减排提供新技术,并分别获得黑龙江省科技一等奖1项、中国石油和化学工业科技进步类二等奖1项。还完成了基于废碳源的产油微藻提取生物油脂技术,既解决污水排放问题,又提供生物能源,为排污综合利用储备了基础技术。研究室正在参与编制国家行业标准《住宅建筑室内装修污染控制技术规程》,并承担室内环境相关课题两项。
\r\n         环境科学研究室下设生物环境实验室、室内环境实验室、乳化实验室等,具有较为完备的分析测试仪器设备,如热脱附仪,粉尘检测仪,臭氧检测仪,甲醛便携检测仪,TVOC便携检测仪,测氡仪,1m3环境气候箱等。同时,研究室成员专业互补,高中初级分布合理,并拥有多年的实验室工作经验,可以处理各种环境、节能实验,科研实力较强。
\r\n         研究室主任介绍:
\r\n         王志成,1973年出生,学士,研究员级高级工程师,能源化学省级领军人才梯队后备带头人,省级燃油燃煤清洁能源重点实验室成员,兼任:省能源环境学会常务理事、省化学会理事。从事新型醇醚燃料催化剂和乳化燃料催化剂及合成工艺研究,以及室内空气污染研究工作。主持和主研科研课题22项,其中包括国家攻关计划项目3项,省自然科学基金项目1项,国家政府间国际合作项目1项,省攻关计划项目6项。获省科技进步一等奖1项,省科技发明一等奖2项,三等奖1项,国家石化协会科技二等奖1项,发表学术论文11篇。

', 1, 0, '未知', '', '2020-06-02 02:26:56', '2020-06-03 09:07:51', NULL), +(261, 0, 13, '能源化学研究室', 'admin', NULL, 'images/2020/06/03/f505c733ed817d09db7d6464dfd88395.jpg', '

能源化学研究室简介

        能源化学研究室主要从事常规能源、非常规能源、生物质能及清洁能源技术的研究,研究范围涉及石油化工、煤化工、生物化工和燃料化工等领域。近三年,先后承担省级、市(地)级各类科技开发项目10余项,取得了一批达到国内先进水平的标志性成果。目前,该研究室在科研领域已初步形成四条技术开发链条,即:页岩油加氢提质转化技术;页岩油制取油砂分离剂技术;煤与废弃有机制品共焦化技术;木焦油加氢提质转化技术。
\r\n         能源化学研究室经过多年的实践,逐步形成一支结构合理、自主研发能力强的创新型科研梯队。与中科院大连物化所、大庆石化研究院、大连理工大学、哈尔滨工业大学等多家科研院所和高校在基础研究、信息交流、资源共享等方面建立了良好的科研互联关系。

        研究室主任介绍:
\r\n         陈松,1969年出生,高级工程师,现任黑龙江省能源环境研究院能源化学研究室主任。黑龙江省节能评估审查中心化工专家,黑龙江科技大学校外研究生导师。主要从事能源化学领域前沿技术的研究,研究范围包括:常规、非常规能源的加工工艺和工程的研究;高硫高酸原油、稠油的改质及转化工艺的研究。其成果在石油化工、煤化工、油页岩资源综合利用等方面具有较高理论指导意义和实用价值。

', 1, 0, '未知', '', '2020-06-02 02:26:56', '2020-06-03 09:07:42', NULL), +(262, 0, 14, '节能技术研究室', 'admin', NULL, 'images/2020/06/03/24d9fa7e056583d61adc7c0e68f94ad8.jpg', '

节能技术研究室简介
\r\n  

        黑龙江省能源环境研究院节能技术研究室先后承担和参与承担完成了国家“九五”重点科技攻关计划项目,国家“十五”重点科技攻关项目,获得了国家级、省级科研成果20多项。获黑龙江省科技发明一等奖一项。获黑龙江省科技进步一等奖一项、获得了全国石油化工系统二等奖一项,获黑龙江省科技进步三等一项奖等。
        黑龙江省能源环境研究院
节能技术研究室秉承“崇尚科学,求实创新”的指导方针,具有人员素质高、仪器种类齐全、测试手段标准可靠和可达到测试要求的工作环境等特点。
        

\r\n  

 

\"\"

 

\r\n  

 

\r\n  

 

\r\n  

', 1, 0, '未知', '', '2020-06-02 02:26:56', '2020-06-03 09:07:33', NULL), +(263, 0, 15, '生物质能源实验室', 'admin', NULL, 'images/2020/06/03/c8754ba3288f72be5a294402008cb10d.jpg', '

生物质能源实验室简介

 
        生物质能源实验室主要从事寒区沼气工程、固体废弃物利用、农村生物质资源、厌氧微生物机理、厌氧消化技术以及农村资源与环境综合研究与开发等工作,涉及微生物学、生物化学与分子生物学、环境工程、能源工程、农业资源与环境等学科。拥有先进科研仪器设备40余台,具有较完备的研究平台和实验条件。实验室已承担和在研的有国家国际科技合作专项课题、黑龙江省科技攻关计划、黑龙江省科学院科学研究基金、黑龙江省科学院青年创新基金等十余项课题。已经在高温厌氧消化技术、寒区沼气发电工程研究等寒区生物质资源能源化利用技术方面取得了突破性研究进展;另外还开展了高效产甲烷菌的分子生物学、沼液高效回用、厌氧菌影响因素等研究,为在我国寒区兴建大型沼气工程奠定了理论及技术基础。目前已发表研究论文10余篇,申报专利10项。

', 1, 0, '未知', '', '2020-06-02 02:26:56', '2020-06-03 09:07:22', NULL), +(264, 0, 16, '能源微生物研究室', 'admin', NULL, 'images/2020/06/03/10256263434621af89f130b512859e01.jpg', '

能源微生物研究室简介
\r\n  

        能源微生物研究室致力于环境工程、二次能源技术和生物工程三大学科交叉领域的应用基础研究。主要研究方向是:
\r\n         1、畜禽粪便资源化技术;
\r\n         2、秸秆资源化技术。


\r\n  


\"\"
\r\n  

        近年来,能源微生物研究室承担国家级、省市级、院基金项目20余项,多项成果获奖。其中畜禽粪便高温厌氧消化技术与牛粪沼液秸秆联用技术是我国唯一成功应用于高寒地区连续作业的技术,并取得了显著的社会效益。

', 1, 0, '未知', '', '2020-06-02 02:26:56', '2020-06-03 09:07:13', NULL), +(265, 0, 17, '控制实验室', 'admin', NULL, 'images/2020/06/03/a83e426f373c13ae1f64b7807b7d682a.jpg', '

控制实验室简介

        控制实验室主要进行电气设计、自控设计、仪表安装调试及控制系统的设计和编制工作,工作中善于提出改进措施,解决项目中遇到的关键性的技术难题。
        控制实验室参与研制建设的国家级国际科技合作项目《工业化封闭环式沼气、发电系统》以及省国际科技合作项目《加拿大直贮热太阳能技术》提升了我省高寒地区高温厌氧发酵和光伏发酵温室控制领域在国际上的知名度,该项目得到了加拿大阿尔伯塔研究院业内专家的一致好评。

', 1, 0, '未知', '', '2020-06-02 02:26:56', '2020-06-03 09:06:33', NULL), +(266, NULL, 4, '徐 晓 秋', NULL, '中共党员\r\n黑龙江省能源环境研究院院长、党委书记\r\n研究员级高级工程师', 'images/2020/06/03/dbca445220ff03f4bcd187620b36622c.jpg', '

中共党员
黑龙江省能源环境研究院院长、党委书记
研究员级高级工程师

', 0, 0, NULL, NULL, '2020-06-03 02:40:08', '2020-06-03 09:25:12', NULL), +(267, NULL, 4, '关 春 玲', NULL, '中共党员\r\n黑龙江省能源环境研究院副院长、党委委员\r\n高级会计师', 'images/2020/06/03/4272bfe798871eb962310e8fc3f32877.jpg', '

中共党员
黑龙江省能源环境研究院副院长、党委委员
高级会计师

', 0, 0, NULL, NULL, '2020-06-03 02:41:37', '2020-06-03 09:25:29', NULL), +(268, NULL, 4, '刘 伟', NULL, '中共党员\r\n黑龙江省能源环境研究院副院长、党委委员\r\n副研究员', 'images/2020/06/03/02c1e5e9988fd2e4305d669ac057dc2c.jpg', '

中共党员
黑龙江省能源环境研究院副院长、党委委员
副研究员

', 0, 0, NULL, NULL, '2020-06-03 02:43:38', '2020-06-03 09:25:51', NULL); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `categories` +-- + +CREATE TABLE `categories` ( + `id` bigint(20) UNSIGNED NOT NULL, + `oldid` int(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '老网站分类id 校验没有问题后删除', + `cover` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `parent_id` int(10) UNSIGNED NOT NULL DEFAULT '0', + `article_id` int(10) UNSIGNED DEFAULT '0' COMMENT '分类跳转的文章id', + `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'article' COMMENT '分类的类型。article 文章等等', + `description` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `order` int(10) NOT NULL DEFAULT '0', + `status` tinyint(1) NOT NULL DEFAULT '0', + `content` text COLLATE utf8mb4_unicode_ci, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='分类'; + +-- +-- 转存表中的数据 `categories` +-- + +INSERT INTO `categories` (`id`, `oldid`, `cover`, `parent_id`, `article_id`, `title`, `type`, `description`, `order`, `status`, `content`, `created_at`, `updated_at`) VALUES +(1, 1, NULL, 0, 254, '简介', 'show', NULL, 0, 1, ' \r\n

\r\n 黑龙江省能源环境研究院(孵化中心)组织结构

\r\n

\r\n  

\r\n

\r\n 1、科研开发部门

\r\n

\r\n     ·环境科学与节能技术研究室

\r\n

\r\n     ·能源化学研究室

\r\n

\r\n     ·油品助剂研发中心

\r\n

\r\n     ·控制实验室

\r\n

\r\n     ·生物质能源实验室

\r\n

\r\n     ·寒区生物质能源基地

\r\n

\r\n 2、行政管理部门

\r\n

\r\n     ·科研与产业化办公室

\r\n

\r\n     ·综合管理办公室

\r\n

\r\n     ·财务管理办公室

\r\n

\r\n 3、领军人才梯队

\r\n

\r\n     ·能源化学

\r\n

\r\n 4、省重点室验室

\r\n

\r\n     ·燃油燃煤清洁能源重点实验室

\r\n', '2020-06-02 01:52:07', '2020-06-02 02:26:56'), +(2, 2, NULL, 1, 255, '院所简介', 'show', NULL, 0, 1, '

\r\n 黑龙江省能源环境研究院简介

\r\n

\r\n        黑龙江省能源环境研究院创建于1995年,前身为“黑龙江省节油技术开发中心”,隶属于黑龙江省科技厅,2003年更名为“黑龙江省能源环境研究院”。2010年隶属于黑龙江省科学院,属公益一类事业单位。

\r\n        黑龙江省能源环境研究院在能源和环境领域是一个基础研究与应用研究并重、公益服务与技术创新相结合的综合性研究院。二十多年来,黑龙江省能源环境研究院根据地域特点,不断完善学科体系,稳步提高科研水平,形成了鲜明的科研特色。其职能为“围绕国家重大战略需求,面向黑龙江省政府决策和公益事业发展的战略需求,在环境工程、一次能源、二次能源等学科领域开展基础性、系统性和前瞻性研究,掌握和突破关键核心技术,为国家和黑龙江省战略、经济和社会发展提供科技支撑”。拥有能源化学省级领军人才梯队和黑龙江省燃油燃煤清洁能源重点实验室。
\r\n        近年来形成了能源化学、生物质能和固废处理与环境改善三个学科领域六个重点研究方向的科研体系。在黑龙江省建成了首座可全年连续稳定运行的大型沼气发电工程,在催化油浆制备新材料形成技术创新,在油页岩综合利用形成技术储备。在煤矸石处理、室内空气质量改善、农村垃圾、厕所革命、秸秆固体燃料等方向积极与国内知名高校、科研院所和企业开展联合,大力推进废弃物处理技术联合研发和成果落地,改善农村和城市环境,助推污染防治攻坚战。
\r\n        建院以来,累计完成国家攻关项目4项,科技部国际科技合作项目2项,黑龙江省重大项目1项,黑龙江省科技攻关项目11项,省自然科学基金2项,各级科研项目120余项。获得省科技进步一等奖1项,省科技发明一等奖2项,中国石油和化学协会科技进步二等奖1项,省科技进步三等奖1项,省科学院科技进步一等奖2项,二等奖1项;获得国家专利100余项;发表科技论文200余篇。
\r\n        进入新时代的黑龙江省能源环境研究院,将“不忘初心,牢记使命”,面向政府战略需求,面向技术创新前沿,面向公益事业发展,通过“协同创新、开放合作”的办院理念,推动高质量发展,为黑龙江省在能源和环境领域的全方位发展提供技术引领,为国家和地方经济、社会发展做出应有的贡献。
', '2020-06-02 01:52:07', '2020-06-02 02:26:56'), +(3, 24, NULL, 1, 256, '历史沿革', 'show', NULL, 0, 1, '

\r\n         黑龙江省能源环境研究院成立于1995年,前身为黑龙江省节油技术开发中心,单位性质为公益三类事业单位,隶属于黑龙江省科学技术厅,2003年更名为黑龙江省能源环境研究院,2006年单位性质转变为公益一类事业单位,2010年隶属关系由黑龙江省科学技术厅变更为黑龙江省科学院,2013年3月与黑龙江省科学院科技孵化中心合并。

\r\n ', '2020-06-02 01:52:07', '2020-06-02 02:26:56'), +(4, 42, NULL, 1, 257, '领导班子', 'article', NULL, 0, 1, ' \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \"\"\r\n  \r\n  
\r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n  
\r\n                  徐 晓 秋
\r\n
\r\n        中共党员
\r\n        黑龙江省能源环境研究院院长、党委书记
\r\n        研究员级高级工程师

\r\n  
\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \"\"\r\n  \r\n  
\r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n  
\r\n                  关 春 玲
\r\n
\r\n        中共党员
\r\n        黑龙江省能源环境研究院副院长、党委委员
\r\n        高级会计师

\r\n  
\r\n 
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \"\"\r\n  \r\n  
\r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n  
\r\n                  刘    伟
\r\n
\r\n        中共党员
\r\n        黑龙江省能源环境研究院副院长、党委委员
\r\n        副研究员

\r\n  
\r\n 
\r\n', '2020-06-02 01:52:07', '2020-06-03 02:44:18'), +(5, 8, NULL, 0, 0, '能源院动态', 'article', NULL, 0, 1, ' ', '2020-06-02 01:52:07', '2020-06-02 01:52:07'), +(6, 9, NULL, 5, 0, '简讯', 'article', NULL, 0, 1, ' ', '2020-06-02 01:52:07', '2020-06-02 01:52:07'), +(7, 10, NULL, 5, 0, '能源院新闻', 'article', NULL, 0, 1, '', '2020-06-02 01:52:07', '2020-06-02 01:52:07'), +(8, 16, NULL, 0, 0, '党政建设', 'article', NULL, 0, 1, ' ', '2020-06-02 01:52:07', '2020-06-02 01:52:07'), +(9, 17, NULL, 0, 0, '学习园地', 'article', NULL, 0, 1, '', '2020-06-02 01:52:07', '2020-06-02 01:52:07'), +(10, 22, NULL, 0, 258, '联系我们', 'show', NULL, 0, 1, '

\r\n 邮箱:hljnyfh@163.com   hljnyhj@163.com

\r\n

\r\n 电话:0451-88071351   0451-82387268

\r\n', '2020-06-02 01:52:07', '2020-06-02 02:26:56'), +(11, 25, NULL, 0, 259, '机构设置', 'show', NULL, 0, 1, ' \r\n

\r\n 黑龙江省能源环境研究院组织结构

\r\n

\r\n  

\r\n

\r\n 1、科研开发部门

\r\n

\r\n     ·环境科学研究室

\r\n

\r\n     ·能源化学研究室

\r\n

\r\n     ·能源微生物研究室

\r\n

\r\n     ·节能技术研究室

\r\n

\r\n     ·生物质能源实验室

\r\n

\r\n     ·控制实验室

\r\n

\r\n 2、行政管理部门

\r\n

\r\n     ·科研管理办公室

\r\n

\r\n     ·综合管理办公室

\r\n

\r\n     ·财务管理办公室

\r\n

\r\n 3、领军人才梯队

\r\n

\r\n     ·能源化学

\r\n

\r\n 4、省重点室验室

\r\n

\r\n     ·燃油燃煤清洁能源重点实验室

\r\n', '2020-06-02 01:52:07', '2020-06-02 02:26:56'), +(12, 36, NULL, 11, 260, '环境科学研究室', 'show', NULL, 0, 1, '
\r\n 环境科学研究室简介
\r\n \r\n

\r\n         环境科学研究室一直致力于节能减排技术和室内环境污染分析方面的研究工作。主要从事生物法处理生活、工业污水和室内空气中污染物的源解析及治理研究。
\r\n         环境科学研究室曾完成过多项省部级科研项目,如:《奥里油脱硫技术研制及应用 》、《燃煤锅炉催化脱硫技术研究》和《工业燃煤锅炉烟气净化技术 》等项目,为我国固定污染源减排提供新技术,并分别获得黑龙江省科技一等奖1项、中国石油和化学工业科技进步类二等奖1项。还完成了基于废碳源的产油微藻提取生物油脂技术,既解决污水排放问题,又提供生物能源,为排污综合利用储备了基础技术。研究室正在参与编制国家行业标准《住宅建筑室内装修污染控制技术规程》,并承担室内环境相关课题两项。
\r\n         环境科学研究室下设生物环境实验室、室内环境实验室、乳化实验室等,具有较为完备的分析测试仪器设备,如热脱附仪,粉尘检测仪,臭氧检测仪,甲醛便携检测仪,TVOC便携检测仪,测氡仪,1m3环境气候箱等。同时,研究室成员专业互补,高中初级分布合理,并拥有多年的实验室工作经验,可以处理各种环境、节能实验,科研实力较强。
\r\n         研究室主任介绍:
\r\n         王志成,1973年出生,学士,研究员级高级工程师,能源化学省级领军人才梯队后备带头人,省级燃油燃煤清洁能源重点实验室成员,兼任:省能源环境学会常务理事、省化学会理事。从事新型醇醚燃料催化剂和乳化燃料催化剂及合成工艺研究,以及室内空气污染研究工作。主持和主研科研课题22项,其中包括国家攻关计划项目3项,省自然科学基金项目1项,国家政府间国际合作项目1项,省攻关计划项目6项。获省科技进步一等奖1项,省科技发明一等奖2项,三等奖1项,国家石化协会科技二等奖1项,发表学术论文11篇。

\r\n', '2020-06-02 01:52:07', '2020-06-02 02:26:56'), +(13, 37, NULL, 11, 261, '能源化学研究室', 'show', NULL, 0, 1, '
\r\n 能源化学研究室简介
\r\n

\r\n         能源化学研究室主要从事常规能源、非常规能源、生物质能及清洁能源技术的研究,研究范围涉及石油化工、煤化工、生物化工和燃料化工等领域。近三年,先后承担省级、市(地)级各类科技开发项目10余项,取得了一批达到国内先进水平的标志性成果。目前,该研究室在科研领域已初步形成四条技术开发链条,即:页岩油加氢提质转化技术;页岩油制取油砂分离剂技术;煤与废弃有机制品共焦化技术;木焦油加氢提质转化技术。
\r\n         能源化学研究室经过多年的实践,逐步形成一支结构合理、自主研发能力强的创新型科研梯队。与中科院大连物化所、大庆石化研究院、大连理工大学、哈尔滨工业大学等多家科研院所和高校在基础研究、信息交流、资源共享等方面建立了良好的科研互联关系。

\r\n         研究室主任介绍:
\r\n         陈松,1969年出生,高级工程师,现任黑龙江省能源环境研究院能源化学研究室主任。黑龙江省节能评估审查中心化工专家,黑龙江科技大学校外研究生导师。主要从事能源化学领域前沿技术的研究,研究范围包括:常规、非常规能源的加工工艺和工程的研究;高硫高酸原油、稠油的改质及转化工艺的研究。其成果在石油化工、煤化工、油页岩资源综合利用等方面具有较高理论指导意义和实用价值。

\r\n', '2020-06-02 01:52:07', '2020-06-02 02:26:56'), +(14, 38, NULL, 11, 262, '节能技术研究室', 'show', NULL, 0, 1, '
\r\n 节能技术研究室简介
\r\n  
\r\n        黑龙江省能源环境研究院节能技术研究室先后承担和参与承担完成了国家“九五”重点科技攻关计划项目,国家“十五”重点科技攻关项目,获得了国家级、省级科研成果20多项。获黑龙江省科技发明一等奖一项。获黑龙江省科技进步一等奖一项、获得了全国石油化工系统二等奖一项,获黑龙江省科技进步三等一项奖等。
\r\n        黑龙江省能源环境研究院
节能技术研究室秉承“崇尚科学,求实创新”的指导方针,具有人员素质高、仪器种类齐全、测试手段标准可靠和可达到测试要求的工作环境等特点。
\r\n        
\r\n
\r\n  
\r\n \r\n
\r\n \"\"
\r\n \r\n
\r\n  
\r\n \r\n
\r\n  
\r\n 
\r\n
\r\n  
\r\n', '2020-06-02 01:52:07', '2020-06-02 02:26:56'), +(15, 39, NULL, 11, 263, '生物质能源实验室', 'show', NULL, 0, 1, '
\r\n 生物质能源实验室简介
\r\n 
\r\n        生物质能源实验室主要从事寒区沼气工程、固体废弃物利用、农村生物质资源、厌氧微生物机理、厌氧消化技术以及农村资源与环境综合研究与开发等工作,涉及微生物学、生物化学与分子生物学、环境工程、能源工程、农业资源与环境等学科。拥有先进科研仪器设备40余台,具有较完备的研究平台和实验条件。实验室已承担和在研的有国家国际科技合作专项课题、黑龙江省科技攻关计划、黑龙江省科学院科学研究基金、黑龙江省科学院青年创新基金等十余项课题。已经在高温厌氧消化技术、寒区沼气发电工程研究等寒区生物质资源能源化利用技术方面取得了突破性研究进展;另外还开展了高效产甲烷菌的分子生物学、沼液高效回用、厌氧菌影响因素等研究,为在我国寒区兴建大型沼气工程奠定了理论及技术基础。目前已发表研究论文10余篇,申报专利10项。
', '2020-06-02 01:52:07', '2020-06-02 02:26:56'), +(16, 40, NULL, 11, 264, '能源微生物研究室', 'show', NULL, 0, 1, '
\r\n 能源微生物研究室简介
\r\n  
\r\n
\r\n         能源微生物研究室致力于环境工程、二次能源技术和生物工程三大学科交叉领域的应用基础研究。主要研究方向是:
\r\n         1、畜禽粪便资源化技术;
\r\n         2、秸秆资源化技术。

\r\n
\r\n  
\r\n
\r\n
\r\n \"\"
\r\n  
\r\n
\r\n         近年来,能源微生物研究室承担国家级、省市级、院基金项目20余项,多项成果获奖。其中畜禽粪便高温厌氧消化技术与牛粪沼液秸秆联用技术是我国唯一成功应用于高寒地区连续作业的技术,并取得了显著的社会效益。
\r\n', '2020-06-02 01:52:07', '2020-06-02 02:26:56'), +(17, 41, NULL, 11, 265, '控制实验室', 'show', NULL, 0, 1, '

\r\n 控制实验室简介

\r\n

\r\n         控制实验室主要进行电气设计、自控设计、仪表安装调试及控制系统的设计和编制工作,工作中善于提出改进措施,解决项目中遇到的关键性的技术难题。
\r\n         控制实验室参与研制建设的国家级国际科技合作项目《工业化封闭环式沼气、发电系统》以及省国际科技合作项目《加拿大直贮热太阳能技术》提升了我省高寒地区高温厌氧发酵和光伏发酵温室控制领域在国际上的知名度,该项目得到了加拿大阿尔伯塔研究院业内专家的一致好评。

\r\n', '2020-06-02 01:52:07', '2020-06-02 02:26:56'), +(18, 26, NULL, 0, 0, '科研成果', 'article', NULL, 0, 1, '', '2020-06-02 01:52:07', '2020-06-02 01:52:07'), +(19, 27, NULL, 18, 0, '成果', 'article', NULL, 0, 1, '', '2020-06-02 01:52:07', '2020-06-02 01:52:07'), +(20, 28, NULL, 18, 0, '获奖', 'article', NULL, 0, 1, '', '2020-06-02 01:52:07', '2020-06-02 01:52:07'), +(21, 29, NULL, 18, 0, '专利/论文', 'article', NULL, 0, 1, '', '2020-06-02 01:52:07', '2020-06-02 01:52:07'), +(22, 0, NULL, 0, 0, '首页广告位', 'advert', '首页广告位', 0, 1, NULL, '2020-06-02 03:13:54', '2020-06-02 03:13:54'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `dede_addonarticles` +-- + +CREATE TABLE `dede_addonarticles` ( + `aid` mediumint(8) UNSIGNED NOT NULL DEFAULT '0', + `typeid` smallint(5) UNSIGNED NOT NULL DEFAULT '0', + `body` mediumtext, + `redirecturl` varchar(255) NOT NULL DEFAULT '', + `templet` varchar(30) NOT NULL DEFAULT '', + `userip` char(15) NOT NULL DEFAULT '' +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- 转存表中的数据 `dede_addonarticles` +-- + +INSERT INTO `dede_addonarticles` (`aid`, `typeid`, `body`, `redirecturl`, `templet`, `userip`) VALUES +(8, 10, '        为了更好的促进科研院所与高校之间资源的优势互补,黑龙江省能源环境研究院与黑龙江科技大学科技合作签约仪式于2013年3月28日在黑龙江科技大学举行,标志着双方合作进入更加紧密的新阶段。
\r\n
\r\n        黑龙江省能源环境研究院院长徐晓秋同志、副院长关春玲同志以及科研办、办公室负责人,黑龙江科技大学周国江主任、丁慧贤副主任、李哲教授等出席了签约仪式。双方对各自的研究方向、研究领域进行了介绍,就合作领域及项目进行了探讨,均表示要充分利用研究院所的实验条件及黑龙江科技大学的人才技术优势。并在科技立项、科学研究、成果转化、合作机制、院校实训等方面达成共识,签订合作协议。
\r\n
\r\n        我院将以院校合作为契机,在煤化工、新材料领域打造出一支高新技术创新团队,为我省的经济社会发展做出更大的贡献。
\r\n
\r\n
\r\n \"\"
\r\n  
\r\n
\r\n 我院徐晓秋院长和黑龙江科技大学周国江主任分别代表双方在协议上签字。
\r\n 
\r\n 
\r\n 
\r\n \r\n
\r\n 黑龙江省能源环境研究院
\r\n
\r\n 2013年3月28日  
\r\n', '', '', '113.4.72.230'), +(9, 10, '
\r\n         中国绿色农业联盟刘连馥主席及国家财政部农发办项目审批专家组组长、华南农大食品学院院长杨公明一行,于2013年3月23日,考察了科技孵化中心位于大庆杜尔伯特的生物质能源示范项目,中心主任徐晓秋同志、副主任关春玲同志、科研办、办公室负责人陪同考察。徐晓秋同志首先介绍了项目的特点和生产规模,随后又详细讲解了该项目在经济、社会效益、生态及带动养殖等方面的优势情况。听取完情况介绍后,双方就该项目在农业领域加强合作及复制推广进行了探讨,刘连馥主席和杨公明院长都显示出了浓厚的兴趣,并给予了很高的评价。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n 
\r\n 
\r\n \r\n
\r\n 黑龙江省能源环境研究院
\r\n 2013年3月23日  
\r\n', '', '', '113.4.72.230'), +(10, 16, '

\r\n 黑龙江省能源环境研究院(孵化中心)全体职工,于5月10日到位于大庆市杜尔伯特蒙古族自治县的黑龙江省科学院生物质能源示范基地开展五四青年节活动-暨能源院(孵化中心)首届职工趣味运动会。

\r\n
\r\n \"\"
\r\n \"\"
\r\n

\r\n 5月10日上午,全体职工首先参观了示范基地,并听取了项目负责人对该套示范装置的讲解,使全体职工尤其是能源院的职工对该示范装置有了进一步的了解,之后,全体职工参加了植树活动,大家齐心协力,种下了棵棵象征着希望的树苗,希望它能像我们的事业一样蒸蒸日上,硕果累累。下午进行的徒步活动,让大家走近自然,贴进自然,身心得到了很好的放松。

\r\n
\r\n \"\"
\r\n \"\"
\r\n

\r\n 通过本次活动,不但增进了同事之间的友谊,放松了身心,更重要的是增强了团队意识。职工们在活动后表示,身为科技工作者,将把能源环境作为一项事业推广下去,为单位的发展贡献自己的力量。

\r\n \r\n
\r\n 黑龙江省能源环境研究院    
\r\n', '', '', '125.211.131.133'), +(11, 10, '

\r\n         2013年5月7日,省科学院产业化处孙宇峰处长、范延新副处长、李晓辉副处长在省能源环境研究院院长徐晓秋同志的陪同下来到位于双城的“M15车用甲醇汽油复合添加剂”产业化基地进行调研,指导工作。

\r\n

\r\n         产业化处领导在听取了我院油品助剂研发中心主任张树华关于产业化工作的汇报之后,对我院产业化工作的示范引领作用给予了充分肯定,并对在基地工作的职工进行慰问,极大地鼓舞了职工的工作热情。同时,产业化处领导对我院“M15车用甲醇汽油复合添加剂”产业项化目的发展提出设想,并表示省科学院相关部门会大力支持我院的产业化工作,使“M15车用甲醇汽油复合添加剂”产业化项目为黑龙江区域经济建设更好的服务。

\r\n \r\n
\r\n 黑龙江省能源环境研究院    
\r\n', '', '', '113.4.72.230'), +(12, 10, '

\r\n         2013年6月7日,潘忠院长率部分领导班子成员及相关处室负责人一行12人赴能源院(孵化中心)召开现场办公会议。能源院(孵化中心)班子成员、各部门负责人、副高职以上人员参加了会议。

\r\n

\r\n         潘院长一行在省能源环境研究院院长徐晓秋同志陪同下先后察看了能源院实验楼、办公楼及职工食堂。

\r\n
\r\n
\r\n
\r\n
\r\n

\r\n         随后能源院院长、孵化中心主任徐晓秋同志就任职后的主要工作情况及存在的问题向潘院长一行进行了汇报。汇报结束后,科学院领导、相关处室负责人与能源院(孵化中心)参会人员进行了互动交流。最后潘忠院长对能源院(孵化中心)融合后的工作情况和成绩给予了充分肯定,对在艰苦的环境里坚守工作岗位的同志们表示理解和支持,并对能源院(孵化中心)的人员结构、业务体系、工作环境等方面做出了相应指示,鼓励大家靠自己的双手创造属于自己的发展之路。

\r\n
\r\n
\r\n 
\r\n 
\r\n 
\r\n
\r\n 黑龙江省能源环境研究院    
\r\n', '', '', '113.4.72.230'), +(13, 10, '

\r\n         为丰富职工业余文化生活,增强兄弟院所之间的交流与合作,提高研究院所团队的协作能力,6月5日下午,省科学院技术物理研究所与能源环境研究院共同进行了一场篮球友谊赛。两院所党政领导班子成员参观了比赛。

\r\n

\r\n         伴随着裁判员一声号响,篮球赛如火如荼的展开,队员在场上你争我夺,从传球、运球、助攻到投篮一系列动作帅气利索,比赛场景异常激烈。两院所队员中,能源院队员老中青混搭,宝刀未老;物理所队员不甘示弱,部分领导也加入了比赛当中。在短短一个多小时的赛场上,赛出了风格,赛出了水平,充分展现了两院所职工的精神面貌和全面的优秀素质。

\r\n

\r\n \"\"

\r\n

\r\n         通过这次篮球比赛,不仅丰富了两院所的业余文化生活,更是提高了锻炼身体和团结合作的意识,而且增强了两院所之间的感情交流,更重要的是为两院所今后的交流和合作奠定了良好的基础。   

\r\n', '', '', '1.58.195.20'), +(49, 9, '        “高效检索与文献分析——万方数据知识服务平台使用详解”培训大概定在本月20日或23日,请大家留意。', '', '', '113.4.72.230'), +(14, 10, '

\r\n         2013年06月13日,省能源环境研究院(孵化中心)院长及相关科室人员在能源院(孵化中心)会议室会见了俄罗斯“梅索-克”科学生产应用中心总经理杰诺夫.尼古拉.杰奥里耶维奇博士一行二人。双方就润滑油复合添加剂的相关合作进行了热烈的讨论,此技术特点突出、可广泛应用于多种领域。后经双方多轮协商,于15日达成框架协议,引进俄方相关技术,用于生产润滑油复合添加剂。双方的合作为我院润滑油添加剂的产业化工作奠定了基础,并使我院在该领域向世界先进水平迈进了一步。

\r\n

\r\n \"\"
\r\n \"\"

\r\n  

\r\n

\r\n 黑龙江省能源环境研究院    

\r\n', '', '', '113.4.72.230'), +(15, 10, '

\r\n ​为了更好的完成“收官”之年的各项工作,增强干劲,凝心聚力,鼓舞势气,使大家能够在紧张而忙碌的工作中,放松心情、愉悦身心,同时为加强科学院各兄弟院所之间的感情,6月14日自动化研究所与能源院部分职工一行70余人来到了风景秀丽的帽儿山,共同举行了爬山活动。

\r\n

\r\n 微风低语,流水呢喃,鸟鸣清脆。沿着陡峭的山路,大家一路前行。天气虽然炎热,路途虽然艰辛,但每一个人的心中都有一个坚定的信念:不达目的不罢休。在行进中大家相互配合,相互鼓励,团结一致,终于在经历了一小时左右时间成功登顶。在登顶的那一刻,虽然大家已是气喘吁吁,满头大汗,但内心的激动和喜悦难以形容,大家高声欢呼“我们登顶成功了!”

\r\n

\r\n 爬山归来,在宾馆的广场上共同举办了篝火晚会,大家载歌载舞,欢聚一堂,整场晚会充满了欢声笑语,让人难以忘怀。

\r\n

\r\n 此次活动把“走进自然、增进友谊、锻炼意志、陶冶情操”融合在一起,既锻炼了身体,又增强了团队的凝聚力,增进了兄弟院所间的沟通融合,大家决心把登山的气魄投入到工作中,“矢志创新、勇于攀登”,以饱满的工作热情、优异的工作业绩为实现翻番目标和“创新2020”发展规划做贡献,共圆“大科学院”梦想。

\r\n
\r\n

\r\n  

\r\n

\r\n \"\"

\r\n

\r\n \"\"

\r\n
\r\n
\r\n 黑龙江省能源环境研究院    
\r\n', '', '', '113.4.72.200'), +(16, 27, '

\r\n         “工厂化厌氧沼气发电控制系统仿真平台”以加拿大阿尔伯塔研究院“集成粪便综合利用系统(IMUS)”设计工艺为基础,针对工业化沼气发电过程中,厌氧发酵工艺过程自动控制的复杂性和多样性,建立一套适用于工业化沼气发电控制系统的厌氧发酵过程仿真平台系统。通过仿真平台系统可在实验室内实现实际生产中很难获得的技术数据,并对开发项目进行预评估,可缩短项目开发周期、节约试验和设计费用、降低开发风险。

\r\n

\r\n         在设计过程中,将针对生物发酵过程的时变性、非线性以及控制过程的复杂性,应用工具软件和数学计算方法进行仿真平台的开发,项目采用LabVIEW和MATLAB语言相结合进行系统设计;依据生产过程不同控制节点(进出料的情况、压力控制、产气率、温度、底物浓度、发酵及搅拌时间等)的技术参数进行曲线模拟仿真,并设计控制数学模型,建立工厂化高温厌氧发酵沼气发电过程控制仿真平台。仿真平台通过已知的参数(发酵料液的产量、环境温度的变化等)进行沼气发电装置的发酵罐体、发电机等主要设备的设计参数进行预估仿真,为新建“工厂化厌氧沼气发电装置”建设提供参数仿真模拟;通过修改控制过程的参数(温度、压力、底物流量、PH值变化、底物浓度、发酵时间、搅拌时间等),实现沼气产气量和产气质量的变化情况模拟,提供产气量变化过程控制修改方案。

\r\n

\r\n         该平台系统一方面它可以供研究者和建设者在分析和比较各种控制策略和诊断方法时使用;另一方面可以根据示范工程中取得的新成果、数据、发现以及新工艺不断完善数据平台,为工艺设计提供帮助,以适应新的工业需求。

\r\n

\r\n         该仿真平台系统采用国外先进的技术工艺进行设计,针对于工厂化厌氧沼气发电装置进行设计,具有高效的热电联用热回收工艺,不消耗新的化石能源,尤其适合高寒地区进行,工艺水平处于国际先进水平,开发完成后将对国内的工厂化沼气发电工程建议提供借鉴依据。控制系统在生产过程中,不产生二次污染,进出料连续化,控制单元模块化,采用高温厌氧发酵工艺,产气率高。

\r\n', '', '', '113.4.72.230'), +(17, 16, '

\r\n         高举旗帜奋力开拓铸就辉煌业绩,领航中国信心满怀共创美好未来。举世瞩目的中国共产党第十八次全国代表大会在北京胜利闭幕以来,我院掀起了深入学习、领会和贯彻“十八大”精神的热潮。

\r\n

\r\n         为深入贯彻落实“十八大”精神,凝心聚力推动中心科研发展。我院组织党员、入党积极分子和科研人员参加学习贯彻十八大精神会议。

\r\n

\r\n         与会同志学习了党的十八大精神,通过学习,大家一致认为党的“十八大”是在我国进入全面建成小康社会决定性阶段召开的一次十分重要的大会,在我们党和国家历史上都具有十分重要的里程碑意义。大会科学总结了过去五年的成就和十年的历程,确立了科学发展观的历史地位,提出了夺取中国特色社会主义新胜利的基本要求,对全面建成小康社会和深化改革开放作出了安排部署,对提高党的建设科学化水平提出了明确要求。把“科学发展观”、“中国特色社会主义制度”、“中国特色社会主义道路”、“中国特色社会主义理论体系”、“生态文明”、“建设美丽中国”、“实现中华民族永续发展”等等写入党章,顺应了历史发展的必然。

\r\n

\r\n         大家表示,要以十八大胜利闭幕为契机,积极响应院党组号召,切实贯彻、落实院会议工作部署,落实省科学院“创新2020”规划,积极推进孵化中心中长期科技发展规划任务,实现明年“双倍增”目标。
\r\n  

\r\n

\r\n \"\"
\r\n
\r\n \"\"

\r\n', '', '', '113.4.83.74'), +(18, 16, '        为促进“省科学院创新2020发展规划”实施,确保三年目的全面实现,根据黑龙江省科学院关于《七一表彰的通知》的相关要求,通过全体党员投票,选举产生孵化中心支部为先进党组织,王欣同志为优秀党务工作者,刘岩同志为优秀共产党员,并上报省科学院。', '', '', '113.4.83.74'), +(19, 27, '

\r\n         《M15车用甲醇汽油复合添加剂》是含有辛烷值增强剂、动力增强剂、金属腐蚀抑制剂、橡胶溶胀抑制剂、助燃剂和助溶剂的复合添加剂。通过互配性试验、溶解性试验、辛烷值加和性和调和正效应试验,解决了添加剂复合后产生的较大互扰性及经济性等问题,最终得出添加剂的最佳配比,并对添加剂各项指标进行检测,检测结果均符合标准。该添加剂有效解决和控制了M15车用甲醇汽油:低温启动难、高温气阻大、动力不足、腐蚀溶胀等问题。使M15甲醇汽油长期处于稳定状态,不易分层,解决了汽油与甲醇互溶性差的问题。并且可以显著提高油品的辛烷值和动力性能,同时使用该添加剂调和的M15甲醇汽油,不需改变发动机的结构。该添加剂通过工业应用及性能考核,经黑龙江省精细化工产品质量监督检验站检验合格。

\r\n', '', '', '113.4.72.230'), +(20, 27, '
\r\n 技术特点:
\r\n

\r\n 1、催化剂包括能量及辛烷值增强组份,自溶合组份、尾气净化组份等。

\r\n

\r\n 2、M45甲醇汽油合成工艺研究,采用化学自溶合技术,甲醇、催化剂、汽油三种物质不需要搅拌,即可相互溶合,增加燃料的稳定性。与纯汽油及乙醇汽油互溶性优良。

\r\n

\r\n 3、不改动发动机供油系统,发动机正常运行。

\r\n

\r\n 4、高、低温启动正常,无低温启动困难,高温气阻现象。

\r\n

\r\n 5、发动机动力性能与使用93#汽油相当。

\r\n', '', '', '113.4.72.230'), +(21, 27, '

\r\n         新能源是二十一世纪世界经济发展中最具决定力的五大技术领域之一。太阳能是一种清洁、高效和永不衰竭的新能源。在新世纪中,各国政府都将太阳能资源利用作为国家可持续发展战略的重要内容。

\r\n

\r\n         因为地域气候的原因,在中国北方地区的建筑物维持良好的温度环境需要提供大量的能源,黑龙江省的气候条件与阿尔伯塔省非常相似。在这些严酷的气候条件下建筑物的能源消耗大约2GJ/m2/年,等于20美元/m2/年(假设天然气耗资10/GJ 美元)。由于燃料成本上升,在未来我国北方建筑物的采暖保温方面可能导致严重的经济问题。

\r\n

\r\n         直贮蓄热太阳能系统(DHS)太阳能集热系统可以实现在白天收集太阳能并将其直接贮存在建筑物的墙壁中以调节建筑内温度的目的。在冬季,该系统可以在白天收集太阳能,晚上又释放到建筑的外壳。它为建筑物创造了一个类似于保温毛毯的缓冲区,在夏季,该系统以相反的方式工作,调节房屋内部的温度。该系统在国外已广泛应用于商业楼宇、民用住宅和农业温室,为工业结构的空间供热提供新的概念与技术,属国际领先水平。

\r\n', '', '', '113.4.72.230'), +(22, 27, '

\r\n         油页岩作为非常规能源,已成为当前世界范围内开发利用的热点,由于油页岩的组成和结构的未知使得油页岩的开发、利用手段单一。如何提高其有效利用途径,发挥其在能源和化工原料领域的作用,引起经济和技术界人士的重视。该项目以油页岩为原料,通过温和条件下分级萃取的方法,将得到的萃取物进行分离并进行相关的检测分析,一方面,准确提出油页岩中可萃取有机质的组成和结构,为油页岩结构的研究奠定基础;另一方面,分级萃取的方法可以选择性提取油页岩中具有应用前景的化合物,不断提高页岩油的加工深度和综合利用水平。目前,该项目已通过黑龙江省科学院组织的专家鉴定。
\r\n  

\r\n', '', '', '113.4.72.230'), +(23, 27, '

\r\n         集成粪便综合利用系统(IMUS)是阿尔伯塔研究院开发的工业化封闭环式沼气系统,它采用独特的高温消化技术,将畜禽粪便转换为能源、生物肥料和可再利用的水,通过高温厌氧发酵来生产沼气并用其来发电。后营养物可作为无病原体的生物肥料市场化,水可以再次用于IMUS系统或者用于灌溉。IMUS 技术不仅全部利用生物废物中的能源和养分,它还减轻温室气体排放和农业、城市、食品加工等废物造成的其它环境和社会压力。IMUS系统是世界上唯一正在运行的利用牛粪进行发电,并回收其养分生产肥料的综合利用系统,IMUS技术已经在阿尔伯塔省连续运营5年,属国际领先水平。

\r\n', '', '', '113.4.72.230'), +(24, 17, '

\r\n 麦田里的守望者(The Catcher in the Rye)简介:

\r\n

\r\n The Catcher in the Rye is a 1951 novel by J. D. Salinger. Originally published for adults, it has been translated into almost all of the world's major languages. Around 250,000 copies are sold each year, with total sales of more than sixty-five million. The novel's protagonist and antihero, Holden Caulfield, has become an icon for teenage rebellion.
\r\n The novel was among the 100 best English-language novels from 1951 to 2005 as chosen by Time, and named by Modern Library and its readers as one of the 100 best English-language novels of the 20th century. It has been frequently challenged in the United States for its liberal use of profanity and portrayal of sexuality and teenage angst. It also deals with complex issues of identity, belonging, connection and alienation.

\r\n

\r\n   本书的主人公霍尔顿是个中学生,出身于富裕的中产阶级家庭。他虽只有16岁,但比常人高出一头,整日穿着风雨衣,戴着鸭舌帽,游游荡荡,不愿读书。他对学校里的一切——老师、同学、功课、球赛等等,全都腻烦透了,曾是学校击剑队队长,3次被学校开除。又一个学期结束了,他又因5门功课中4门不及格被校方开除。他丝毫不感到难受。在和同房间的同学打了一架后,他深夜离开学校,回到纽约城,但他不敢贸然回家。当天深夜住进了一家小旅馆。他在旅馆里看到的都是些不三不四的人,有穿戴女装的男人,有相互喷水、喷酒的男女,他们寻欢作乐,忸怩作态,使霍尔顿感到恶心和惊讶。他无聊之极,便去夜总会厮混了一阵。回旅馆时,心里仍觉得十分烦闷,糊里糊涂答应电梯工毛里斯,让他叫来了一个妓女。妓女一到他又紧张害怕,最后按讲定的价格给了五块钱,把她打发走了。
\r\n   第二天是星期天,霍尔顿上街游荡,遇见两个修女,捐了10块钱。后来他的女友萨丽去看了场戏,又去溜冰。看到萨丽那假情假义的样子,霍尔顿很不痛快,两人吵了一场,分了手。接着霍尔顿独自去看了场电影,又到酒吧里和一个老同学一起喝酒,喝得酩酊大醉。他走进厕所,把头伸进盥洗盆里用冷水浸了一阵,才清醒过来。可是走出酒吧后,被冷风一吹,他的头发都结了冰。他想到自己也许会因此患肺炎死去,永远见不着妹妹菲芘了,决定冒险回家和她诀别。
\r\n   霍尔顿偷偷回到家里,幸好父母都出去玩了。他叫醒菲芘,向她诉说了自己的苦闷和理想。他对妹妹说,他将来要当一名“麦田里的守望者”:“有那么一群小孩子在一大块麦田里做游戏。几千几万个小孩子,附近没有一个人——没有一个大人,我是说——除了我。我呢,就在那混帐的悬崖边。我的职务是在那儿守望,要是有哪个孩子往悬崖边奔来,我就把他捉住——我是说孩子们都在狂奔,也不知道自己是在往哪儿跑。我得从什么地方出来,把他们捉住。我整天就干这样的事。我只想当个麦田里的守望者。”后来父母回来了,霍尔顿吓得躲进壁橱。等父母去卧室,他急忙溜出家门,到一个他尊敬的老师家中借宿。可是睡到半夜,他发觉这个老师有可能是个同性恋者,于是只好偷偷逃出来,到车站候车室过夜。
\r\n   霍尔顿不想再回家,也不想再念书了,决定去西部谋生,做一个又聋又哑的人,但他想在临走前再见妹妹一面,于是托人给她带去一张便条,约她到博物馆的艺术馆门边见面。过了约定时间好一阵,菲芘终于来了,可是拖着一只装满自己衣服的大箱子,她一定要跟哥哥一起去西部。最后,因对妹妹劝说无效,霍尔顿只好放弃西部之行,带她去动物园和公园玩了一阵,然后一起回家。回家后不久,霍尔顿就生了一场大病。整部小说是以回忆的方式写的

\r\n
\r\n
\r\n', '', '', '1.189.181.133'), +(25, 17, '

\r\n 老人与海(The Old Man and the Sea)简介:

\r\n

\r\n   这本书讲了古巴的一个名叫圣地亚哥的老渔夫,独自一个人出海打鱼,在一无所获的84天之后钓到了一条无比巨大的马林鱼。这是老人从来没见过也没听说过的比他的船还长两英尺的一条大鱼。鱼的劲非常大,拖着小船漂流了整整两天两夜,老人在这两天两夜中经历了从未经受的艰难考验,终于把大鱼刺死,拴在船头。然而这时却遇上了鲨鱼,老人与鲨鱼进行了殊死搏斗,结果大马林鱼被鲨鱼吃光了,老人最后拖回家的只剩下一副光秃秃的鱼骨架和一身的伤。最后却得到了人们的赞赏。

\r\n
\r\n
\r\n

\r\n The Old Man and the Sea recounts an epic battle between an old, experienced fisherman and a giant marlin said to be the largest catch of his life. It opens by explaining that the fisherman, who is named Santiago, has gone 84 days without catching any fish at all (although a comment made at some point in the book reveals that he had previously gone 87 days without catching one). He is apparently so unlucky that his young apprentice, Manolin, has been forbidden by his parents to sail with the old man and been ordered to fish with more successful fishermen. Still dedicated to the old man, however, the boy visits Santiago's shack each night, hauling back his fishing gear, feeding him and discussing American baseball — most notably Santiago's idol, Joe DiMaggio. Santiago tells Manolin that on the next day, he will venture far out into the Gulf to fish, confident that his unlucky streak is near its end.
\r\n
\r\n Thus on the eighty-fifth day, Santiago sets out alone, taking his skiff far into the Gulf. He sets his lines and, by noon of the first day, a big fish that he is sure is a marlin takes his bait. Unable to pull in the great marlin, Santiago instead finds the fish pulling his skiff. Two days and two nights pass in this manner, during which the old man bears the tension of the line with his body. Though he is wounded by the struggle and in pain, Santiago expresses a compassionate appreciation for his adversary, often referring to him as a brother. He also determines that because of the fish's great dignity, no one will be worthy of eating the marlin.
\r\n
\r\n On the third day of the ordeal, the fish begins to circle the skiff, indicating his tiredness to the old man. Santiago, now completely worn out and almost in delirium, uses all the strength he has left in him to pull the fish onto its side and stab the marlin with a harpoon, thereby ending the long battle between the old man and the tenacious fish.
\r\n
\r\n Santiago straps the marlin to his skiff and heads home, thinking about the high price the fish will bring him at the market and how many people he will feed.
\r\n
\r\n While Santiago continues his journey back to the shore, sharks are attracted to the trail of blood left by the marlin in the water. The first, a great mako shark, Santiago kills with his harpoon, losing that weapon in the process. He makes a new harpoon by strapping his knife to the end of an oar to help ward off the next line of sharks; in total, five sharks are slain and many others are driven away. But by night, the sharks have almost devoured the marlin's entire carcass, leaving a skeleton consisting mostly of its backbone, its tail and its head, the latter still bearing the giant spear. The old man castigates himself for sacrificing the marlin. Finally reaching the shore before dawn on the next day, he struggles on the way to his shack, carrying the heavy mast on his shoulder. Once home, he slumps onto his bed and enters a very deep sleep.
\r\n
\r\n A group of fishermen gather the next day around the boat where the fish's skeleton is still attached. One of the fishermen measures it to be eighteen feet from nose to tail. Tourists at the nearby café mistakenly take it for a shark. Manolin, worried during the old man's endeavor, cries upon finding him safe asleep. The boy brings him newspapers and coffee. When the old man wakes, they promise to fish together once again. Upon his return to sleep, Santiago dreams of lions on the African beach.

\r\n
\r\n
\r\n', '', '', '218.9.171.14'), +(26, 17, '
\r\n
\r\n 傲慢与偏见(Pride and Prejudice)简介:
\r\n
\r\n Few have failed to be charmed by the witty and independent spirit of Elizabeth Bennet. Her early determination to dislike Mr. Darcy is a prejudice only matched by the folly of his arrogant pride. Their first impressions give way to true feelings in a comedy profoundly concerned with happiness and how it might be achieved.
\r\n
\r\n', '', '', '113.4.87.19'), +(27, 17, '

\r\n 谁动了我的奶酪(Who Moved My Cheese)简介:

\r\n

\r\n Change can be a blessing or a curse, depending on your perspective. The message of Who Moved My Cheese? is that all can come to see it as a blessing, if they understand the nature of cheese and the role it plays in their lives. Who Moved My Cheese? is a parable that takes place in a maze. Four beings live in that maze: Sniff and Scurry are mice--nonanalytical and nonjudgmental, they just want cheese and are willing to do whatever it takes to get it. Hem and Haw are "littlepeople," mouse-size humans who have an entirely different relationship with cheese. It's not just sustenance to them; it's their self-image. Their lives and belief systems are built around the cheese they've found. Most of us reading the story will see the cheese as something related to our livelihoods--our jobs, our career paths, the industries we work in--although it can stand for anything, from health to relationships. The point of the story is that we have to be alert to changes in the cheese, and be prepared to go running off in search of new sources of cheese when the cheese we have runs out.
\r\n Dr. Johnson, coauthor of The One Minute Manager and many other books, presents this parable to business, church groups, schools, military organizations--anyplace where you find people who may fear or resist change. And although more analytical and skeptical readers may find the tale a little too simplistic, its beauty is that it sums up all natural history in just 94 pages: Things change. They always have changed and always will change. And while there's no single way to deal with change, the consequence of pretending change won't happen is always the same: The cheese runs out. --Lou Schuler

\r\n
\r\n
\r\n', '', '', '113.4.87.19'), +(28, 14, '

\r\n \"\"
\r\n  

\r\n

\r\n 罗向东,1989年毕业于国防科技大学应用物理系,黑龙江省能源环境研究院(孵化中心)工程实验室主任,研究员。
\r\n  

\r\n

\r\n 具有本专业广博、坚实的基础理论知识,并有深入的研究和独到的见解,熟悉相关专业的基础理论和专业知识。熟悉掌握本专业及相关专业国内外发展现状和趋。熟练掌握本专业相关的技术标准、规范。熟悉国家和地方有关的法律法规、技术政策和技术法规。能根据国家或本地区经济建设需要和学科发展提出本专业的研究方向,具备有选定具有重要学术意义或开创性研究课题的能力,能够带领团队开拓新的研究领域。具有丰富的从事科学研究的实践经验,并能够完成规定的研究任务,在主持省(部)级项目的研究过程中,能够创造性地解决重大、关键性的技术问题,能够在研究团队中起到学术带头人的作用,主持的省攻关项目经鉴定取得了国内领先水平。具有指导本专业技术人员开展业务工作的能力,培养初中级技术人员3名。具有丰富的研究、开发、科技管理工作经验。参加工作以来共组织申报国家、省市及科学院各类项目30余项,获得科研及产业化项目经费1000多万元。
\r\n  

\r\n

\r\n 主持及能与科研项目10项(其中:省攻关项目2项,市攻关项目1项,省中小企业创新基金项目1项,院基金项目6项);获黑龙江省科技进步三等奖1项;省科学院科技进步奖4项;授权专利6项;在有CN和ISSN统一刊号且公开出版发行的科技类期刊发表专业论文10篇(其中第一名6篇)。
\r\n  

\r\n', '', '', '113.4.83.225'), +(29, 14, '

\r\n \"\"
\r\n  

\r\n

\r\n 王志成,1973年出生,学士,研究员级高级工程师,能源化学省级领军人才梯队后备带头人,省级燃油燃煤清洁能源重点实验室成员,省能源环境研究院科研与产业化办公室主任,环境科学与节能技术研究室主任。兼任:省化学学会理事。
\r\n  

\r\n

\r\n 从事新型醇醚燃料催化剂和乳化燃料催化剂及合成工艺研究,以及生物质能源研究工作。主持和在研项目20项,其中包括国家攻关计划项目3项,省自然科学基金项目1项,国家政府间国际合作项目1项,省攻关计划项目6项。获省科技进步一等奖1项,省科技发明一等奖2项,三等奖1项,国家石化协会科技二等奖1项,发表学术论文11篇。

\r\n', '', '', '113.4.83.225'), +(30, 27, '

\r\n         我院经过6年的努力攻关,采用低档褐煤做原料,通过采用催化低温热裂解国家发明专利技术,成功地从褐煤中催化提炼出20.4%轻质燃料油、9.2%石油干气及70.4%焦炭。轻质燃料油经过简单处理可替代柴油,石油干气可替代天然气,焦炭是市场紧缺的原料。由于我国低档褐煤储藏量巨大,价格每吨在200元以内,所以经过催化低温热裂解后产生的轻质燃料油、石油干气、焦炭可获得巨大的经济效益。
\r\n
\r\n  

\r\n

\r\n \"\"

\r\n', '', '', '113.4.72.230'), +(31, 10, '

\r\n         2012年5月,在院领导班子高度重视及各部门的大力配合下,能源院省级重点实验室-燃油燃煤清洁能源重点实验室参加了黑龙江省科技厅展开的省级各类科技平台评估认定工作,经自评申报、省科技厅综合评审,我院重点实验室被继续保留省级科技平台资格。
\r\n   我院燃油燃煤清洁能源重点实验室为黑龙江省重点实验室,2007年经黑龙江省科技厅批准成立。自成立以来,重点实验室科技人员先后承担并完成国际科技合作重点项目、科技攻关项目、省自然科学基金等项目14项。获国家发明专利10项,省科技发明一等奖一项,发表论文45篇,实现经济效益和社会效益累计达1000余万元,在清洁能源、替代能源、污染物减排等领域形成了自己的特色和优势。
\r\n   能源院将以此次评估认定为契机,做好重点实验室承担的各级课题,为提高我省清洁能源、可再生能源、替代能源等领域的技术水平及解决相关技术问题做出应有的贡献。

\r\n', '', '', '113.4.72.230'), +(32, 27, '

\r\n         由黑龙江省能源环境研究院承担的国家振兴东北老工业基地科技专项——奥里油或超重质沥青蒸馏轻质燃料油技术研究及产业化项目,2007年12月18日,圆满通过国家验收。
\r\n         该技术不采用传统石油炼制装置,在奥里油或超重质沥青中加入3%~5%的液体催化剂,在非高压、不加氢气的条件下,从室温加热到450℃左右,时间3小时,蒸馏出轻质燃料油,这是石油炼制工艺的一次突破,该技术达到国际领先水平。
\r\n   该项目获得两项国家发明专利:
\r\n   《一种生产轻质燃料油的催化剂和方法》,专利号:ZL 2005 1 0002080.5。
\r\n   《一种以含油岩石为原料生产轻质燃料油的催化剂和方法》,专利号:ZL 2005 1 0126073.6。

\r\n', '', '', '113.4.72.230'), +(33, 27, '

\r\n         由黑龙江省能源环境研究院承担的国家“十五”科技攻关计划 ——工业锅炉脱硫试验与性能考核项目,2007年1月,圆满通过国家验收。
\r\n         该技术已在山西省工业锅炉上应用,脱硫率高达95%。经法定环境监测中心站检测:脱硫前锅炉烟气SO2排放浓度高达2423mg/m3。采用脱硫技术后SO2排放浓度150mg/m3,远远优于国家标准SO2排放浓度额900mg/m3。
\r\n         该项目研究成果《燃煤、燃油锅炉烟气的脱硫脱氮催化剂及其脱硫脱氮方法》已申报国家发明专利,并通过实审。

\r\n', '', '', '113.4.72.230'), +(34, 27, '

\r\n         黑龙江省能源环境研究院历时两年,圆满完成国家政府间国际科技合作项目——中加沙油炼制技术合作研究。我院科技人员研发了加拿大沙油在非高压不加氢气的条件下,蒸馏出轻质燃料油直接替代0号柴油应用的创新技术。
\r\n         验收专家组对项目进行了严格的评审,最后提出结论意见:该技术成果的关键是研制出的蒸馏催化剂,它是沙油炼制技术的一次创新,它解决了加拿大沙油无法直接蒸馏轻质燃料油的难题。该技术填补了国内外的空白,达到国际领先水平。
\r\n         专家建议:将该成果拓展到东南亚含油岩石、委内瑞拉奥里油和国内含油岩石的应用开发上。

\r\n  

\r\n

\r\n \"\"

\r\n', '', '', '113.4.72.230'), +(35, 15, '

\r\n 棕榈毛油直接法转换生物柴油及催化燃烧技术,是黑龙江省能源环境研究院自主研发并完全拥有该技术知识产权的创新技术。生物柴油是被当前世界公认的石化柴油的友好替代燃料,是新型环保的可再生能源。
\r\n   黑龙江省能源环境研究院面对世界石油能源紧张的形势,积极探索可再生的生物柴油技术。经过多年的研究与试验,建立油品改性和催化燃烧技术理论,研发出一套切实可行的工艺路线和生产方法,提出棕榈毛油直接合成生物柴油和催化燃烧理论。该技术关键在于高效降粘组分、抗腐蚀组分、能量增强组分和独特的脱酸及催化燃烧组分等,它是直接法将棕榈毛油改性成生物柴油的关键助剂。
\r\n   B50棕榈毛油直接法转换生物柴油是由棕榈毛油、催化剂及柴油直接调合而成,比例为棕榈毛油 50 %,催化剂 5 %,柴油 45 %,它是完全可以替代柴油的新型环保燃料油。

\r\n  

\r\n

\r\n B50棕榈毛油生物质柴油的技术指标

\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n 序号 \r\n 检验项目 \r\n 检验方法 \r\n 检验结果
\r\n 1\r\n  密度( 30 ℃ ) ,g/cm 3\r\n GB/T1884\r\n 0.86
\r\n 2\r\n  密度( 40 ℃ ) ,g/cm 3\r\n GB/T1884\r\n 0.825
\r\n 3\r\n  硫含量,%( m/m )\r\n GB/T 380\r\n 0.05
\r\n 4\r\n  酸度, mgKOH/100mL\r\n GB/T 258\r\n 7.55
\r\n 5\r\n  灰分,%( m/m )\r\n GB/T 508\r\n 0.01
\r\n 6\r\n  铜片腐蚀( 50 ℃ , 3 h ) , 级\r\n GB/T 5096\r\n 1
\r\n 7\r\n  水分,%( V/V )\r\n GB/T 260\r\n 痕迹
\r\n 8\r\n  机械杂质\r\n GB/T 511\r\n 无
\r\n 9\r\n  运动粘度( 30 ℃ ) ,mm 2 /s\r\n GB/T 6536\r\n 12.2
\r\n 10\r\n  运动粘度( 40 ℃ ) ,mm 2 /s\r\n GB/T 6536\r\n 6.94
\r\n 11\r\n  凝点, ℃\r\n GB/T 570\r\n 12
\r\n 12\r\n  闪点(闭口), ℃\r\n GB/T 261\r\n 56
\r\n 13\r\n  十六烷值\r\n GB/T 386\r\n 49.0
\r\n 14\r\n  残炭,%( m/m )\r\n SH/T0170\r\n 0.3
\r\n
\r\n  
\r\n

\r\n   B40棕榈毛油直接法转换生物柴油是由棕榈毛油、催化剂及柴油直接调合而成,比例为棕榈毛油 40 %,催化剂 4 %,柴油 56 %,它是完全可以替代柴油的新型环保燃料油。
\r\n  

\r\n

\r\n B40棕榈毛油生物质柴油的技术指标
\r\n  

\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n

\r\n 序号

\r\n
\r\n

\r\n 检验项目

\r\n
\r\n

\r\n 检验方法

\r\n
\r\n

\r\n 检验结果

\r\n
\r\n

\r\n 1

\r\n
\r\n

\r\n  密度( 20 ℃ ) ,g/cm 3

\r\n
\r\n

\r\n GB/T1884

\r\n
\r\n

\r\n 0.856

\r\n
\r\n

\r\n 2

\r\n
\r\n

\r\n  硫含量,%( m/m )

\r\n
\r\n

\r\n GB/T 380

\r\n
\r\n

\r\n 0.05

\r\n
\r\n

\r\n 3

\r\n
\r\n

\r\n  酸度, mgKOH/100mL

\r\n
\r\n

\r\n GB/T 258

\r\n
\r\n

\r\n 7.10

\r\n
\r\n

\r\n 4

\r\n
\r\n

\r\n  灰分,%( m/m )

\r\n
\r\n

\r\n GB/T 508

\r\n
\r\n

\r\n 0.01

\r\n
\r\n

\r\n 5

\r\n
\r\n

\r\n  铜片腐蚀( 50 ℃ , 3 h ) , 级

\r\n
\r\n

\r\n GB/T 5096

\r\n
\r\n

\r\n 1

\r\n
\r\n

\r\n 6

\r\n
\r\n

\r\n  水分,%( V/V )

\r\n
\r\n

\r\n GB/T 260

\r\n
\r\n

\r\n 痕迹

\r\n
\r\n

\r\n 7

\r\n
\r\n

\r\n  机械杂质

\r\n
\r\n

\r\n GB/T 511

\r\n
\r\n

\r\n 无

\r\n
\r\n

\r\n 8

\r\n
\r\n

\r\n  运动粘度( 20 ℃ ) ,mm 2 /s

\r\n
\r\n

\r\n GB/T 6536

\r\n
\r\n

\r\n 10.00

\r\n
\r\n

\r\n 9

\r\n
\r\n

\r\n  凝点, ℃

\r\n
\r\n

\r\n GB/T 570

\r\n
\r\n

\r\n 3

\r\n
\r\n

\r\n 10

\r\n
\r\n

\r\n  闪点(闭口), ℃

\r\n
\r\n

\r\n GB/T 261

\r\n
\r\n

\r\n 60

\r\n
\r\n

\r\n 11

\r\n
\r\n

\r\n  十六烷值

\r\n
\r\n

\r\n GB/T 386

\r\n
\r\n

\r\n 49.5

\r\n
\r\n

\r\n 12

\r\n
\r\n

\r\n  残炭,%( m/m )

\r\n
\r\n

\r\n SH/T0170

\r\n
\r\n

\r\n 0.3

\r\n
\r\n

\r\n  

\r\n

\r\n   B30棕榈毛油直接法转换生物柴油是由棕榈毛油、催化剂及柴油直接调合而成,比例为棕榈毛油 30 %,催化剂 3 %,柴油 67 %,它是完全可以替代柴油的新型环保燃料油。
\r\n  

\r\n

\r\n B30棕榈毛油生物质柴油的技术指标

\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n

\r\n 序号

\r\n
\r\n

\r\n 检验项目

\r\n
\r\n

\r\n 检验方法

\r\n
\r\n

\r\n 检验结果

\r\n
\r\n

\r\n 1

\r\n
\r\n

\r\n  密度( 20 ℃ ) ,g/cm 3

\r\n
\r\n

\r\n GB/T1884

\r\n
\r\n

\r\n 0.850

\r\n
\r\n

\r\n 2

\r\n
\r\n

\r\n  硫含量,%( m/m )

\r\n
\r\n

\r\n GB/T 380

\r\n
\r\n

\r\n 0.05

\r\n
\r\n

\r\n 3

\r\n
\r\n

\r\n  酸度, mgKOH/100mL

\r\n
\r\n

\r\n GB/T 258

\r\n
\r\n

\r\n 7.00

\r\n
\r\n

\r\n 4

\r\n
\r\n

\r\n  灰分,%( m/m )

\r\n
\r\n

\r\n GB/T 508

\r\n
\r\n

\r\n 0.01

\r\n
\r\n

\r\n 5

\r\n
\r\n

\r\n  铜片腐蚀( 50 ℃ , 3 h ) , 级

\r\n
\r\n

\r\n GB/T 5096

\r\n
\r\n

\r\n 1

\r\n
\r\n

\r\n 6

\r\n
\r\n

\r\n  水分,%( V/V )

\r\n
\r\n

\r\n GB/T 260

\r\n
\r\n

\r\n 痕迹

\r\n
\r\n

\r\n 7

\r\n
\r\n

\r\n  机械杂质

\r\n
\r\n

\r\n GB/T 511

\r\n
\r\n

\r\n 无

\r\n
\r\n

\r\n 8

\r\n
\r\n

\r\n  运动粘度( 20 ℃ ) ,mm 2 /s

\r\n
\r\n

\r\n GB/T 6536

\r\n
\r\n

\r\n 6.80

\r\n
\r\n

\r\n 9

\r\n
\r\n

\r\n  凝点, ℃

\r\n
\r\n

\r\n GB/T 570

\r\n
\r\n

\r\n 2

\r\n
\r\n

\r\n 10

\r\n
\r\n

\r\n  闪点(闭口), ℃

\r\n
\r\n

\r\n GB/T 261

\r\n
\r\n

\r\n 62

\r\n
\r\n

\r\n 11

\r\n
\r\n

\r\n  十六烷值

\r\n
\r\n

\r\n GB/T 386

\r\n
\r\n

\r\n 49.8

\r\n
\r\n

\r\n 12

\r\n
\r\n

\r\n  残炭,%( m/m )

\r\n
\r\n

\r\n SH/T0170

\r\n
\r\n

\r\n 0.3

\r\n
\r\n

\r\n  

\r\n

\r\n  \"\"

\r\n

\r\n
\r\n   棕榈毛油直接法转换生物柴油已完成柴油机台架长期可靠性考核,完全可以替代柴油应用。
\r\n   应用B50生物柴油时,发动机未做任何改动,冷车启动一次成功,连续运行期间无停火、爆燃现象。发动机怠速、中速、高速时运行平稳,所带发电机满负荷运行正常。高压油泵柱塞付不会咬死,喷油嘴不会阻塞,运行安全可靠。
\r\n   发动机燃用棕榈生物柴油燃烧完全,长期应用后拆机检查,活塞顶部、燃烧室、进气门、排气门室的积炭接近于零,远远小于燃用柴油的积炭,发动机在大负荷和急加速状态下,排气管不冒黑烟。
\r\n   能源消耗方面,燃用棕榈毛油生物柴油由于采用催化燃烧技术,比燃用石化柴油在同等条件下节油 4 %。
\r\n   其综合性能优于柴油,完全可以在高、中、低速,大、中、小型柴油机上替代柴油应用。
\r\n   下面是长期应用后拆机情况:

\r\n  

\r\n

\r\n \"\"
\r\n \"\"

\r\n  

\r\n

\r\n
\r\n 经济效益
\r\n   采用直接法将棕榈毛油转换成生物柴油,生产中不像酯化法需使用大量醇类及酸液,不用纯碱做中和,不产生大量废甘油及废水,工艺简单,运行成本低。与柴油批发价相比每吨低数百元,经济效益显著。         

\r\n   生物柴油在销售渠道中享受国家相关的政策补贴,相当于企业又获得一定的利润,并可以为国家节省大量的柴油,社会效益和经济效益巨大。

\r\n', '', '', '113.9.10.161'), +(36, 27, '

\r\n         我院承担的国家“九五”重点科技攻关计划——化学脱硫技术工业试验及性能考核[课题任务书编号(96- A19-02-05)], 在邹家华副委员长和国家环保总局解振华局长的关怀和支持下,完成了在发电厂的工业试验及性能考核。

\r\n

\r\n         国家环保监测部门在发电厂对应用化学脱硫技术试验进行监测,监测结果脱硫效果显著 。 该项目以满分的成绩通过了国家科技部组织的专家验收。并获得黑龙江省科技进步三等奖。
\r\n  

\r\n

\r\n \"\"
\r\n 邹家华副委员长批示
\r\n
\r\n \"\"
\r\n 国家电力公司呈给邹家华副委员长的函
\r\n
\r\n \"\"
\r\n 黑龙江省科技进步三等奖证书

\r\n', '', '', '113.4.72.230'), +(37, 27, '

\r\n \"\"

\r\n

\r\n 注:黑龙江省能源环境研究院原名为黑龙江省节油技术开发中心
\r\n  

\r\n

\r\n         我院与清华、中科院工程热物理所、国家电力公司西安热工院、国家电站工程技术研究中心、中国洁净煤中心等国家级科研院所共同承担国家“十五”重点科技攻关计划——清洁能源项目,其中我研究院承担了化学脱硫工业性示范及设备产业化课题。

\r\n

\r\n
\r\n \"\"

\r\n

\r\n 应用管式电炉进行脱硫试验

\r\n

\r\n \"\"

\r\n

\r\n 科技人员应用碘量法测试 SO2

\r\n

\r\n         加入脱硫剂的煤燃烧后,烟气中SO2排放浓度达到国家最新标准Ⅱ时段要求。在 CRF 电站燃烧检测装置上对不同含硫量原煤(含硫量为:0.5%、1.0%、1.5%、2.0%)进行脱硫考核。我研究院圆满地通过了考核,并通过科技部组织的专家验收。

\r\n

\r\n \"\"

\r\n

\r\n CRF 电站燃烧检测装置

\r\n

\r\n \"\"

\r\n

\r\n 国家验收意见

\r\n', '', '', '113.4.72.230'), +(38, 27, '

\r\n         《工业锅炉脱硫试验与性能考核》是国家“十五”期间化学脱硫课题的深化研究,脱硫效率进一步提高。燃煤锅炉烟气中污染物排放达到国家《锅炉大气污染物排放标准》要求,烟气中SO2排放浓度小于等于900mg/m3。
\r\n         工业锅炉脱硫技术采用新型的催化脱硫方法,将烟气通过脱硫净化装置中的催化脱硫剂,在催化脱硫剂的作用下,使烟气中绝大部分的SO2固化形成硫酸盐等固体沉积在净化装置的底部,烟气排放达到国家标准。
\r\n         该技术工艺简单,投资少,效率高,达到国际先进水平。

\r\n  

\r\n

\r\n \"\"

\r\n

\r\n 工业锅炉脱硫工艺路线图
\r\n  

\r\n

\r\n         该技术已在太原煤气化(集团)有限公司成功地进行了工业性示范,太原市环境监测中心站对工业性示范进行了监测,其结果是:
\r\n          烟气未经脱硫前SO2排放浓度为2423mg/m3,
\r\n          烟气经过脱硫后SO2排放浓度为150mg/m3。
\r\n          脱硫率达到94%。

\r\n  

\r\n

\r\n \"\"

\r\n

\r\n  

\r\n', '', '', '113.4.72.230'); +INSERT INTO `dede_addonarticles` (`aid`, `typeid`, `body`, `redirecturl`, `templet`, `userip`) VALUES +(39, 27, '

\r\n         奥里油或超重质沥青是应用常规技术提炼出汽、煤、柴油等石化产品后的终极产品,目前,国内外都是采用高温、高压、加氢气方法从奥里油或超重质沥青中加工轻质燃料油。我院研制的在奥里油或超重质沥青中加入3%~5%的液体催化剂,能在非高压、不加氢气的条件下从室温加热到450℃,蒸馏出轻质燃料油来替代0号柴油技术。是一次高科技的研发过程,是石油炼制技术的一次重大突破。

\r\n

\r\n \"\"
\r\n  

\r\n

\r\n 轻质燃料油蒸馏工艺
\r\n \"\"\"\"\"\"

\r\n

\r\n       奥里油               催化剂                  轻质燃料油

\r\n

\r\n         此技术能使轻质燃料油出油率提高 30%,蒸馏后的固体残渣可以替代煤炭应用。这是真正意义的原油“吃干榨净”。此技术的产业化将是能源领域的一次创新,会获得巨大的经济效益。目前,该技术国家已正式立项,为国家“振兴老工业基地” 首批科技专项中的唯一能源项目(2004BA907A32)。

\r\n

\r\n \"\"

\r\n', '', '', '113.4.72.230'), +(40, 13, '
\r\n \"\"
\r\n', '', '', '113.9.14.181'), +(41, 27, '
\r\n \"\"
\r\n', '', '', '113.9.14.181'), +(42, 27, '
\r\n \"\"
\r\n', '', '', '113.9.14.181'), +(43, 27, '\"\"', '', '', '113.9.14.181'), +(44, 13, '
\r\n \"\"
\r\n', '', '', '113.9.14.181'), +(45, 13, '
\r\n \"\"
\r\n', '', '', '113.9.14.181'), +(46, 13, '
\r\n \"\"
\r\n', '', '', '113.9.14.181'), +(47, 9, '    能源环境研究院(孵化中心)新版网站现已重新上线啦!敬请关注!', '', '', '113.4.83.74'), +(50, 9, '        题目:Triz理论
\r\n
\r\n        时间:8月16日下午1:00
\r\n
\r\n        地点:孵化中心8楼会议室
\r\n
\r\n        主讲:王志成
\r\n
\r\n        欢迎各位同事积极参加!
', '', '', '113.4.72.230'), +(51, 10, '
\r\n \"\"
\r\n
\r\n  
\r\n        8月16日,我院在8楼会议室举办了TRIZ科技创新讲座,由环境科学研究室主任王志成同志进行宣讲。此次讲座是根据我院2013年的工作指示精神而安排,旨在加强和提升院科研人员的创新能力和科研能力。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n \"\"

\r\n  
\r\n        王志成系统介绍了TRIZ理论的历史起源,从技术系统的进化规律讲起,用生动例子介绍了技术矛盾与创新原理、物理矛盾与分离原理和无偿模型与标准解法。本次讲座受到了广大职工的认可,大家普遍反映,通过此次培训对TRIZ创新理论有了更深入的了解,对培养创新思维意义较大,不仅增长见识,开拓创新思路,提高创新能力,还可以将TRIZ原理应用于解决科研中遇到的实际问题,受益匪浅。', '', '', '113.4.72.230'), +(52, 9, '
\r\n        
\r\n         培训主题:“高效检索与文献分析——万方数据知识服务平台使用详解”
\r\n         培训讲师:万方数据 周雷
\r\n         培训时间:2013年8月23日  13:30---16:30
\r\n         培训地点:嵩山路15号 省科学院会议中心
\r\n', '', '', '113.4.72.34'), +(53, 16, '
\r\n --省科学院群众路线教育实践活动调研组到我院调研
\r\n  
\r\n 
\r\n    8月15日下午,省科学院群众路线教育实践活动调研组,来到省能源环境研究院(孵化中心)召开听取群众意见调研会议。省能源环境研究院(孵化中心)一、二线代表,工勤人员代表及部分党外人士出席会议,省科学院院长潘忠出席会议并发言。
\r\n    潘忠在讲话中指出,深入开展党的群众路线教育实践活动是党中央做出的重大战略部署。我院按照中央统一部署,正扎实开展教育实践活动,要充分调动基层党员干部的积极性,在教育实践活动中真正做到依靠广大党员群众,确保活动取得实效。他强调,此次会议是在基层代表中开一个集思广益的调研会,希望大家消除顾虑、畅所欲言,说多说少都行,说深说浅都行,说错说对都行,为开展好群众路线教育实践活动把把脉、支支招。
\r\n    会上,参会各位代表,本着“知无不言、言无不尽”的态度纷纷各抒己见,紧扣会议要求,聚焦院所建设,紧密联系工作中的实际,开门见山的找问题,潘院长针对每一个问题都进行了认真的记录,并做出了详实、客观的解答,他指出这些发言饱含真知灼见,是直言诤言,也是良计良策,既体现了大家对群众路线教育实践活动的积极拥护,也体现了大家对广大党员干部的殷切期许。同时,更应该深刻地认识到,群众利益无小事,必须坚持走群众路线,凡是涉及群众切身利益和实际困难的事情,再小也要竭尽全力去抓好办好,切实践行为人民服务的宗旨。
\r\n    会后,我院群众路线教育实践活动领导小组组织了专题讨论,对下一步工作开展进行了研究部署和具体安排。
', '', '', '1.58.243.187'), +(54, 17, '请点击下载:\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \"\"\r\n 生物质能源发展趋势
\r\n', '', '', '221.212.168.228'), +(55, 17, '请点击下载: \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \"\"\r\n 我国生物质能源的特点和发展方向
\r\n', '', '', '221.212.168.228'), +(56, 10, '
\r\n \"\"
\r\n  
\r\n
\r\n        2013年8月22日,应延寿县政协主席杨晓春的邀请,黑龙江省能源环境研究院院长徐晓秋、副院长关春玲同志以及科研办和财务办同志,一行五人来到延寿县交流访问。
\r\n        徐晓秋院长一行受到了延寿县政协主席杨晓春、延寿县副县长呼大鹏同志的热烈欢迎。在县政协会议室,徐院长首先介绍了研究院的概况,重点介绍了优势学科的发展及重点科研成果,并就延寿县所需的技术需求及下一步的合作构想与延寿县领导交换了意见。杨晓春主席对此表示赞同,并表示愿意与黑龙江省能源环境研究院建立长期、紧密的合作关系。下一步将就有机废弃物处理等领域的项目申报展开合作。
', '', '', '221.212.168.228'), +(57, 10, '

\r\n         2013年9月18日下午,能源院举办了马来西亚培训学习经验交流会。我院青年科技人员张玥同志做了内容丰富的培训学习汇报,各科室青年科技人员参与了此次经验交流会。
\r\n         张玥同志在马来亚大学理学院化学系的胶体与表面实验室从事乳化柴油相关研究。经过四个月的学习,学到了乳化柴油相关的理论知识,制备出澄清透明、性质稳定的柴油微乳液,研究工作与现阶段工作很好的结合在一起,为今后工作起到指导性作用。
\r\n         张玥同志介绍了马来西亚的风土人情和所在大学的基本情况,在语言学习、实验室学习、日常生活等方面给与会人员做了详细讲述,总结了在国外学习和生活的体会和经验,使大家了解了马来亚大学的科研情况,开拓了大家的视野,也与青年科技人员们分享了国外生活学习的宝贵经验。青年科技人员们纷纷提出感兴趣的问题,会议气氛活跃。 

\r\n         最后,科研与产业化办公室主任王志成同志做了总结发言。希望全体科技人员借鉴宝贵经验,努力提高自身科研及英语水平,争取更多的出国学习机会,为我院更好更快发展贡献自己的力量。
\r\n  

\r\n

\r\n
\r\n  

\r\n

\r\n \"\"

\r\n

\r\n  

\r\n

\r\n \"\"

\r\n
\r\n  
\r\n', '', '', '113.4.72.200'), +(58, 10, '

\r\n         2013年10月11日上午,院产业处孙宇峰处长、范延新、曹海虹副处长来到我院双城产业基地检查院产业化基金项目《M15车用甲醇汽油复合添加剂》执行情况。我院科研与产业办主任王志成、副主任刘伟,以及项目组负责人张树华、刘岩陪同前往。
\r\n         孙宇峰处长仔细询问了产业项目的生产情况,科研与产业办和项目组详细介绍了生产流程、产量、效益等生产经营情况,现已全面、超额完成任务书的技术、经济考核指标,项目可以圆满结题;还介绍了下一步M25车用甲醇汽油复合添加剂、车用复合调节剂的生产开发情况。孙宇峰处长表示这是我院产业基金支持的较大项目,要及时、认真地对产业工作进行总结,以便给今后产业基金支持提供依据。
\r\n         科研与产业办和项目组表示有院领导和产业基金的支持,我院产业工作一定能更好更快发展。

\r\n
\r\n  

\r\n

\r\n \"\"
\r\n
\r\n \"\"

\r\n', '', '', '113.4.83.192'), +(59, 10, '

\r\n         10月23日,我院成功地召开科学院预研课题——利用页岩油制取油砂分离剂的研究、全馏分页岩油改质转化轻质运输燃料工艺的研究,院青年基金——膜生物反应器中改性复合膜的制备与性能研究,省财政基本科研业务费专项——车用汽油复合调节剂技术研究等四项课题鉴定会。会议由省科学院科研处王阳处长主持,鉴定专家为哈工程、黑大等高校知名能源专家。
\r\n         鉴定委员会听取了课题组的工作汇报,审查了相关技术资料,经认真质询、讨论,形成鉴定意见。专家组认为,这四项课题在选题上紧扣能源、环境的主线,研究内容较新颖,技术路线及工艺合理可行,均达到国内先进水平。专家还建议进一步完善数据,扩大研究领域,开展放大实验。
\r\n         王阳处长作总结性发言,对专家组的辛勤工作表示感谢,对课题组提出要求,要按各位专家提出的意见、建议进一步充实数据,修定研究方法,完善课题鉴定材料。
\r\n         最后,课题鉴定会在热烈的掌声中胜利闭幕。

\r\n
\r\n  

\r\n

\r\n \"\"
\r\n
\r\n \"\"

\r\n', '', '', '113.4.83.217'), +(60, 9, '院各部门:
\r\n    为深入推进党的群众路线教育实践活动,认真做好整改工作,使整改工作扎实、有序推进,现就有关要求通知如下:
\r\n     一、提高思想认识,增强工作紧迫性
\r\n    整改落实是确保党的群众路线教育实践活动见成效的一项重要工作,全院要提高思想认识、提高标准和要求,根据第一环节梳理归纳的意见和建议内容,集中解决问题。要切实增强整改工作的重要性和紧迫性,确保每一项整改内容落实到位。
\r\n    二、加强组织领导,落实整改责任
\r\n    院领导和各科室负责人要对照整改内容和整改要求认真抓好落实,对查找出来的问题即查即改,边查边改。对能够及时解决的问题,切实做到不等、不拖、不推。院领导班子要认真撰写整改材料,分析问题原因,剖析思想根源,明确努力方向,提出整改措施。
\r\n    三、加强督促检查,通报检查情况
\r\n    群众路线领导小组要对照整改内容逐项认真检查全院的整改落实情况,责任领导要及时了解整改和落实工作情况,活动办公室要督促办法推进,掌握进度,定期通报。
\r\n    四、制定整改时限,保障活动按期完成
\r\n    领导班子和各部门要明确整改内容、制定整改时限,突出整改重点,确保整改效果。
', '', '', '61.180.252.242'), +(61, 10, '
\r\n --省财政厅庄炳艳处长到能源院检查维修施工情况
\r\n 
\r\n    9月22日下午,省财政厅教科文处庄炳艳处长、曹铁峰,省科学院条财处沙长青处长、张云志副处长,一同到我院实验楼维修项目施工现场检查指导工作,省能源院徐晓秋院长、关春玲副院长及办公室人员陪同检查。庄处长要求施工方必须把安全作为工作的重中之重来抓,确保工程按时、保质完工。

\r\n       庄处长先后来到实验室、中试车间等施工现场,听取了工程负责人关于维修改造项目的实施方案、质量监督和总体进展等情况汇报,认真查看了维修改造项目的施工质量、工程进度和安全设施情况,仔细询问了一些维修改造的实施细节,并对维修改造方案的进一步完善提出了指导性意见。
\r\n    庄处长最后指出,做全体员工满意的放心工程是关乎党的群众路线教育实践活动落实到位的关键,项目负责部门要在工期紧、任务重和气温突降的困难条件下,做到精细化施工、科学化管理,确保维修改造项目按期保质完工,切实为能源院职工提供满意的工作环境。

\r\n', '', '', '1.58.243.187'), +(62, 10, '        为实践党的群众路线活动,2014年2月19日,黑龙江省能源环境研究院院长徐晓秋、省科学院外事处处长高德玉以及科研办和寒区生物质能源技术研究中心科研人员等5名同志,来到齐齐哈尔市甘南县黑龙江蓝天能源发展股份有限公司交流访问,为企业把脉,排忧解难。 \r\n
\r\n \"\"
\r\n        徐院长一行受到了黑龙江蓝天能源发展股份有限公司总经理宋兴国、副总于兴友的热烈欢迎。徐院长一行不顾旅途劳顿,直接参观了厂区,了解生产工艺及设备试运行情况。在会议室徐院长首先介绍了研究院的概况,并表示愿意通过院地合作,利用能源院的技术优势为企业保驾护航。徐院长对生产工艺中不合理部分,提出建设性意见。对企业提出的原料预处理难题,表示可以通过技术合作联合攻关解决。宋兴国总经理对省里专家光临表示欢迎,并希望今后能长期合作。
\r\n        下一步将就对原料预处理及工艺优化项目联合申报课题,展开合作研究。
', '', '', '113.9.10.33'), +(63, 10, '        2014年3月12日,黑龙江省科学院产业化处李骏处长一行到我院考察指导工作。李骏处长考察了我院改造后的综合实验楼和中试实验室,并认真听取了我院近期的工作成果以及未来的发展计划。
\r\n
\r\n
\r\n \"\"
\r\n  
\r\n        能源院徐晓秋院长主持了会议,徐晓秋院长首先对产业化处对我院产业化工作给予的支持表示感谢,随后徐院长介绍了我院近期产业主体工作的总体情况,会上双方就能源院现有产业化工作进行了深入探讨。目前我院已研制出符合国Ⅴ标准的汽油添加剂系列产品和柴油添加剂等,与此同时,我院计划利用现有的秸秆无害化处理技术、生物质能源技术和洁净煤生产技术等,在环保重灾领域充分介入,为龙江百姓做出更大的贡献。
\r\n
\r\n
\r\n \"\"
\r\n  
\r\n        李骏处长对我院近期的发展以及我院对环保领域做出的贡献给予了充分肯定和赞赏,同时鼓励我院进一步提升研究能力,不断发挥我院在龙江产业体系建设中的作用,为龙江环保领域提供更强有力的技术支撑。
\r\n
\r\n \"\"
\r\n', '', '', '111.161.79.26'), +(65, 10, '

\r\n         为进一步了解黑龙江省各地农作物秸秆资源化利用现状,2014年3月11日,黑龙江省科学院产业化处处长李骏,黑龙江省能源环境研究院院长徐晓秋,黑龙江省能源环境研究院总工程师高德玉研究员以及科研办和生物质能源实验室的负责人,一行5人赴望奎县和明水县进行实地考察。
\r\n
\r\n  

\r\n

\r\n \"\"

\r\n

\r\n
\r\n         考察期间,我方一行受到了望奎县、明水县科技局和当地企业的热烈欢迎,此行先后参观了国能望奎生物发电有限公司和常青集团明水长青环保能源有限公司,并与企业进行了项目对接。在洽谈过程中,产业化处处长李骏介绍了黑龙江省科学院的相关情况,院长徐晓秋介绍了能源环境研究院的研究领域,着重介绍了生物质能源实验室的科研成果与科研实力,随后,总工程师高德玉研究员了解了企业采用的工艺和经济效益等情况,并参观了企业的生产工厂。
\r\n         通过此次考察,我院对望奎县和青冈县的秸秆利用有了深入的了解,下一步将与两家企业针对秸秆资源化利用过程中的遇到的技术难题开展合作攻关。

\r\n', '', '', '111.161.79.26'), +(66, 10, '

\r\n        为学习借鉴先进技术,汲取科研经验,我院选派的首批科研骨干,于3月14日起程赴清华大学开展学习交流活动,省科学院王钢副院长、省能源院徐晓秋院长和关春玲副院长亲自到场送行。
\r\n
\r\n  

\r\n

\r\n \"\"

\r\n

\r\n
\r\n        王钢副院长要求此次赴清华学习的人员,要活跃思维,积极主动,认真学习对方的先进科研理念,并以此为指导,让一个点上的闪耀,带动一个面,受益一群人。最后祝此行人员在业务上和人生上都能有所收获。
\r\n        自去年9月我院与清华大学建立战略伙伴关系以来,双方在高效环保的新型能源领域开展了一系列合作,此次选派科研人员互访交流,将进一步拓宽我院科研人员视野,有利于提升我院的知名度和影响力,是深化院际合作的又一成功举措。

\r\n', '', '', '111.161.17.64'), +(67, 10, '

\r\n         根据2013年清华大学杨旭东教授来院指导工作期间双方达成的关于人才培养方面的协议,我院从现在开始选派科研人员赴清华大学学习,首批人员一行四人于3月14日启程。省科学院王钢副院长、能源院徐晓秋院长和关春玲副院长到场送行。
\r\n
\r\n  

\r\n

\r\n \"\"

\r\n

\r\n
\r\n         王钢院长嘱咐大家,此次清华之行,是各位人生中精彩的一笔,要珍惜此次的学习机会,明确学习目的,认真学习对方的科研理念和先进技术,汲取科研经验,用于指导今后的工作,最后祝大家此次学习圆满成功。
\r\n         此次赴清华大学的科研人员除学习外,还将参加清华大学科研项目的推广与实施工作,即北京市改善雾霾天气的一项举措--------北京市周边农村无烟村的建设工作,此项目的中试工作已经在我院完成。参加这项工作对该项目在我省的推广应用将起到重要作用。
\r\n         选派科研人员到清华大学学习,将进一步提高我院人员素质和水平,拓宽视野,真正做到资源分享、优势互补、科学定位、合作双赢,有利于提高我院的知名度和影响力,是 深化院校合作的新举措。

\r\n', '', '', '111.161.79.26'), +(68, 10, '

\r\n         3月27日上午,我院2014年创新团队建设工作会议在能源院会议室召开,各科研部门负责人出席会议。
\r\n
\r\n  

\r\n

\r\n \"\"

\r\n

\r\n
\r\n         徐晓秋院长主持会议并发言,在发言中,徐晓秋院长指出,要紧密围绕郭春景院长到我院查检创新团队时的讲话精神,把握好科研工作的切入点。徐院长分别从树立成熟的科研理念、完善选题机制、规范工作职能、努力寻求高质量合作等几个方面做出重要指示,为我院下一步的创新团队建设工作指明了方向。
\r\n         工作会议对我院创新团队的建设工作进行了全面部署,提出了明确的工作要求,确定了工作的步骤和方法,并解答了各科研部门关于团队建设方面的相关问题,此次会议的召开为我院下一步打造高品质科研创新团队打下了基础,做好了准备。

\r\n  

\r\n

\r\n  \"\"

\r\n', '', '', '113.4.72.117'), +(69, 17, '

\r\n         我国页岩油中约含有40%左右的轻柴油馏分,约含有45%左右的重柴油馏分,其十六烷值较高,经过精制后可作高速柴油机燃料。我国页岩重柴油馏分含有大量石蜡,也称为含蜡油,从中脱出的石蜡可作为商品出售。脱蜡油精制后可作为中速柴油机燃料,热裂化或加氢裂化的原料油。 页岩残油在室温下为黑色沥青状固体,直接作为燃料使用时,其凝固点过高。生产沥青时,沥青质量较差。但经过焦化能生产优质石油焦。因此,页岩残油一般作为焦化原料油。
\r\n 页岩油常温下为褐色膏状物,带有刺激性气味。抚顺页岩油中的轻馏分较少,汽油馏分一般仅为2.5%~2.7%;360℃以下馏分约占40%~50%;含蜡重油馏分约占25 %~30%;渣油约占20%~30%。页岩油中含有大量石蜡,凝固点较高,含沥青质较低,含氮量高,属于含氮较高石蜡基油。世界各地所产的页岩油由于组成和性质不同,在密度、含蜡量、凝固点、沥青质、元素组成方面有很大差别,但各地页岩油的碳氢重量比均在7~8左右,是最接近天然石油,最适于代替天然石油的液体燃料组成。
\r\n         组成页岩油的化合物主要有以下几类:烃类、含硫化合物、含氮化合物、含氧化合物。页岩油中丰富的烷烃和烯烃可生产相关的高附加值化学品。C6~10馏分被利用来生产增塑剂;C10~13馏分中通过生物降解线形十二烷基苯所得的产品作为清洁剂原材料;C14~18馏分作为脂肪醇和烷基硫化盐产品的原材料;重质烷烃馏分通过裂化以生产各种低分子质量的烯烃,也可以获得沥青和碳纤维。页岩油硫化物主要为硫化氢、硫醇类、噻吩类及硫茚等有机硫及二硫化物。硫的资源广而廉价,工业上、农业上、医药上、染织上和合成材料上的硫和硫化物的用途是非常多的。硫的用途主要是制酸(主要是硫酸)。页岩油中的含氮化合物可分为3类:碱性的、弱碱性的和中性的。碱性含氮化合物主要是叔胺类的吡啶系、喹啉系和异喹啉系化合物,弱碱性含氮化合物主要属于吡啶系化合物,中性含氮化合物则主要是腈类R-CN。而页岩油中存在的含氮化合物主要为吡啶系氮化物。吡啶碱是多用途的化工原料,它能溶解一般溶剂所难溶解的有机物,尤其是轻质吡啶,广泛用于制药工业。重质吡啶除了氧化制取菸碱酸外,又是有色金属矿的浮选剂,尤其对硫化物矿具有优良的富集性能。吡啶碱及硫酸吡啶络合物对稀酸侵蚀钢铁有一定的抑制作用,可用做钢铁腐蚀抑制剂。页岩油中的含氧化合物有:酸性含氧化合物和酚类,以及中性含氧化合物。而页岩油中含氧化合物的利用主要以酚类化合物为主。酚类化合物是塑料、染料、合成纤维、电气绝缘、防腐蚀和药品等的主要化学原料。其中重质酚类可以作为铜、铅、锌磁铁等矿物的浮选剂,也是制造木材粘合剂、农药杀虫剂等原料。影响页岩油柴油颜色及安定性的主要因素是其中含有大量的不饱和烃及氮、硫、氧等杂原子化合物,要解决页岩油柴油质量合格问题,关键在于如何脱除页岩油中的氮、硫、氧等杂原子化合物。天然石油的加工技术一般都适用于页岩油的加工。
\r\n         目前页岩油的加工方法主要分为加氢处理和非加氢处理2种。加氢处理页岩油可得到液体燃料,包括柴油、石脑油和汽油,生产的柴油稳定性好,产品收率高,没有“三废”排放,但一次性投资大,所需设备费用及操作费用也很高,适合于大型炼油厂;而非加氢处理过程设备投资小,工艺操作简单,费用较低,适合中小型炼油厂,非加氢处理一般包括酸碱精制、溶剂精制、吸附精制和加入稳定剂等。美国曾对绿河页岩油进行了大量加工方法的研究,主要采用加氢预处理法加以改质,以脱除砷、氮、硫等杂质,然后在炼厂按常规的炼油加工工艺加工成各种油品;巴西将页岩油经分馏分成轻馏分和重馏分,轻馏分经催化裂化生产汽油,重馏分作为燃料油;页岩油加氢技术仅有澳大利亚SPP公司达到工业试验阶段,通过加氢精制生产超低硫轻质燃料油。抚顺石油化工研究院(FRIPP)则于20世纪 50年代初就开展了页岩油加工流程的研究工作,并提出了一些不同的加工方案。由于60年代天然石油的发现及大量开采,页岩油生产逐渐萎缩,没再进行研究。不过FRIPP早期研究成果为今后页岩油加工研究提供了宝贵的经验,现将各项主要成果概述如下:
\r\n         1、热加工-加氢精制流程 
\r\n         页岩油全馏分焦化、热裂化的直馏混合轻油用纯MoS2加氢精制,获得了稳定的1号航煤,并提高了液体收率;页岩油全馏分焦化馏出油用W-Mo-NiAl系催化剂进行加氢精制,可以得到宽馏分航煤约34%(对加氢油),轻质汽车燃料68%(对全馏分)和页岩焦13.7%(对全馏分)。
\r\n         2、加氢精制-加氢裂化流程   
\r\n         1956~1958年对抚顺页岩油全馏分进行了加氢精制及加氢裂化小试试验。用MoS2 催化剂在26 MPa氢压下加氢精制,液体收率可达97%(未考虑制氢用原料),柴油收率为64.5%,生成油氮含量为0.05%,重油部分脱蜡后可以制取润滑油及石蜡;用 MoS2-W S2一段串联进行加氢裂化,轻质油产率可达78.5%,1号航煤可接近40%,生成油氮含量为0.01%。   
\r\n         3、加氢精制-催化裂化流程   
\r\n         1958年用抚顺页岩油全馏分高压固定床精制后含氮约0.08%的生成油,以低硅铝催化剂在试验室间歇固定床小型装置中进行了催化裂化试验,结果汽油收率约35%,柴油收率31%,液体产率74%。自2005年开始,FRIPP针对能源短缺的现实,又开展了以页岩油全馏分为原料,采用FRIPP开发的具有自主知识产权的加氢裂化催化剂加氢精制催化剂和加氢裂化-加氢处理反序串联(FHC-FHT)组合工艺技术,制取清洁燃料的研究。小试、中试结果表明,可生产满足欧V标准的清洁柴油及低硫、优质石脑油,且柴油收率高达81%,液体收率可达97%,化学氢耗为2.93%。
\r\n         酸碱精制是开发较早的精制技术,它包括酸洗、碱洗以及酸碱联合精制。酸洗一般采用浓硫酸、盐酸、磷酸等强酸,目的是脱除油中的胶质、含硫化合物,如硫醇类、硫酚类、硫醚、烷基二硫化物、噻吩和砜类,含氮化合物中的碱性氮可以全部洗去,部分非碱性氮化物、烯烃和芳烃也可以洗去;碱洗采用低浓度的碱液处理,目的是脱除油中的酸性物质,如硫醇、硫酚。   
\r\n         溶剂精制是利用某些溶剂对油品的理想组分和非理想组分的溶解度不同,有选择地从油品中脱除某些不安定组分,从而改善油品的安定性。选择合适的溶剂是溶剂精制的关键,应综合考虑溶剂的溶解能力和选择能力。 吸附精制是利用吸附剂对极性化合物较强的吸附作用,脱除油品中的氮化物以及含硫、含氧化合物,常用吸附剂有分子筛、硅胶、氧化铝、硅藻土和白土等。   
\r\n         添加稳定剂主要是为了防止芳烃、烯烃缩合和聚合成胶质沥青质,一般是由抗氧剂、分散剂、防腐剂、金属钝化剂等一种或几种添加剂组成的复合剂。其中,抗氧剂能够分解过氧化物,终止自由基生成,从而降低实际胶质,延长诱导期;分散剂能够迅速有效地分散沉渣颗粒,防止滤清器及喷油嘴堵塞;金属钝化剂使油品中溶解性金属离子活性降低,抑制其对油品氧化反应的催化作用,三者作用互补,共同起到改善页岩油柴油馏分稳定性的作用。 
\r\n         采用酸碱洗涤法来处理页岩油柴油馏分,结果表明,处理过程中产生的大量酸碱渣难以找到出路,因而未见其工业应用。 用极性复合溶剂和醇类复合溶剂联合精制法精制抚顺页岩油轻柴油,在很大程度上改善了精制油的安定性,精制柴油收率达到84%。石油大学重质油国家重点实验室用复合溶剂法精制抚顺页岩油粗柴油,在很大程度上改善了精制油的安定性,尤其是精制油的色度,而且精制柴油收率达到80%左右,溶剂回收率达到97%以上。

\r\n', '', '', '218.9.171.14'), +(70, 17, '

\r\n         煤焦油行业是一个比较传统的行业,尽管近30年来受到石油化工行业的激烈竞争,煤焦油行业仍然具有较大的发展潜力,尤其近几年来随着新材料和钢铁行业的发展,煤焦油资源的高效利用再度引起人们的重视。我国是焦炭生产大国,约占世界的36%左右。焦炭的生产产生大量的副产物——煤焦油,我国煤焦油年产量约为500—600万t,加工能力约为450万t,在建、扩建、拟建项目能力约为200万t。目前共有约50多家企业进行煤焦油加工,其中最为先进的是宝钢集团上世纪从日本引入的煤焦油加工装置,加工规模为26万t/a,产品品种有26种,其次是鞍钢、武钢和本钢。除此以外的其他大多数的煤焦油生产相对分散,且以土炼焦工艺为主,这样不仅浪费了大量的不可再生资源,也污染了环境。
\r\n         随着我国经济的不断发展和对环境保护要求的日益提高,煤焦油的深加工成为一个亟待解决的课题。从目前煤焦油行业的发展情况来看,国内的煤焦化行业正处在一次重要的整合变革时期,未来的煤焦油工业正向集中化、精细分离、深加工、新材料合成方向发展。
\r\n         一、我国煤焦油产量
\r\n         煤焦油是以芳香烃为主的有机混合物,含有1万多种化合物,可提取的约200种,目前,有利用价值且提取经济合理的约50种,其深加工所获得的轻油、酚、萘、洗油、蒽、咔唑、吲哚、沥青等系列产品是合成塑料、合成纤维、农药、染料、医药、涂料、助剂及精细化工产品的基础原料,也是冶金、合成、建设、纺织、造纸、交通等行业的基本原料,许多产品是石油化工中得不到的。因此,煤焦深油加工可促进这些行业的发展。
\r\n 现代的炼焦生产过程中,从煤气中回收和初级化工产品主要有煤焦油、氨(主要是硫铵)和粗苯3种。煤焦油的产量,是根据炼焦生产配煤的种类不同而变化,配煤的挥发份越高,焦油回收率越多,焦油产量越大。
\r\n         二、国内外煤焦油加工现状
\r\n         1、生产规模
\r\n         日本、德国、法国、俄罗斯等国家的单套焦油蒸馏装置的能力都在10—50万t/a。从理论上讲,能力越大,规模效益越好。在资源有限的情况下,选择10万t/a的加工装置能最大限度发挥产品的加工价值。只有焦油收集量足够多的时候,才能建设5O万t/a焦油加工装置。国内单套焦油蒸馏装置有0.6,1.2,3,5, 10,15万t/a各种规模。3万t/a以上的规模均为连续蒸馏工艺,小于3万t/a的规模都是间歇蒸馏工艺。出现不同加工规模的原因有:①焦油加工厂自身焦油产量不同,按自产焦油建设相应的规模;②未作为一个产业来考虑焦油的加工,仅作为一个焦化厂的附带处理单元;③大规模焦油加工的技术水平不够;④环境保护和能量利用没有达到发达国家的重视程度。
\r\n         2、产品方案
\r\n         国外煤焦油加工有3种模式生产:一是全方位多品种,提纯和配制各种规格和等级的产品;二是在煤焦油加工产品的基础上,向着精细化工、染料、医药方面延伸的深加工产品;三是重点加工沥青类产品。
\r\n 第一种模式的代表是德国吕特格公司。从焦油中分离、配制的产品有220多种,萘有4个级别,树脂有5个级别,蒽有7个级别,沥青粘结剂及浸渍料有20个级别。可以根据市场要求,在同一装置上,改变操作参数,生产不同级别的产品,达到装置的多功能性。
\r\n         第二种模式的代表是日本的住金化学,仅对煤焦油中纯化合物进行提纯或延伸,试制和生产的产品有180种,如酚类衍生物有21种,喹啉及衍生物有32种,萘衍生物有60种。
\r\n         第三种模式的代表有日本三菱株式会社、美国的RiUy公司、澳大利亚Koppem公司,都在煤焦油沥青加工上有特色的产品。这些公司对煤焦油蒸馏的其它馏分均不进行加工,以混合油的形式出售,仅对蒸馏产生的沥青进行加工。因为煤焦油加工过程中,沥青产率在50%以上,做好沥青加工,提高沥青的附加值,就能够保证焦油加工项目的整体效益。
\r\n 国内煤焦油加工产品主要是酚类、萘、洗油、粗蒽、沥青等。各厂的产品质量和数量都基本类似,导致焦油加工的效益平平,与国外差距较大。其主要原因有以下几方面:各焦油加工装置的规模普遍偏小;高质量、高附加值产品较少;生产企业适应市场能力较差;焦油深加工产品的市场有待开发,特别是新产品推向市场时,其难度较大。
\r\n         3、工艺流程
\r\n 国内外焦油蒸馏的工艺大同小异,都是脱水、分馏,但国外的工艺比国内要多样化。国内的焦油蒸馏工艺与国外工艺相比较,差距并不大,只是适用的场合不同。只要对国内工艺的设备、仪表控制、能量利用方面做一些改进工作,就能够变成先进和实用的工艺。
\r\n         4、环保水平
\r\n         环保主要是指对焦油加工过程中所产生的废水、废气、废渣的处理。焦油加工产生的废水,国内外所采取的措施基本相同,都是集中收集,送焦化厂污水处理装置处理后排放,所不同的是国内污水处理后的指标要差一点。
\r\n         废气处理主要是指焦油加工过程中的放散气和沥青烟气的处理。国外焦油加工厂收集这部分废气,并集中到洗涤塔,净化、降温后送管式炉焚烧。有些焦油加工厂的油槽顶部还进行氮封,其放散气排出的可能性就更小。而国内只有个别焦油加工装置对放散气进行集中收集处理,大部分装置都是自由放散。所以在废气处理上应改进。
\r\n         焦油加工产生的废渣只有焦油渣,各国处理模式都一样,均是集中收集后混配到煤中。国内配到煤中的设施较差,有些厂随地抛弃现象严重。但只要严格管理,认真处理,达到国外处理水平是完全可以实现的。
\r\n         5、节能水平
\r\n         节能降耗是装置的重要指标。焦油加工是高能耗过程,国外在水、蒸汽、煤气消耗方面控制较好,采用空冷、冷热流体换热、多级循环水、低温减压蒸馏、热量回收蒸汽等技术,但电的消耗反而比国内还高。随着国内能源结构的调整,多使用电,减少水、蒸汽和煤气的消耗是一个必然趋势。
\r\n         6、装备水平
\r\n         装置的装备水平与机械制造、自控水平密切相关。国内焦油加工的装备水平与国外差距较大,主要原因是过多考虑项目投资额;高温运转设备、耐腐蚀材质、高温高粘度介质的检测仪表等难以找到合适的国内生产厂;即使是国外引进的设备,维修水平相差较远。
\r\n         三、国内煤焦油加工技术进展
\r\n         1、焦油蒸馏技术
\r\n         国内多采用常压、一塔式、切取两混或三混馏分的蒸馏工艺。而引进的煤焦油蒸馏装置有如下特点:采用连续脱水.脱轻油,馏分塔为减压操作,塔顶采出酚油、压力为13.3kPa,塔底为软化点为65℃的软沥青;采用方箱管式炉,出口焦油温度为330℃;余热利用好,其中,软沥青与焦油换热、各馏分采用蒸汽发生器产生0.3MPa的低压蒸汽;馏分塔塔顶的油汽采用空气冷凝冷却器,并为减压操作,可节能约15%一50%;减压抽出的尾气与分离酚水均送往管式炉焚烧;馏分塔材质选用抗腐蚀低碳合金钢。
\r\n         2、工业萘蒸馏技术
\r\n 目前,国内多数焦化厂生产的是不酸洗95%工业萘,只有回收喹啉类的厂家才生产稀酸洗95%工业萘。另外,生产95%工业萘的原料也有不同:窄馏分(即萘油馏分)、四混馏分(轻、酚、萘、洗)、三混馏分(酚、萘、洗)、两混馏分(萘、洗)等。
\r\n         工业萘蒸馏工艺可分为常压间歇釜式精馏、减压间歇釜式精馏、常压双釜双塔连续精馏、常压双炉双塔连续精馏、常压单炉双塔连续精馏、常压单炉单塔连续精馏、常加压单炉双塔连续精馏等。从精馏塔的实际塔板数来看,开始为5O层、后增加到63,64,70层。其精馏塔的塔型有填料塔(瓷环、鲍尔环、波纹板等)、圆泡罩塔、条形泡罩塔、斜孔板塔、浮阀塔等。目前,多数大型焦化厂采用70层浮阀塔,以两混或三混馏分为原料的常压双炉双塔连续精馏工艺。常压单炉、双塔连续工艺较普遍,而宝钢的常压、加压单炉双塔连续工艺的能耗最低。随着计算机的应用,单炉、单塔连续精馏工艺有发展前途。
\r\n         3、焦油蒸馏所获馏分的洗涤技术
\r\n         这里指的是碱洗脱酚或酸洗脱喹啉装置,可分别获得酚盐与硫酸喹啉。一般是先脱酚、后脱喹啉,也可只脱酚、不脱喹啉。原料则根据焦油蒸馏切取馏分不同而异,有窄馏分、宽馏分之分。洗涤工艺可间歇或连续操作。洗涤设备有空气搅拌、机械搅拌、泵混合、静态混合器、喷射混合器等型式。后两种洗涤器较先进,洗涤效果好,便于连续操作与自动控制。碱洗脱酚的主要控制因素有用碱浓度、洗涤温度、分离时间、洗涤的级数等。各馏分的洗涤要求馏分含酚小于0.5%。宝钢引进的是全连续碱洗脱酚工艺,碱液浓度较低,为8%一10%;轻油、酚油均为一段脱酚,脱酚效率分别为~38%和88%。其轻油脱酚对酚钠盐起到净化的作用。萘油则采用三段脱酚,脱酚效率79%;脱酚设备采用静态混合器。另外,只对脱酚酚油与甲基萘油分别进行连续酸洗脱喹啉,加酸浓度为30%一39%,效率分别为38.5%和52.2%。设备也采用静态混合器。
\r\n         4、粗蒽制取技术
\r\n         国内各厂均采用间歇操作工艺,设备为转鼓结晶机。为了提高粗蒽的收率,开发了两段结晶法。宝钢引进的工艺采用全连续程序控制操作,包括:蒽油装人、冷却结晶、放料、离心等工序,计44h。后改进为自然与强制冷却相结合,缩至35h,结晶颗粒大;设备采用立式冷却结晶机,有利于实现连续操作;所得粗蒽的含蒽高达38%,而含油很低。
\r\n         5、酚钠盐分解技术
\r\n         国内大多采用硫酸分解法,缺点是有浓酚水产生,较难处理。20世纪70年代开发了烟道废气分解法,仍有二次污染问题。宝钢引进工艺采用高炉煤气分解法,按两级分解操作,其分解率为98%;并配备有苛化装置,可获得浓度为8%一10%的苛性碱液,苛化率为77%;无二次污染问题。
\r\n         6、精萘制取技术
\r\n         国内原来一直采用浓硫酸精制法,缺点是产生大量废酸很难处理,且能耗高、收率低。20世纪80年代开发了间歇操作的分步结晶法,并得到普遍应用。近年改为采用“Praobd”工艺技术,为箱式分部结晶,精萘产率为90%,并全部按程序自动控制、连续操作。
\r\n         7、粗酚精制技术
\r\n         国内多采用常压脱水一减压脱渣、精馏的工艺,获得的酚类产品质量较差。引进的采用5塔连续操作脱水脱渣精馏、第6个塔为间歇操作的工艺流程。各塔均为减压操作,苯酚的回收率高达42%,比国内要高10%左右;产品质量特别好,有特号苯酚(结晶点40℃以上),邻位甲酚(结晶点29℃以上),问、对甲酚,二甲酚等。
\r\n         8、粗吡啶与粗喹啉精制技术
\r\n         国内均采用烧碱液中和分解硫酸喹啉,国外多采用液氨中和分解,粗吡啶与粗喹啉的精制都是采用间歇操作、共沸脱水、减压精馏的工艺流程。与国内不同的是引进装置采用6塔间歇脱水、真空精馏操作,并采用了空冷器,可节约冷却用水。
\r\n         9、精蒽、精咔唑与蒽醌生产技术
\r\n         国内都采用以粗蒽为原料,经溶剂一精馏法处理获得精蒽,再催化氧化制取蒽醌。宝钢引进Praobcl技术,即以I蒽油为原料,先加入溶剂进行分布结晶(即:溶剂结晶法),进行减压蒸馏,获得精蒽(含蒽达95%以上)与精咔唑(纯度为90%以上)。蒽醌生产工艺是瑞士Ciba Geigy公司的技术,经多段固定床催化氧化、多段冷却,获得纯度为99%以上的蒽醌。与国内相比,工艺与设备方面的水平也差不多。特点是整个生产过程所产生的废液很少,可以送往活性污泥装置处理;产生的废气量较大,但它可以经回收、过滤,再经废气燃烧装置破坏后放散,故不会给环境带来危害。
\r\n         煤焦油进一步深加工水平取决于投资和市场,一般而言,随着加工深度的增加,产品的附加值增高,同时投资也增大。在深加工中要考虑设备上的灵活性,根据市场需要及时调整产品质量品种。煤焦油的集中加工是现代化工业发展的必然趋势,也是国家的一项技术政策,今后发展方向是如何提高资源利用率、扩大品种、搞深度加工,对产品结构延伸,致力于新产品的开发、减少污染,加强国内外信息交流,扩大对外开放,加大引资的力度,为企业的发展注入活力,组建煤焦油化学品信息与技术协作网。加强煤焦化企业、科研教学、信息研究机构的协作,使资源得到合理利用。

\r\n', '', '', '218.9.171.14'), +(71, 17, '

\r\n         2012年争论最热烈的能源话题,莫过于“页岩气革命”。而随着隆冬来临,对这场“革命”的关注热度也在降温。激烈的“唱多派”声音有些嘶哑了,“务实派”的冷静思考开始占上风。这种转变有点“成也萧何败也萧何”的味道。最早鼓吹“页岩气革命”的美国陆续传来利空的消息。虽然近年来页岩气开发的声势不小,可参与进去的开采商收益却持续恶化。美国天然气巨头XTO Energy的CEO对外透露,“我们如今亏得裤子都没了,页岩气生意根本不赚钱,所有人都在亏钱“。据报道,一些大牌能源公司都在下调来年页岩气产量计划。有统计称,2012年美国境内的挖掘机数量下降至422台,比一年前下降48%,创下20年来降幅最大的纪录。工程机械使用数量的增减趋势,经常被用来衡量该地区基础工业项目(比如矿业、房地产等)的开工热度。一直站在旁侧静观其变的俄罗斯开始冷嘲热讽。俄罗斯科学院一位专家说,即便美国页岩气已经规模化开采,其成本相比传统的常规天然气还是偏高,而这种资源不适合远距离运输,采气区资源消耗过快,再加上生态破坏等难题,都将使得这场“革命”越发显得虚幻。由于担心地质灾害,美国纽约州和特拉华盆地已叫停了该地区的页岩气项目。《金融时报》警告,页岩气开发使得美国再度兴起“廉价化石燃料之风”,但短期或中期的经济收益却可能使该国陷入长期依赖化石能源的“陷阱”。
\r\n         所谓页岩气,就是从页岩层中开采出来的天然气。它与煤层气、致密砂岩气一起,被称为非常规油气资源的三大品种。美国从19世纪就开发过商用页岩气矿井,不过直到21世纪,其开采技术才日渐成熟。2006年之后,国际能源市场经历了一轮“大牛市”,这使得页岩气开采变得有利可图。金融危机之后,奥巴马倡导美国“能源独立”战略,要大幅度降低对海外能源的依赖程度。从杯盘狼藉的华尔街流出来的资金,发现了页岩气这个“富矿”。一时间,各种投机资金扮上新能源的“新娘妆”,成群结队要下嫁页岩气这个几乎被遗忘的“穷小子”。 20世纪80年代因下注页岩气开发而破产的美国房地产商乔治·米歇尔也被请了出来。美国一家能源协会授予这位90多岁的老人“终身成就奖”。事实上,米歇尔用于页岩气开发的水平钻井技术和分段水力压裂技术,算不上什么“技术革命”,它只是在长期钻井经验中积累下来的一套相对成熟的钻探工艺,证明了只要投入足够多的资金,“从石头里榨出的血”也有可能相当廉价。
\r\n         页岩气开采的确使美国能源结构发生了巨变。页岩气在美国天然气产量的比重从1996年的1.6%猛增至2010年的约23%,并使美国在2009年超过俄罗斯成为世界第一大天然气生产国和资源国。据预测,美国有可能在2021年成为天然气净出口国。但这场美国“革命”是否能在世界其他地区复制,还存在很大疑问。我国城市金融研究所的报告显示,页岩气在全球范围开发还有众多障碍:首先,地质条件的极大差异页岩气开采受阻;其次,页岩气在使用过程中要消耗大量水资源,而它必须使用的化学品可能对蓄水层造成污染;第三,天然气价格的持续低迷会打击企业的投资热情;第四,在北美以外市场,普遍缺乏足够的储存、液化和传输等非常规天然气的基础设施,这将大大限制市场开发进程。在这些难题待解的情况下,如果美国的页岩气“革命”开始进入“挤泡沫”阶段,其他国家的情况恐怕就更不乐观了。
\r\n 从各方数据对比,中国的页岩气储量似乎并不比美国少。中国是仅次于美国的能源消费大国,一些为中国页岩气“革命”鼓与呼的声音,由此可以理解了。但冷静下来会发现,页岩气开发对环境条件的“硬束缚”,恐怕不是中国的禀赋条件所能承受的。中国人均占有土地和水资源的数量远逊于美国,生态环境更为脆弱。平均而言,一口页岩气井需要20万吨水,向页岩中注入的压裂液中含有大量化学成分,对地下水资源的影响存在很大不确定性。而中国的页岩气富集区域又往往处在水资源较为紧张的内陆、盆地地区。在页岩气的“十二五”规划中,像华北地区、准噶尔盆地、吐哈盆地、鄂尔多斯盆地这样的缺水地区,即便资源潜力不小,但要真正落实开采,则需慎之又慎。有业内专家提醒,在辽宁、陕西和四川等地,页岩气的大规模开发很可能会出现与工业和农业“争水”的难题。另须格外关注的是,中国目前的页岩气开采技术还不过关。如上所述,目前成熟的页岩气开采技术主要是基于美国特定区域和地质特点而长期积累下来的钻探工艺。别说一时半会儿不可能从美国引进技术,就算能把技术拿来,是否适应中国特殊的地质特性和环境,也存在很大疑问,更不要说由此而增加的巨额开采成本了。
\r\n         除此之外,必须在商业上对页岩气的合理性有精确的论证。美国页岩气“革命”的前提,是有6300家大大小小的天然气生产商参与的“充分动员型”的市场化模式。这与中国只有几大能源企业控制市场的局面差异很大,对风险的承受能力也大不相同。美国能源工业发展了将近两百年,油气管道密如蛛网,约有50万公里,中国即便这些年发展很快,也不过区区6万公里。管网基础建设不能一蹴而就,不能及时商品化的页岩气资源,显然会让开采商面临尴尬。曾任职石油部勘探司副司长的老专家查全衡就公开撰文称,如果中国不能找到一条比美国“更省地、省钱、省水,更环保”的开发方法,就不要过早谈什么“页岩气革命”,省得“被美国忽悠”。从本质上看,美国的页岩气“革命”,是应对金融危机后国家经济“脾虚伤肾”的一个应急手段。美国金融危机,表面上看是华尔街心火旺盛导致了“脑中风”,实质上是国家经济“产业空心化”、“消费金融化”情况严重,长期积累下来,造成经济肌体的脾胃消化不良、精气不足,终致“肾阴虚亏”。
\r\n         这几年美联储不停地印钱,给美国经济“滋补血气”,暂时稳定了金融市场,但流动性增加之后资金必须有出口。同时,美国经济需要降低成本,增加产品竞争力,启动所谓“再工业化”战略,那么能源价格是否足够低廉则是个瓶颈。页岩气开采算不上一项重大科技创新,但它的启动,恰恰在投机资本流向和降低制造业成本两个战略方向上达成了一致,这才有了“革命”。从货币层面上看,页岩气“革命”给贬值风险加剧的美元注入了新的变量,但这绝非一种可持续的正向变量。作为世界经济的“龙头”,美国经济应当以持续的科技创新为牵引力,拉动世界经济增长,从而让其美元重新“实心化”——以再造实业来建立必要的纸币信用。但就像华尔街一度创造的“石油-美元”捆绑游戏一样,因其本性使然,他们仍然要将货币与页岩气等大宗资源捆绑,通过操纵和炒作资源类的大宗商品,制造资源产品的泡沫,来控制全球经济,并维系其“美元帝国”的秩序。但是这种经济再循环的结果,最终不过是“下一个2008”罢了。
\r\n         与原油不同,天然气一直没有形成全球性的市场,只有欧洲、北美和亚洲三大市场,这三大市场的天然气价格长期存在“落差”。美国能源自给的预期,以及页岩气“革命”给液化天然气贸易增加的想象空间,有可能将全球天然气市场联系在一起,打破原来以管道天然气为主的贸易方式。因此,页岩气“革命”背后的潜台词可能是:当美国在中东受挫而不得不进行战略“收缩”时,它对世界石油的控制力降低了,但它反而必须要在天然气这种新兴的大宗资源商品上争取主导权和定价权,以便让美元重获信任。治疗“美国病”的合理逻辑应该是“健脾补肾”。“健脾”就是通过收入调节来促进消费,让陷入困境的美国中产阶级再次挺起胸膛,而不是郁闷到搞什么“占领华尔街”的街头运动。“补肾”就是强化国家科研创新能力,持续增加制造业的技术水平,沿着当年他们搞“阿波罗登月”计划的道路前进。但是,页岩气“革命”这种搞不好很可能搞成敲骨吸髓一般的透支性资源开采,却在大行其道。美国经济可能本来只是“阳虚”,这样下去,反而有了搞成“阴阳两虚”的趋势。笔者认为,一种理性的国家能源长期战略不能被急功近利的思维左右。
\r\n         以此反观中国,在全球化经济分工链条中,中国是实业国家,而不是资源国家。中国具有全球最充足的生产能力和商品供应能力,同时又是潜在的最具成长性的消费市场。一方面,中国对资源的需求是强烈的;另一方面,我们换取资源的能力也是强大的。“实业换资源”,仍是我们安身立命的根本和长期战略。历史上,仅仅靠提供廉价资源获得利润从而实现繁荣的国家,不可能是真正的强国,繁荣也不会持久。因为它们很快就透支了自身的资源,走向衰落。只有那些拥有强大的甚至是不可替代的制造能力和创新能力的国家,那些通过技术的不断升级,持续开发出新能源、开拓出新的经济增长方式的国家,才能走在世界前列。从这个意义上说,对于美国的页岩气“革命”,中国从战略上不必重视过度。远期看,真正的能源“革命”必须伴随着跨时代的技术创新,下一轮能源大变革将从“采集能源”向“制造能源”过渡,以核聚变为基础的核能研发和普及利用,才是真正的大方向。中国能源战略的主攻方向应该在这里。在战术上,中国又不能完全忽视页岩气。毕竟,在中短期内它对提升美国经济竞争力确实有所帮助。我们要审慎观察它对美国经济复苏进程的真实影响。同时,在目前世界格局中,要想不被别人在资源上“卡脖子”要挟,你自己必须要“立得住”。中国缺乏在全球大宗商品和资源贸易体系中的定价权。因此,我们应该积极参与国内以及国外的页岩气市场的调研、开发,不论在传统能源领域还是在页岩气这种新能源领域,中国在立足自身的同时,更要坚定地“走出去”,要去积极争取定价权。
\r\n         还须认清的问题是,页岩气“革命”以及由此延伸的页岩油开发,一定程度上推翻了美国一度鼓吹的“石油峰值论”。“人类不是因为缺少石头才离开石器时代,也绝不会因为缺少石油才离开石油时代。”此话不假。这不,石油并未枯竭,常规的、非常规的天然气已经开始给全球经济输血了。这再次证明,真正的“资源瓶颈”,不在地表或地下,而是在人的大脑里。只要技术进步,总会有新的资源被发现、被利用。技术的小进步,会有小批量的资源被利用;技术的大进步和大跨越,就会带来大批量的资源。对于中国的大型能源企业而言,应该在各种“革命”论中保持头脑清醒。对它们的最大挑战,不在于跟踪某种“错综复杂的趋势”,而是明确能源开发的大方向,进行提前布局。中国经济的崛起必然同时伴随一次能源“革命”,那一定不会在石油、天然气这种传统化石能源层面发生。像中石油、中石化、中海油这些主导着国家命脉的大企业,是否考虑过在花掉数百亿美元投资去世界各地购买传统能源公司的同时,留出一部分资金,去投资类似核聚变、核引擎这样真正影响长远的科技攻关项目呢?2012年,中国已经进行了两轮页岩气项目招标,引得能源行业热闹异常。因为有民营企业中标,一些不着调的评论把这说成是中国“能源体制变革的重大时刻”。请不要忘记,能源行业的性质决定了它的投资周期长、资金投入大,历来都是大风险项目,这和体制并无直接联系。况且,总不能期望中国的页岩气开采重蹈山西小煤窑泛滥的覆辙吧。奉劝那些为页岩气项目抓狂的投资者最好谨慎些。有句业内人士的戏言,在新年里似乎应格外上心:不要“投进去的是鳄鱼,出来的是壁虎”。
\r\n  

\r\n  

\r\n', '', '', '218.9.171.14'), +(72, 17, '

\r\n         2012年争论最热烈的能源话题,莫过于“页岩气革命”。而随着隆冬来临,对这场“革命”的关注热度也在降温。激烈的“唱多派”声音有些嘶哑了,“务实派”的冷静思考开始占上风。这种转变有点“成也萧何败也萧何”的味道。最早鼓吹“页岩气革命”的美国陆续传来利空的消息。虽然近年来页岩气开发的声势不小,可参与进去的开采商收益却持续恶化。美国天然气巨头XTO Energy的CEO对外透露,“我们如今亏得裤子都没了,页岩气生意根本不赚钱,所有人都在亏钱“。据报道,一些大牌能源公司都在下调来年页岩气产量计划。有统计称,2012年美国境内的挖掘机数量下降至422台,比一年前下降48%,创下20年来降幅最大的纪录。工程机械使用数量的增减趋势,经常被用来衡量该地区基础工业项目(比如矿业、房地产等)的开工热度。一直站在旁侧静观其变的俄罗斯开始冷嘲热讽。俄罗斯科学院一位专家说,即便美国页岩气已经规模化开采,其成本相比传统的常规天然气还是偏高,而这种资源不适合远距离运输,采气区资源消耗过快,再加上生态破坏等难题,都将使得这场“革命”越发显得虚幻。由于担心地质灾害,美国纽约州和特拉华盆地已叫停了该地区的页岩气项目。《金融时报》警告,页岩气开发使得美国再度兴起“廉价化石燃料之风”,但短期或中期的经济收益却可能使该国陷入长期依赖化石能源的“陷阱”。
\r\n         所谓页岩气,就是从页岩层中开采出来的天然气。它与煤层气、致密砂岩气一起,被称为非常规油气资源的三大品种。美国从19世纪就开发过商用页岩气矿井,不过直到21世纪,其开采技术才日渐成熟。2006年之后,国际能源市场经历了一轮“大牛市”,这使得页岩气开采变得有利可图。金融危机之后,奥巴马倡导美国“能源独立”战略,要大幅度降低对海外能源的依赖程度。从杯盘狼藉的华尔街流出来的资金,发现了页岩气这个“富矿”。一时间,各种投机资金扮上新能源的“新娘妆”,成群结队要下嫁页岩气这个几乎被遗忘的“穷小子”。 20世纪80年代因下注页岩气开发而破产的美国房地产商乔治·米歇尔也被请了出来。美国一家能源协会授予这位90多岁的老人“终身成就奖”。事实上,米歇尔用于页岩气开发的水平钻井技术和分段水力压裂技术,算不上什么“技术革命”,它只是在长期钻井经验中积累下来的一套相对成熟的钻探工艺,证明了只要投入足够多的资金,“从石头里榨出的血”也有可能相当廉价。
\r\n         页岩气开采的确使美国能源结构发生了巨变。页岩气在美国天然气产量的比重从1996年的1.6%猛增至2010年的约23%,并使美国在2009年超过俄罗斯成为世界第一大天然气生产国和资源国。据预测,美国有可能在2021年成为天然气净出口国。但这场美国“革命”是否能在世界其他地区复制,还存在很大疑问。我国城市金融研究所的报告显示,页岩气在全球范围开发还有众多障碍:首先,地质条件的极大差异页岩气开采受阻;其次,页岩气在使用过程中要消耗大量水资源,而它必须使用的化学品可能对蓄水层造成污染;第三,天然气价格的持续低迷会打击企业的投资热情;第四,在北美以外市场,普遍缺乏足够的储存、液化和传输等非常规天然气的基础设施,这将大大限制市场开发进程。在这些难题待解的情况下,如果美国的页岩气“革命”开始进入“挤泡沫”阶段,其他国家的情况恐怕就更不乐观了。
\r\n 从各方数据对比,中国的页岩气储量似乎并不比美国少。中国是仅次于美国的能源消费大国,一些为中国页岩气“革命”鼓与呼的声音,由此可以理解了。但冷静下来会发现,页岩气开发对环境条件的“硬束缚”,恐怕不是中国的禀赋条件所能承受的。中国人均占有土地和水资源的数量远逊于美国,生态环境更为脆弱。平均而言,一口页岩气井需要20万吨水,向页岩中注入的压裂液中含有大量化学成分,对地下水资源的影响存在很大不确定性。而中国的页岩气富集区域又往往处在水资源较为紧张的内陆、盆地地区。在页岩气的“十二五”规划中,像华北地区、准噶尔盆地、吐哈盆地、鄂尔多斯盆地这样的缺水地区,即便资源潜力不小,但要真正落实开采,则需慎之又慎。有业内专家提醒,在辽宁、陕西和四川等地,页岩气的大规模开发很可能会出现与工业和农业“争水”的难题。另须格外关注的是,中国目前的页岩气开采技术还不过关。如上所述,目前成熟的页岩气开采技术主要是基于美国特定区域和地质特点而长期积累下来的钻探工艺。别说一时半会儿不可能从美国引进技术,就算能把技术拿来,是否适应中国特殊的地质特性和环境,也存在很大疑问,更不要说由此而增加的巨额开采成本了。
\r\n         除此之外,必须在商业上对页岩气的合理性有精确的论证。美国页岩气“革命”的前提,是有6300家大大小小的天然气生产商参与的“充分动员型”的市场化模式。这与中国只有几大能源企业控制市场的局面差异很大,对风险的承受能力也大不相同。美国能源工业发展了将近两百年,油气管道密如蛛网,约有50万公里,中国即便这些年发展很快,也不过区区6万公里。管网基础建设不能一蹴而就,不能及时商品化的页岩气资源,显然会让开采商面临尴尬。曾任职石油部勘探司副司长的老专家查全衡就公开撰文称,如果中国不能找到一条比美国“更省地、省钱、省水,更环保”的开发方法,就不要过早谈什么“页岩气革命”,省得“被美国忽悠”。从本质上看,美国的页岩气“革命”,是应对金融危机后国家经济“脾虚伤肾”的一个应急手段。美国金融危机,表面上看是华尔街心火旺盛导致了“脑中风”,实质上是国家经济“产业空心化”、“消费金融化”情况严重,长期积累下来,造成经济肌体的脾胃消化不良、精气不足,终致“肾阴虚亏”。
\r\n         这几年美联储不停地印钱,给美国经济“滋补血气”,暂时稳定了金融市场,但流动性增加之后资金必须有出口。同时,美国经济需要降低成本,增加产品竞争力,启动所谓“再工业化”战略,那么能源价格是否足够低廉则是个瓶颈。页岩气开采算不上一项重大科技创新,但它的启动,恰恰在投机资本流向和降低制造业成本两个战略方向上达成了一致,这才有了“革命”。从货币层面上看,页岩气“革命”给贬值风险加剧的美元注入了新的变量,但这绝非一种可持续的正向变量。作为世界经济的“龙头”,美国经济应当以持续的科技创新为牵引力,拉动世界经济增长,从而让其美元重新“实心化”——以再造实业来建立必要的纸币信用。但就像华尔街一度创造的“石油-美元”捆绑游戏一样,因其本性使然,他们仍然要将货币与页岩气等大宗资源捆绑,通过操纵和炒作资源类的大宗商品,制造资源产品的泡沫,来控制全球经济,并维系其“美元帝国”的秩序。但是这种经济再循环的结果,最终不过是“下一个2008”罢了。
\r\n         与原油不同,天然气一直没有形成全球性的市场,只有欧洲、北美和亚洲三大市场,这三大市场的天然气价格长期存在“落差”。美国能源自给的预期,以及页岩气“革命”给液化天然气贸易增加的想象空间,有可能将全球天然气市场联系在一起,打破原来以管道天然气为主的贸易方式。因此,页岩气“革命”背后的潜台词可能是:当美国在中东受挫而不得不进行战略“收缩”时,它对世界石油的控制力降低了,但它反而必须要在天然气这种新兴的大宗资源商品上争取主导权和定价权,以便让美元重获信任。治疗“美国病”的合理逻辑应该是“健脾补肾”。“健脾”就是通过收入调节来促进消费,让陷入困境的美国中产阶级再次挺起胸膛,而不是郁闷到搞什么“占领华尔街”的街头运动。“补肾”就是强化国家科研创新能力,持续增加制造业的技术水平,沿着当年他们搞“阿波罗登月”计划的道路前进。但是,页岩气“革命”这种搞不好很可能搞成敲骨吸髓一般的透支性资源开采,却在大行其道。美国经济可能本来只是“阳虚”,这样下去,反而有了搞成“阴阳两虚”的趋势。笔者认为,一种理性的国家能源长期战略不能被急功近利的思维左右。
\r\n         以此反观中国,在全球化经济分工链条中,中国是实业国家,而不是资源国家。中国具有全球最充足的生产能力和商品供应能力,同时又是潜在的最具成长性的消费市场。一方面,中国对资源的需求是强烈的;另一方面,我们换取资源的能力也是强大的。“实业换资源”,仍是我们安身立命的根本和长期战略。历史上,仅仅靠提供廉价资源获得利润从而实现繁荣的国家,不可能是真正的强国,繁荣也不会持久。因为它们很快就透支了自身的资源,走向衰落。只有那些拥有强大的甚至是不可替代的制造能力和创新能力的国家,那些通过技术的不断升级,持续开发出新能源、开拓出新的经济增长方式的国家,才能走在世界前列。从这个意义上说,对于美国的页岩气“革命”,中国从战略上不必重视过度。远期看,真正的能源“革命”必须伴随着跨时代的技术创新,下一轮能源大变革将从“采集能源”向“制造能源”过渡,以核聚变为基础的核能研发和普及利用,才是真正的大方向。中国能源战略的主攻方向应该在这里。在战术上,中国又不能完全忽视页岩气。毕竟,在中短期内它对提升美国经济竞争力确实有所帮助。我们要审慎观察它对美国经济复苏进程的真实影响。同时,在目前世界格局中,要想不被别人在资源上“卡脖子”要挟,你自己必须要“立得住”。中国缺乏在全球大宗商品和资源贸易体系中的定价权。因此,我们应该积极参与国内以及国外的页岩气市场的调研、开发,不论在传统能源领域还是在页岩气这种新能源领域,中国在立足自身的同时,更要坚定地“走出去”,要去积极争取定价权。
\r\n         还须认清的问题是,页岩气“革命”以及由此延伸的页岩油开发,一定程度上推翻了美国一度鼓吹的“石油峰值论”。“人类不是因为缺少石头才离开石器时代,也绝不会因为缺少石油才离开石油时代。”此话不假。这不,石油并未枯竭,常规的、非常规的天然气已经开始给全球经济输血了。这再次证明,真正的“资源瓶颈”,不在地表或地下,而是在人的大脑里。只要技术进步,总会有新的资源被发现、被利用。技术的小进步,会有小批量的资源被利用;技术的大进步和大跨越,就会带来大批量的资源。对于中国的大型能源企业而言,应该在各种“革命”论中保持头脑清醒。对它们的最大挑战,不在于跟踪某种“错综复杂的趋势”,而是明确能源开发的大方向,进行提前布局。中国经济的崛起必然同时伴随一次能源“革命”,那一定不会在石油、天然气这种传统化石能源层面发生。像中石油、中石化、中海油这些主导着国家命脉的大企业,是否考虑过在花掉数百亿美元投资去世界各地购买传统能源公司的同时,留出一部分资金,去投资类似核聚变、核引擎这样真正影响长远的科技攻关项目呢?2012年,中国已经进行了两轮页岩气项目招标,引得能源行业热闹异常。因为有民营企业中标,一些不着调的评论把这说成是中国“能源体制变革的重大时刻”。请不要忘记,能源行业的性质决定了它的投资周期长、资金投入大,历来都是大风险项目,这和体制并无直接联系。况且,总不能期望中国的页岩气开采重蹈山西小煤窑泛滥的覆辙吧。奉劝那些为页岩气项目抓狂的投资者最好谨慎些。有句业内人士的戏言,在新年里似乎应格外上心:不要“投进去的是鳄鱼,出来的是壁虎”。
\r\n  

\r\n  

\r\n', '', '', '218.9.171.14'), +(73, 16, '

\r\n         经过近半年的筹备,根据《中国工会章程》规定和黑科院工会字〔2013〕3号文件批复的要求,我院党委于1月20日组织召开了黑龙江省能源环境研究院全体职工大会,通过民主选举,产生工会主席1人,工会委员4人。
\r\n         随着工会的成立,我院建制已经趋于完善,实现了党、政、工、团的体系结构。职工可以通过工会对能源院的发展提出建议和意见,反映工作、生活、学习等方面的合理诉求,切实保障职工权益。同时根据工作需要,结合我院实际,适时举办有益职工身体健康的活动,丰富职工业余文化生活,改善职工的福利待遇,使我院职工队伍成为一支高素质的、充满活力的优秀集体,从而有力地促进我院的改革与发展。

\r\n', '', '', '1.189.181.133'), +(74, 10, '

\r\n         为深入开展厌氧发酵技术的应用研究,交流IMUS技术的推广经验,2014年4月17日,阿尔伯塔创新能源环境研究院李筱梅博士应邀到能源院访问,在能源院徐晓秋院长、高德玉总工程师及相关科研人员的陪同下,参观了IMUS中试系统,并与科研人员进行了交流,对于面临的技术难题,李博士提出了宝贵意见。

\r\n

\r\n  

\r\n

\r\n  \"\"

\r\n

\r\n
\r\n         上午10点,李博士做了题为“用家庭垃圾生产沼气的挑战”的学术报告,首先介绍了德国、加拿大、中国部分城市垃圾的现状和处理方式,随后阐述了加拿大阿尔伯塔省政府在应对温室气体排放的管理政策、城市生活垃圾的收集、管理等的做法和经验,并同与会人员进行了讨论与交流。最后,对家庭垃圾厌氧发酵产沼气的研究及设想进行了介绍,并与徐晓秋、高德玉就IMUS系统的未来发展方向及其在处理废弃物等领域的应用等方面进行了深入的交流与探讨,为IMUS的推广和开展进一步相关合作、交流奠定了基础。
\r\n
\r\n  

\r\n

\r\n \"\"

\r\n', '', '', '1.189.194.6'), +(75, 10, '        2014年3月24日,郭院长带队调研我院学科创新团队工作,作出重要指示:调整研究方向,找准主线,抓住切入点,确立目标,建设创新团队。我院领导班子对郭院长的指示特别重视,先后三次召开会议布置、检查创新团队落实工作。2014年3月27日,我院召开院工作会议,对创新团队工作进行动员和布置。院领导班子,全体中层干部和创新团队负责人参加会议。徐晓秋院长讲话,让大家遵照郭院长指示,理清思路,找准切入点,确立目标,咬住青山不放松,用几年时间研发出几个有影响力的大成果。具体要对团队成员、研究方向,团队目标等内容进行调整。2014年4月21日, 我院召开了创新团队工作落实检查会议,对各团队整改情况进行通报,讨论团队目标的合理性,措施的可操作性等议题,同志们畅所欲言,气氛热烈,开阔了思路,统一了目标,对团队建设工作更有信心了。2014年5月19日,我院又召开团队建设工作阶段成果汇报会议,并邀请相关领域专家给团队把关、点评。各创新团队以PPT的形式展示团队研究领域的现状和战略分析,研究内容的竞争力分析,团队近远期工作安排及工作目标等内容。
\r\n        我院创新团队工作整改措施:
\r\n        1、理清思路,寻找研发切入点。
\r\n        2、明确方向,确定目标。
\r\n        3、强化团队成员学习培养,建立学术交流机制。
\r\n        4、开办学习园地,年轻人相互学习,努力提高外语水平。
\r\n        5、建立团队例会制度,讨论问题,统一思想。
\r\n        6、寻找领域内科研团队的短板,努力提升为我团队的强项。

\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '1.189.197.114'), +(76, 16, '        为进一步提高我院职工的消防安全意识,检验与巩固职工掌握灭火器材扑灭火灾的能力,6月3日下午,我院举行了消防演习活动,各部门防火负责人及职工约 15 人参加了演习。
\r\n
\r\n \"\"
\r\n        演习由我院消防兵转业的郭晓东同志为职工面授有关消防安全知识及现场示范,到场的所有职工都十分认真地听取了讲解。在整个过程中,郭晓东同志给大家讲解了各种消防器材的使用常识,以及发生火灾等情况的扑救方法,并现场指导大家使用灭火器,让大家掌握了灭火器的使用方法。整个演习过程组织严密,操作规范,既让参加演习的职工熟悉了灭火器的使用方法,又增强了职工的安全防火意识。
\r\n
\r\n \"\"
\r\n        通过此次消防培训和灭火演练,使我院职工增长了防火、灭火知识,增强了使用消防器材的操作能力,切实提高了消防安全意识。', '', '', '113.4.83.157'), +(77, 9, '院各部门:
\r\n
\r\n        省科学院系统乒乓球赛拟定于6月27日召开,比赛项目设定为团体比赛(男单、女单、男双、女双和混双),请各部门乒乓球好手踊跃报名。
\r\n
\r\n报名地点:综合办
\r\n联 系 人:赵   娴

\r\n
\r\n
\r\n 综合办                       
\r\n 2014年6月5日               
\r\n', '', '', '113.4.83.157'); +INSERT INTO `dede_addonarticles` (`aid`, `typeid`, `body`, `redirecturl`, `templet`, `userip`) VALUES +(78, 17, '        2013年原油依旧维持箱体震荡格局,走势与品种的季节性规律密切相关。在3月、9月形成两个高点,在10、11月整体维持弱势,低点曾触及82美元/桶。总体上是下行的趋势。2012年国际液化气市场则基本呈"M"型走势,大致分为三个较为明显的阶段:第一阶段在1月至3月份。年初伊朗同西方国家的关系升级,中东石油运输要道面临封锁威胁,国际原油供应担忧一再推高油价;中东冷冻货市场整体供应略显紧张,此阶段远东需求尚好,供需基本面利好推高冷冻货市场价格。第二阶段在3月中旬至7月份。3月中旬之后,低迷行情未有明显好转,且需求逐步减少,压力货市场价格震荡走低;4月份油价稳中走跌;5月份开始油价大幅走低跌势惊人。受全球经济疲弱、美国原油库存以及欧债危机等利空因素的影响,投资者心态不振,国际液化气市场持续震荡走跌。第三阶段在7月份之后,华南冷冻货丙烷到岸价格和华南压力货离岸价低至年度最低点。主要原因除自身基本面利好不足,国内需求改善不佳;随着原油市场震荡不减,液化气市场业者观望心态持续并加重。
\r\n        2013年中国国内LPG产量大约为2257.8236万吨,相比2012年2186.0826万吨的产量来说,仍保持增长势头,同比涨幅为3.3%,但与12年6.1%的涨幅相比明显放缓。产量增加的主要原因可归结为国内炼厂原油加工能力的提升和液化气深加工投产的单位增多。而涨幅放缓的原因为:部分深加工厂家生产成本过高和原料紧张等原因无奈停工或者转嫁下游商品;主力炼厂检修和因为环境问题整改减产减量。面临销售不佳的压力,越来越多的厂家开始关注液化气深加工,将液化气作为生产乙烯、芳烃等产品的原料。2013年中国LPG进口总量338万吨,与2012年的322万吨总进口量相比稍有增加,但增幅并不明显,主要消费区域集中在华南和华东。
\r\n        近几年全球LPG 产量增长较快,2011 年全球LPG 产量达2.41 亿吨,同比增长2.56%,预计到2014 年全球LPG 产量将增长到2.75 亿吨。
\r\n        中国是全球 LPG 行业发展较快的国家之一,产量从2003 年的1256 万吨增长到2012 年的2180.90万吨,年复合增长率达7.14%;2013 年1-3 月中国LPG 产量为555.40 万吨,同比增长4.13%。中国LPG 的消费增长也较快,从2003 年的1958 万吨增长到2012 年的2419 万吨,年复合增长率为2.68%。
\r\n        前瞻产业研究院LPG行业研究小组分析指出,随着我国 LPG 在城市燃料、汽车和化工原料等领域的应用扩大,市场对LPG 的需求将不断增加,结合2006-2012年中国LPG 消费量数据,预计2013 年中国LPG 消费量将达到2540 万吨,增长率为5%,2014 年将在2013 年的基础上继续增长,消费量将超过2650 万吨。在原油加工量增长的同步带动下,国内LPG产量跟随攀升, 1-11月,国内液化气产量为2085万吨,预计全年LPG产量将达到2275万吨,比上年总产量2230万吨增加2%左右,再创历史新高,但增速正在放缓。
\r\n        一、全国液化石油气消费量稳步增长,增速有所放缓
\r\n        近十年间,我国LPG表观消费量年均增长近5%。近两年,国内液化石油气市场受到天然气、二甲醚等替代能源的冲击,发展势头有所减缓,但LPG在化工原料、车用替代能源等新领域的发展使得其继续保持旺盛的生命力。据国家统计局的数据显示,2013年液化气进口量约402万吨,较上年增加近20%。液化气出口量为122万吨,下降近3.2%。
\r\n近年来,伴随着中国天然气消费量的强劲增长,LNG进口量也大幅上升。海关总署数据显示,2013年全年LNG进口量约为1700万吨,同比增长20.1%。
\r\n        二、进口来源多元化趋势明显
\r\n目前,我国LNG进口来源地已扩充至近10个国家。2013年我国从卡塔尔进口LNG量约占总进口量的35%,为我国LNG进口量最大的来源地;从澳大利亚进口LNG约占我国总量进口的20%,占比大幅下降。另外,由于近两年印度尼西亚和马来西亚LNG产量的增长,我国从东南亚地区进口量也出现明显上升。值得一提的是,我国从非洲国家进口的LNG也呈现出快速增长的态势。
\r\n        三、国内LNG接收站陆续投产,LNG接收站布局趋于均衡
\r\n随着LNG的快速发展和中国进口量的增多,沿海LNG接收站的建设正在提速。上半年东莞九丰能源的LNG码头开始投产,10月份中国海洋石油广东珠海LNG码头开始投产,11月份中国石油河北曹妃甸开始投产,共新增750万吨LNG接受能力,截至2013年底,我国共有9个LNG接收站投入运营,年处理LNG能力达2630万吨,较上年底增长约40%。
\r\n        四、2014年我国进口LNG海运市场预测
\r\n随着LNG的快速发展和中国进口量的增多,中国沿海LNG接收站的建设正在提速。当前除中国已经建成分布在辽宁、广东、福建、上海、江苏、浙江和河北的9个接收站外,按照当前规划,2014年全国还将有4个LNG接收站投入运营。从国内LNG进口量来看,由于我国居民对天然气的消费需求正处于高增长期,预计2014年我国LNG进口量将继续保持20%以上的高速增长,总量将再创历史新高。
\r\n        到2014年全球液化石油气(LPG)产量将从2010年的2.41亿吨增长到2.75亿吨。LPG主要来自于炼油、原油开采和天然气开采,所占的比例分别为41%、24%和35%。炼油业目前是LPG的首要来源,但预计到2014年全球75%的LPG产量将来自天然气。
', '', '', '113.4.83.157'), +(79, 17, '        以煤炭为主的能源消耗结构,是我国空气污染不断恶化的主要原因。在全国上下寻找治理污染特别是治理雾霾突破口的关键时期,发展清洁的替代能源,推动我国能源结构的调整优化,对大气污染防治具有至关重要的作用。
\r\n        一、调整能源结构已刻不容缓
\r\n        过去十余年,我国经济规模持续快速提升,能源消耗总量也随之迅速扩大,能源生产与能源消费总量均已居世界首位,且呈现“煤炭独大”的严峻格局。2004年国务院发布的《能源中长期发展规划纲要》(2004—2020)提出2020年煤炭消费总量为24亿吨,实际上2010年我国煤炭消费就已超过30亿吨,2013年更接近40亿吨,并以每年3亿吨的速度持续增长。自1984年成为全球最大的煤炭消费国始,到2012年我国已占全球煤炭消费量的47.8%,2013年进一步提升到接近全球一半。
\r\n        相比煤炭而言较为“清洁”的天然气和石油,在我国能源生产与消费总量中比重偏低,且对外依存度过高,使我国的能源安全面临着空前复杂的国际形势。
\r\n        我国境内经济活动并不均匀,95%以上的经济活动集中在1/3的国土,尤以京津冀、长三角、珠三角为甚。在经济活动密集的150万平方公里国土上,燃煤、燃油等能源消费占全国的70%以上,相当于在每平方公里土地上每年燃烧2000吨标准煤。如此大密度燃烧高污染的煤炭等能源,使空气质量持续恶化无法避免。加上每年新增近2000万辆机动车,我国大气污染日益呈现煤烟型污染与汽车尾气污染叠加的重度复合污染态势。
\r\n        历史事件及科学研究早已警告世人,雾霾等空气污染问题对健康极具危害。我国目前严峻的环境形势也表明,优化调整能源结构既是保证能源安全的需要,更是全体国民身体健康的需要。发展清洁“绿色”能源,加快能源替代的进程,优化能源结构已刻不容缓。
\r\n        二、选择替代能源要考虑“三重约束”
\r\n        优化能源结构,关键在于选择适合国情的可替代能源。替代能源的选择必须充分考虑我国能源领域的“三重约束”。
\r\n        化石能源资源结构与生态环境要求的脱节。选择我国的替代能源,躲不过多煤、少油气的能源资源约束。美国能源消费结构中,煤炭消费比重已缩至32%,天然气消费比重由20%增至32%,页岩气取代煤炭成为仅次于石油的第二大能源资源,能源结构总体比较“清洁”。我国化石能源资源呈现典型的“富煤、贫油、少气”特征,目前煤、油、气等一次能源消费比重约为8∶1∶1。2013年石油对外依存度达57.72%,天然气对外依存度达31.6%。经济发达的东部地区过度依赖西部输煤,消耗高品质能源来传输低品质能源。
\r\n        清洁能源环境优势与综合成本劣势的对立。近20年来,可再生能源发电技术不断取得突破,规模经济日益凸显。例如印度由于日照条件好,太阳能发电成本已降至历史新低,接近煤炭发电价位。我国东部经济发达地区日照条件并不理想,且雾霾天增多,难以大规模建立太阳能光伏电站,而分散的家用光伏发电系统需要20年才能回收成本。由于并网政策、补贴政策、信贷政策、规划政策落实不到位,导致我国风电企业成本高企,风电行业“弃风”现象依然严峻。
\r\n        能源需求刚性约束与能源替代目标的矛盾。近年来我国能源需求增速下降主要源于经济增长趋缓,而非能源弹性下降,一旦经济增长提速,能源需求仍有可能增长较快。经济增长对能源总量的刚性需求及短期内能源强度难以大幅下降的现实,使相对低廉的煤炭等化石能源产销较为强劲。非化石能源在我国一次能源中的消费比重从2009年的8%左右增至2013年的9.8%,历时五年仅提升1.8个百分点。“十二五”规划要求我国2015年非化石能源在一次能源中消费比重达到11.4%,此目标恐难完成,2020年15%的目标更难落实。
\r\n        三、发展替代能源的优先顺序
\r\n        综合对上述三重约束的分析,我国发展替代能源的优先顺序应该是:
\r\n        以电为主,电为中心。加大电力生产是我国电力行业的一项中长期战略任务,由核能、可再生能源转化的电能全面取代化石能源只是时间问题,未来应大力推广大城市以电代煤、以电代油。相比电煤,散烧煤才是雾霾的主要源头,应以集中煤电取代分散低效的散烧煤使用,在终端尽快普及用电。以电代煤、以电代油会加剧东部地区电力供需矛盾,虽可加大新一代核电投资,但其建设周期长,新能源短期内规模难以突破,建设特高压电网调入西部能源基地富余电力不失为一个快速见效的办法。2014年国家电网投资将超过3800亿元,其中特高压电网投资约占1/3,其建设将有利于全国范围内能源资源的优化配置。
\r\n        推广用氢,气为支撑。氢是宇宙中最为丰富的元素,在构成宇宙的物质中约占75%。与化石能源相比,氢具有很多优点:资源丰富,水就是地球上名副其实的“氢矿”;环保、高效,是一种能量密度与质量比值极高的能源,且燃烧零污染。只要按章操作,氢气和其他燃料一样安全。目前,氢制备、氢储存、氢使用的安全性都已解决。氢是很好的储能载体,利用电网富余电力制氢并储能是一举两得。日本已开发出较完善的运用太阳能等可再生能源制氢并供燃料电池车(FCV)使用的系统,利用生物质能产业化制氢也已取得突破。除了可再生能源制氢,大力发展页岩气、煤层气、煤制气等气体能源,用于交通、发电、供热,也将是我国能源替代的重要支撑。
\r\n        推广分布式能源,以新能源生产消费为补充。2010年之前全球累计新增发电容量的25%~30%为分布式发电。美国是世界上开发新能源和可再生分布式能源发电最多的国家,到2020年将有一半以上的新建商用或办公建筑使用分布式电源,同时有15%的现有建筑改用分布式电源。分布式能源技术也是我国可持续发展的必然选择,随着技术的成熟、规模的扩大以及相关政策的扶持,未来分布式能源电力的成本将变得更具吸引力,分布式能源即将进入规模实施阶段。
\r\n        四、要从战略高度形成替代能源发展的合力
\r\n        要从民族存亡角度“限煤”,确保煤炭峰值提前。英国伦敦通过“限煤”摆脱“雾都”称号的经验表明,减少煤炭依赖、优化能源结构至关重要。目前,我国的煤炭使用量已大大超过环境容量,因此煤炭峰值的出现不宜太晚,最好到2020年前后。有必要借鉴美国大规模制定清洁能源法律法规的经验,以法律的形式严格限制高污染能源的使用。近期内煤炭可以集中用于发电,逐步减少直至不再用于供热,并优先淘汰终端直接分散燃烧的用煤方式。像北京这样的特大城市,应借鉴伦敦、纽约煤炭占比为零的经验,彻底将燃煤发电及供暖退出历史舞台。
\r\n        要运用多种经济手段,提高清洁能源的经济可行性。美国、德国与日本等发达国家的经验表明,价格调整、政府补贴、直接投资、优惠信贷和减免税收等政策实施能够有效地推动新能源产业的发展。我国应尽快运用定价、税收、补贴、信贷等多种经济政策,通过在能源供应和需求领域产生经济杠杆效应,发挥对清洁能源的激励和对传统能源的约束作用,提高清洁能源替代传统能源的经济可行性,加速实现非化石能源的替代目标。
\r\n        要建设智能电网,为可再生能源的发展提供技术可行性。从本世纪初开始,基于新能源技术、分布式发电技术、大规模储能技术、超远距离超大规模输电技术和智能控制技术的快速发展,世界电网进入智能电网阶段。发展智能电网,能够有效解决我国新能源和分布式电源的并网问题,改善能源结构,保护自然生态,有利于最大限度实现对化石能源的替代。未来必须加快我国智能电网的发展,在凝聚共识的基础上,科学规划、统筹推进、重点突破。
', '', '', '113.4.83.157'), +(80, 17, '        生物燃料通常指生物液体燃料,是重要的交通替代燃料。相对于其他替代燃料,生物燃料具有与现有基础设施兼容性好、能量密度高、清洁低碳、资源可再生且资源基础广阔等优点,而且已具有规模化生产应用的实际经验,可望成为重型卡车、航运和航空等长途交通工具的最经济可行的清洁替代燃料。
\r\n        20世纪90年代以来,为保障能源安全、应对气候变化、保护环境、促进农业发展,许多国家制定实施积极战略和政策,推动生物燃料的规模化开发利用。我国在上述各领域也面临着巨大挑战,也亟待制定符合我国国情的战略和政策,促进生物燃料的规模化发展。
\r\n        为此,国家发展改革委能源研究所开展了“中国可再生能源规模化发展研究”,通过考察分析国际上生物燃料产业发展趋势和政策实践,评估我国生物燃料的发展潜力和重大挑战,进而探讨我国生物燃料规模化发展的战略任务、总体思路和发展路径,并提出促进我国生物燃料产业发展的政策措施建议。
\r\n        一、国际政策趋向——扶持与监管并重
\r\n        20世纪90年代以来,为促进农业经济、改善大气质量、减排温室气体,以美国、欧盟国家和巴西为代表的许多发达国家和发展中国家制定实施了规模空前的生物燃料项目和积极的扶持政策,全面推动了生物燃料产业的蓬勃发展。虽然2008年金融危机以来受到油价低位运行和市场需求疲软的影响,但各国扶持政策保持延续并继续深化,大型石油企业开始大力介入,技术研发取得积极进展,应用领域扩展到航空领域,推动了生物燃料产业加快升级转型和继续扩大规模。
\r\n        目前,以粮糖油为原料的燃料乙醇和生物柴油(通常被称为传统生物燃料,或第一代生物燃料)已进入商业化发展阶段,以农林业有机废弃物、专用非粮能源植物/藻类微生物等生物质为原料的先进生物燃料(或第二代、第三代生物燃料)正在建设一批示范项目,预计在今后10年内逐步实现商业化。2009年全球燃料乙醇和生物柴油产量分别达到5760万吨和1590万吨,绝大部分集中在美国、巴西和欧盟地区。据国际能源机构(IEA)的生物燃料路线图分析,2010年全球生物燃料产量约1000亿升,满足全球3%道路交通燃料需求;2050年生物燃料可满足全球交通能源需求的27%,可年减排21亿吨二氧化碳。
\r\n        虽然生物燃料在近年来发展迅速并初步展示了广阔的发展潜力,但也开始引发了众多争议和批评,主要是生物燃料的节能减排效益和发展潜力、以及对粮食安全和生态环境的威胁,反映了生物燃料产业自身及其社会经济含义的复杂性。
\r\n        近年来,一些领先国家和国际组织积极推动建立扶持与监管并重的政策体系,促进生物燃料产业健康持续发展。在扶持政策方面,
\r\n        早期主要采取了投资补贴、减免消费税和燃油税等措施,近年来美国和欧盟许多国家陆续引入了再生燃料标准(RFS)等强制性市场份额政策,并特别规定先进生物燃料的具体发展目标和更高贡献度。在监管政策方面,近年来欧美国家开始规定生物燃料的最低温室气体减排率,调整农业及土地政策,推动建立可持续生产准则和产品认证体系;包括我国在内的部分发展中国家则禁止使用或严禁扩大使用粮食原料,以确保可持续发展。
\r\n        二、我国生物燃料生产潜力大
\r\n        由于我国人口保持增长、饮食水平的持续提高,而优良耕地减少、水资源相对短缺,利用传统粮糖油原料发展生物燃料的潜力在我国非常有限。利用非粮原料将是我国发展生物燃料的根本方向。
\r\n        我国早在上世纪90年代即开展以甜高粱、小桐子为原料的生物燃料生产技术研究,“十一五”以来,大批企业,包括大型企业,积极投身非粮生物燃料产业研发。目前,我国利用薯类、甜高粱、小桐子等非粮作物/植物生产燃料乙醇和生物柴油的技术已进入示范阶段。木薯和甘薯乙醇技术也可实现商业化应用,广西于2007年建成年产20万吨木薯乙醇项目。甜高粱乙醇技术开发取得实质性进展,已开发出高品质杂交种籽,自主开发的发酵工艺和技术达到实用水平,并在黑龙江省建成年产5000吨乙醇的示范装置。木质纤维素乙醇在原料预处理、纤维素转化以及酶制剂生产成本等方面均取得实质性进展,在黑龙江、河南等地建成了年产数百吨和数千吨乙醇的示范生产装置。生物柴油产业化示范工作的时机也已基本成熟,但受废油资源收集利用量、油料植物种植基地建设进度的限制,目前只有少数生物柴油企业实现规模化持续生产,也没有正式进入车用成品油的主要流通使用体系。其他第二代生物燃料(如合成燃料技术)目前仍处于实验室研究和小规模中试阶段。
\r\n        目前我国还没有全面深入开展生物质能资源潜力评价。初步估算,利用废糖蜜、食品加工业和饮食业废油、棉籽油等废弃糖油类资源,估计可满足年产80万吨燃料乙醇和200万吨以上生物柴油的原料需求。可能源化利用的农作物秸秆和林业剩余物年产量目前约2.5亿吨,且可望继续增加,在中长期可满足年产3000~5000万吨第二代生物燃料的原料需求。另外,还可通过推广良种良法、品种替换、开发劣质边际土地等途径发展能源植物,例如甜高粱、木薯、麻疯树等。相关土地评估显示,我国现有约3200万~7600万公顷边际性土地,但适合能源植物生长的土地资源有待查清。
\r\n        总体估算,我国以非食用粮糖类农作物为原料的燃料乙醇生产潜力近中期约为1500万吨,以废油为原料的生物柴油生产潜力近中期约200万吨,以油料林为原料的生物柴油生产潜力在中长期约为数百万吨,以纤维素和藻类生物质为原料的先进生物燃料生产潜力在长期可达每年数千万吨。
\r\n        通过发展传统生物燃料,估计在近中期具有满足近10%道路交通燃料的潜力;如果实现第二代生物燃料技术的商业化,则我国生物燃料在长远期具有满足20%~30%左右道路交通燃料需求的潜力。
\r\n        三、4大问题待解
\r\n        未来,我国生物燃料产业发展将面临以下4大挑战:
\r\n        (1)原料资源基础仍然薄弱。实际剩余可用边际土地资源潜力不清,缺乏科学评价和规划;原料植物的选育栽培和规模种植经营技术、产业和管理体系有待完善;原料资源来源多样、品质不一。
\r\n        (2)技术产业发展水平不高。技术工艺水平较为落后;资源利用和环境保护水平不高;缺乏符合国内原料特点的整套技术工艺和装备;第二代生物燃料技术离工业化生产还有较大差距;产业模式仍不成熟,有待于建立与“三农”和现代林业和谐发展的产业模式;可持续生产技术规范和模式尚未建立,仍有待于开展良种选育及混交林营建技术等研究,制定保障高能效、高减排的技术标准和规范。
\r\n        (3)缺乏竞争力和抗风险能力。原料成本居高不下甚至还有所攀高;规模经济、范围经济和资源综合利用效益偏低;经济竞争力较弱,存在较大市场风险。
\r\n        (4)扶持政策和市场环境不完善。非粮生物燃料的市场准入和产品流通体系不通畅,无法进入车用成品油经销体系和终端消费市场;行业监管薄弱,存在社会、经济和自然生态风险;扶持价格和财税政策不完善;产品推广使用市场环境不健全,各项基础设施不完善,封闭区域强制使用制度影响跨地区车辆使用性能;指定企业在特定封闭区域销售影响公平竞争。
\r\n        四、生物燃料产业链重心向种植和原料生产倾斜
\r\n        我国生物燃料的规模化生产利用有赖于加快实现产业的转型升级。我国生物燃料产业在今后应完成如下几个战略任务。
\r\n        (1)转变扩大原料结构,夯实资源基础。要从主要利用食用粮糖油农产品等原料转向各种非粮原料,在避免威胁粮食安全前提下有效扩大原料结构,夯实资源基础。
\r\n        (2)完善优化产品结构,提高经济效益。根据原料特点,通过开发整合相关技术工艺、拓展延伸产业链,提高资源梯级利用和综合利用水平,开发高增加值副产品和新产品,实现从单一原料和产品模式转向可利用多种原料、生产多种产品的综合精炼技术的转变,从而完善优化产品结构,显著提高经济效益。
\r\n        (3)调整产业组织结构,提高产业效率。根据非粮生物燃料产业的农林业属性、多样性和地域性等特点,把产业链重心向能源植物种植和原料生产倾斜,建立“分散加工转换+集中精炼调配”的经营模式,充分调动发挥当地农民和政府的积极性。应鼓励中下游的大中型企业与地方农民、中小企业和相关组织建立稳定互利的协作关系和新型农工一体化产业运作模式。
\r\n        (4)转变产业发展理念,确保可持续发展。要创新产业发展理念,实现宏观层次上的农业系统、工业系统和环境系统之间的整合,全面促进可持续发展。从粗放式、破坏性的土地开发和原料植物种植模式转向集约式、保护性的土地开发和原料植物种植模式,减少生态风险和土壤中碳泄漏风险;全面考察、评估和削减生物燃料的原料生产、加工转换和生产应用的能耗水耗、常规污染物和温室气体排放。
\r\n        (5)健全产业政策体系,促进产业健康发展。根据技术进展和产业化进程、原料和产品结构、产业组织结构特点、可持续发展理念和要求,建立健全涵盖资源开发保障、加工转换、产品流通和使用等完整环节的产业监管和激励政策,建立灵活高效的市场机制,确保生物燃料试点工作和规模化发展得以健康有序推进。
\r\n        “十五”期间,我国出台了陈化粮燃料乙醇生产和车用乙醇汽油试点的政策,陈化粮乙醇和变性燃料乙醇享受跟随汽油的联动价格政策和一系列税费优惠政策;生产企业的亏损实行定额补贴。经济激励方面,中央财政将对符合相关要求和标准的林业原料基地补助标准为200元/亩,对农业原料基地补助标准原则上为180元/亩。
', '', '', '113.4.83.157'), +(81, 9, '院各部门:
\r\n        2014年已经过半,为及时总结上半年工作情况,并对下半年工作做好规划和部署,我院决定召开上半年工作会议,具体事宜如下:
\r\n        一、会议时间:暂定为6月末-7月初。
\r\n        二、会议地点:能源院会议室。
\r\n        三、参会人员:院领导班子、各部门负责人。
\r\n        四、会议内容:
\r\n        1、上半年工作计划完成情况汇报,包含2014年度重点工作推进情况汇报;
\r\n        2、下半年工作计划及安排。
\r\n        五、会议议程:
\r\n        1、各部门负责人汇报,发言时间不超10分钟;
\r\n        2、院领导讲话。
\r\n        六、相关要求:
\r\n        1、请各部门负责人根据会议要求提前认真做好准备,整理成书面材料交综合办,要求汇报内容要详实,工作计划要细致,不说空话套话。
\r\n        2、参会人员应准时参加会议,不得缺席。
\r\n
\r\n                                                                                                                     综合办   
\r\n                                                                                                        二〇一四年六月十二日
', '', '', '61.180.252.105'), +(82, 9, '院各部门:
\r\n        2014年已经过半,为及时总结上半年工作情况,并对下半年工作做好规划和部署,我院决定召开上半年工作会议,具体事宜如下:
\r\n        一、会议时间:暂定为6月末-7月初。
\r\n        二、会议地点:能源院会议室。
\r\n        三、参会人员:院领导班子、各部门负责人。
\r\n        四、会议内容:
\r\n        1、上半年工作计划完成情况汇报,包含2014年度重点工作推进情况汇报;
\r\n        2、下半年工作计划及安排。
\r\n        五、会议议程:
\r\n        1、各部门负责人汇报,发言时间不超10分钟;
\r\n        2、院领导讲话。
\r\n        六、相关要求:
\r\n        1、请各部门负责人根据会议要求提前认真做好准备,整理成书面材料交综合办,要求汇报内容要详实,工作计划要细致,不说空话套话。
\r\n        2、参会人员应准时参加会议,不得缺席。
\r\n
\r\n                                                                     综合办   
\r\n                                                           二〇一四年六月十二日
', '', '', '61.180.252.105'), +(83, 16, '        为了隆重庆祝中国共产党成立93周年,我院党委组织全体党员及群众开展党史知识测试等活动祝福党的生日。活动以“共筑中国梦·喜迎建党93周年”为主题,通过回顾93年来党的光辉历程、认真学习贯彻落实党的十八大精神并开展党史知识测试,进一步推进学习型、服务型、效能型、活力型和阳光型党组织建设,进一步强化我院党员的党性观念,进一步发挥党委组织的先进作用和党员的先锋模范作用,推动我院发展实现新的跨越。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n \"\"
\r\n', '', '', '122.159.26.70'), +(84, 16, '        由院机关党委举办的“省科学院职工乒乓球赛”在省科学院石油化学研究院举行,共70多名选手参加了比赛。比赛分三组,为团体比赛。我院共有6名队员参加比赛,虽然大家平时没有经过专门的训练,但都能积极快乐的投入到比赛当中。本次比赛采用单淘汰制,各单位强手在比赛中施展精彩的球技,博来喝彩声不断。最终,自然与生态研究所取得了团体冠军。我院虽然没有进入决赛,但6名队员积极配合相互鼓励,发挥出最好的水平,体现了我院的团队精神。这次比赛不仅为众多院所职工提供了一个相互交流、切磋球技的机会,还提供了一个展示自己,不断提高的机会,也也激发了大家的拼搏热情和团结精神。', '', '', '122.159.26.70'), +(85, 10, '        2014年6月28日黑龙江省能源环境研究院科研办主任王志成同志参加了省科技厅组织召开的“温室、沼气产品创新联盟暨产学研合作对接会”。会议主要内容:1.研究温室、沼气产品产业发展的现状、问题及发展趋势;2.发布温室、沼气产品产业新产品、新装备、新技术,研究编制温室、沼气产品技术标准、设计规范、施工规范等;3.研究组建温室、沼气产品创新联盟。
\r\n        在会上,我院与省内沼气领域的企业、高校、院所充分交流,交换了科研思路并宣传了我院的科研成果,重点推介了我院开发的集成粪便综合利用系统(IMUS)技术。IMUS是工业化封闭环式沼气、发电系统,采用独特的高温厌氧消化技术,使畜禽粪便转化为沼气能源用来发电,产生的沼液、沼渣作为无病原体的生物肥料进行市场化形成了一个自然环境下的循环经济链。
\r\n        我院积极参加沼气产品创新联盟,院企合作,产学研结合,为企业服务,为创新联盟提供技术支撑,为我省沼气产业发展贡献力量。
', '', '', '113.4.72.222'), +(86, 10, '        2014年7月2日,在黑龙江工会大厦,我院科研办主任王志成同志参加了省专利管理局组织的全省高校科研院所知识产权管理工作座谈会。与会的有省专利管理局马峰副局长和综合处领导,以及全省55个科研院所的代表。
\r\n        会上省专利管理局领导听取了我院知识产权管理工作情况,特别是承担专利资金项目后,对专利工作的引导作用情况,我院的知识产权(专利)制度(政策)、管理机制建设情况,专利创造、管理、运用、保护等各方面进展情况,知识产权文化建设情况,知识产权人才培养情况,项目实施中遇到的问题,下步工作打算及对省知识产权局的意见和建议等情况。
\r\n        通过交流,了解了兄弟院所专利工作情况,学习了许多先进经验,也看到我们的不足,为我院今后专利工作指明了方向。同时,也看到我院专利申报人均数量和增长率等指标在省里是名列前茅的,专利工作大有可为。
', '', '', '122.159.58.178'), +(87, 10, '        7月2日,加拿大阿尔伯塔大学医学和病理学实验室庞晓丽教授Pang Xiaoli(Lilly),在能源院一楼会议室就“如何建立分子生物实验室”举行了精彩的讲座,我院徐晓秋院长、关春玲副院长及部分科研人员参加了此次讲座。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n        徐晓秋院长首先表达了愿望,希望用十年的时间,用顶尖的设备、先进的技术和最好的老师,建立并逐步完善我院的分子生物实验室,最终达到国内领先水平,Pang Xiaoli(Lilly)教授十分赞同并表示会尽最大努力予以技术支持。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n         讲座在融洽的气氛中开始,Pang Xiaoli(Lilly)教授首先介绍了加拿大实验室的相关情况,随后结合国外的先进经验,分别从设备、技术、人员、经费等方面详细介绍了实验室的建立方法、区域划分和级别标准,讲座循序渐进,其间Pang Xiaoli(Lilly)教授还不忘与在座人员进行互动交流,我院科研人员纷纷结合我院的实际情况发表了想法和提出问题,Pang Xiaoli(Lilly)教授都一一给予了解答,讲座持续了近二个小时。最后徐晓秋院长代表能源院全体职工对Pang Xiaoli(Lilly)教授的精彩讲座表示感谢,讲座在轻松愉快的气氛中结束。
\r\n
\r\n
\r\n
\r\n                                                                 综合办
\r\n                                                                    2014年7月2日
\r\n
\r\n  
\r\n', '', '', '113.4.72.222'), +(88, 10, '        7月8日,我院在江北会议室召开了由全体职工参加的2014年上半年工作会议。会议由党委书记、院长徐晓秋同志主持。会上各部门负责人分别汇报了本部门上半年工作进展情况,并提出了下半年具体工作计划。
\r\n
\r\n \"\"
\r\n
\r\n        徐晓秋院长结合汇报情况作了重要讲话,徐院长首先对我院上半年的重点工作进行了总结,并对项目申报情况进行了通报,她指出,在全院科技人员的共同努力下,上半年我院在各级科研项目申报、获奖、专利、以及论文等方面均有了一定的增长,接下来我院要继续稳扎稳打,坚定思想,走科研促发展的道路,并鼓励青年人要快速的成长,为我院的长足发展做出贡献。
\r\n
\r\n         随后,徐晓秋院长对我院下半年工作作出了具体部署:一是加强高水平大项目的培育和申报工作;二是科研管理部门要从项目申报、实施、鉴定、成果转化几个环节建立相关制度,加强科研研发工作;三是科研人员要充分接地气,建立畅通的信息渠道,结合实际开展科学研究;四是保证仪器设备的使用率,做好定期维护和校对,为科研工作服好务;五是加速成果转化进程,促进成果转化快速发展;六是加强对外合作,在巩固现有对外合作成果基础上,积极寻求新的合作机会,扩大合作领域;七是抓好安全工作,各部门要高度重视安全管理工作,充分认识安全工作的重要性,要制定工作方案,强化工作措施,在汛期临近之际,要定期开展排查,消除隐患,确保安全。
\r\n         最后,徐晓秋院长希望大家克服人员少,办公空间小等困难,充分抓住机遇,不断提高我院的科研水平。

\r\n
\r\n
\r\n                                                                            综合办公室
\r\n', '', '', '113.4.72.122'), +(89, 10, '

\r\n         近日,我院三名科研工作者通过了ACI(美国认证协会)和MOHRSS(中国人力资源和社会保障部)联合举办的能源管理、能源审计及能源评估岗位培训考核,并获得ACI和MOHRSS颁发的国际注册高级能源管理师、国际注册高级能源审计师及国际注册高级能源评估师证书。
\r\n         ACI(美国认证协会)是由美国哈佛大学、德州大学、耶鲁大学、加州大学、杜克大学、森坦那瑞商学院等美国数十个著名院校的专家教授共同组成的学术认证委员会,在全球范围内从事国际职业资格认证的专业机构,长期致力于专家级高水平认证、考试服务,得到美国政府的合法注册,所有课程均获得了美国教育部承认,其颁发的证书被全球157个国家认可,全球通用。

\r\n
\r\n  

\r\n

\r\n \"\"

\r\n

\r\n \"\"
\r\n  

\r\n

\r\n
\r\n  

\r\n

\r\n \"\"

\r\n

\r\n \"\"
\r\n  

\r\n

\r\n \"\"
\r\n  

\r\n

\r\n \"\"
\r\n  

\r\n

\r\n
\r\n
\r\n  

\r\n

\r\n \"\"
\r\n \"\"
\r\n \"\"

\r\n', '', '', '125.211.131.99'), +(90, 17, '        油页岩热解生成的液态产物汽化后,与气态产物一起首先通过页岩内部的空隙和毛细管扩散到油页岩块之外,然后通过页岩间的空隙至页岩层之外,最后通过页岩层外空间导出干馏装置。在干馏过程中,温度达约105℃时,油页岩主要是干燥脱水。到180℃左右时放出油页岩中包藏的少量气体。温度升高至450~520℃时,油页岩内的有机质即热解生成页岩油蒸汽与热解气体的混合物以及固定碳。油页岩的无机矿物质(有些会脱水或脱CO2)则与固定碳形成页岩半焦。逸出的蒸汽-气体混合物冷却至常温时,便分离成气相和液相。液相产物通常分成互不相溶的两层,一层为页岩油,另一层为水溶液。水溶液中含有能溶于水的NH3、CO2、H2S及水溶性的酚类、氧化物、有机碱及乳化油等。
\r\n        影响因素关于抚顺油页岩、茂名油页岩在不同条件下的热解情况,FRIPP曾进行了大量的研究工作。通过研究结果可知,加热温度、加热时间及加热速度对油页岩的热分解有相当大的影响。加热温度油页岩干馏的最终加热温度影响有机质的分解程度,也是影响页岩油产率的决定性因素。而且,热解产物的二次裂解反应也与最终加热温度有关。用1~2mm的颗粒油页岩,在葛金氏干馏试验装置上考察了加热温度对油页岩干馏的影响。试验结果表明,随着干馏温度的升高,页岩油的产率逐步增加,放出大量页岩油的温度范围为400~450℃。抚顺油页岩、茂名油页岩在加热至450℃时,可产生约90%的页岩油,放出页岩油的最终温度约为505℃。加热时间油页岩的热分解程度不仅取决于最终的加热温度,而且取决于加热时间。在油页岩热解过程中,当热解温度较低时,页岩油的产率随着加热时间的延长而增加;进一步提高热解温度,则分解有机质所需的时间逐渐缩短。采用粒度为1~2mm的抚顺油页岩和茂名油页岩为原料,以2℃•min-1的加热速度升温,考察了加热时间对页岩油产率的影响。当加热温度小于375℃时,页岩油的放出量随着加热时间的延长而增加;温度为450℃时,加热时间超过lh后就不再释出页岩油,表明有机质的热解反应已经完毕。由此可以看出,加热温度愈高,油页岩有机质的分解速度愈快,达到最大页岩油产率所需的时间愈短。如果热解温度大于500℃,则在很短的时间内有机质就能完全热分解,而加热时间对页岩油产率没有明显的影响。所以,最终加热温度是影响热分解反应的主要因素。热解反应所需的加热时间因油页岩性质的不同而异。例如,在其它条件一定的前提下温度为425℃时,茂名油页岩放出页岩油的时间为1h,抚顺油页岩放出页岩油的时间为1.5h;油页岩干馏最终温度大于500℃时,抚顺油页岩及茂名油页岩的页岩油产率在很短的时间内均能达到最高。加热速度油页岩的加热速度影响低温干馏炉的生产强度。
\r\n        块状油页岩在抚顺式炉中的加热速度,一般不超过1.5~5℃•min-1,属于低速加热范围,热量供给速度比油页岩中有机质的化学反应速度要慢得多,在温度上升过程中,油页岩尚未达到最终温度时,有机质即已开始发生热解,反应产物借扩散作用从油页岩内部导出。由于油页岩的受热、有机质的热解反应和反应产物的导出等几个过程是同时进行的,所以在现有干馏工业装置上难于控制油页岩有机质的热解反应。油页岩有机质热分解的研究结果表明:加热速度较低时,加热速度对热解反应产物的产率和组成没有显著的影响,热解反应主要是温度的函数;开始提高加热速度时,页岩油产率略有上升的趋势。加热速度对页岩油产率的影响,是由于两方面的因素造成的。一方面,在相同反应设备和压力等条件下,提高加热速度等于增加了热量的供应,提高了油页岩有机质的反应速度、页岩油的生成速度,使其在设备内停留的时间相对减少,减轻了页岩油在设备内的裂化程度,结果表现为页岩油产率增加。另一方面,若要提高加热速度,就必须提高热载体的温度,这就相当于提高了油页岩外部空间的温度,油页岩热解反应产物—页岩油从油页岩内部向外逸出时所遇到的温度得以升高,页岩油在较高的温度下深度分解,结果造成页岩油产率的降低。此外,不同地区的油页岩其组成和性质不同,加热速度对其影响亦不尽相同。油页岩块径工业上使用的块状油页岩,其块径范围较宽,抚顺油页岩的块径为8~75mm,茂名油页岩的块径为15~125mm。由于油页岩本身的导热性不良,对大块径油页岩而言,加热时其表面与中心存在较大的温差。抚顺页岩油研究所曾在试验室对处在加热过程中的块径不同的(正方体)抚顺油页岩试样的内外温差进行过测定。测定结果发现:在干馏过程中,由于受到脱水及有机质分解等物理-化学过程吸热效应的影响,油页岩的内外温差存在两个高峰,两个高峰分别为200~225℃和475℃左右。第一个高峰在脱水阶段形成。当大量水分被蒸发放出时需要大量的汽化热,此时,由于供给的热量不能迅速传入油页岩块的内部,其内外温差就逐渐加大,并且随着油页岩块径的增大而加大。当水分放出完毕后,外部供给的热量能够较快地传入油页岩内部,温差就逐渐缩小。第二个高峰在油页岩有机质热解和无机物结晶水放出阶段形成。因为有机质的热分解和结晶水的放出也消耗大量的分解热,故造成温差的增大,并且随着页岩块径的增大而增大。所以,在加热温度一定时,块状油页岩比颗粒油页岩需要更长的加热时间才能干馏完全。

\r\n', '', '', '113.9.10.216'), +(91, 17, '        油页岩干馏分为两种,即地下干馏和地上干馏。地下干馏也被称为就地干馏,是在地下对油页岩矿层进行加热和裂解,促使其转化为高品质的油或气,再通过相关通道将油、气分别提取出来。该技术提高了资源开发利用效率,减少了开采过程中对生态环境的破坏,但页岩油收率不高,而且容易导致地下油气污染。地上干馏,是指油页岩经开采并送至地面,经破碎筛分后,送入干馏炉内进行加热干馏,从而生成页岩油气及页岩半焦或页岩灰的方法。目前,地上干馏是油页岩干馏制页岩油的主要途径。
\r\n        油页岩干馏炉可分成外热式炉和内热式炉两种。采用外热式炉时,热气体通过炉壁加热在炉内的油页岩从而进行干馏;采用内热式炉时,油页岩在炉内直接与气体热载体或固体热载体接触,进行干馏。外热式炉的传热效率低,且不易放大,在工业生产上已被淘汰。当前世界上用于工业生产的炉子都是属于内热式的炉。内热式炉也分为两种:块状页岩(粒径25~125mm)干馏炉和颗粒页岩(粒径0~25mm)干馏炉。块状页岩干馏,一般以热燃烧气或热干馏气为气体热载体;颗粒页岩干馏,一般以烧热的页岩灰为固体热载体。两种干馏工艺的主要差别,在于页岩干燥方法不同及所使用的热载体不同。半焦的处理和利用途径亦不同。目前,世界上许多国家都对油页岩干馏已形成工业化生产规模,中国、俄罗斯、爱沙尼亚的发生式炉及德国LR炉处理量小,油收率较低,工艺不先进,但投资少,适用于小规模的页岩炼油厂;爱沙尼亚Kiviter炉和美国TOSCO-Ⅱ炉处理量较大,投资中等,适用于中等规模的油页岩炼油厂;爱沙尼亚Galoter、巴西Petrosix及加拿大Alberta-Taciuk炉处理量大,油收率高,适用于大、中型油页岩炼油厂。
\r\n        一、油页岩干馏工业发展现状
\r\n        从1838年法国页岩油工业开始至今,油页岩的开发和应用有近200年历史。油页岩工业也曾几度兴衰。随着世界油价的高起,有关国家对油页岩的开发利用又活跃起来。于2005年,美国国会通过了发展非常规能源的法案,在美国掀起了油页岩干馏炼油的研发高潮。美国内政部己经批准了6个土地矿产租赁项目,支持开展油页岩干馏炼油。据美国能源部2008年的统计报告显示,开展油页岩加工利用研究的公司有29家,从事地下干馏研究的有14家公司,从事地上干馏研究的有11家公司,从事页岩油加氢制取轻质油品研究的有2家公司。目前的研究多处于实验室、数学模拟或概念研究阶段。中国油页岩的开发利用起步较早,规模也比较大,但长期以来并没有明显进步。近年来,随着全国能源需求的不断增长,为缓解能源供需矛盾,抚顺、桦甸、罗子沟、黄县等油页岩老矿先后恢复了生产。2008年,我国页岩油年产量约40万t,其中我国最大的油页岩炼油厂—抚顺矿业集团油页岩炼油厂的产量就达35万t。我国的科研院所和相关企业在油页岩利用技术方面也进行了深入的研究。抚顺矿业集团于2006年成立了“辽宁省抚顺矿业集团工程技术研究中心”,针对抚顺炉单台装置处理能力小、油收率低、环境污染严重等问题,将油页岩的综合利用作为研发重点,开发油页岩干馏新工艺和相应的大型生产装置,研究页岩油生产过程中产生的废水、废渣等的处理与循环利用技术。大连理工大学为大庆油田开发的颗粒页岩固体热载体干馏技术,日加工油页岩2000t,拟建设柳树河油页岩工业试验装置。中煤集团黑龙江哈尔滨煤化工公司开展油页岩流化干馏炼油中试已取得初步成功(日加工油页岩50t),日加工油页岩2000t的工业试验装置的可行性研究报告已初步通过。
\r\n        二、油页岩干馏技术应用展望
\r\n        油页岩资源储量丰富,开采和应用有近200年的历史,取得了很多成功经验,并在不断改进。预计随着国际油价的不断上涨,以及剩余油、低渗透油气藏开发难度的增加、天然气水合物开发的瓶颈技术暂时无重大突破等原因的影响,各个国家将会对二十一世纪非常重要的接替能源油页岩的重视程度不断加强。目前,制取页岩油的主要方式是地上干馏,干馏会产生大量灰渣,不仅污染空气,且废弃的灰渣中的金属元素和微量元素渗入地下,造成污染环境。地下转化工艺技术(ICP)是壳牌公司投入巨资研发出的开采油页岩的专利技术,在美国科罗拉多州和加拿大阿尔伯特省进行了商业示范。按照2005年5月每桶原油开发成本计算,传统的干馏技术为20美元•桶-1,使用ICP技术生产成本为12美元•桶-1,大大低于传统的干馏技术,使该技术在油价高于25美元•桶-1时即可盈利。而且该技术无需采矿,减少了开采过程中对生态环境的破坏,尽管该项技术现在还未完全商业化,但关键的工艺、设备等技术问题都已解决,这种新技术必将引导和推动油页岩干馏技术的不断进步和发展。随着技术工艺的不断改进和环保意识的不断增强以及经济效益要求的不断提高,油页岩资源将由从前的单纯能源利用向综合利用效益最大化方向转化。油页岩开采后不仅仅是作为能源被利用,即干馏提炼页岩油;直接燃烧发电。而是通过加氢精制和非加氢精制的方法从干馏后的页岩油中进一步制取汽油、煤油、柴油、石蜡、石焦油等多种化工产品,精制后的重油还可再作燃料使用。用油页岩作为发电的燃料,可直接用作锅炉燃料,或经过低温干馏利用产生的气体燃烧发电,干馏和直接燃烧产生的灰渣可以用来充填矿井、也可用来制造水泥熟料、陶瓷纤维、陶粒、砖块等建筑材料;废气可以作为燃料燃烧产生蒸汽供生产、生活使用,也可再作为油页岩干馏的热源循环使用。油页岩资源的综合开发利用展示出了诱人前景,不仅符合发展循环经济的要求,而且也将带来良好的经济效益、环保效益和社会效益。

\r\n', '', '', '113.9.10.216'), +(92, 10, '        7月30日,省科学院第5届外语大赛在高研院举行,经过个人演讲,评委提问,团体展示等环节,我院参赛的选手不负重望,取得了优异的成绩。其中,杨光获得个人赛一等奖,陆佳获个人赛二等奖,潘良获个人赛优秀奖,我院在团体赛中也表现不俗,获得团体优秀奖。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '1.189.197.76'), +(93, 10, '        2014年7月29日我院徐晓秋院长、关春玲副院长陪同省环科院叶真主任、黑龙江科技大学周国江教授,到我院位于杜蒙的集成粪便综合利用系统(IMUS)示范装置考察。徐院长向两位专家详细介绍了我省畜禽粪便量、目前粗放的处理方式和污染破坏环境的情况,以及IMUS项目的由来,工业化封闭环式沼气系统的特点及优势。
\r\n
\r\n \"\"
\r\n
\r\n        IMUS采用独特的高温消化技术,将畜禽粪便转换为能源、生物肥料和可再利用的水,通过高温厌氧发酵来生产沼气并用其来发电。后营养物可作为无病原体的生物肥料市场化,水可以再次用于IMUS系统或者用于灌溉。IMUS 技术不仅全部利用生物废物中的能源和养分,它还减轻温室气体排放和农业、城市、食品加工等废物造成的其它环境和社会压力。IMUS系统是世界上唯一在高寒地区运行的利用牛粪进行发电,并回收其养分生产肥料的综合利用系统,属国内领先水平。
\r\n
\r\n \"\"
\r\n
\r\n        两位专家认真听取了徐院长的介绍,一致认为IMUS项目是一项既能解决我省高寒地区畜禽粪便严重污染环境的技术,同时也是一项清洁可再生的能源项目。一项技术能同时解决我国环境和能源这两大经济发展中的瓶颈问题,值得大力推广。今后省环科院要在环保技术推广中,推广此技术。此外,IMUS技术还可以应用在城市污泥处理上,市场巨大,更利于推广,大有可为。', '', '', '1.189.181.83'), +(94, 17, '        截至2012年底,世界原油探明储量2358亿吨,比2011年增长0.9%。原油储量最多的中东地区,保持小幅增长,已探明储量为1093亿吨,同比增长1.2%。原油资源仍然集中在欧佩克,欧佩克控制着世界原油储量的72.6%,这是自1998年以来的最高比例。到2012年底世界原油储采比保持在52.9。
\r\n        2012年,世界原油生产41.19亿吨,比2011年增长2.2%,产量明显增长主要来自北美和非洲地区。北美地区原油产量增幅最大,同比增长8.9%,非洲地区产量增幅也达7.7%。中东地区产量仅增长0.9%,为13.37亿吨,占世界总产量的32.5%。欧佩克生产原油17.78亿吨,占世界的43.2%,高于2011年42.4%的比例。
\r\n        2012年,世界石油消费总量为41.3亿吨,比2011年增长0.9%,已连续3年在化石燃料中处于最低的增长率。分地区看,欧美地区原油消费继续回落,其中,北美消费量为10.17亿吨(占世界24.6%),同比下降1.8%;欧洲和欧亚大陆消费量8.8亿吨(占世界21.3%),同比下降2.5%。其中,亚太和中东地区原油消费继续增长,其中,亚太地区消费量13.89亿吨(占33.6%),同比上升3.7%;中东消费量3.96亿吨(占9.1%),同比上升4.5%。经合组织国家的石油消费下降1.3%(53万桶/天),为过去7年中的第6次下降,占全球消费量的52.2%,为有记录以来的最小份额;非经合组织的石油消费增长了140万桶/天,即增长3.3%。
\r\n        从主要石油资源国来看,位列2012年世界石油探明储量第一的仍是委内瑞拉465亿吨(占世界17.8%),2010年时委内瑞拉为304亿吨(占15.3%),居第二位,2011年晋升至第一位;沙特阿拉伯以365亿吨(占15.9%)退居第二;加拿大280亿吨(占10.4%)、伊朗216亿吨(占9.4%)、伊拉克202亿吨(占9.0%)分列第三、四、五位。在2012年排名中,中国探明储量排名由上一年第15位升至第14位,储采比由上年末的9.9升至11.4。
\r\n        从主要产油国来看,欧佩克占全球石油产量增长的约72%,尽管由于国际制裁,伊朗产量有下降(减68万桶/天),利比亚产量(增100万桶/天)几乎恢复了2011年的全部损失,沙特阿拉伯、阿联酋和卡塔尔产量连续第二年达到了创纪录的水平,伊拉克和科威特产量也显着增加。伊朗石油供应的减少,由利比亚生产的恢复以及沙特阿拉伯和其他欧佩克国家增产完全抵消而有余。
\r\n        2012年全球生产原油名列前茅的国家排名中,沙特阿拉伯仍位居世界第一大原油生产国,产量5.47亿吨,同比增长3.7%;在2010年曾位于第一位的俄罗斯继续退居第二,产量5.26亿吨,同比增长1.2%;美国产量大幅增长13.9%,达到3.95亿吨,稳居第三位,美国新增的产量大多来自于全新的页岩油产区——北达科他州巴肯页岩或得克萨斯州的鹰福特页岩,伴随着页岩气革命而日趋成熟的水力压裂和水平井技术使这些地区的非传统石油产量得到了充分的释放;伊朗产量下降,与中国互换座次;伊拉克产量大幅增长,位次上升,委内瑞拉排名下挫。
\r\n        从原油主要消费国来看,2012年美国、中国、日本、印度、俄罗斯依然占据前五位。美国原油消费仍居首位,为8.2亿吨,比2011年下降2.3%,占世界消费量的19.8%,消费量和占比均有下降;中国消费量为4.84亿吨,再次创纪录,同比增长5.0%,低于过去十年的平均水平,占比11.7%;日本消费量2.18亿吨,同比增长6.3%,这是自1994年以来最强劲的增长。
\r\n        2012年,世界原油贸易总量为5531.4万桶/日,比上年增长1.3%,贸易量占全球消费量的62%,占比有所提升。其中,原油进口大国美国贸易量出现下滑,为1058.7万桶/日,同比下降6.6%,目前美国的石油进口是20世纪90年代中期以来最少的;而中国的石油净进口增长了61万桶/天,占全球增长的86%;日本的进口贸易量同比增长5.5%。出口贸易集中的前苏联和中东地区贸易量均出现下滑,分别为859.7万桶/日和1969.9万桶/日,同比分别下降2.2%和0.3%,而北非和加拿大的出口贸易大幅增长33.6%和9.2%,抵消了几个地区的出口下降。
\r\n        预计2014年国际石油需求将每天增长120万桶(2013年为93万桶),2014年石油生产和消费增长动力主要为美国。中国、美国、印度、巴西、印度尼西亚和韩国将是重要国际能源消费国。2014年非欧佩克国家石油开采量将达到20年来最高值,对欧佩克石油的需求将从2013年的2960万桶/天下降到2940万桶/天(当前开采量为3061万桶/天)。在这种情况下,包括沙特阿拉伯在内的大多数欧佩克石油出口国将由于市场饱和而被迫减少石油开采量。国际能源机构指出,欧佩克国家对石油的依赖将由于美国和加拿大页岩油新开采技术的使用而进一步削弱。

\r\n', '', '', '1.189.181.83'), +(95, 17, '        目前我国炼油产能严重过剩,2013年炼厂平均开工率仅67.3%,同比下降了2.4个百分点。受益于成品油定价机制调整,2013年我国炼油行业实现了扭亏,实现利润400亿元。但由于一方面炼厂产能不断扩展,另一方面,我国成品油消费增速正在逐步下行,我国成品油市场过剩的现象正在加剧。据业内人士透露:“目前国内总炼油能力超过了7亿吨,如果提高开工负荷,近5年内可以不用新建炼厂“。造成低开工率的原因主要是国内成品油产能严重过剩。
\r\n        按照国际标准,某一行业的开工率如果降至70%,这一行业就属于产能过剩行业。目前我国的炼油业开工负荷还不足70%,已经算是严重过剩。虽然产能严重过剩,但国内炼油项目仍在新建、扩建中,其中,2013年我国新增炼油能力4000万吨。扩建的项目包括乌石化、安庆、武汉、胜利、榆林、汇丰、玉皇、盛马、利安。新建的项目包括:海南东方、福建腾龙、东辰、天弘、海跃、富宇、东方华龙、乌苏华泰等。近年来,民营炼厂投资热情依然非常高涨。随着民营炼厂的新建扩建,民营企业在我国成品油供应市场份额的占比从2012年的10%上升到2013年的13%。
\r\n        从需求来看,2000年到2005年我国石油消费年均增速为7.3%、成品油消费年均增速为8.7%、消费柴汽比为2.28:1;2005年到2010年分别为7.2%、7.9%、2.2:1;2010年到2013年分别为3.6%、5.2%、1.8:1。
\r\n        成品油需求增速下降是短期因素和长期因素的叠加而导致的。经济方面,我国产业结构转型、新兴城镇化进程加快,三产发展的速度超过二产;产业方面,我国钢铁、水泥、电解铝、平板玻璃、船舶等主要用油行业产能全面过剩;第三,汽油需求增长率远超过柴油,但近年来不少城市陆续实施限购、限行措施,对汽油消费也可能造成影响。
\r\n        一、国内成品油市场环境的变化,倒逼我国炼油企业早日转型。
\r\n        据业内人士透露:“与其扩大产能,不如提高油品质量,差异化经营。”从油品质量升级寻求突破口,对炼油企业来说是个机遇。很多企业通过升级改造已经从中获利。另外,成品油出口也是一个机遇。虽然我国油品进出口受限于商务部配额限制,但我国成品油出口有望逐步放开。初步判断2015年亚太地区的汽油还略有缺口,而柴油和煤油则供大于求。
\r\n        当今世界炼化行业的大型化、基地化、一体化已成趋势。2012年和2013年的数据显示,我国炼油能力已超过每年6亿吨的规模,位居全球第二。千万吨级的炼油企业达到24家,产能超过3亿吨,约占全国产能一半稍强。其中,有22家隶属中国石油和中国石化两大集团。这使得中国石化和中国石油炼油平均规模分别达到每年778万吨和658万吨。与此同时,国内却有百余家规模在200万吨级以下的炼油企业,占全国产能的8%稍弱。这些数据说明,我国炼厂的潜在技术效率总体平均水平依然不高,且分布不平衡。
\r\n        由于现行的原油配置政策,多数地方民营炼厂不能获得稳定的原料供应,依靠少量不稳定的原油和大量高成本的进口燃料油,若能实现40%以上的开工率就已经属于乐观状态了。自然,地方民营炼厂的开工率拉低了全国炼油行业的平均生产能力利用率。可就算是在这种条件下,这些潜在技术效率低、生产能力利用率低、原料成本高的小型炼厂依然能够存活的事实透露了很多重要的信息,其中最为重要的是,中国的成品油政府定价足够高。因此,这就不难理解业内专家对产能过剩忧心忡忡的原因。
\r\n        通过举例可以说明问题,若在新加坡成品油现货市场价格基础上,加上运保费作为到岸价格,支付进口关税、给予批发零售环节合理的利润率,再加上所有环节增值税及从量消费税进行计算,我们会发现自2008年6月以后,这个“放开成品油进口,成品油批发零售环节合理竞争”意义的影子价格总是低于国内的同期政府定价。即便如此,炼化企业也不是普遍盈利的。也就是说,以中国炼油企业的总体效率,同韩国、印度、日本、新加坡炼厂在国际市场竞争,基本没有可能。目前中国国内市场的成品油需求主要靠本土成品油供应,不受进口成品油冲击已然是幸运的了。沿着这个思路自然可以理解,炼油效率足够高是判断产能真正过剩的必要条件。低效率厂商不能获得满意的市场份额,导致开工率不足,不意味着具有经济意义的产能过剩。缺乏效率,在开放市场中,再低的产能也有可能成为过剩产能。
\r\n        需要说明的是,对于中国炼油企业总体效率偏低的判断并不排除个别企业实现高效率的可能,更不否认优秀炼油企业存在的现实。剔除炼厂规模和投产年代差异等因素,国内炼厂的生产效率和财务绩效差异仍是巨大的。其实,对于中国成品油高油价和炼厂普遍亏损并存的论断并不公平,至少是不够全面、客观的。由于众所周知的历史和现实原因,太多的国企央企承担了一些至少在规范市场经济体制下被普遍视为过分的“社会责任”。石油系统内,很多基层单位的冗员问题至今不能根据市场规则得到解决。而中国大型炼厂的员工数量数十倍于国外相同规模的炼厂也是非常普遍的现象。我们很难期待这些炼油企业能够在国际市场上争夺一席之地。
\r\n        当然,最近几年各地大型炼油设施投资增长过快的推手离不开地方政府对政绩的追逐和石化企业对市场的争夺,但这不足以造就真正意义的产能过剩。高成本的企业没有被迫停产关闭,小规模的没有被淘汰,低效率的没有去“瘦身”。如同自然界食肉动物的饥饿有可能是因为猎物数量的增长没能抵消捕食能力的衰退。我们看到的“产能过剩”只是所捕获的猎物变少,并不是捕食者变多,或者猎物变少。
\r\n        总之,提出“炼油行业产能过剩”的论断,并非意在吓退潜在的行业进入者,或者希望政府继续整顿小炼厂,而是对于政府进一步理顺体制、改进政策、企业不断提升效率有所期望。中国炼油产能过剩或许只是个伪命题。
', '', '', '1.189.181.83'), +(96, 17, '        当前,国际能源格局正处于深刻变化之中,全球经济期待新的增长引擎拉动,欧元区危机日益加深,延宕世界经济复苏,西方社会整体陷入体制性危机。国际社会陷于全球经济危机后的全面调整之中,美国加速衰落,使世界政治和经济格局向多极转变和向无极世界继续滑落两个方向发展,新的国际秩序呼唤中国高效参与全球和区域治理,广泛参与多边国际事务,塑造新的国际格局,综合维护国家利益和能源安全。全球人口资源环境矛盾突出,气候变化谈判成为国际热点之一,新能源研发和节能环保技术将成为核心推动力,从而引领世界经济发展方向。未来世界的能源供应转向区域化和本土化,分布式能源网络建设提速。西方世界处于向新型工业化社会转型阶段,面临技术创新取得突破的前夜。2015年之前世界经济仍普遍低迷,2020年后将出现新的增长。发展中新兴国家追赶式现代化面临挑战,中国经济减速至7.5~8%。欧美中新技术突破之前,2015~ 2020年世界经济形势暗淡。2012~2020年的8年是中国“转方式、调结构”的重要机遇期,2013年是中俄签署天然气贸易合同的良好时间窗口。2020年后常规资源包括油气价格仍将因稀缺性而震荡上扬。
\r\n        一、中国:技术创新改写全球能源格局
\r\n        当前页岩气和页岩油开发是全球能源领域的一场技术革命,是全球油气勘探开发的新方向。2005年以来,美国页岩革命已导致国际能源市场发生深刻变化,已经开始改写全球能源政治版图。
\r\n 随着美国页岩气开采技术取得突破进展,美国能源重心从中东-西非逐渐西移转向北美地区和本土,对外依存度显著下降。2005年美国页岩气年产量仅196亿立方米,而2010年已达到1378亿立方米,加上致密砂岩气和煤层甲烷气,非常规天然气产量约占美国天然气总产量一半以上,2030年将达到65%。页岩气开发利用使美国国内天然气价格出现暴跌(0.5元/立方米),已在改变美国的能源消费结构。
\r\n        美国石油对外依存度呈现下降态势。美国能源信息署(EIA)数据显示,2005年美国石油对外依存度高达60.3%,2010年下降到49.3%,2011年进一步降至45%。未来10年美国计划把石油进口量再削减1/3。美国2010 年能源综合自给率为78%,预计在2035年将达到87%。
\r\n        EIA还预测美国将在2016 年成为LNG 净出口国,2021年成为天然气总量净出口国,2025年成为管道天然气净出口国。2035年美国石油及其他液体燃料的自给率也将超过60%。
\r\n        与美国能源走向独立形成鲜明对比的是,由于经济保持高速增长,以中国为首的东亚和印度为首的南亚地区石油对外依存度节节攀升。2011年中国消费能源34.8亿吨标煤,超过美国成为全球第一大能源消费国,新增消费2.3亿吨标煤。中国能源消耗量占全球19.5%,煤炭消费量相当于其他国家的总和,高能耗产生了仅占世界8.6%的GDP。中国2013年石油依附度已达到58.8%,远超美国。中国占世界能源消费总量由2000年的9.02%飙升至2010年的20.82%,2020年前仍将继续攀升。
\r\n  中国的对外依存度过高,供求矛盾突出,从而制约经济社会发展。中国石油消费已进入快速增长时期,石油供需缺口将越来越大,2020年中国石油对外依存度将上升至超过66%。中国对外石油依赖程度越高,国家控制短缺风险的能力越弱。一旦发生石油进口通道受阻等情况,必然对整个国民经济和社会生活秩序产生消极影响。如果中国经济的运行秩序经常受到石油市场行情波动和供应紧平衡的影响,可持续发展能力将会受到掣肘。
\r\n  中国石油定价机制不完善,市场风险增大。中国石油定价机制的弹性不足使中国石油安全在国际油价的变化中承受极大风险。国际油价上涨给中国经济运行和居民生活带来一定的负面影响,高油价导致外汇支出增加、企业成本加大、居民消费支出增加,抑制经济活力,输入性通胀加剧潜在国内通货膨胀压力,并增大国家宏观调控难度。
\r\n  2000~2010年期间,世界基础能源(包括石油、天然气、煤炭、水电和核电,不含新能源)消费总量年增长率为2.67%,亚太地区年均增长率则为6.34%,而北美、欧洲、独联体地区年均增长率仅为0.2%。
\r\n  中国尽管页岩气资源丰富,可采资源量约25万亿立方米,潜力巨大,但与美国页岩的平原分布相比,中国页岩发育层系构造复杂,分布地带多为山丘,开发难度较大。矿产资源普查基础工作薄弱,地质理论有待创新和高端突破,可采储量尚需进一步落实。此外,开发技术滞后、水资源相对匮乏、资源区人口密集是我国页岩气开发的不利因素。而水平井钻完井技术、分段压裂等核心技术落后,我国与美国相比落后10年,这些已成为阻碍页岩气开发的瓶颈。
\r\n  随着西亚北非“阿拉伯之春”运动的发生和欧元区崩溃,新的全球能源格局浮出水面。国际能源格局将发生深刻变化:
\r\n  1、以美国为代表的西半球非常规油气资源的新发现,打压油气价格并降低供应的波动性,全球石油供应中断的威胁下降;但华盛顿掌握着油价的标价权,其将实行弱势或强势或美元政策影响油价升降。
\r\n  2、能源供应形势的乐观态势将极大改善国际关系和能源格局。石油输出国组织(OPEC,简称欧佩克)作为卡特尔组织功能消退,局势动荡的石油国家如伊朗、伊拉克、委内瑞拉可能会被边缘化。
\r\n  3、欧洲持续推进能源多元化战略,大力发展洁净能源和新能源,降低对俄罗斯的能源依赖,加大从中东-北非-中亚的油气进口。
\r\n  4、传统油气资源的供应国与消费国之间的竞争将集中于新兴国家经济体和OPEC之间,中国更是首当其冲,被推上前台。
\r\n  5、中美继续争夺新能源关键技术研发的战略制高点和创新市场。新能源(非常规油气和可再生能源)的经济性即价格成本能否接近常规油气资源是技术竞争的焦点。
\r\n  美国取代俄罗斯,摘取世界天然气生产大国的桂冠,俄罗斯天然气工业股份公司(Газпром,俄气)将丧失欧洲天然气市场的霸主地位,2011年俄气对德国、挪威和荷兰的天然气出口大幅下降。俄欧能源一体化战略已逐渐沦为空想。
\r\n  在发动页岩气革命之后,美国页岩油开采凯歌行进。这势必会引起全球能源消费格局的变革甚至地缘政治的震动。Cambridge EnergyResearch Associates (CERA)公司对美国和加拿大48个油田共28口页岩油油井的调查显示,储量为8.41亿吨,开采成本仅为23.77美元/桶,在当前油价和税制条件下,利润空间很大。15年之后,美国页岩油日产量将达到4.5百万~5百万桶,相当于俄罗斯目前日产量的一半。
\r\n  2015年之后,中国、印度、加拿大等国以及欧盟开始页岩气的工业开采,俄气在国际市场份额受挤压,地位开始下降。尽管俄气也有页岩气项目,可以随时增加产量,但外部市场不容乐观。俄气计划2013年底分别与印度(LNG形式供应)和中国签署天然气出口协议。
\r\n  如果世界油价在普京第一个六年任期保持低位,俄罗斯预算对能源出口创汇的依赖度难以下调,俄罗斯将面临巨大困境,从能源出口依附型经济向创新型国家的转变就难以有充足的启动资金。
\r\n  为确保能源供应保障中国应采取的对策
\r\n  2030年之前,常规油气资源仍将是工业化和后工业化国家的主导性能源,石油作为常规军事机器和交通运输的主要动力燃料不会改变,可再生能源仅占世界能源平衡的16%。美国拥有打压世界油气价格下行的能力,但美国因此获得美元贬值的自由空间度。
\r\n  1、随着美国从中东-北非石油进口的下降和退出,中国进一步密接同中东、北非能源国家的战略合作,如推进中国-海合会国家自贸区建设和人民币对伊斯兰世界国际化水平;中国应加强同日、韩的能源合作,减少在寻求国际石油天然气资源方面的激烈对抗和冲突,避免过度竞争。
\r\n  2、中国利用上合组织与欧亚同盟之间的交叉与融合,争取人民币成为上合成员国能源贸易的结算货币;考虑俄罗斯对中亚-外高加索地区的关切,应注重平衡中俄利益,共同维护中亚地区的安全和能源利益;中国与俄罗斯应加强能源科技创新合作、研发氦提取与封存技术、稀土和铀资源开发战略的协调。
\r\n  3、中国继续推进西部陆路能源大通道和中国-土耳其-欧洲铁路新大陆桥建设;按照《上合组织中期发展战略规划》适时扩大上合组织,第一批纳入巴基斯坦、印度,之后适时批准蒙古和伊朗加入;下次峰会应考虑土耳其成为观察员国。2012年6月北京峰会已批准阿富汗为观察员国,上合应针对2014年美国撤军后的后阿富汗重建达成共识。
\r\n  4、中国需要善用金融工具,利用G20机制作为全球金融治理平台,推动对发展中国家有利的规则制定,加强原油及其衍生品期货市场建设,使上海成为东亚和世界石油定价中心之一。
\r\n  5、加快产业结构和能源消费结构调整,推进高能效技术创新,发展新能源和核能;能源结构以煤为主,优质能源资源如石油、天然气等比例偏低,能源结构不合理。资源勘探相对滞后,影响了能源产能提高,资源利用效率也亟待提高。同时,中国煤炭清洁利用水平低,煤炭燃烧产生的污染给生态环境带来很大压力,在国际气候谈判中处于被动地位。
\r\n  6、改变平行推进的“救火式”外交,确定中国外交战略的优先方向:重点落实区域经济一体化战略(中日韩自贸区、东盟10+3、中哈自贸区建设、中国东北与俄罗斯远东和东西伯利亚区域合作);第二层面加强中非合作;同时注重大国协调,以义为先,推行和谐世界的义利观;放弃不结盟政策而采取负责任的盟友战略;放弃不干涉内政原则,维护国际正义。
\r\n  7、坚定维护南海海洋国土主权,同时加快南海深水油气开发,2020年前尝试可燃冰的工业开发。
\r\n  8、创新能源合作方式,促成中俄通过天然气“上下游一体化”合作模式,缔结长期管道天然气贸易合同,打造与优先发展的中俄战略协作伙伴关系战略定位相匹配的“新型能源共同体”。中俄原油贸易将扩大到5000万吨,天然气价格谈判障碍将在上下游一体化模式探索中取得突破。俄方计划在欧亚同盟一体化能源战略框架内制定对中国的天然气出口路线。俄近期将突破从东西伯利亚天然气之中分离氦气技术、制定欧亚同盟铀出口战略,以及俄东部稀土开发战略。
\r\n  9、加快推进社会主义民主和法治建设,维护国内社会的整体稳定和谐,为实施我国大国外交战略奠定坚实的国内环境和执政基础。
\r\n  二、美国专家之预测
\r\n  西半球非常规油气资源的新发现,弱化了油气供应中断的威胁,降低了油气价格的波动性,有利于改善国际关系。西方国家石油产量自1952年以来将首次有望满足需求,美国天然气自给自足可以维持100年。科技革命带来了能源供应的革命。先进的地震技术和复杂的钻探方法开启了以前不为人知或无法获取的矿藏。在石油方面,美国、加拿大、巴西(可能还包括墨西哥)的产量将大幅增长。上述国家在未来20年可能会位居全球7大能源生产国之列。美国的能源政策将越来越侧重于在西半球的关系,力求在整个美洲地区促成一个自贸区。
\r\n  地缘政治因素造成的供应中断将不会再产生那么大的影响,石油禁运将不会像1973年阿拉伯国家或1979年伊朗所实施的禁运那样造成严重破坏。国内冲突(如在伊拉克和利比亚发生的冲突)引发的石油产量下降也将不至于产生严重后果。简单来说,稳定产油国的名单将变得更长,这将让任何一个处于动乱状态的国家的影响变得更为有限。对冲基金利用金融工具成功操纵市场的可能性将因能源市场规模巨大而减小。二战后西方曾在能源生产方面引领世界。西方的消费量飙升,中东的产量增加,不稳定性也随之而来,能源从东方向西方输出。如今这种流动即将逆转,国际格局将会改变。中东地区在地缘政治中的核心地位将会减弱,欧佩克作为一个卡特尔组织(已在衰落)的设想将走向尾声。
\r\n  美国坚信,未来世界的经济和政治中心在东亚,美国积极回归西太平洋地区,加紧防范中国崛起。而美国长期部署在海湾地区的军力将减少,美国在海湾的唯一优先事务将是维护沙特阿拉伯和以色列的稳定。另外,美国政府今后的紧缩预算将支持削减阿以两国国防支出,因为这两个国家都已高度军事化。
\r\n  俄罗斯等其他渴望获得国际权力的石油国家在全球的影响力也将遭到削弱。西方国家石油产量的不断飙升,将导致俄罗斯等国家被边缘化。随着美国成为液化天然气出口国,俄罗斯威胁切断对欧洲能源供应的能力将减弱。再加上俄罗斯人口不断减少且经济疲弱,俄罗斯可能将进一步走向衰落。
\r\n  中国将受到很大影响。中国80%的石油需求可能最终依靠进口。中国的石油日进口量预计将从400万桶增至1200万桶。中国已是中东和非洲石油的最大客户,被迫卷入这一地区的冲突调节。随着西方对中东保护减弱,中国将承继美国在此留下的脆弱性负担。
\r\n  石油进口在美国中东战略目标中的重要性下降,虽然这并不意味着美国会放弃中东,但是,美国取得“能源独立”会让其在推进中东民主化、抑制伊朗崛起、保护以色列安全等战略目标时,变得更加强硬。美国若不再依赖国际能源市场,全球能源供应方将更加积极地寻求需求方,尤其是对接东亚。对中国而言,这将会留给中国更多境外能源扩展空间;另一方面,美国若不再积极维护全球主要通道的安全,那么全球能源供给和运输的风险将上升。
\r\n  EIA于2013年6月宣布,俄罗斯页岩油储量750亿桶,居世界第一位。美国页岩油可采储量580亿桶,居第二位;中国320亿桶,居第三位。其后为阿根廷、利比亚、委内瑞拉和墨西哥。全球页岩油总储量评价为3450亿桶,占石油可采储量的10%。
\r\n  页岩气储量排名:中国为31.57万亿立方米,阿根廷为22.71万亿立方米,阿尔及利亚为20万亿立方米。美国页岩气产量第一,但储量排名第四,为18.83万亿立方米。俄罗斯页岩气储量为8万亿立方米,排名第九。全球页岩气资源量为206万亿立方米,为常规可采天然气储量的32%。
\r\n  三、俄罗斯专家对2035年前能源形势的预测
\r\n  俄能源部能源战略研究所专家认为,石油开采的峰值期不断被技术的新突破所推迟。2035年石油消费将增长20%,天然气增长55%。未来25年内,可再生能源将增长70%,在能源平衡中将达到16%。油价预测关涉对世界经济发展态势的研判。2035年油价平衡价位为125美元/桶。2010~2035年,天然气市场的发展要快于石油,分别为56%和21%。全球天然气消费量将达5万亿~5.5万亿立方米,价格将增长50%,主要驱动力是天然气电站。
\r\n  亚洲发展中国家油气消费量占世界新增消费量的65%,这些国家是新增碳排放量的主要贡献国,而发达国家温室气体排放下降。2035年主要能源进口国为欧洲和亚洲国家。北美将减少甚至停止进口某些能源品种。北美走向能源独立,可能形成区域能源价格,2035年可出口LNG为300亿立方米/年。尽管数量不大,但将改写世界天然气分配流向。
\r\n非常规的页岩油、油砂、稠油的开发将对市场产生重大影响,2006~2011年页岩油的开采成本已经下降一半,这是页岩气开采技术的突破对页岩油开发所产生的实际影响。北美地区由此可以实现能源自给自足,这将对世界能源格局和油气价格走势产生深刻影响。随着美国停止石油进口,油价将降低23%,世界所有石油产区包括独联体国家的产油量随着需求的下降而降低。
\r\n  但是,中东和北非作为世界油气的主要供应地仍保持着重要意义和影响力。波斯湾地区持续的动荡和宗教冲突将导致石油产量下降10%,2013~2019年伊朗将停止石油出口,而伊拉克产量已减半。尽管有生物燃料和新能源的发展以及其他地区产量的增长,都不足以替代中东和北非出口的下降。在此情景之下,油价将上行至200美元/桶。
\r\n  世界将在生态安全与能源保障之间寻找平衡点。福岛核泄漏之后,日本德国等国放弃、拒绝发展核能;BP墨西哥漏油灾难之后,出于环保起见,世界开始讨论谨慎对待深海采油。为了维护生态安全所采取的作法将导致能源价格比2010年基准价上涨60%,这将加剧对传统能源的争夺。
\r\n  目前,金砖国家的在建核电站数量占全球总量的75%。当前全球正在运营的核电机组普遍老化,服务20年以下的仅占20%,发达国家大多数机组将要在2030年之前关闭,而以何种燃料填补这一巨大的能源缺口已难以回避。可再生能源发展迅速,尽管最近几年成本有所下降,其较贵的价格无法与常规能源如天然气和煤炭相互竞争,其发展前景取决于相关国家的政策导向和扶持。
\r\n  总体来看,俄罗斯能源业面临日益紧迫的不利于出口的国际能源形势。2035年油气产能达到峰值之后,随着国内需求不断的增加,俄罗斯能源出口量将下降;外部市场情况复杂,俄将回归国内市场。与其产量波动有关的变量涉及以下六方面:俄经济增速、外部市场需求、储量替接、国内外能源资源价格、开采成本、价格政策。
\r\n  目前,俄能源公司对油气勘探领域的储量增长投资严重不足,不利于产能稳定和提高。2035年之前,俄罗斯石油产量稳定,但天然气产量将继续增长。
\r\n  欧洲对传统能源需求的增长有限,又兼市场竞争激烈,俄罗斯的竞争优势不明显。俄罗斯瞄准世界经济增长的重心——东北亚和亚太市场,将减少对欧出口,加快对东部能源的开发以扩大对东部邻国的出口。
', '', '', '1.189.181.83'), +(97, 10, '        为庆祝建国六十五周年,丰富我院职工文化生活,使我院职工在工作之余放松身心,劳逸结合,经过精心筹备,我院羽毛球比赛于9月28日正式开始,此次活动得到了院领导的大力支持和职工的积极响应。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n        比赛中选手们挥舞球拍、腾挪跳跃、忘却疲惫、尽情挥洒汗水。最终,男子单打组郭广亮同志凭借出色的发挥,夺得男子单打第一名,女子单打组樊磊同志夺得女子单打第一名。
\r\n
\r\n
\r\n \"\"
\r\n        通过本次羽毛球比赛,不仅增强了同事之间的感情和团队凝聚力,同时也展现了我院全体职工团结活泼、奋发向上的精神风貌。
\r\n
\r\n
\r\n \"\"
\r\n', '', '', '113.4.72.231'); +INSERT INTO `dede_addonarticles` (`aid`, `typeid`, `body`, `redirecturl`, `templet`, `userip`) VALUES +(98, 10, '        11月17日,第八届中国专利周黑龙江省系列活动正式启幕。为配合专利周系列活动,11月20日,黑龙江省能源环境研究院举办了知识产权培训讲座。特邀黑龙江省知识产权服务中心副主任,专利代理研究员单淑梅同志来院讲课。我院全体科技人员参加了这次培训。
\r\n
\r\n \"\"
\r\n
\r\n        首先,单淑梅研究员介绍了专利的概念、特征,申报流程,重点介绍如何确定必要技术特征,如何把握产品、方法发明的实质性特点,撰写专利文件。接着分析了部分专利法律条款,细致解读了相关法条的适用范围、立法宗旨等,并结合多年来的工作实践经验和具体案例展开论述,内容丰富,旁征博引,极具实用性。最后,她结合实际研究项目演示了专利文献的检索和分析全过程。
\r\n        单淑梅研究员的培训内容丰富,案例生动详实。参加培训的科技人员兴致高昂,不时提出问题,参与互动,均表示受益匪浅。

\r\n
\r\n \"\"
\r\n
\r\n        此次知识产权培训,提高了我院科技人员的知识产权保护意识和专利撰写实务能力。今后我院还将针对知识产权创造、保护、运用和管理等各个环节,组织不同主题的知识产权讲座和培训,进一步强化知识产权知识,不断提高我院自主创新能力。
\r\n', '', '', '113.9.151.245'), +(99, 28, '
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(117, 10, '        2014年12月11日,在省能源环境研究院召开了由能源院农业生物环境与能源工程创新团队承担的《秸秆高温厌氧发酵过程关键技术参数研究》、《沼液高效会用及综合处理工艺研究》和《沼液回流对牛粪厌氧发酵沼气产量的影响及机理研究》项目鉴定会。鉴定委员会由东北农业大学、东北林业大学、黑龙江省农业科学院、哈尔滨理工大学、哈尔滨商业大学等单位的7位专家组成,会议由院科研处王阳处长主持。
\r\n 
\r\n
\r\n \"\"
\r\n 
\r\n        项目组首先对“秸秆高温厌氧发酵过程关键技术参数研究”项目进行了汇报,得出了秸秆预处理的最佳条件,以此为基础,采用先进的实验方法,确定了秸秆高温厌氧发酵工艺;然后,项目组对“沼液高效会用及综合处理工艺研究”项目进行了汇报,总结了当前大型沼气工程沼液处理的现状,并根据沼液的理化性质,采用回流工艺、混凝工艺、厌氧往复折流工艺相结合,研发出沼液综合处理的全套工艺,得到了专家的高度认可;最后,项目组对“沼液回流对牛粪厌氧发酵沼气产量的影响及机理研究”项目进行了汇报,确定了沼液的最佳回流比率,以及采用PCR-DGGE技术进行了反应器中微生物菌群的变化趋势分析,为团队进行沼气工程领域的基础研究打下了基础。
\r\n        鉴定委员会听取了项目组的总结报告与技术报告,审查了相关技术资料,经认真质询、讨论,对团队的研究方向和当前的工作给予了较高的评价,对项目的意义给予高度肯定,经审议一致同意三个项目研究成果均达到了国内领先水平。 

\r\n', '', '', '1.189.181.236'), +(102, 29, '        以廊乡林业局木焦油为原料,采取“萃取—破乳—液固分离—蒸馏脱水”的方法对木焦油原料进行净化预处理,脱除原料中的水分和杂质等非理想组分,使木焦油的含水量降至0.56%,固体含量降至0.23%,明显改善木焦油的质量。经预处理的木焦油可作为催化加氢制取运输燃料油的原料。', '', '', '113.4.72.207'), +(103, 29, '        摘要:在固定床加氢微反装置上,采用硫化态NiMoW/Al2O3催化剂,以廊乡林业局轻质木焦油(<300℃馏分)为原料考察反应条件对加氢脱氧性能的影响。结果表明,适当降低反应空速、提高反应压力、提高反应温度均有利于提高催化剂加氢脱氧反应活性,提高加氢产物的热值。在反应温度380℃、反应压力8.0MPa、体积空速0.8h-1、氢/油体积比800:1的条件下,加氢生成油的氧含量明显降低,热值显著提高。轻质馏分油可作为化工轻油原料进行下游加工,中质馏分油主要技术指标均符合船用馏分燃料油(GB/T17411-1998)标准要求,可直接作为船用燃料油调和组分使用。', '', '', '113.4.72.207'), +(104, 29, '        摘要:为推动车用燃料的多元化发展,拓展代用燃料的应用领域,经黑龙江省科技厅推介,黑龙江省能源环境研究院与哈尔滨市依兰巨澜清洁能源发展有限公司共同签订了《产研技术研发协议》,开展了“M25车用甲醇汽油”的技术研究、工艺过程与控制以及试验品生产应用工作。为了科学、规范地推进科研性试点工作,双方制定、发布实施了Q/HNH 001—2013《M25车用甲醇汽油》企业标准。本文对该企业标准的制定情况及其主要技术指标作了阐释,以利于在M25车用甲醇汽油的科研性推广应用工作中对标准全面理解和贯彻实施。
\r\n《黑龙江科学》,2014年第2期。
', '', '', '113.4.72.207'), +(105, 29, '        摘要:近几年,随着我国汽车工业的快速发展,石油能源快速消耗,车辆尾气排放对环境的污染日益增加。考虑到已经实施国三和将要实施的国四、国五标准要求,国家发布了GB 17930—2011/XG1—2012《车用汽油》国家标准第1号修改单(于2012年5月1日起实施)。其中胶质指标在原标准的基础上,增加了未洗胶质含量(加入清净剂前)不大于30mg/100mL,试验方法执行GB/T 8019—2008《燃料胶质含量的测定喷射蒸发法》。本文分析阐述了标准修改的目的、未细胶质和溶剂洗胶质的特点、检测方法等,并提出了待商榷问题。
\r\n《黑龙江科学》,2014年第2期。
', '', '', '113.4.72.207'), +(106, 29, '摘要:针对提高油品辛烷值,使调和后汽油的质量指标符合GB 17930-2011/XG1-2012国家《车用汽油》IV标准的目的。本文创新了一种由0.365% MMT、60% MTBE、8% TBAC、3.635%二氯甲烷、28%抗爆助剂(m/m)复配而成的新型复合抗爆剂。通过对汽油感受性、符合性以及储存性等实验方法,结果表明:该复合抗爆剂对汽油具有良好的感受性,能够显著提高油品的辛烷值,适宜长期存储。得出结论:复合抗爆剂的最适添加比例为2%(m/m),调和后的汽油各项指标均符合国IV标准,能够达到93号无铅汽油的生产规格。
\r\n《化学工程师》,2014年第3期。
', '', '', '113.4.72.207'), +(107, 29, '
\r\n 《自动化技术与应用》2014.06
\r\n', '', '', '113.4.72.207'), +(108, 29, '

\r\n  

\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n 专利名称\r\n 申请号\r\n 授 权 时 间
\r\n 一种搅拌破壳于一体的发酵反应器
\r\n (实用新型,王玉鹏)
\r\n 201320512530.5\r\n 2014.1.15
\r\n', '', '', '113.4.72.207'), +(109, 29, '\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n 专利名称\r\n 申请号\r\n 授 权 时 间
\r\n 一种太阳能集热控制系统
\r\n (实用新型,罗向东)
\r\n 201320573185.6\r\n 2014.2.19
\r\n', '', '', '113.4.72.207'), +(110, 29, '\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n 专利名称\r\n 申请号\r\n 授 权 时 间
\r\n 一种厌氧发酵分段控温系统
\r\n (实用新型,秦国辉)
\r\n 201320509483.9\r\n 2014.1.8
\r\n', '', '', '113.4.72.207'), +(111, 29, '\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n 专利名称\r\n 申请号\r\n 授 权 时 间
\r\n 一种高温厌氧发酵运行参数的无线实时监测系统(实用新型,徐晓秋)\r\n 201320509482.4\r\n 2014.1.15
\r\n', '', '', '113.4.72.207'), +(112, 10, '        2014年12月4日,在省能源环境研究院嵩山路15号8楼会议室召开了项目鉴定会,会议对我院承担的《轻质木焦油加氢提质转化运输燃料油调和组分的工艺研究》和《利用炼厂90#汽油生产国IV标准93#汽油的复合添加剂应用技术研究》两个项目进行了鉴定。参加会议的有省科技厅成果管理与推广处、条财处、院科研处领导,鉴定委员会由黑龙江大学、哈尔滨工业大学、哈尔滨工程大学、哈尔滨理工大学等单位的7位专家组成。
\r\n
\r\n
\r\n \"\"
\r\n  
\r\n        鉴定委员会听取了两个课题组的工作汇报,审查了相关技术资料,经认真质询、讨论,形成鉴定意见:
\r\n        以木焦油为原料,采用预处理—加氢精制工艺路线,制备出运输燃料油调和组分,中油馏分收率可达75.64%。技术路线及工艺方案合理可行。采用页岩油作为稀释油、萃取剂和补碳剂,脱除原料中的杂质,产品热值提高到40.8 MJ/kg,该工艺具有创新性。研究成果达到国内领先水平。
\r\n        制备了非金属有机物不含MMT成分汽油复合添加剂,由此添加剂调和的90#汽油达到了93#国IV标准的汽油,并且降低汽车尾气有害气体40%。该添加剂经用户试用,具有良好的经济效益和社会效益。
\r\n复合添加剂性能达到国内领先水平。

\r\n
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n        鉴定委员会对两个课题给予高度评价的同时,也提出了中肯的建议,鉴于项目成果有着非常好的市场前景,建议课题组要继续降低成本,加速推广应用。
\r\n        此次鉴定是我院首次把承担的省院所基本应用技术研究专项升级为省级成果。这对提升我院科研档次,鼓舞科技人员士气,都起着积极的作用。
', '', '', '113.4.72.160'), +(113, 10, '        2014年12月4日至6日,黑龙江省能源环境研究院春苗秦国辉、唐诗洋,青年科技人员周扬参加了在清华大学举办的CHINA EPA STAR MEETING。加拿大麦吉尔大学、美国明尼苏达大学、英国帝国理工学院、美国威斯康星大学、清华大学、中国科学院等国内外知名院校、研究机构参加了本次大会,大会为全英文形式。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n        会议围绕监测农村室内排放、改善空气质量与大气环境、提高人民身体健康等主题开展交流与讨论,与会专家学者共听取专题报告15篇,内容涵盖寒区农村室内排放监测、农村无烟锅炉燃烧器技术、农村室内家庭PM2.5浓度与个体关系、农村新型清洁加热燃烧锅炉燃烧技术等方面。清华大学杨旭东教授作了题为“Intervention using clean heating and cooking stoves:update and plan”的学术报告。此项目中试工作已经在我院完成,该项目将在我省进行推广应用。
\r\n
\r\n \"\" 
\r\n  
\r\n        能源院选派青年科技人员参加国际学术会议,开阔视野,拓宽思路,及时掌握相关领域的研究前沿和热点,进一步提高我院科技人员英语水平,学习知名学者研究经验,对促进我院创新团队发展,提升我院科研水平具有重要意义。
\r\n', '', '', '61.180.252.200'), +(114, 10, '        12月1日,清华大学建筑环境与设备研究所副所长、清华大学百人计划引进教授、教育部长江学者特聘教授、美国麻省理工学院(MIT)博士、美国迈阿密大学终身教授杨旭东一行两人,携最新科研成果从北京抵达哈尔滨,杨旭东教授此行,旨在为进一步巩固清华大学与省能源环境研究院的合作成果,扩大校院合作领域,共同开拓合作商机。
\r\n        杨旭东博士一行首先来到能源院位于嵩山路的办公地点,与能源院科研人员进行了座谈,在现有合作基础上一同商定了深入合作方案,并希望借助能源院在新能源及生物质能源领域的优势,将先进的秸秆处理成果付诸实践,还龙江一片蓝天。
\r\n        下午,杨旭东教授一行在徐晓秋院长陪同下,来到省科学院,与潘忠院长、郭春景院长、王钢副院长及科研处王阳处长,就现阶段与能源院开展合作情况进行了座谈。

\r\n
\r\n \"\"
\r\n
\r\n        潘忠院长代表省科学院对杨教授的到来表示欢迎。随后,杨教授介绍了项目情况。对于新的项目,潘院长和郭院长都十分感兴趣,分别提出了一些问题和建议,杨教授一一进行了解答。
\r\n最后,潘院长再次感谢杨教授能够不辞辛劳,为黑龙江的百姓做实事,做好事。同时希望能源院科研人员要不断提高自身的科研水平,成为杨教授在黑龙江放心的合作伙伴。

\r\n
\r\n \"\"
\r\n
\r\n        2日上午,杨教授一行参观了能源院位于江北的实验室,并在会议室与能源院的科研人员进行了深入交流。下午,杨教授一行在王阳处长和徐晓秋院长的陪同下,驱车来到市农科院位于万宝镇的示范基地进行实地考察,并与省、市政府农村能源办的有关领导进行了座谈,希望通过多方努力,使项目得到进一步推广。
\r\n 
\r\n
\r\n \"\"
\r\n', '', '', '61.180.252.200'), +(115, 28, '
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(116, 28, '
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(118, 10, '        2014年12月16日,黑龙江省科学院科研基金项目《寒地沼气发电机余热回收仿真优化研究》与院青年基金项目《厌氧发酵反应器温度监控及补偿系统的研究》鉴定会在省能源环境研究院召开。鉴定委员会由哈尔滨理工大学周浩然教授、哈尔滨工程大学蔡绍宾教授等7位专家组成,会议由院科研处隋月梅副处长主持。
\r\n        鉴定委员会听取了项目组的汇报后,认真审查了相关材料,对项目组的工作给予了高度肯定,两个项目研究成果均达到了国内先进水平。
', '', '', '1.189.197.76'), +(119, 10, '        2014年12月17日,我院有两组TRIZ作品参加了黑龙江省科学院第三届TRIZ理论创新大赛,经过作品展示、答辩及评审委员会的评审等环节,我院参赛选手不负众望,取得了优异的成绩,其中参赛作品“随动性机械密封装置设计”获得二等奖,参赛作品“新型免烧结快速挂膜生物填料的制备及性能研究”也得到与会评委一致好评。
\r\n        经过此次TRIZ大赛,增强了选手们的团队合作意识,锻炼了个人创新能力,坚信我院今后的科研创新工作一定会再上新台阶。

\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '1.189.197.76'), +(120, 10, '        2014年12月22日,黑龙江省能源环境研究院召开了省科学院青年创新基金资助项目《浮选技术在油砂分离中的应用研究》、《木醋液成份分析及对肿瘤细胞杀伤作用初探》和《微米稀土粉体表面改性技术的研究》的验收会。会议由院科研处马雪松同志主持,验收委员会由黑龙江大学袁福龙教授、哈尔滨工程大学王革教授等5位专家组成。
\r\n
\r\n \"\"
\r\n        验收委员会听取了三个项目组的总结汇报后,认真审查了相关技术材料,对各项目组的工作给予了充分肯定,认为课题技术路线可行,工作量饱满,达到了锻炼年轻人的目的,经审议一致同意三个课题通过验收。', '', '', '1.189.197.76'), +(121, 10, '
\r\n         2014年12月19日上午,省能源环境研究院召开了全体职工大会,领导班子及全体职工参加了会议,会议由工会主席李福裿同志主持。
\r\n  
\r\n
\r\n \"\"
\r\n  
\r\n
\r\n
\r\n         会上,能源院院长徐晓秋同志做能源院2014年工作总结报告,报告从科研成绩、团队建设、对外合作、强化党建、行政管理等面充分肯定了我院全年工作,同时指出2015年,能源院全体职工要竖立新的目标,同心协力,扎实工作,为能源院的腾飞跨越不懈努力。报告经全体职工举手表决全票通过。
\r\n
\r\n         随后,财务科长樊磊同志就新财务制度运行以来的相关情况及效果进行了总结汇报。大会还通过民主、公开表决的方式,全票通过了能源院2015年计划开展的两项工作。
\r\n
\r\n         最后,徐晓秋院长对2015年的工作做出了展望,并希望能源院全体职工能够不断总结成功经验,共同努力进取,进一步统一思想,提高认识,厘清思路,在新的一年里取得更加出色的成绩。
\r\n', '', '', '113.4.83.85'), +(122, 17, '
\r\n 金银岛财经
\r\n        石油价格高位暴跌,评论纷纷,从评论的字里行间经常出现打压美国页岩油发展等,好多人不知道,这里所指的“页岩油”不是页岩油,而是致密油。美国能源信息署(EIA)将页岩油(shale oil)和致密油(tight oil)作为同样的概念使用,但同时也解释说,美国油气界通常所谓页岩油,其实是指致密油。致密油也是来自页岩,开采方法与页岩气相同,由于页岩气革命的影响太过于轰动,干脆称之为“页岩革命”,在中国把致密油和页岩气合并简称为页岩油气。因此,阅读页岩油之类的资料时,要分辨清楚常规石油、致密油和页岩油之间是什么关系。
\r\n        从液态烃金字塔来看,常规石油较非常规石油少得多。而非常规石油中富含干酪根的油页岩储量最大。
\r\n
\r\n \"说明:
\r\n        非常规石油是指储集层中的致密油、重质原油或超重质原油以及在烃源岩中的油页岩和页岩油。按干酪根熟化的程度,烃源岩又分为未成熟的烃源岩(即油页岩)和成熟的烃源岩(即页岩油)。烃源岩(source rock)是富含有机质的沉积物,可以沉积在各种环境,包括深水、湖泊,它能够产生或已经产生可运移的烃类,所以烃源岩也称为“生油岩”。在学术上,页岩油是指油页岩(oil shale)制取的重质原油。油页岩在烃源岩中是未经运移的未成熟的烃源岩,或称“干酪根页岩(kerogen shale)”。它是一种富含有机质、具有微细层理、可以燃烧的细粒沉积岩。油页岩中绝大部分有机质是不溶于普通有机溶剂的成油物质,俗称“油母”。因此,又称为“油母页岩”。油页岩的含油量一般为4~20%,有的高达30%,可以直接提炼石油。从油页岩炼制页岩油必须经过人工加热加氢,通过干馏提炼出类似于原油的页岩油,也称为人造石油。页岩油主要采用地上干馏法生产,生产方式可分为内部燃烧法、热循环固体法、隔壁传热法、外部注入热气法、反应流体法等,以内部燃烧法为主。
\r\n        由于不同的油页岩有不同的化学组分,因而干酪根含量差别很大,所采取的提取技术也随之不同,因此,定义油页岩储量很困难。页岩油生产主要在中国、巴西、俄罗斯和爱沙尼亚。中国是页岩油生产大国,而不是美国。中国在20世纪20年代已经建立了油页岩工业。随后生产衰退,到21世纪初才有所回升。已有几家公司生产页岩油和用于发电。2005年后,中国成为世界上最大的页岩油生产国之一。2011年中国约生产65万吨页岩油。许多生产采用抚顺干馏法。2006年底,抚顺矿业集团拥有世界上最多的油页岩生产装置。
\r\n        在烃源岩中,成熟的烃源岩即页岩油,如果页岩油运移出烃源岩,进入有盖层的储层,就成为常规石油;如果页岩油运移到致密地层滞留,被称为致密油。致密油中的原油品质与常规油藏相同,都属于轻质原油,而从油页岩制取的页岩油是重质油,其区别是两者API重度和黏度不同以及提取的方式不同。
\r\n        在石油价格大战中提及的页岩油是指致密油。根据美国能源情报署资助的先进资源国际公司于2013年的评价,俄罗斯致密油技术可采资源量最多,居世界第一,其次为美国和中国,三个国家的致密油技术可采资源量之和占世界总量的43.6%。目前,美国对页岩气的勘探开发已进入快速发展阶段,同时也带动了页岩地层内致密油的开发。美国是现今开采致密油最成功的国家,致密油生产都靠近页岩气产区。
\r\n
\r\n \"说明:
\r\n        梳理一下本文,看中国。从油页岩制取页岩油最大的生产国是中国,而不是美国。美国页岩气开采成功带动了致密油生产,成为世界上最大的致密油生产国,而中国致密油的技术可采资源量居世界第三位,国人很少提起此事,其原因是页岩气开采尚未成功。如果我国页岩气开采一旦成功,致密油开采自然而然提上日程。', '', '', '113.4.83.216'), +(123, 17, '
\r\n 华夏时报
\r\n        2014年全球大宗商品市场最瞩目的事件是石油暴跌的“黑天鹅事件”引发了俄罗斯卢布危机。2014年7月初,国际原油价格还在100美元之上,12月25日,纽约原油价格已经跌到56美元,短短半年之内,国际原油价格跌去一半。蹊跷的是,石油输出国组织欧佩克居然坐视油价暴跌拒绝减产自救。欧佩克为何推动国际油价暴跌呢?《华夏时报》记者采访了知名能源专家中海油能源经济研究院首席能源分析师陈卫东
\r\n        在陈卫东看来,欧佩克推动国际油价暴跌有两个目的:一方面是因为自身生产成本很低,要挤掉比它成本高的一些产能,争夺市场份额;另一个重要原因是要延缓欧洲对可再生能源储能技术的投资,新能源储能电池技术一旦获得突破,化石能源的命运将走向终结。“石油价格的这轮下降时间会很长,它要充分挤出竞争对手,价格再回来,生产者也舒服,消费者也舒服的同时,还要挤压可再生能源,尤其是储能技术的投资,延缓替代品的出现,就是延长石油天然气的寿命,这是石油输出国最大的利益所在。”陈卫东说。他判断2015年全球将重新进入廉价石油的时代。
\r\n        一、全球能源的中国因素
\r\n        40年前的一场石油禁运把西方经济搞得一塌糊涂,这就是发生在上世纪七十年代的石油危机。从此,世界各国都把石油当做最重要的战略资源。陈卫东说,大概从那时开始,人类地缘政治格局就围绕争夺石油等资源来布局;一个真实的例子是,美国在西太平洋仅仅部署了一个第七舰队,而在中东就部署了第三和第五舰队,目标就是要控制石油。
\r\n现在,以石油为首的全球大宗商品市场的格局正在发生变化,石油从卖方市场变成了买方市场,进入买方市场,大家的目标开始从争夺资源转向争夺市场,中国需求减少也是国际石油暴跌的重要推手。
\r\n“购买力就是话语权,而不是有资源就有话语权,我们还没有意识到这个话语权已经掌握在自己手中。”陈卫东说,“中国是这次石油降价的受益者之一,过去5年中国需求的增长占全球能源增长的一半,而过去10年全球能源供给增长部分,美国占了一半,美国从全球最大能源进口国变成了出口国;利比亚还增加了输出,对伊朗的制裁放松了,伊拉克出口也在增加,这些因素一叠加,石油价格能不跌吗?”
\r\n        陈卫东告诉记者,中国和俄罗斯石油天然气大单为何十几年一直签不下来,现在,俄罗斯追着中国签订石油天然气大单,这不仅是因为欧美制裁俄罗斯要寻找新的出口替代国,国际油价暴跌也不存在阴谋论,主要的原因是全球能源格局发生了改变,产能过剩,金融去杠杆,大家都争夺市场,而中国是全球能源需求增长最快的市场。“我们的能源战略思维还是争夺资源,而不是好好利用我们的市场。”陈卫东说,“过去,我们干了很多傻事,在煤炭时代,英国是第一大能源消费国,它同时也是世界领导者,在石油时代,美国是第一大能源消费国,它也是世界领导者;今天,中国是第一大能源消费国,我们把全球煤炭消费拉起来了。”
\r\n        “中国的煤炭消费还会继续往上走,一个是3美元,一个是12美元,这就是能源消费的现实主义和环境保护的理想主义,这可是4倍的差别。”在陈卫东看来,这不是单个能源的问题,能源之间可以相互替代,它就变成一个能源价格体系的问题;两百年前煤炭时代伦敦的“雾都”又在中国出现。“电价不市场化,哪有其他能源的市场化?”陈卫东说,中国需要以电力为基础重构中国能源体系,无论是煤炭、水能还是核能,它都要转化成电,送到最终消费者;能源回归商品的核心是电力价格的市场改革,而不是解决单个能源问题。
\r\n        二、能源革命的两条道路
\r\n        过去30多年,三次大的石油价格起伏都是自身的供求原因。这一次欧佩克已经看到可替代品的出现。陈卫东告诉记者,世界上同时进行着两场能源革命:一个是以美国页岩气为代表,把原来开采不出来、不作为能源的贫矿开出来了,美国页岩气革命是在延长石油和天然气的寿命。第二个是德国和北欧等国家进行着另一场可再生能源革命,目标是要弃核、弃化石。从木材时代到煤炭时代,从煤炭时代到石油时代,从石油时代到多元化的天然气时代,全球能源消费趋势是从高碳走向低碳,从低浓度能源向高浓度能源转型。
\r\n        让欧佩克紧张的是,可再生能源领域已经清晰地看到储能技术迭代的摩尔指数。最近媒体报道,以色列出现了锂空电池技术,储电量比目前的锂镁电池增加了8倍;而西班牙最近出现的石墨烯电池技术,从锂空到石墨烯又增加了5倍。下一代技术至少是5的立方,也就是锂镁电池技术的125倍。同样是1.5吨电池到时候就缩小到100公斤。如今,汽车一箱油也是七八十公斤,加上变速箱、动力系统起码也有四五百公斤;而电动汽车只需要电机,如果电池能做到100公斤,整个动力系统也只有四五百公斤。
\r\n        石油之所以成为战略资源,因为它在交通运输领域是不可替代的。“电动汽车为何不能普及?因为锂镁电池一公斤储电量200瓦时,以汽车开300到500公里计算,电池自重就要1.5吨,已经没有什么富余荷载,这个汽车没什么用。”陈卫东说,“储电技术发展就像电脑储存和记忆芯片,90年代一个几百兆的硬盘有几十公斤,现在64G存储在手机上就实现了,因为人们发现了新的储存机理。”储能技术的突破是下一个能源时代的关键。无论风能还是太阳能这些离散的能源都可以聚沙成塔,集腋成裘,转化成高密度的电能,聚集变得简单,使用起来也简单。这种高浓度的电池既可以供应全家的能源消费,也可以装在汽车上作为动力。
\r\n        陈卫东告诉记者,欧佩克坐视国际原油暴跌背后就是要打压欧洲对储能电池技术上的投资,延缓化石能源的寿命,2015年全球将重新迎来廉价石油的时代。
', '', '', '113.4.83.216'), +(124, 17, '
\r\n 中国科学报
\r\n        在煤价下行和天然气荒愈演愈烈的背景下,发展现代煤化工已是大势所趋。现代煤化工包括煤制油、煤制天然气、煤制甲醇、煤制烯烃等。截至目前,虽然我国煤化工仍处于大规模示范阶段,但已是世界上最大的煤化工生产国,煤制合成氨、煤制甲醇等产量已位居世界第一位。“十二五”期间,国内煤化工项目建设进入高峰期。近日,《中国科学报》记者从中国石油化工集团公司(简称中石化)获悉,继甲醇制烯烃(MTO)之后,该公司在“煤化”技术领域又取得一项重大进展和突破:成功开发出甲苯甲醇甲基化制二甲苯(MTX)技术并加以应用。MTX技术利用甲苯为原料、以甲醇为甲基化试剂,可实现最大化增产二甲苯。
\r\n        石油化工主要有两大分支:一是烯烃,一是芳烃。芳烃包括苯、甲苯、二甲苯等,是重要的基础化工原料。MTX技术将石油化工与煤化工技术有机结合,不仅为二甲苯等芳烃产品生产装置的增产扩能、芳烃生产过程中原料和产品的结构调整提供了技术支撑,而且对实现芳烃技术生产原料的多元化、推动芳烃生产的技术升级和转型发展具有重要战略意义。据中石化相关专家透露,在MTX技术实现的过程中,有两个关键性问题需要解决,即高效和稳定性。鉴于该技术的突出优势,从20世纪70年代起,国内外多家机构即开展了甲苯甲基化技术的研发工作。但是,由于催化剂稳定性差、甲醇利用率低等问题,一直没能取得实质性突破。
\r\n        在我国能源结构“缺油、富煤、少气”、国际原油价格高企、“煤化”产业蓄势待发的背景之下,中石化提出了“积极发展煤化工”的战略规划和部署,并于2000年立项开展甲苯甲基化技术的研究工作。
\r\n针对该技术中催化剂稳定性这一关键技术难关,项目组依托“新结构高性能多孔催化材料创制的基础研究(“973”项目)”项目平台,形成了对适用于甲苯甲基化分子筛材料及催化剂认识的重大突破,开发了一种高结构稳定性、具有良好烷基化反应活性及较高容碳能力的分子筛及催化剂。同时,为提高技术开发的效率,中石化有效整合催化剂开发、工艺开发、工程设计和工业生产等多学科全方位的技术力量,经过十多年的持续攻关,先后完成了小试研究、工业侧线试验和20万吨/年工艺包的设计工作,成功开发了高性能的甲苯甲醇甲基化催化剂、以甲苯作为段间冷激物料的多床层反应工艺、含油废水处理工艺、热联合及低温热利用等工艺和技术,形成了包括催化剂制备、关键设备、反应工艺等多项创新成果,申请了涵盖催化材料、催化剂和工艺技术在内的国内外专利11件,形成了具有自主知识产权的MTX成套工艺技术,具备了在国际上率先实现甲苯甲醇甲基化技术工业化的技术条件。
\r\n        为加快推进MTX技术的工业化,2012年9月,中石化旗下的扬子石化就此开展了工业试验。在没有工业运行经验可借鉴的困难情况下,扬子石化20万吨/年MTX甲苯甲基化装置一次投料开车成功并实现满负荷运转。反应系统操作稳定,反应温升与冷激控制系统符合预期,换热网络运行平稳,工程设计满足要求,甲醇转化率100%,二甲苯选择性大于80%,产出高质量的二甲苯,率先实现了甲醇原料直接引入芳烃联合装置,实现了世界首套甲苯甲醇甲基化工业装置的商业化运行,为芳烃的“甲基管理”提供了更加直接和有效的手段。
\r\n        中石化专家表示,与传统石油化工结合,是今后煤化工发展的方向之一。借助石油化工技术,煤化工的产物—甲醇可以实现有效增值。目前,中石化正在MTX的基础上,研究开发新的技术,使得甲醇的利用和芳烃的生产更加多元和有效。

\r\n', '', '', '113.4.83.216'), +(125, 17, '
\r\n 21世纪经济报道
\r\n        核心提示:面对中国重启的煤化工大幕,水资源、环境、能耗以及将要出台的碳税,成为发展这一产业必须克服的风险,国家高层对煤化工产业的态度也不无谨慎,截至目前,国家发改委共计批复了15个煤炭深加工示范工程。
\r\n        煤炭的黄金十年戛然而止,在中国西部,一场由电力企业主导的煤炭变革正拉开帷幕。毛乌素沙漠东南缘的陕西榆林,华电百万吨级煤制芳烃项目蓄势待发,并计划在未来10年投资千亿元在新疆、内蒙古建设煤、电、化一体化基地;华能规划了至少7个煤化工项目,产品涉及煤制天然气、烯烃、甲醇;最早布局煤化工产业的大唐已投入千亿,其管理层将煤化工定义为“产业结构调整,成败在此一举”;国电、中电投也纷纷在中国西部布局煤化工产业链。在陆续控制了数量庞大的煤炭资源后,电力企业不再满足于降低发电成本抑或贩运煤炭这种较低层次的利用方式,而煤价的迅速下跌则加速了这一进程。
\r\n        随着煤炭深加工领域掀起的浪潮,中国的煤化工产业重新开闸。今年一季末,西部地区5个煤制天然气、4个煤烯烃和1个煤制油项目获得了国家发改委的“路条”,总投资达2000-3000亿元。据统计,全国范围内共上报煤化工项目104个,投资规模高达2万亿元。在国家及地方规划中,至少包括陕西榆林,宁夏宁东,内蒙古鄂尔多斯、赤峰,新疆准东、吐哈、伊犁、库拜等地意欲建立大型煤化工基地。然而,面对中国重启的煤化工大幕,水资源、环境、能耗以及将要出台的碳税,成为发展这一产业必须克服的风险,国家高层对煤化工产业的态度也不无谨慎,截至目前,国家发改委共计批复了15个煤炭深加工示范工程。
\r\n        一、电企涌进煤化工
\r\n        巨大的市场需求及不菲的利润令电企欲罢不能。2013年8月,陕西华电榆横煤化工有限公司总经理梁彦鸿表示,距离华电榆横万吨级煤制芳烃中试技术通过国家能源局验收已过去5月有余,但该项目扩产至百万吨产量还未得到批复。自2003年电力体制改革落定,华电的主业即确立为发电、煤炭两大板块,但华电煤业并不满足于降低发电成本甚至贩运煤炭。为了在陕西榆林转型煤化工产业,华电集团下属华电煤业计划投资285亿元建设百万吨煤制芳烃项目。芳烃主要指苯、甲苯和对二甲苯,是一种重要的基础化工原料,利用它可以生产服装、保温材料、橡胶、日用品等,几乎渗透了人类衣食住行的各个方面。巨大的市场需求及不菲的利润令电企欲罢不能。近年来,我国芳烃产品的进口量接近需求量的一半,以对二甲苯为例,2012年国内产量775万吨,进口量628.6万吨,表观消费量1384万吨,自给率仅有56%,进口主要来自韩国、日本、印尼。紧俏的市场行情促使芳烃的销售价格达到万元/吨,其生产成本约7000元/吨,较几十元每吨的售煤利润高出不少。更为重要的是,煤制芳烃可以替代石油。生产一吨芳烃需要耗费标煤不到6吨,但石油制芳烃需要消耗原油8-12吨,目前,国内石油路线生产的芳烃约占芳烃总产量的97%,而我国的石油对外依赖率达到60%。梁彦鸿告诉本报记者:“一个百万吨级的煤制芳烃相当于一个千万吨级的炼油厂的产能。”通过多年的兼并收购,目前电力企业坐拥数量庞大的煤炭资源,为其发展煤炭深加工领域奠定了基础。以华电榆林为例,在控、参股小纪汗、可可盖、隆德和榆阳煤矿后,2015年华电在陕西的煤炭产能可达2800万吨/年。
\r\n        二、路线选择考量
\r\n        选择错误路线,转型将面临进退两难的窘地。国家能源局组织编写的一份西部地区煤电化研究报告明确支持煤制天然气、煤制烯烃及煤制乙二醇;对于煤制油产业的发展,持有“适时”态度;而严重过剩的煤制二甲醚则采取限制政策。按照国家能源局的表述,随着人民生活水平的提高及西气东输、陕京线等天然气管线投入使用,城市燃气的需求量日益增长。据预测,2015年、2020年国内天然气消费量分别为2600亿立方米和3500亿立方米,而同期国内天然气生产量分别为1500亿立方米和2200亿立方米,市场缺口分别为1150亿立方米和1300亿立方米,即使考虑已建和拟建的LNG设施及陆上天然气通道项目,仍存在500-800亿立方米的缺口。目前上马最多的煤制甲醇、二甲醚项目的前景不容乐观。目前,我国甲醇、二甲醚市场早已出现严重的产能过剩,推广使用甲醇汽油是一个庞大的系统工程,在部分省市制定了《车用燃料甲醇》和《车用甲醇汽油M85》后,至今尚未出台配套措施,由于渗透至人们生活的方方面面,煤制烯烃、芳烃项目路线大有可为。据预测,未来十年,我国聚乙烯需求将保持稳定增长,2015年供需缺口为450万吨,2020年将扩大到730万吨;聚丙烯在上述两个年度的供需缺口达到240万吨和540万吨;乙二醇在2015年的供需缺口达到600万吨,但仍需警惕中东地区即将投产的几套大型乙二醇装置,其目标市场主要是中国,并具有原料成本低的竞争优势。华电煤业集团有限公司董事长丁焕德告诉本报记者:“华电选择煤制芳烃路线,是经过深思熟虑的。”
\r\n        三、面临环境约束挑战
\r\n        煤炭资源和水资源呈逆向分布。电企转型煤化工的路途似乎比预想的遥远,2013年3月重启的大门只是透出一缕阳光,截至目前,国家发改委批复的煤炭深加工项目仅有15个示范工程,国家高层对煤化工的态度是安全、谨慎发展煤化工。发展煤化工将耗费大量的水资源并有可能污染环境,而其能源转化效率也存在提高的空间,在 “两会”上,以煤企为代表的政协委员曾呼吁限制电力企业发展新型煤化工。中国中煤能源集团公司原总经理经天亮在提案中表示,新型煤化工对煤炭资源和水资源有较高要求,同时受生态环境、基础设施、相关产业发展的制约,绝不能遍地开花,可以作为国家战略储备,还不宜商业化。水资源是煤化工产业发展的重要制约因素,由于地理、气候等客观因素,我国水资源分布严重不均,煤炭资源和水资源呈逆向分布。据统计,目前我国煤制烯烃耗水量为32吨/万元产值,煤制乙二醇为45吨/万元产值,煤制油耗水量为0.214吨/吉焦,煤制天然气为0.229吨/吉焦。神华鄂尔多斯煤制油项目曾遭到环保组织绿色和平发文抵制。水利部水科院总工程师贾仰文表示:“能源化工等耗水量大的规划,应适当加入‘水评’”。
\r\n        煤炭深加工也将不可避免地释放二氧化碳,如煤制天然气的二氧化碳排放量约为0.137吨/吉焦,煤制烯烃为12吨/万元产值。我国近年来二氧化碳排放量的快速增长将使我国不得不面临越来越大的国际压力。煤制燃料的能源利用率同样存在提升的空间,据统计,煤制油的能量利用率为59%,煤制天然气为47%,煤制二甲醚仅为40%。即使能够解决上述问题,即将实行的碳税亦将蚕食煤化工产业的利润率,据财政部“中国碳税税制框架设计”,在碳税征收初期的税率为10元/吨二氧化碳,以后逐渐上升至70元/吨,碳税制度或将对我国的煤化工行业带来深刻影响。
\r\n        四、难以逾越的煤化工之路?
\r\n        日韩是化工产业大国,中国可借鉴他国的成功经验。尽管煤化工未必是最佳路径,但却是中国发展难以逾越的阶段。世界自然基金会(瑞士)全球淡水项目主任李利锋告诉本报记者:“目前中国还没有跨越重化工阶段的有效途径。”清华大学化工系教授魏飞对本报记者表达了同样的观点:“这是一种现实的抉择。”在电力企业看来,煤化工并非人们想象的可以完全摒弃。煤炭行业资深分析师李廷认为,中国现有以煤炭为主的能源结构在短期内很难发生改变。“如能做到水资源循环高效利用、执行最严格的环保制度,认真地选择产品路线,煤化工不仅可以降低我国的石油对外依存度,还可带来西部地区的持续发展。” 丁焕德告诉本报记者。据悉,华电榆横煤化工万吨级项目已通过国家能源局验收,其用水来自榆林距厂区17公里、年可供水1.22亿立方米的王乾堵,该水库水源来自黄河支流,通过水权置换取得。据称其“工业三废”也进行了通盘考虑。梁彦鸿对本报记者表示:“废水在进行处理后重新回流至厂区利用,废渣则被收集至甲醇厂前端,再次作为生产甲醇的原料,废气在经过处理后,可达标排放。”
\r\n        未来煤化工的重要基地新疆则利用众多的盆地构造封存生产排放的二氧化碳,据悉,新疆拟建准噶尔盆地、吐哈盆地、伊犁、塔里木盆地等7个二氧化碳封存地,总容量达到451亿吨。不过,仍有业内人士担忧一窝蜂的煤化工爆发式增长,丁焕德告诉本报记者:“只有在通盘考虑水资源、环境承载力,以及下游产品的长期市场需求后,才可适度发展煤化工。”
\r\n实际上,主管单位国家能源局已确定了煤化工产业发展的原则和思路:以市场需求确定建设规模、按照煤化工产业用水量占基地可供水量的一半比例规划、以及符合国家相关产业政策和运输要求。
', '', '', '113.4.83.216'), +(126, 17, '
\r\n 中国化工报
\r\n        近十年来,我国现代煤化工在争议声中从起步磕磕绊绊走到今天,就像时下的天气一样由暖转寒不断降温。从当初的争先恐后,到如今的观望退出,现代煤化工似乎走到了发展的十字路口。是就此罢手,偃旗息鼓,还是重新定位,继续前行?需要行业理性思考,凝聚智慧,找准方向。
\r\n        其实,我国发展现代煤化工有着特定的时代背景,富煤、贫油、少气的资源禀赋,近十年来一路飙升的国际原油价格,对煤炭清洁利用的不懈追求,成为我国发展现代新型煤化工的强大推力,也是我国工业化进程中“煤代油”的现实选择。因此,我国发展现代煤化工的方向并没有错。虽然当下的国际环境对我国油气进口较为有利,但错综复杂的世界形势变幻莫测,必须以长远的眼光看待我国现代煤化工技术储备及战略规划。虽然一些示范项目进展的不尽如人意为现代煤化工的发展蒙上了一层阴影,但我们绝不能因噎废食,而应该在总结一些示范项目经验教训的基础上,重新调整思路,坚持稳中求进,做好技术储备,等待现代煤化工利好时期的到来。
\r\n        回顾过去,自我国开展现代煤化工示范以来,散见于政府多次发文强调的原则有:“不能停止发展、不宜过热发展、禁止违背规律无序建设”和“坚持示范先行、坚持科学合理布局、坚持自主创新”等。这种先示范、再推广的思路本来是完全正确的,但错在“心急吃了热豆腐”。所谓“示范先行”,就是由个别企业先行先示,在前面趟路;待项目从设计到营运取得一个完整的商业周期后,再视情况决定发展规模。应该说,这些原则如果得到贯彻执行,我国现代煤化工一定会得到健康发展。但令人遗憾的是,在GDP崇拜的年代,这些原则根本无法抑制地方政府和各类企业对现代煤化工的投资冲动,加之有关部门把关不严,开闸放水,导致“示范先行”沦为一纸空文,往往示范项目还没有一个满意的结果,大家就一哄而上,其结果是给好端端的一个新兴产业添了堵。因此,当务之急是理性回归到“示范先行”的路子上来,在示范项目没有成功之前,后续项目应谨慎观察,耐性等待,做好准备,切忌头脑发热,盲目跟进。
\r\n        事实上,我国现代煤化工降温从根子上说是由于技术的不成熟所致,需要从国家层面加以重视和解决。从我国现代煤化工示范的情况来看,虽然国家鼓励的五大类煤化工示范项目各个工艺技术路线均已打通,但离技术成熟还有相当一段距离。煤化工项目作为庞大复杂的系统工程,目前尚处于优化阶段,项目整体的成熟度不够,各个环节远未到“标配”的程度。尤其是气化技术的不成熟,导致已建成的一些项目系统不够稳定,难以实现长周期满负荷连续稳定运行,严重影响到项目的经济性。而各自为战的企业又心有余而力不足。因此,急需从国家层面实施煤化工科技战略,发挥体制机制优势,组织力量开展技术攻关,使每一个工艺路径的示范项目在技术层面达到完全成熟可靠的“标配”程度。惟如此,我国现代煤化工才有可能实现规模化发展。
', '', '', '113.4.83.216'), +(127, 17, '
\r\n 中化新网
\r\n        2014年7月以来,国际原油价格暴跌近50%。有机构研究认为,本轮油价下跌远未见底,后期仍有下跌空间。若参照煤炭及主要大宗商品近几年的跌幅,预计国际原油价格最低将探至50美元/桶,并将长期在70~90美元/桶波动。石油价格的大幅波动,必将引发煤化工与油气化工产品竞争力此消彼长,使刚刚起步的新型煤化工竞争力面临新的考验。那么,五大新型煤化工到底会遭遇怎样的挑战和考验?其前景如何?怎样才能实现稳健发展?
\r\n        一、煤制烯烃:依然具有竞争力只怕油价跌跌不休
\r\n        煤制烯烃堪称新型煤化工的典型代表。这不仅因为中国成功开发了代表当代先进水平的甲醇制烯烃一代、二代技术,而且因为中国最早实现了甲醇制烯烃技术的工业化应用,于2010年5月28日建成投产了全球首套煤经甲醇制烯烃工业化示范装置—神华包头180万吨/年煤制甲醇、60万吨/年甲醇制烯烃项目,并很快实现了商业化运营,产生了良好的经济与社会效益。在示范项目成功刺激下,全国煤制烯烃项目建设提速。截至2014年12月,国内已经有13套甲醇制烯烃项目投产,煤经甲醇制烯烃(或甲醇制烯烃)总产能将达606万吨/年。另据了解,全国在建和已经开始前期工作的甲醇制烯烃项目有29个,合计产能1300万吨;规划的甲醇制烯烃项目合计产能1500万吨。上述项目若全部按期投产,中国甲醇制烯烃产能将达3400万吨/年,与2013年中国乙烯+丙烯总和相当。
\r\n        煤制烯烃(或甲醇制烯烃)之所以被热捧,缘于投资者看好其前景。陕煤化蒲城清洁能源化工有限公司副总经理姚继峰说。一方面,煤制烯烃产品市场广阔。目前,国内乙烯当量自给率50%左右,对外依存度超过40%。虽然随着众多炼化一体化项目的建成投产,国内烯烃产能大幅提升,但随着经济社会的发展和人民生活水平的提高,国内乙烯需求量继续保持快速增长。加之中国是一个“富煤贫油少气”的国家,随着家庭轿车的普及和汽车保有量的增加,国内成品油消费量大幅攀升。而目前国内绝大多数乙烯装置又以石脑油为原料,乙烯产能扩张与汽车争油的矛盾愈演愈烈,使得石油路线乙烯面临原料紧缺和成本不断抬高的双重制约,产能无法持续大幅扩张,从而为煤制烯烃留下了较大的发展空间。另一方面,石油价格近几年持续高位运行,抬高了石油路线乙烯生产成本。而煤炭及甲醇价格的下行,又降低了煤制烯烃(或甲醇制烯烃)成本,此消彼长,煤制烯烃产品竞争力显著提升。更为重要的是,乙烯被称为工业之母,烯烃的衍生品多达几十上百种,广泛应用于国民经济各个领域,这使得投资煤制烯烃项目的市场风险大为降低,相关企业尤其国有企业更乐意在该领域投资,以期取得良好的经济与社会效益。
\r\n        延长石油集团总经理助理李大鹏赞同姚继峰的看法。他说,神华包头60万吨/年DMTO示范项目商业化运营以来的实践表明,与石油路线相比,西部地区煤制烯烃项目具有绝对的成本优势——当国际原油价格在100美元/桶左右波动、煤炭价格300元/吨时,DMTO装置吨烯烃完全成本不足7000元,而石油路线吨烯烃完全成全已高达9600元,煤制烯烃的成本优势显而易见。“由于相比石油路线,煤制烯烃具有绝对的成本优势,后期,即便国内烯烃真的出现产能过剩,首先关停的也必然是石油路线乙烯装置。从这个层面讲,在现有的五大新型煤化工路径中,煤制烯烃前景最好、风险最小。”姚继峰乐观地表示。
\r\n但陕煤化集团党委书记华炜、陕煤化集团常务副总经理尤西蒂对此有不同看法。他们表示:后期石油价格的走势难以把握。一旦石油价格继续下跌,甚至跌破70美元/桶,而国内煤炭价格受综合生产成本高企支撑跌无可跌,甚至可能反弹。那么,煤制烯烃与石脑油制乙烯竞争力就会发生微妙变化,甚至出现逆转。因此,在没有对石油市场中长期走势做出准确判断前,不宜对煤制烯烃前景过分乐观,更不能一窝蜂上项目。尤其不能只拿高成本的石脑油制乙烯与煤制烯烃相比。因为中国经济已经融入全球经济,世界上除了石脑油裂解制乙烯副产丙烯外,还有中东廉价乙/丙烷制烯烃和北美天然气凝析液制烯烃等多种工艺路径,煤制烯烃有无竞争力还要面临上述两种工艺的挑战。两位专家提醒:上马煤制烯烃项目必须通盘考虑国内外多种资源与工艺路径,慎重决策。由于目前国内在建拟建煤制烯烃规模已经很大,有过剩风险,建议已经完成前期工作的项目继续推进外,那些规划但未开始实施的煤制烯烃项目最好暂缓推进。对于那些已经建成和在建项目,则应尽快谋划烯烃下游产品,通过产品多元化、产业长链条,不断增加产品附加值和项目竞争力,防止后期陷入产能过剩泥潭无法自拔。
\r\n        二、煤制气:技术成熟市场看好但环保关难过
\r\n        如果说,业内对煤制烯烃的前景总体看好的话,对于煤制天然气的前景,看法则大相径庭。中国化工学会理事贺永德是看好煤制气前景的专家代表。他看好煤制气有三大理由:
\r\n        一是富煤地区建设煤制气项目具有成本优势。当煤炭价格在400~500元/吨时,煤制天然气的制造成本约1.8~1.9元/立方米,而进口气到达中国口岸价普遍超过2元/立方米,入管网价在2.48元/立方米以上,前者比后者拥有0.5元/立方米的成本优势。如果采用陕西榆林地区优质烟煤(平均发热量6000大卡/千克)作原料,生产1立方米天然气,原料煤+动力煤消耗仅2~2 .3千克。目前榆林地区煤炭售价仅300元/吨,折算煤制气原料成本不足0.7元/立方米,与进口管道天然气相比,优势扩大至1元/立方米以上;若与进口LNG相比,煤制气优势更扩大到1.5元/立方米以上。
\r\n        二是无产能过剩之忧。中国是一个“富煤贫油少气”的国家,天然气资源量和产量都十分有限,而需求增长却异常迅猛。2000~2010年,中国天然气消费量年均增长16%;2005年~2013年,中国城市天然气消费量年均增长25.2%。据中国石油经济技术研究院预计:2014年,中国天然气需求量将达2061亿立方米,而国产天然气(常规天然气、煤层气、煤制气)产量预计为1325亿立方米,算上全年可能进口的600亿立方米天然气,总缺口仍达136亿立方米,比2013年放大1倍。后期,随着居民天然气用量的进一步增加、各地煤改气工程的推进,以及政府为改善大气质量推动的天然气发电项目的增多,以及交通运输领域油改气范围的扩大,都将推动中国天然气消费量持续大幅增长。预计到2020年,国内天然气消费量将达3600亿立方米,20年内年均需求增长将保持10%以上,无产能过剩之忧。
\r\n        第三,煤制气对改善城镇空气质量和节能减排效果明显。煤制气由于采用了现代化气化、净化、合成工艺,以及先进高效的脱硫、脱硝、除尘与废水处理技术,能大幅减少污染物排放。尤其我国煤制气项目大多布局于新疆、内蒙古等煤炭资源丰富、运输条件受限地区,通过煤制气项目将所得天然气通过管道输送到京津唐鲁及东部省份,即为上述地区提供了清洁能源、缓解了其环境压力。又相当于通过管道将本来难以输送的资源低成本地输送到全国各地,减少了运输过程的能源消耗和排放污染。
\r\n        “有人担心加征碳税后会削减煤制气的竞争力。事实上,目前包括法国、加拿大在内的一些发达国家都取消了碳税。不少国家对加征碳税争议很大。在这种背景下,中国“十三五”期间能否如期加征碳税存在较大变数。即便真的加征碳税,按10元/吨CO2计算,1000立方米煤制气所缴碳税不过45元,与进口天然气相比,同样具有竞争力。”贺永德信心满满地对记者说。
\r\n        但包括美国杜克大学教授杨启仁、国土资源部矿产资源评价中心主任张大伟等专家却不看好煤制气前景。杨启仁表示,国内众多煤制气项目在进行前期论证时,大多以美国大平原煤制气项目为例描绘项目前景及上马的必要性。但事实上,大平原项目是个多输的结局------投产后10年累计亏损13亿美元。现在之所以有少许利润,主要得益于新股东在接手该厂时无须偿还95%以上的建厂费用,且实现了多元化经营。据了解,2011年,美国国家能源科技实验室以大平原厂为参考,评估北达科州褐煤为原料生产天然气的经济可行性。结果发现:建设一个15亿立方米/年的煤制气工厂,总投资额高达42亿美元,合成气生产成本约21美元/百万英热单位。而近几年美国天然气价格始终在2.5~8美元/百万英热单位徘徊,最终认为煤制气无获利可能。
\r\n        “无论从经济效益、环保要求还是能源利用效率考虑,煤制气项目都没有前景。”延长石油集团总经理助理李大鹏说。据他介绍,根据美国大平原厂的经验,煤炭转换成合成气再发电,能源转换效率仅30%。而一般大型燃煤电厂能源转换效率可达40%以上。同样发1千瓦时电,煤制气发电耗煤量较煤直接发电多1/3。另外,目前国内煤制气项目为了使粗合成气中尽量增加甲烷,普遍选用鲁奇炉。该工艺最大的问题是易产生大量含酚等难处理的废水。试想,一个40亿立方米煤制气工厂,将有48台煤气化炉矗在那儿,形成一排“炉林”,即便正常运行,产生的废水和废气、废渣也是惊人的。若遇工艺不正常或开停车倒炉,其产生的污染量会更大,甚至可能会使项目所在地形成铺天盖地的烟霾。
\r\n        “不少煤制气项目上马时,喜欢以进口天然气价格甚至进口液化天然气价格作参照,说明煤制气具有较好的成本和价格优势。但这一点并不现实。”国土资源部矿产资源评审中心主任张大伟提醒。他说,目前进口天然气到达中国口岸价均超过2元/立方米,进口液化天然气价格更高达3元/立方米左右。照此推断,以目前的煤炭价格计算,煤制气项目似乎均有竞争力。然而事实是,随着天然气供应量的增加,价格承受力较强的民用领域将趋于饱和。工业、化工及发电领域虽然需求巨大,也是西方国家天然气消费大户,但中国上述企业如果全部使用高昂的进口天然气,将会全面巨额亏损。导致上述领域用不起或不敢使用天然气,最终导致国内天然气供大于求,价格下行,相关煤制气企业在计入高额的财务成本后,根本无利可图。也许正是综合考虑了煤制气项目的潜在风险,2013年以来17个喜获“路条”的煤制气项目,绝大多数至今仍在等待观望。“十三五”期间,我国煤制气规模将控制在300亿立方米/年以内,比业内预计的规模压缩了一倍多,表明国家层面对煤制气项目的态度再度发生微妙变化,对其可对带来的影响与风险保持警惕。
\r\n        三、煤制乙二醇:若不能进入聚酯市场成本优势无意义
\r\n        中国服装业的持续快速发展,对聚酯纤维的需求不断增加,继而推动生产聚酯的原料乙二醇需求激增。由于中国乙二醇产能有限,巨大的供需缺口只能通过进口填补。2010年~2013年,中国进口乙二醇分别达664万吨、727万吨、796万吨和825万吨,对外依存度始终保持在70%左右。国内乙二醇市场严重的供不应求,不仅推高乙二醇市场价格一度突破9000元/吨关口,也刺激煤制制乙二醇项目投资不断升温。据了解,截至2014年9月底,国内已经有10套煤(或合成气)制乙二醇装置投产,合计产能150万吨/年;在建项目12个,合计产能317万吨/年;拟建项目4个,合计产能180万吨/年;规划中的煤制乙二醇项目3个,合计产能90万吨/年。预计到2015年底,中国煤制乙二醇产能将达420万吨/年;2017年将达467万吨/年;2020年将达557万吨/年。即便算上现有以及在建和规划中的石油路线乙二醇项目产能,到“十三五”末,我国乙二醇自给率也只有60%,对外依存度仍高达40%。另据测算,当煤炭价格250~300元/吨、国际石油价格100美元/桶时,煤制乙二醇相比乙烯法拥有1400~1600元/吨的成本优势。
\r\n        一方面市场缺口较大,产品销路没问题;另一方面,与主流的乙烯路线相比具有明显的成本优势。投资煤制乙二醇岂不等于抱了“金娃娃”?“钱景”十分光明?但业内专家提醒:煤制乙二醇有市场未必有钱景。中国化学理事会理事贺永德表示:一方面,受全球经济不景气影响,中国服装出口已经并将继续面临较大压力,减少了涤纶需求并打压其价格下行,聚酯需求增速因此放缓、价格下移,最终将导致乙二醇价跌量减,压缩其利润空间。另一方面,国内93%的乙二醇用于聚酯生产,3%用于聚氨酯生产,3%用于防冻液生产,1%用于其他领域。所谓的乙二醇供需缺口,主要指能满足生产涤纶长丝、涤纶短纤,以及瓶级聚酯的乙二醇。而目前国内已经投产的煤制乙二醇装置,只有新疆天业5万吨/年合成气制乙二醇等少数装置的产品被上游聚酯企业接受。其余大多数厂家的煤制乙二醇产品尚未被聚酯企业完全接受,只能销往树脂及防冻液等领域,既限制了需求,也削减了煤制乙二醇的盈利能力。后期,如果国际石油价格继续下跌,而煤炭价格企稳并反弹,将缩小煤制乙二醇与乙烯路线乙二醇的成本优势。若届时煤制乙二醇企业仍不能保证装置安稳长运行并彻底解决产品质量不稳定等问题,则煤制乙二醇企业只能望着巨大的聚酯市场兴叹。
\r\n        “若不能顺利进入聚酯市场,煤制乙二醇就没有前景,其与乙烯法相比所谓的成本优势也毫无意义,只会误导投资者。”延长石油集团总经理助理李大鹏说。他说,国内企业在考察投资项目时,大多属“理想主义者”:把可能的需求当作现实需求;把理论上的竞争优势当作真实竞争力;高估生产成本的比较优质而忽略财务费用及其他成本上升的负面影响;重视项目可行性而忽略其不可行性;眼光只盯国内市场很少放眼国际大环境……这会导致项目论证缺乏应有的客观公正性,以致于许多论证时钱景广阔的项目,投产之日就开始亏损。煤制乙二醇就是一个典型的例子。目前,所有上马煤制乙二醇的企业,眼光只盯着国内巨大的供需缺口,却避而不谈全球乙二醇实际已经过剩;只将低煤价时的煤制乙二醇与高油价时的乙烯路线乙二醇相比,却忽略了北美页岩气革命、中东石化业崛起,以及全球经济增长放缓将导致国际石油价格下跌、煤制乙二醇与乙烯路线成本差距缩小的可能性,使项目潜在的风险加大。
\r\n        中宇资讯分析师于晓红亦表示:煤制乙二醇的质量尚无法满足聚合级对原料的性能要求,这将长期制约该产业发展。如果后期国际石油价格跌破60美元/桶并长期在90美元/桶以下波动,而煤制乙二醇又无法在短期内解决质量不稳定难题,则其前景远未预想的乐观。
\r\n        国内首套煤制乙二醇工业化示范装置——通辽金煤化工公司20万吨/年装置近几年的表现也让业内对煤制乙二醇的钱景疑虑重重。公开资料显示:该项目自2011年投产以来,不仅鲜有盈利,反而成为其母公司丹化科技股份公司的亏损大户。2013年,更以亏损1.92亿元拖累丹化科技业绩由盈转亏。今年前三季度,虽然帐面上显示项目已经盈利,但扣除通辽经济技术开发区管委会给予的6000万元自主创新奖励资金、内蒙古自治区给予的550万元科技经费拨款等共计6790万元政府奖励拨付资金,乙二醇装置对企业的利润贡献微乎其微。
\r\n        渭化集团副总经理张小军则表示,今年上半年,虽然我国服装出口总量增速下滑7.2%,但化纤制服出口量逆势增长24.8%,对乙二醇行业拉动明显。尽管如此,国内乙二醇价格仍出现大幅下跌,表明全球乙二醇过剩已经对中国市场产生冲击。后期,一旦中东、北美低成本乙二醇装置陆续投产并打入中国市场,尤其美国一家公司研发的二氧化碳电化法与水、氢气合成乙二醇新技术取得实质性突破并工业化应用后,其仅125美元/吨的生产成本,将对现在看来颇具优势的煤制乙二醇行业产生巨大冲击。他建议国内企业加快煤制乙二醇关键技术攻关,尽快推出先进、实用、低能耗技术,而非一味扩大产能,以应对未来竞争。
\r\n        四、煤制油:项目表现良好但“高大上”投资引风险
\r\n中国日益增大的成品油需求与资源量及产量有限的矛盾,使得原油进口量连年大幅增加,石油对外依存度连续数年维持在55%以上的国际超高警戒线。这一状况严重威胁着中国能源战略安全。为此,稳妥地发展煤基油品燃料不仅成为能源专家的呼声,也引起国家层面关注。以致于“十一五”以来,国家每次在规范煤化工产业健康发展时,都要特别点到煤制油。
\r\n        而从神华宁煤400万吨/年煤间接液化项目获得批准,到兖矿榆林110万吨/年、伊泰鄂尔多斯200万吨/年、潞安集团150万吨/年、贵州渝富能源开发公司200万吨/年等数个煤制油项目获得国家发改委“路条”不难看出,国家层面对煤制油,尤其已经被几套16万吨/年工业化示范项目初步验证的煤间接液化项目的管控悄然松绑。据了解,即便不再增加新的业主,仅上述几家煤制油企业规划的项目全部实施后,中国每年就将新增煤基油品6080万吨。如果算上延长石油集团规划的煤油共炼、陕西煤业化工集团规划的煤炭分质利用制油项目,以及全国其他企业在建和规划的约800万吨煤焦油加氢制取燃料油项目,2020年前后,中国煤基油品规模将超过8000万吨/年。
\r\n        “众多企业之所以在国家严格管控下热上煤制油项目,主要还是认为煤制油的前景比较乐观。”内蒙古伊泰煤制油有限责任公司董事长齐亚平表示。他以伊泰16万吨/年煤制油项目为例。该装置于2012年底首次达产后,2013年全年生产油品18.2万吨,装置平均负荷达108%,油品综合成本平均每吨降低5%,实现了消耗低、效益好的预期目标。虽然齐亚平并未透露煤间接液化产品的利润到底有多高,但公开资料显示:2013年1~9月,伊泰煤间接液化项目生产各类油品和化工品13.2万吨,上缴税费2.06亿元,实现净利润1.2亿元。照此推算,煤间接液化的液体产品净利润高达909元/吨。而据了解,2013年以来,包括神华百万吨煤直接制油、18万吨/年煤间接液化、潞安16万吨/年煤间接液化、陕煤天元50万吨/年煤焦油轻质化、陕煤富油12万吨/年煤焦油全馏分加氢、以及宝泰隆煤公司的10万吨/年高温煤焦油加氢制取燃料油等煤基油品项目,均取得了可观收益。
\r\n        “我国石油对外依存度一度接近60%,发展煤基油品已经成为中国确保能源安全的战略选择。从这个层面讲,煤制油项目拥有一定的民意、政策与政治基础。加上巨大的消费需求与良好的盈利等市场手段推动,煤制油的前景十分光明。”中科合成油技术有限公司技术顾问唐宏青尤其看好煤间接液化的前景。
\r\n        但也有专家认为煤制油的前景远没那么乐观。“根据国家税务总局2012年第47号公告,纳税人以原油或其他原料生产加工的在常温常压条件下呈液态状(沥青除外)的产品,将分别加征1元/升(石脑油)和0.8元/升(燃料油)消费税,这等于将煤制油综合成本增加了20%。以一个100万吨/年煤制油项目为例,每年上缴消费税高达10亿元,极大地压缩煤制油项目的利润空间。后期,如果国际油价进一步下跌引发成品油价格下跌,煤制油项目是否还能盈利存在悬念。”陕西省决策咨询委员会委员贺永德提醒说。
\r\n        投资强度大、污染大、资源利用效率低则是延长石油集团总经理助理李大鹏不看好煤制油前景的三大理由。他说,建设一个500万吨/年炼油厂,只需200亿元投资;而建设一个在煤制油路径中还算投资强度较低的相同规模的煤间接液化项目,总投资额高达600亿元。超高的投资强度,必然导致煤制油项目财务成本居高不下,影响其产品市场竞争力。而从产品收率和资源利润效率看,煤直接制油的液体收率不足35%,能源转化率仅33%;煤间接液化吨产品耗水超过7吨……在中国经济发展受资源与环境约束越来越明显的情况下,煤制油的上述弊端将严重影响其综合效益,甚至会影响产业健康发展。“中国应以全球视权衡自身的能源安全,并重新考虑发展煤制油的紧迫性、必要性与重要性”。李大鹏建议。他说,既然经济已经全球化了,就应有资源分配全球化的视野。中国缺油不等于其他地区也缺油,我们完全可以凭借充足的外汇储备,以及不断上升的综合国力和国际地位,利用政治、外交、经济等手段,大量利用境外油气资源,实现外油中用,何必急于发展投资强度大、资源消耗高、污染排放大的煤制油产业。况且,近两年一些煤制油项目之所以取得较好收益,是国际油价高位运行、国内汽车业快速发展助推成品油需求猛增,以及煤炭价格大幅下跌等多种因素共同作用的结果,是一种特殊情况,并不能代表煤制油项目本身的竞争力。后期一旦煤炭价格触低回升,国际油气价格再度回调。尤其中国汽车工业增速放缓,成品油需求减少后,煤制油的钱景将难言乐观。
\r\n        “即便要发展煤制油,也应打破煤直接或间接制油等单一模式,而应采取煤炭分质利用方式,在条件允许的情况下,先对煤进行干馏提油,再将提油后的洁净焦炭通过煤直接或间接制油等途径制油,或与其他化工、电力、钢铁、建材等装置对接,实现煤的‘两头见油’和产品多元化,提升项目的资源利用效率和抗风险能力。”陕煤化集团常务副总经理尤西蒂这样表示。
\r\n        一位专家透露:正是综合考虑了国内、国际环境与资源供需格局变化,以及煤制油项目的利弊与业内的不同意见,国家高层初步决定:“十三五”期间,我国煤制油规模将控制在1000万吨/年以内,而非此前传言的4000万吨/年。
\r\n        五、煤制芳烃:技术看上去都很美推广应用却不易
\r\n        据清华大学教授魏飞介绍,全球95%以上芳烃来自石油炼化装置的催化重整、裂解汽油加氢抽提。即常压石脑油和减压石脑油,分别通过连续重整和加氢裂化,再经芳烃抽提获得苯、甲苯和二甲苯等。甲苯选择性岐化、烷基化转移后生成二甲苯,二甲苯异构化后转化为PX(对二甲苯)。随着石油资源的减少和价格的攀升,以及原油重质化程度的加剧,石油路线获取高纯PX的成本越来越高,加之中国本身“富煤贫油少气”,获取PX的难度日益增大。为此,国内科研院所纷纷组织团队,锲而不舍地开发非石油路线PX技术,先后有中科院山西煤化所的固定床一步法甲醇制烃类技术、陕煤化集团与中科院大连化物所联合开发的甲醇甲苯制PX联产低碳烯烃循环流化床技术,以及中石化自主开发的甲苯甲醇甲基化制取PX等技术问世。
\r\n        2013年1月13日,由中国华电集团与清华大学合作开发的万吨级甲醇制芳烃工业试验装置一次投料成功并生产出合格PX,这也是世界首套原料仅为甲醇的甲醇流化床制PX装置。其芳烃单程收率达55%~65%,烯烃80%转化为芳烃,芳烃总收率达80%,是目前最先进的非石油路线芳烃生产工艺。至此,中国分别掌握了固定床、流化床甲苯甲醇制PX和甲醇直接制PX等多项技术,且全部通过了中试或工业化运行验证,煤制芳烃整体技术世界领先。
\r\n        “但仔细梳理上述技术,发现均不同程度地受到限制,投资者很难长期获得良好收益。”陕煤化集团副总工程师何迎庆如是说。
\r\n        比如,山西煤化和赛鼎工程公司合作开发的固定床一步法甲醇制烃类技术,虽然具有能灵活生产芳烃与烯烃的优势,但因采用的是固定床,存在规模难放大、设备投资多、占地大、工艺流程长、催化剂需经常倒炉活化(或更换)等弊端;另两种甲醇甲苯制PX技术,虽然使用了甲醇减少了甲苯消耗,但依然需要甲苯作原料。而国内甲苯资源本来就短缺,以致许多企业因甲苯来源无保证而不愿上马新项目;清华大学的技术最好,可以完全以甲醇为原料生产芳烃,但其80%芳烃总收率所得的是混合芳烃,并非市场真正紧俏的、前景向好的纯PX,导致项目盈利预期大打折扣。
\r\n        蒲城清洁能源化工公司副总经理姚继峰亦不看好煤制芳烃的前景。他说,由于原料全部采用甲醇,清华大学开发的FMTA技术是真正意义的煤制芳烃技术,也最具工业化推广应用的条件。但一方面,其所得产品80%为苯+甲苯+二甲苯,属混合芳烃(而非价格高出烯烃20%~30%的纯PX),这种混合芳烃市场价仅7000~8000元/吨。根据工业化中试结果,每生产1吨混合芳烃,需消耗3吨甲醇,而同样3吨甲醇,采用DMTO技术能生产1吨烯烃。目前,烯烃售价10000元/吨以上,煤制芳烃与煤制烯烃的经济性谁优谁劣一目了然。这也正是众多企业宁肯一窝蜂上马煤制烯烃项目,而不愿涉足煤制芳烃的根源。
\r\n        另一方面,目前煤制芳烃尚无一套大型工业化示范装置运行,存在一定的工业化风险。尤其近几年因PX被妖魔化后,各地民众纷纷拒绝PX项目,更增加了煤制芳烃项目的成本、难度和风险,使这一先进技术难以推广应用。
\r\n        而据中国科学院院士何鸣元介绍,芳烃的重要来源和用途为:原油炼制—石脑油—MX(混二甲苯)—PX(对二甲苯)—PTA(精对苯二甲酸)/MEG(乙二醇)—PET(聚酯)—涤纶长丝/短纤—纺织面料—服装。因此,无论石油路线PX还是煤基PX,最好能与下游PTA、PET建成联合装置,并接近化纤与纺织服装市场。由于我国大多数炼厂分布在东南沿海,这些地区又是化纤与服装业最集中的地区,从而很容易形成PX上下游一体化产业集群,彰显良好的经济与社会效益。煤制芳烃主要是要利用西部廉价的煤炭与甲醇资源,显然不具备建设靠近终端消费市场的PX上下游产业链的条件,也即不能实现各环节利益最大化,最终将削弱项目总体收益。
\r\n        专家们认为,在石油价格高位运行、煤炭价格持续下跌、国内PX货紧价扬等有利形势下,煤制芳烃尚因种种原因没有获得投资者追捧,那么一旦国际石油价格继续下跌,国际PX价格下挫,则煤制芳烃的成本优势将会减弱,产业发展的道路将曲折而漫长。
\r\n        魏飞却表示,清华大学联手中国华电集团开发的FMTA工业化技术,不足3吨甲醇即可生产一吨混合芳烃,混合芳烃收率达80%以上,且90%的混合芳烃最终都能转化为市场急需的PX。当烯烃价格在10000元/吨时,纯PX售价一个度高达14000元/吨,照此推断,煤制芳烃经济效益并不逊于煤制烯烃。况且,由于石油中芳烃含量较少,我国又是一个富煤贫油少气的国家,煤制芳烃既是中国的无奈之举也是战略选择,又怎么能简单地以经济效益衡量其前景?至于说会否遭遇类似石油路线PX风波导致该技术难以推广的担心,则完全没有必要。因为“PX断子绝孙说”本身不仅荒谬,而且带有一定政治目的,是一些所谓的专家学者在替国外利益集团误导甚至愚弄中国老百性。目前京、沪、穗等地应用的国Ⅴ汽油,其中芳烃含量为40%,将来国Ⅴ汽油还要在全国推广。如果照某些所谓专家的说法,全世界都别用汽油了。因此,FMTA技术绝不会因为所谓的环境风险而无法推广应用。
\r\n        上海新佑能源科技有限公司董事长韩保平则建议采用煤焦油加氢路径获取芳烃。
\r\n        他说,由于石油侧链多,经常压蒸馏得到的石脑油中,芳烃仅占45%;而煤焦油中的侧链组分少,用其加氢制得的石脑油中,芳烃含量超过70%。目前大多数煤焦油要么只经简单加工处理,获得葸、萘等初级产品;好一点的企业将煤焦油加氢制取调和燃料油,这两种方法显然均未做到对资源的最大化利用。如果我们在有条件的地区建设大型煤炭提质装置,将获得的煤焦油加氢生产石脑油+柴油,再用高含芳烃的石脑油制取芳烃,无论经济、环境还是节能减排效益都将十分显著,其投资强度也将明显低于煤-甲醇-芳烃一体化装置。(陈继军 陈光达)

\r\n', '', '', '113.4.83.216'), +(128, 10, '        2015年1月26日,黑龙江省能源环境研究院召开全体职工大会,会议由能源院徐晓秋院长主持,院班子及全体职工参加了会议。 \r\n
\r\n
\r\n
\r\n  
\r\n        徐晓秋院长首先传达了省科学院郭春景院长在省科学院2015年工作会议上的报告并结合能源院实际部署近期工作。徐院长指出,省科学院工作会议的召开,为今后一段时期我院相关工作明确了行动纲领,是我院今后发展的工作指南。全院干部职工要充分领会,迅速行动,积极落实,全力开展能源院2015年的科研工作。
\r\n        随后,徐院长介绍了1月25日参加黑龙江省千户科技型企业动员会的相关情况,并传达了陆昊省长《黑龙江省千户科技型企业三年行动计划》的讲话精神。
\r\n        最后,徐院长强调,要坚持借船出海理念,勇于攻坚克难,开展好与清华大学的相关合作,同时要求能源院全体职工围绕两个会议精神,制定2015年工作计划,借此促进科研水平快速提升,并推动各项工作有序开展。
', '', '', '1.189.50.73'), +(129, 10, '       1月27日,黑龙江省能源环境研究院召开了科研人员座谈会,院长徐晓秋、副院长关春玲与我院一线科研骨干、高级职称人员参加了座谈,院长徐晓秋主持会议。
\r\n       与会科研人员认真总结了过去一年的工作情况,围绕科研院所改革及如何开展下一步科研工作提出了一些设想,同时围绕“五年会战”既定目标,就我院如何加强高标准科研团队建设、如何有效开展新技术研究等展开了热烈讨论,提出了很多建设性的意见和建议,成效显著。
\r\n       院长徐晓秋对与会科研人员取得的成绩给予了充分肯定,同时对大家提出了几点要求:一是要继续发挥我院在油页岩方面的研究优势,争取用两年时间进入国家四大平台;二是要围绕目标任务,注重发挥我院的科技支撑作用,突破国家项目,同时不断加强自身宣传展示、人才队伍建设、科研条件建设和科研管理服务;三是要善于学习,注重能力提高,善于对外交流与合作、善于向实践学习、善于在工作中不断思考,提高自己分析问题和解决问题的能力;四是要有强烈的责任感和使命感,崇高的敬业奉献精神,转变观念,革新理念,发挥主观能动性和积极性,为能源院的发展奉献力量。
', '', '', '1.189.117.200'), +(130, 10, '        1月29日,我院召开了青年科研人员座谈会,院长徐晓秋、副院长关春与青年科研人员10余人参加了会议,会议由院长徐晓秋主持。徐院长指出,希望通过此次会议,为我院青年人提供交流的机会,让青年科研工作者通过交流,提出自己的工作设想和打算。
\r\n        会议上,青年人员畅所欲言,纷纷围绕自身科研内容提出了很多好的想法,同时也提出了自己在工作中遇到的困惑及困难。院长领导对青年人员的工作热情和工作思路给予了肯定,并对相应的问题进行了解答。
\r\n        最后徐院长指出,我院将以全面提高青年科研工作者能力素质、充分发挥青年科研工作者的创造力为重点,以全面提高服务水平为目标,尽全力为我院的青年科研工作者创造更多的机会,打造良好的科研环境。
', '', '', '1.189.117.200'), +(131, 10, '        3月6日上午,我院召开了“三八”妇女节座谈会,院长徐晓秋、副院长关春玲与十余名女同志参加了座谈会。院长徐晓秋向全体女同志表示节日的问候和祝贺,感谢大家一年来在各自岗位上为本院创新发展做出的辛勤努力和贡献。
\r\n
\r\n \"\"
\r\n
\r\n        座谈会上,女同志们就如何扮演好工作家庭的双重角色、如何加强创新团队建设、提高业务技能等方面畅所欲言、各抒己见。大家纷纷表示,不但要内外兼修成为一道美丽的风景线,而且要充分发挥“半边天”的作用,增加工作中的积极性和主动性,把智慧和力量凝聚到科研工作上,为我院的发展贡献自己的力量。座谈会气氛融洽愉快,充分展示了新时代女性的风采。
\r\n        最后徐院长表示,希望女同志们以“巾帼不让须眉”的精神,立足岗位、奋发有为,贯彻落实2015年院工作会议精神,不断学习业务,提高个人素质,成长为一专多能知识型人才的同时保持健康心态,鼓励大家再接再厉,再创佳绩。
', '', '', '113.9.10.30'), +(132, 16, '        4月7日,省能源院党委在一楼会议室召开了全体党员会议,党委书记、院长徐晓秋同志、党委委员、副院长关春玲同志、各支部书记及全体党员参加了会议。会议由徐晓秋同志主持。
\r\n        会议有三项内容,徐晓秋院长首先传达了4月1日省科学院会议内容及郭春景院长的讲话精神。随后全文传达了2月2日习近平总书记在省部级主要领导干部学习贯彻十八届四中全会精神全面推进依法治国专题研讨班开班式上的讲话内容。最后传达了省科学院关于召开“在新常态下如何做好党建工作”专题座谈会的通知,并推荐了参会人员。
\r\n        徐院长特别指出,此次省科学院专题座谈会是指导我院适应新常态下经济社会发展要求,协调推进“四个全面”战略布局,圆满完成五年发展规划目标的重要会议,参会人员一定要高度重视,结合能源院工作实际,积极参与,要以此次会议为契机,全面推进我院快速发展。
', '', '', '113.9.10.91'), +(133, 10, '        2015年3月16日,应天津大学内燃机燃烧学国家重点实验室主任、博士生导师姚春德教授的邀请,黑龙江省科学院科研处王阳处长、黑龙江省能源环境研究院徐晓秋院长和油品助剂研发中心张树华主任一行三人,赴天津大学进行交流访问。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n        天津大学内燃机燃烧学国家重点实验室是我国内燃机学科唯一的国家重点实验室,在甲醇燃料内燃动力工程领域拥有很高的国际知名度,黑龙江省能源环境研究院在非常规能源领域特别是甲醇燃料的研究方面拥有丰富的经验和实例。双方根据各自科研领域的技术特点,就如何充分发挥自身研究优势,实现技术互补,寻找合作契机召开了技术合作交流会,并针对相应需求开展合作探讨。最终,双方就共同研发“柴油、甲醇双燃料供油系统”达成了合作共识,签订了院、校联合创新合作模式框架协议,同时计划在相应标准制定、完成节能减排目标、人才培养和交流学习等方面开展一系列合作。
\r\n        我省是煤基甲醇产量大省,如“柴油、甲醇双燃料供油系统”得到广泛应用,将节省燃料费30%以上,并有效降低NOx化合物、PM2.5等有害物质排放30%-50%,在全面改善环境质量的同时助力我省煤化产业发展。
', '', '', '113.4.72.229'), +(134, 10, '
\r\n         2015年4月27日,国家行业标准《住宅建筑室内装修污染控制技术规程》启动会暨编制组第一次工作会议在深圳市召开。黑龙江省能源环境研究院作为编制组成员单位,由徐晓秋院长带队,环境与节能技术研究室王志成主任及助理研究员张玥同志随行赴深圳参加了此次会议。
\r\n
\r\n
\r\n \"\"
\r\n  
\r\n
\r\n         此次会议共有来自国家住建部标准定额所、深圳市建筑科学研究院股份有限公司、清华大学、中国建筑科学研究院、上海市建筑科学研究院(集团)有限公司等19个参编单位参加。会议围绕《住宅建筑室内装修污染控制技术规程》编制大纲进行热烈地交流与讨论,确定了编制原则、需要解决的问题、补充研究的内容、标准的章节目录、进度计划及编制分工等事项。
\r\n         会议结束后,深圳市建筑科学研究院股份有限公司毛洪伟总监和徐晓秋院长就双方今后合作进行了深入探讨和交流。2015年4月28日,双方就共同完善“室内空气质量预评估”达成合作共识,计划在国家行业标准制定、完善室内空气预评估数据库、高层次人才培养和交流学习等方面开展一系列紧密合作。

\r\n
\r\n  
\r\n
\r\n \"\"
\r\n  
\r\n
\r\n         参编国家行业标准《住宅建筑室内装修污染控制技术规程》,是我院近年来首次承担国家级课题,也是我院在室内环境领域首次与国内著名大学、院所展开紧密的合作。此次合作,起点高,影响大,标志着我院正式进军室内环境污染防控领域。
\r\n', '', '', '1.189.50.154'); +INSERT INTO `dede_addonarticles` (`aid`, `typeid`, `body`, `redirecturl`, `templet`, `userip`) VALUES +(135, 10, '        2015年5月12日,农业部沼气科学研究所生物质能中心主任胡启春研究员一行四人到黑龙江省能源环境研究院进行交流与访问。\r\n
\r\n \"\"
\r\n  
\r\n 
\r\n        胡启春研究员首先来到能源院江北实验室,在会议室做了沼气工程领域的报告,报告详细的分析与解读了国内最新科研技术的相关情况,省能源院领导及相关科研人员参加了会议,并对胡研究员一行的到来表示热烈欢迎,同时省能源院也介绍了东北地区特别是黑龙江省各型沼气工程的发展现状,随后双方围绕各自技术优势进行了深入交流,并积极寻找合作契机。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n        5月13日在省能源院工作人员的陪同下参观了我院在大庆杜尔伯特的IMUS项目,并对黑龙省部分地区的生物质能源技术发展情况进行了调研。
\r\n        临别时,省能源院徐晓秋院长再次感谢胡启春研究员一行四人的到访,同时希望省能源院与农业部沼气研究所建立紧密的合作与联系。
', '', '', '1.189.50.152'), +(136, 10, '        根据省科学院通知要求,6月4日,黑龙江省能源环境研究院在一楼会议室召开了党委扩大会议暨省能源院“三严三实”专题教育动员会,省能源院领导班子、全体党员、部门负责人及副科级以上民主党派人士参加了会议。
\r\n
\r\n \"\"
\r\n
\r\n        大会通过了省能源院“三严三实”专题教育实施方案,省能源院党委书记、院长徐晓秋同志就深入开展“三严三实”专题教育进行了动员和全面部署。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n        徐晓秋同志指出,要坚决贯彻落实中央、省委及省科学院的部署和要求,从严从实开展“三严三实”专题教育,要明确责任,紧扣主题,聚焦对党忠诚、个人干净、敢于担当,坚持高标准严要求,注重思想引领,解决实际问题。同时要求党办、党支部及团委负责同志要在“三严三实”专题教育中讲一次党课。各部门主要负责同志,要充分提高认识,积极配合,带头搞好学习教育、确保省能源院“三严三实”专题教育取得实效。', '', '', '113.9.10.91'), +(137, 10, '        5月27日,省知识产权局张毅副局长率综合协调处负责同志就全省高校院所专利“提质促量”工作,到黑龙江省能源环境研究院进行调研。省能源院徐晓秋院长、关春玲副院长、科研与产业化办公室主任王志成等有关同志参加会议,并作情况介绍。
\r\n
\r\n \"\"
\r\n
\r\n        徐晓秋院长介绍,2013年省能源环境研究院与省科学院科技孵化中心合并。省科学院科技孵化中心为2012年度省知识产权局高校、科研院所专利项目支持单位,在项目支持下专利工作发展取得实质性突破。合并后,省能源院更加重视专利工作,近两年申请专利41项,人均专利超1项。院科研与产业化办公室王志成主任介绍了院专利申报、维护管理,专利转移和产业化工作情况。建立知识产权月报制度、各技术科室联络员制度,定期对院管理层、知识产权管理人员和技术人员进行知识产权的相关培训,要求各科室设立专项资金,提高专利撰写人员的业务水平等措施,使知识产权工作再上新台阶。
\r\n        张毅副局长对省能源院承担省高校院所专利项目取得的效果表示赞赏,认为之前项目执行成效好、产出大,特别是对建立“知识产权联络员”制度予以充分肯定,同时重点介绍了2015年度我省高校院所专利“提质促量”工作,建议省能源院更加重视发明专利拥有量,做好新发明专利的挖掘及已有发明专利的保持工作,进一步强化专利转化应用工作。张毅副局长同时还介绍了省知识产权局有关专利创造、运用等方面的政策措施,建议双方加强沟通联系,促进专利“提质促量”工作,进一步将能源领域的科研水平转化为专利优势,为改善我省生态环境发挥更大的作用。

\r\n', '', '', '113.4.72.229'), +(138, 10, '        2015年6月4日至5日,省知识产权局举办了黑龙江省高校、科研院所知识产权专题培训班。我院科研办王志成主任、设计部王玉鹏和环境与节能研究室张玥参加了此次培训。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n        此次培训课程由来自省知识产权局的张毅副局长、北京隆源智信知识产权咨询有限公司的闫冬总经理、哈尔滨工程大学经济管理学院陈伟教授及北京科技大学科学研究与发展部张超副部长授课,不仅解释了知识产权为何是建设创新型国家的核心竞争力,还重点讲解了专利转化运用的重要性,并结合具体的案例加以分析,更加易于理解和记忆。
\r\n        此次培训班旨在增强我省高校及科研院所相关技术人员的知识产权转化意识,提高知识产权的运用率,使得知识产权能够有效的创造实用价值。课程内容丰富,含义深刻,重点明确,使我们受益匪浅。
', '', '', '113.4.72.229'), +(139, 10, '        2015年6月8日,由黑龙江省能源环境研究院发起的黑龙江省能源环境学会正式成立。学会由黑龙江省民政厅批准,并发放《社会团体法人登记证书》,业务主管部门为黑龙江省科学技术协会。
\r\n
\r\n\"\"
\r\n
\r\n          能源化学学会为非营利组织性质的社会团体,属独立法人机构。致力于在能源和环境建设领域发挥桥梁和纽带作用,协助有关部门制定政策战略,充分运用市场机制,着力于能源环境领域先进的技术和产品全方位推广,加速产学研结合,促进企事业单位、科研院所间的对外交流与合作、宣传推广等工作。
\r\n学会可开展学术交流,组织研讨会、论坛,促进能源环境事业和谐发展。反映科学技术工作者的意愿和要求,维护科学技术工作者的合法权益。依法编辑内部参考资料和学会刊物及相关书籍。依法开展科学技术交流活动和业务培训,提高人员素质。宣传能源环境领域的方针和政策,促进企业节能减排,提高能源利用效率。承办政府及相关部门的委托工作。
\r\n          学会的成立标志着省能源院在领域内学术地位的提升,同时也标志着省能源院的工作得到各级领导和同行专家的认可。
', '', '', '113.4.72.229'), +(140, 10, '        6月15日,在省能源院一楼会议室,省能源院党委书记、院长徐晓秋同志以《践行“三严三实”要求,做忠诚干净担当的好干部》为题,为全体党员、副科级以上人员讲了一堂“三严三实”专题党课。\r\n
\r\n
\r\n \"\"
\r\n  
\r\n        徐晓秋书记围绕准确把握“三严三实”要求的精神内涵、充分认识“三严三实”要求的重大意义、深入挖掘不严不实的具体表现等方面的作了深入浅出的论述和讲解。\r\n
\r\n
\r\n \"\"
\r\n  
\r\n        徐晓秋书记同时要求每位党员干部都要自觉践行“三严三实”,按照“三严三实”的要求对照检查、提升自己,从思想深处、从履职行权、从日常生活等方方面面,摒弃歪风邪气,树立昂扬正气,以更加严谨的工作作风和更加积极的工作态度聚力“五年会战”,推动省能源院科研事业新发展。', '', '', '113.9.10.91'), +(141, 10, '        6月18日清晨,省能源院举办了首届“能源杯”徒步活动,活动的主题为 “低碳环保,健康生活”。
\r\n
\r\n \"\"
\r\n
\r\n        本次活动全程约8公里,环绕阿勒锦岛一周,历时两个 小时。一路上大家奋勇争先、相互鼓励,时而疾走如飞,时而舒缓脚步,在欣赏沿途美景享受运动快乐的同时激发了大家热爱自然、热爱生活的感情,提高了低碳环保意识。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n        此次活动让大家放松了心情、愉悦了身心、磨练了意志、增进了友谊。在行走间凝心聚力,彰显了省能源院全体职工“奋勇争先、和谐健康”的精神风貌和时代追求。
\r\n', '', '', '113.5.2.14'), +(142, 10, '        为喜迎中国共产党成立94周年,继承和发扬党的优良传统和作风,切实加强基层党组织建设,“七一”期间,省能源环境研究开展内了容丰富、形式多样的庆祝活动,通过主题鲜明、广泛参与的活动,切实提升党组织的号召力、凝聚力和战斗力,使广大党员干部以更加饱满的热情迎接中国共产党成立94周年盛典。
\r\n        6月29日,省能源院开展了庆“七一”系列活动之一《书画摄影作品展》,为党的生日献礼。此次活动得到了全院职工的热情响应,全院共征集书画摄影作品50余件,经过评比、优选出优秀作品35件入选此次展览,其中书法作品“三严三实”,笔锋流畅有力、大气潇洒,充分展现了作者对“严与实”的深刻理解;绘画作品《庆》,用花开盛世的美好景象,祝福祖国欣欣向荣,繁荣昌盛;摄影作品内容积极向上,传递着正能量,其中有的歌颂祖国大好河山,有的缅怀历史,勿忘国耻,有的记录丰富多彩的业余生活。通过此次展览,全面地展示出省能源院职工爱自然、爱生活,爱工作的情怀。

\r\n
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n        6月30日,省能源院开展了庆“七一”系列活动之二《党员带头捐书、共建院图书共享平台》。经过积极策划、精心准备,党员干部带头捐书活动顺利开展,同时建立了省能源院自己的图书共享平台——博知苑,并且制定了相关借阅准则。此次捐书活动得到了省能源院全院职工的积极响应,大家纷纷把自己喜欢的书籍放到博知苑与大家一起分享,此次活动共收到书籍近百本,类别涵盖文史、社科、电子、机械、化工、生物、心理类等。在成立博知苑的当天,院里的很多同志就已经借阅了自己喜欢的书籍,相信在省能源院全院职工的共同努力下,博知苑一定会越办越好。\r\n
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n        7月1日,省能源院开展了庆“七一”系列活动之三《欢庆“七一 ”为党庆生》。此次活动得到了省科学院直属机关党委的大力支持,刘颖同志参加了系列活动。\r\n
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n
\r\n        活动第一项,举行老党员重温入党誓词、新党员入党宣誓仪式,新党员张帆、陆海玲同志及全体党员面对党旗庄严宣誓。入党宣誓是对党员进行教育的一种形式,体现了入党的庄重性和严肃性,同时激励新党员牢记党的誓言,更加严格地要求自己,也让老党员重温对党的承诺。宣誓活动结束后,作为领誓人的优秀老党员刘岩同志激动不已,表示即为省能源院得到新鲜力量的充实感到高兴,也为自己是省能源院的一员感到由衷的自豪。\r\n
\r\n
\r\n \"\"
\r\n
\r\n        活动第二项,举行“三严三实”知识竞答活动。省能源院按照“三严三实”专题教育实施方案的工作安排,固定将每周三定为“三严三实”专题学习日,本次竞答活动即是一次对“三严三实”的学习,也是对多次开展的专题学习进行一次检验,并通过问答活动,让广大党员进一步加深了对“三严三实”深刻内涵和意义的理解,使全院党员干部以更加严谨的工作作风和更加积极的工作态度投入到科研工作中,推动能源院不断向前发展。
\r\n
\r\n \"\"
\r\n 
\r\n        活动最后一项,集体观看专题电视片《周总理的严与实》,在严肃认真的氛围中,省能源院全体党员共同感受了伟人对待工作的认真与严谨,同时周总理严于律己的优秀品质和实干兴邦的治国理念,也让大家得到了深刻的启示,并认识到在科学研究的道路上要求真务实,用责任和担当坚守自己平凡的岗位,用真招实措换来实实在在的进步,用自身行动向社会传递正确的价值导向。
\r\n
\r\n
\r\n \"\"
\r\n 
\r\n        此次系列活动通过不同的形式使省能源院广大党员干部受到了教育,也充分展现了省能源院全体党员的精神风貌和对党的无限热爱,在祥和、愉悦的气氛中,省能源院庆“七一”系列活动圆满落幕。

\r\n', '', '', '113.9.10.91'), +(143, 10, '        2015年7月3日,在省科学院四楼会议室,黑龙江省科学院与加拿大阿尔伯塔省技术创新研究院合作协议签约仪式正式举行。省科学院院长郭春景、黑龙江省能源环境研究院院长徐晓秋及加方代表等参加签约仪式。
\r\n
\r\n \"\"
\r\n
\r\n        黑龙江省科学院以国家“十二五”规划提出的“推动非常规油气资源开发利用”为契机,紧抓我省发展重油沥青资源的良好时机,以黑龙江省能源环境研究院作为合作项目承担的主体,助力我省重油沥青资源精/深加工和综合利用。
\r\n
\r\n \"\"
\r\n
\r\n        根据协议内容,双方将在中国黑龙江省和加拿大阿尔伯塔省同时建立“黑龙江省/阿尔伯塔省沥青及重油联合研究中心”,并以该中心作为依托,利用重油及沥青等非常规能源作为原料,共同研究开发该领域的最新技术和产品,推进高端技术和产品融入黑龙江省的重点石化工业园区。协议内容还包括信息共享、成果转化、市场推广和人才培养等方面。
\r\n
\r\n \"\"
\r\n', '', '', '1.58.243.209'), +(144, 10, '        根据省科学院机关党委关于观看大型历史文献记录片《筑梦中国》相关要求,我院高度重视,积极部署观看学习活动。于7月24日、27日、28日每天下午13:30在能源院一楼会议室组织全院职工进行观看。
\r\n
\r\n
\r\n
\r\n  
\r\n        《筑梦中国》纪录片内容丰富,生动详实,振奋人心。该片展示了1840年鸦片战争以来中国人民在屈辱苦难中奋起抗争,为实现民族复兴进行的种种探索,特别是中国共产党领导全国各族人民争取民族独立、人民解放和国家富强、人民幸福的光辉历程,充分诠释了中华民族的复兴之路,生动阐释了中国梦的深刻内涵。
\r\n
\r\n
\r\n
\r\n  
\r\n        观看结束后,院职工表示,该片不仅仅是重温了中国的革命史,更重要的是看到了中国共产党在实现中华民族伟大复兴的道路上的披荆斩棘与力挽狂澜。该片同时教育我们要增强“三个自信”,要坚定不移走中国特色社会主义道路,为实现中华民族伟大复兴的中国梦而不懈奋斗。', '', '', '113.9.10.91'), +(145, 10, '        2015年8月13日-14日黑龙江省能源环境研究院院长徐晓秋同志应邀参加了全国科学院联盟能源分会启动仪式。本次会议由中国科学院科技促进发展局和中国科学院沈阳分院主办,由中国科学院大连化学物理研究所和新兴能源科技有限公司承办。
\r\n        参加会议的有中国科学院科技促进发展局陈文开副局长、中国科学院沈阳分院马越红副院长、中国科学院大连化学物理研究所党委书记王华研究员及各研究院所的领导同志等。英国石油公司、LUMMUS等国外公司的总裁、项目经理和国内石化产业相关企业的人员参加了此次会议。参会的能源领域领导、专家及企业家多达160人,盛况空前。

\r\n
\r\n
\r\n \"QQ图片20150819103946.jpg\"
\r\n  
\r\n        2015年8月13日9:00中国科学院科技促进发展局、山东省科学院、大连市政府、大连化学物理所领导致辞,并且进行全国科学院联盟能源分会揭牌仪式,全国科学院联盟能源分会正式启动。8月14日与会专家审议了分会章程,成立能源分会理事会,推选理事长、副理事长、秘书长等领导机构,对各参会单位的合作模式进行研讨。
\r\n        两天的会议在热烈的气氛中结束,全国科学院联盟能源分会成立标志着中国科学院系统能源领域强强联合,谱写共同发展的新篇章。
', '', '', '1.58.195.42'), +(146, 10, '        2015年8月26日,省科学院督研委对院基金项目“页岩油深加工工艺关键技术”的执行情况进行阶段性督导和检查。会议由院科研处隋月梅副处长主持。\r\n
\r\n
\r\n        督研委专家们听取了课题组的工作汇报,对项目充分利用黑龙江省赋存丰富的非常规能源—油页岩资源,开发页岩油深加工制取运输燃料和化工轻油技术,助力我省替代能源的开发和利用给予高度评价。经认真质询、讨论,对该项目阶段总结工作给予充分肯定,同意继续支持该项目研发,并对下阶段的研发工作提出了合理化建议。
\r\n        最后,隋月梅副处长做了总结性发言,希望课题组按照专家们的建议修改调整研发思路,圆满完成科研项目,为我院的学科发展提供有力的技术支撑。
', '', '', '113.9.10.91'), +(147, 10, '        9月9日,由省科学院团委主办的三严三实 青年党史知识竞赛在嵩山路15号8楼会议室拉开帷幕。此次竞赛内容涵盖了党章,党史,十八大报告,十八届三中、四中全会精神,习总书记系列重要讲话精神,时事政治等内容,旨在通过此竞赛,使全体青年党员重温党的光辉历程,进一步推动三严三实专题教育工作。比赛共有9支代表队参加,代表我院参赛的杨光、陆佳、潘良3名队员团结拼搏,经过必答题、抢答题和风险题三轮激烈比拼,获得三等奖,为我院争得了荣誉。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n
\r\n \"\"
\r\n', '', '', '113.4.72.248'), +(148, 10, '          10月13日下午,省科学院党组书记赵梅同志在院办公室主任章力同志的陪同下莅临黑龙江省能源环境研究院调研指导工作。省能源院徐晓秋院长、关春玲副院长参加了此次调研。\r\n
\r\n \"\"
\r\n        调研会议上赵梅书记与参会同志进行了广泛讨论。徐晓秋院长首先向赵梅书记详细汇报了能源院的发展概况,其间,赵书记询问了能源院的人员结构和发展历程。随后,赵书记就能源院重点项目、学科建设、人才培养、发展规划等方面进行了调研。赵书记对省能源院近几年在能源环境领域取得的成绩和进步给予了充分肯定,赵书记指出,能源院的重点项目在能源环境领域的特点突出,作为公益一类科研单位,在科研工作的推进过程中应准确把握需求、调动好各方的积极性,要最大程度发挥领域优势,为我省经济社会发展和政府决策提供支撑和保障。
\r\n 
\r\n
\r\n
\r\n        会后,赵梅书记一行参观了能源院各实验室,并与科研人员进行了交流探讨。', '', '', '60.219.236.158'), +(149, 10, '        2015年10月18日,黑龙江省能源环境学会成立大会暨首届学术年会在哈隆重举行。此次活动由省能源环境学会筹备委员会主办,省能源环境研究院、哈工大城市水资源与水环境国家重点实验室承办。黑龙江省科学院郭春景院长、省环保厅李平厅长、哈尔滨工业大学安实副校长、黑龙江省科学院王刚副院长、黑龙江省科协苏凤仙副主席、省民间组织管理局孙俭太副局长、城市水资源与水环境国家重点实验室常务副主任马放教授出席了此次会议。 
\r\n
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n        省内能源环境领域的领导、各研究院所、高校学科带头人和骨干教师等共计110人出席了大会。会议通过了黑龙江省能源环境学会章程,并按照相关规定投票选举出了黑龙江省能源环境学会第一届理事及学会领导人员。马放当选为首届能源环境学会理事长、高德玉当选为秘书长。
\r\n
\r\n \"\"
\r\n
\r\n         黑龙江省能源环境学会(HSEE:Heilongjiang Society for Energy and Environment)是经黑龙江省科学技术协会批准,在黑龙江省民间组织管理登记注册的学术性、公益性、非盈利性法人社会团体,办事机构常设在黑龙江能源环境研究院。黑龙江省能源环境学会集中了全省最优秀的能源环境领域科技人才,首批个人会员为123人,团体会员为5个。学会将根据业务发展情况,设立相关专业技术委员会。
\r\n
\r\n \"\"
\r\n
\r\n        上午9点成立大会正式举行,会议由省能源环境研究院徐晓秋院长主持。省科学院王钢副院长致开幕词。省民间组织管理局孙俭太副局长宣读了关于同意成立省能源环境学会的批复文件。省科学院郭春景院长、省环保厅李平厅长、哈工大安实副校长、省科协苏凤仙副主席、城市水资源与水环境国家重点实验室马放主任分别围绕能源环境学会成立的意义和成立后的各项工作发表重要讲话。
\r\n郭春景院长指出,学会近期工作要围绕两点,一要主动作为,敢于担当。要充分调动发挥本学会中的专业技术优势,积极参与解决我省能源供求矛盾突出的现状。二是不断创新,培养人才。要探索创新型科研技术,培养综合型科技人才,积极为我省能源环境研究工作提供技术支持,搭建科研平台,为我省新能源的开发与环境保护工作开辟出一条自主创新的发展之路。

\r\n
\r\n \"\"
\r\n
\r\n        下午,省内能源环境领域的专家一起就环境保护、能源发展等方面进行了学术研讨。', '', '', '113.9.10.52'), +(150, 10, '
\r\n 能源院全体党员:
\r\n
\r\n         为扎实开展“三严三实”专题教育工作,紧扣《中国共产党巡视工作条例》对“六大纪律”的要求,引导和教育全体党员牢固树立自觉遵守党章党纪党规的政治意识和大局观念,守住“不想腐”的思想防线,筑牢“不能腐”的制度笼子,坚持“不敢腐”的高压态势,营造风清气正的发展环境。现将《中国共产党廉政自律准则》及《中国共产党纪律处分条例》转发给你们,请全体党员认真自学。
\r\n
\r\n
\r\n         附件1:中国共产党廉政自律准则
\r\n
\r\n        附件2:中国共产党纪律处分条例
\r\n', '', '', '125.211.31.229'); +INSERT INTO `dede_addonarticles` (`aid`, `typeid`, `body`, `redirecturl`, `templet`, `userip`) VALUES +(151, 10, '
\r\n (2015年10月29日中国共产党第十八届中央委员会第五次全体会议通过)
\r\n  
\r\n        到二〇二〇年全面建成小康社会,是我们党确定的“两个一百年”奋斗目标的第一个百年奋斗目标。“十三五”时期是全面建成小康社会决胜阶段,“十三五”规划必须紧紧围绕实现这个奋斗目标来制定。
\r\n    中国共产党第十八届中央委员会第五次全体会议全面分析国际国内形势,认为如期全面建成小康社会既具有充分条件也面临艰巨任务,必须在新中国成立特别是改革开放以来打下的坚实基础上坚定信心、锐意进取、奋发有为。全会研究了“十三五”时期我国发展的一系列重大问题,就制定“十三五”规划提出以下建议。
\r\n    一、全面建成小康社会决胜阶段的形势和指导思想
\r\n    (一)“十二五”时期我国发展取得重大成就。“十二五”时期是我国发展很不平凡的五年。面对错综复杂的国际环境和艰巨繁重的国内改革发展稳定任务,我们党团结带领全国各族人民顽强拼搏、开拓创新,奋力开创了党和国家事业发展新局面。
\r\n    我们妥善应对国际金融危机持续影响等一系列重大风险挑战,适应经济发展新常态,不断创新宏观调控方式,推动形成经济结构优化、发展动力转换、发展方式转变加快的良好态势。我国经济总量稳居世界第二位,十三亿多人口的人均国内生产总值增至七千八百美元左右。第三产业增加值占国内生产总值比重超过第二产业,基础设施水平全面跃升,农业连续增产,常住人口城镇化率达到百分之五十五,一批重大科技成果达到世界先进水平。公共服务体系基本建立、覆盖面持续扩大,新增就业持续增加,贫困人口大幅减少,生态文明建设取得新进展,人民生活水平和质量加快提高。全面深化改革有力推进,人民民主不断扩大,依法治国开启新征程。全方位外交取得重大进展,对外开放不断深入,我国成为全球第一货物贸易大国和主要对外投资大国。中华民族伟大复兴的中国梦和社会主义核心价值观深入人心,国家文化软实力不断增强。中国特色军事变革成就显著,强军兴军迈出新步伐。全面从严治党开创新局面,党的群众路线教育实践活动成果丰硕,党风廉政建设成效显著,赢得了党心民心。“十二五”规划目标即将胜利实现,我国经济实力、科技实力、国防实力、国际影响力又上了一个大台阶。
\r\n    尤为重要的是,党的十八大以来,以习近平同志为总书记的党中央毫不动摇坚持和发展中国特色社会主义,勇于实践、善于创新,深化对共产党执政规律、社会主义建设规律、人类社会发展规律的认识,形成一系列治国理政新理念新思想新战略,为在新的历史条件下深化改革开放、加快推进社会主义现代化提供了科学理论指导和行动指南。
\r\n    (二)“十三五”时期我国发展环境的基本特征。和平与发展的时代主题没有变,世界多极化、经济全球化、文化多样化、社会信息化深入发展,世界经济在深度调整中曲折复苏,新一轮科技革命和产业变革蓄势待发,全球治理体系深刻变革,发展中国家群体力量继续增强,国际力量对比逐步趋向平衡。同时,国际金融危机深层次影响在相当长时期依然存在,全球经济贸易增长乏力,保护主义抬头,地缘政治关系复杂变化,传统安全威胁和非传统安全威胁交织,外部环境不稳定不确定因素增多。
\r\n    我国物质基础雄厚、人力资本丰富、市场空间广阔、发展潜力巨大,经济发展方式加快转变,新的增长动力正在孕育形成,经济长期向好基本面没有改变。同时,发展不平衡、不协调、不可持续问题仍然突出,主要是发展方式粗放,创新能力不强,部分行业产能过剩严重,企业效益下滑,重大安全事故频发;城乡区域发展不平衡;资源约束趋紧,生态环境恶化趋势尚未得到根本扭转;基本公共服务供给不足,收入差距较大,人口老龄化加快,消除贫困任务艰巨;人们文明素质和社会文明程度有待提高;法治建设有待加强;领导干部思想作风和能力水平有待提高,党员、干部先锋模范作用有待强化。我们必须增强忧患意识、责任意识,着力在优化结构、增强动力、化解矛盾、补齐短板上取得突破性进展。
\r\n    综合判断,我国发展仍处于可以大有作为的重要战略机遇期,也面临诸多矛盾叠加、风险隐患增多的严峻挑战。我们要准确把握战略机遇期内涵的深刻变化,更加有效地应对各种风险和挑战,继续集中力量把自己的事情办好,不断开拓发展新境界。
\r\n    (三)“十三五”时期我国发展的指导思想。高举中国特色社会主义伟大旗帜,全面贯彻党的十八大和十八届三中、四中全会精神,以马克思列宁主义、毛泽东思想、邓小平理论、“三个代表”重要思想、科学发展观为指导,深入贯彻习近平总书记系列重要讲话精神,坚持全面建成小康社会、全面深化改革、全面依法治国、全面从严治党的战略布局,坚持发展是第一要务,以提高发展质量和效益为中心,加快形成引领经济发展新常态的体制机制和发展方式,保持战略定力,坚持稳中求进,统筹推进经济建设、政治建设、文化建设、社会建设、生态文明建设和党的建设,确保如期全面建成小康社会,为实现第二个百年奋斗目标、实现中华民族伟大复兴的中国梦奠定更加坚实的基础。
\r\n    如期实现全面建成小康社会奋斗目标,推动经济社会持续健康发展,必须遵循以下原则。
\r\n    ——坚持人民主体地位。人民是推动发展的根本力量,实现好、维护好、发展好最广大人民根本利益是发展的根本目的。必须坚持以人民为中心的发展思想,把增进人民福祉、促进人的全面发展作为发展的出发点和落脚点,发展人民民主,维护社会公平正义,保障人民平等参与、平等发展权利,充分调动人民积极性、主动性、创造性。
\r\n    ——坚持科学发展。发展是硬道理,发展必须是科学发展。我国仍处于并将长期处于社会主义初级阶段,基本国情和社会主要矛盾没有变,这是谋划发展的基本依据。必须坚持以经济建设为中心,从实际出发,把握发展新特征,加大结构性改革力度,加快转变经济发展方式,实现更高质量、更有效率、更加公平、更可持续的发展。
\r\n    ——坚持深化改革。改革是发展的强大动力。必须按照完善和发展中国特色社会主义制度、推进国家治理体系和治理能力现代化的总目标,健全使市场在资源配置中起决定性作用和更好发挥政府作用的制度体系,以经济体制改革为重点,加快完善各方面体制机制,破除一切不利于科学发展的体制机制障碍,为发展提供持续动力。
\r\n    ——坚持依法治国。法治是发展的可靠保障。必须坚定不移走中国特色社会主义法治道路,加快建设中国特色社会主义法治体系,建设社会主义法治国家,推进科学立法、严格执法、公正司法、全民守法,加快建设法治经济和法治社会,把经济社会发展纳入法治轨道。
\r\n    ——坚持统筹国内国际两个大局。全方位对外开放是发展的必然要求。必须坚持打开国门搞建设,既立足国内,充分运用我国资源、市场、制度等优势,又重视国内国际经济联动效应,积极应对外部环境变化,更好利用两个市场、两种资源,推动互利共赢、共同发展。
\r\n    ——坚持党的领导。党的领导是中国特色社会主义制度的最大优势,是实现经济社会持续健康发展的根本政治保证。必须贯彻全面从严治党要求,不断增强党的创造力、凝聚力、战斗力,不断提高党的执政能力和执政水平,确保我国发展航船沿着正确航道破浪前进。
\r\n    二、“十三五”时期经济社会发展的主要目标和基本理念
\r\n    (一)全面建成小康社会新的目标要求。党的十六大提出全面建设小康社会奋斗目标以来,全党全国各族人民接续奋斗,各项事业取得重大进展。今后五年,要在已经确定的全面建成小康社会目标要求的基础上,努力实现以下新的目标要求。
\r\n    ——经济保持中高速增长。在提高发展平衡性、包容性、可持续性的基础上,到二〇二〇年国内生产总值和城乡居民人均收入比二〇一〇年翻一番。主要经济指标平衡协调,发展空间格局得到优化,投资效率和企业效率明显上升,工业化和信息化融合发展水平进一步提高,产业迈向中高端水平,先进制造业加快发展,新产业新业态不断成长,服务业比重进一步上升,消费对经济增长贡献明显加大。户籍人口城镇化率加快提高。农业现代化取得明显进展。迈进创新型国家和人才强国行列。
\r\n    ——人民生活水平和质量普遍提高。就业比较充分,就业、教育、文化、社保、医疗、住房等公共服务体系更加健全,基本公共服务均等化水平稳步提高。教育现代化取得重要进展,劳动年龄人口受教育年限明显增加。收入差距缩小,中等收入人口比重上升。我国现行标准下农村贫困人口实现脱贫,贫困县全部摘帽,解决区域性整体贫困。
\r\n    ——国民素质和社会文明程度显著提高。中国梦和社会主义核心价值观更加深入人心,爱国主义、集体主义、社会主义思想广泛弘扬,向上向善、诚信互助的社会风尚更加浓厚,人民思想道德素质、科学文化素质、健康素质明显提高,全社会法治意识不断增强。公共文化服务体系基本建成,文化产业成为国民经济支柱性产业。中华文化影响持续扩大。
\r\n    ——生态环境质量总体改善。生产方式和生活方式绿色、低碳水平上升。能源资源开发利用效率大幅提高,能源和水资源消耗、建设用地、碳排放总量得到有效控制,主要污染物排放总量大幅减少。主体功能区布局和生态安全屏障基本形成。
\r\n    ——各方面制度更加成熟更加定型。国家治理体系和治理能力现代化取得重大进展,各领域基础性制度体系基本形成。人民民主更加健全,法治政府基本建成,司法公信力明显提高。人权得到切实保障,产权得到有效保护。开放型经济新体制基本形成。中国特色现代军事体系更加完善。党的建设制度化水平显著提高。
\r\n    (二)完善发展理念。实现“十三五”时期发展目标,破解发展难题,厚植发展优势,必须牢固树立创新、协调、绿色、开放、共享的发展理念。
\r\n    创新是引领发展的第一动力。必须把创新摆在国家发展全局的核心位置,不断推进理论创新、制度创新、科技创新、文化创新等各方面创新,让创新贯穿党和国家一切工作,让创新在全社会蔚然成风。
\r\n    协调是持续健康发展的内在要求。必须牢牢把握中国特色社会主义事业总体布局,正确处理发展中的重大关系,重点促进城乡区域协调发展,促进经济社会协调发展,促进新型工业化、信息化、城镇化、农业现代化同步发展,在增强国家硬实力的同时注重提升国家软实力,不断增强发展整体性。
\r\n    绿色是永续发展的必要条件和人民对美好生活追求的重要体现。必须坚持节约资源和保护环境的基本国策,坚持可持续发展,坚定走生产发展、生活富裕、生态良好的文明发展道路,加快建设资源节约型、环境友好型社会,形成人与自然和谐发展现代化建设新格局,推进美丽中国建设,为全球生态安全作出新贡献。
\r\n    开放是国家繁荣发展的必由之路。必须顺应我国经济深度融入世界经济的趋势,奉行互利共赢的开放战略,坚持内外需协调、进出口平衡、引进来和走出去并重、引资和引技引智并举,发展更高层次的开放型经济,积极参与全球经济治理和公共产品供给,提高我国在全球经济治理中的制度性话语权,构建广泛的利益共同体。
\r\n    共享是中国特色社会主义的本质要求。必须坚持发展为了人民、发展依靠人民、发展成果由人民共享,作出更有效的制度安排,使全体人民在共建共享发展中有更多获得感,增强发展动力,增进人民团结,朝着共同富裕方向稳步前进。
\r\n    坚持创新发展、协调发展、绿色发展、开放发展、共享发展,是关系我国发展全局的一场深刻变革。全党同志要充分认识这场变革的重大现实意义和深远历史意义,统一思想,协调行动,深化改革,开拓前进,推动我国发展迈上新台阶。
\r\n    三、坚持创新发展,着力提高发展质量和效益
\r\n    在国际发展竞争日趋激烈和我国发展动力转换的形势下,必须把发展基点放在创新上,形成促进创新的体制架构,塑造更多依靠创新驱动、更多发挥先发优势的引领型发展。
\r\n    (一)培育发展新动力。优化劳动力、资本、土地、技术、管理等要素配置,激发创新创业活力,推动大众创业、万众创新,释放新需求,创造新供给,推动新技术、新产业、新业态蓬勃发展,加快实现发展动力转换。
\r\n    发挥消费对增长的基础作用,着力扩大居民消费,引导消费朝着智能、绿色、健康、安全方向转变,以扩大服务消费为重点带动消费结构升级。促进流通信息化、标准化、集约化。
\r\n    发挥投资对增长的关键作用,深化投融资体制改革,优化投资结构,增加有效投资。发挥财政资金撬动功能,创新融资方式,带动更多社会资本参与投资。创新公共基础设施投融资体制,推广政府和社会资本合作模式。
\r\n    发挥出口对增长的促进作用,增强对外投资和扩大出口结合度,培育以技术、标准、品牌、质量、服务为核心的对外经济新优势。实施优进优出战略,推进国际产能和装备制造合作,提高劳动密集型产品科技含量和附加值,营造资本和技术密集型产业新优势,提高我国产业在全球价值链中的地位。
\r\n    (二)拓展发展新空间。用发展新空间培育发展新动力,用发展新动力开拓发展新空间。
\r\n    拓展区域发展空间。以区域发展总体战略为基础,以“一带一路”建设、京津冀协同发展、长江经济带建设为引领,形成沿海沿江沿线经济带为主的纵向横向经济轴带。发挥城市群辐射带动作用,优化发展京津冀、长三角、珠三角三大城市群,形成东北地区、中原地区、长江中游、成渝地区、关中平原等城市群。发展一批中心城市,强化区域服务功能。支持绿色城市、智慧城市、森林城市建设和城际基础设施互联互通。推进重点地区一体发展,培育壮大若干重点经济区。推进城乡发展一体化,开辟农村广阔发展空间。
\r\n    拓展产业发展空间。支持节能环保、生物技术、信息技术、智能制造、高端装备、新能源等新兴产业发展,支持传统产业优化升级。推广新型孵化模式,鼓励发展众创、众包、众扶、众筹空间。发展天使、创业、产业投资,深化创业板、新三板改革。
\r\n    拓展基础设施建设空间。实施重大公共设施和基础设施工程。实施网络强国战略,加快构建高速、移动、安全、泛在的新一代信息基础设施。加快完善水利、铁路、公路、水运、民航、通用航空、管道、邮政等基础设施网络。完善能源安全储备制度。加强城市公共交通、防洪防涝等设施建设。实施城市地下管网改造工程。加快开放电力、电信、交通、石油、天然气、市政公用等自然垄断行业的竞争性业务。
\r\n    拓展网络经济空间。实施“互联网+”行动计划,发展物联网技术和应用,发展分享经济,促进互联网和经济社会融合发展。实施国家大数据战略,推进数据资源开放共享。完善电信普遍服务机制,开展网络提速降费行动,超前布局下一代互联网。推进产业组织、商业模式、供应链、物流链创新,支持基于互联网的各类创新。
\r\n    拓展蓝色经济空间。坚持陆海统筹,壮大海洋经济,科学开发海洋资源,保护海洋生态环境,维护我国海洋权益,建设海洋强国。
\r\n    (三)深入实施创新驱动发展战略。发挥科技创新在全面创新中的引领作用,加强基础研究,强化原始创新、集成创新和引进消化吸收再创新。推进有特色高水平大学和科研院所建设,鼓励企业开展基础性前沿性创新研究,重视颠覆性技术创新。实施一批国家重大科技项目,在重大创新领域组建一批国家实验室。积极提出并牵头组织国际大科学计划和大科学工程。
\r\n    推动政府职能从研发管理向创新服务转变。完善国家科技决策咨询制度。坚持战略和前沿导向,集中支持事关发展全局的基础研究和共性关键技术研究,加快突破新一代信息通信、新能源、新材料、航空航天、生物医药、智能制造等领域核心技术。瞄准瓶颈制约问题,制定系统性技术解决方案。
\r\n    强化企业创新主体地位和主导作用,形成一批有国际竞争力的创新型领军企业,支持科技型中小企业健康发展。依托企业、高校、科研院所建设一批国家技术创新中心,形成若干具有强大带动力的创新型城市和区域创新中心。完善企业研发费用加计扣除政策,扩大固定资产加速折旧实施范围,推动设备更新和新技术应用。
\r\n    深化科技体制改革,引导构建产业技术创新联盟,推动跨领域跨行业协同创新,促进科技与经济深度融合。加强技术和知识产权交易平台建设,建立从实验研究、中试到生产的全过程科技创新融资模式,促进科技成果资本化、产业化。构建普惠性创新支持政策体系,加大金融支持和税收优惠力度。深化知识产权领域改革,加强知识产权保护。
\r\n    扩大高校和科研院所自主权,赋予创新领军人才更大人财物支配权、技术路线决策权。实行以增加知识价值为导向的分配政策,提高科研人员成果转化收益分享比例,鼓励人才弘扬奉献精神。
\r\n    (四)大力推进农业现代化。农业是全面建成小康社会、实现现代化的基础。加快转变农业发展方式,发展多种形式适度规模经营,发挥其在现代农业建设中的引领作用。着力构建现代农业产业体系、生产体系、经营体系,提高农业质量效益和竞争力,推动粮经饲统筹、农林牧渔结合、种养加一体、一二三产业融合发展,走产出高效、产品安全、资源节约、环境友好的农业现代化道路。
\r\n    稳定农村土地承包关系,完善土地所有权、承包权、经营权分置办法,依法推进土地经营权有序流转,构建培育新型农业经营主体的政策体系。培养新型职业农民。深化农村土地制度改革。完善农村集体产权权能。深化农村金融改革,完善农业保险制度。
\r\n    坚持最严格的耕地保护制度,坚守耕地红线,实施藏粮于地、藏粮于技战略,提高粮食产能,确保谷物基本自给、口粮绝对安全。全面划定永久基本农田,大规模推进农田水利、土地整治、中低产田改造和高标准农田建设,加强粮食等大宗农产品主产区建设,探索建立粮食生产功能区和重要农产品生产保护区。优化农业生产结构和区域布局,推进产业链和价值链建设,开发农业多种功能,提高农业综合效益。
\r\n    推进农业标准化和信息化。健全从农田到餐桌的农产品质量安全全过程监管体系、现代农业科技创新推广体系、农业社会化服务体系。发展现代种业,提高农业机械化水平。持续增加农业投入,完善农业补贴政策。改革农产品价格形成机制,完善粮食等重要农产品收储制度。加强农产品流通设施和市场建设。
\r\n    (五)构建产业新体系。加快建设制造强国,实施《中国制造二〇二五》。引导制造业朝着分工细化、协作紧密方向发展,促进信息技术向市场、设计、生产等环节渗透,推动生产方式向柔性、智能、精细转变。
\r\n    实施工业强基工程,开展质量品牌提升行动,支持企业瞄准国际同行业标杆推进技术改造,全面提高产品技术、工艺装备、能效环保等水平。更加注重运用市场机制、经济手段、法治办法化解产能过剩,加大政策引导力度,完善企业退出机制。
\r\n    支持战略性新兴产业发展,发挥产业政策导向和促进竞争功能,更好发挥国家产业投资引导基金作用,培育一批战略性产业。
\r\n    实施智能制造工程,构建新型制造体系,促进新一代信息通信技术、高档数控机床和机器人、航空航天装备、海洋工程装备及高技术船舶、先进轨道交通装备、节能与新能源汽车、电力装备、农机装备、新材料、生物医药及高性能医疗器械等产业发展壮大。
\r\n    开展加快发展现代服务业行动,放宽市场准入,促进服务业优质高效发展。推动生产性服务业向专业化和价值链高端延伸、生活性服务业向精细和高品质转变,推动制造业由生产型向生产服务型转变。大力发展旅游业。
\r\n    (六)构建发展新体制。加快形成有利于创新发展的市场环境、产权制度、投融资体制、分配制度、人才培养引进使用机制。
\r\n    深化行政管理体制改革,进一步转变政府职能,持续推进简政放权、放管结合、优化服务,提高政府效能,激发市场活力和社会创造力。
\r\n    坚持公有制为主体、多种所有制经济共同发展。毫不动摇巩固和发展公有制经济,毫不动摇鼓励、支持、引导非公有制经济发展。推进产权保护法治化,依法保护各种所有制经济权益。
\r\n    深化国有企业改革,增强国有经济活力、控制力、影响力、抗风险能力。分类推进国有企业改革,完善现代企业制度。完善各类国有资产管理体制,以管资本为主加强国有资产监管,防止国有资产流失。健全国有资本合理流动机制,推进国有资本布局战略性调整,引导国有资本更多投向关系国家安全、国民经济命脉的重要行业和关键领域,坚定不移把国有企业做强做优做大,更好服务于国家战略目标。
\r\n    鼓励民营企业依法进入更多领域,引入非国有资本参与国有企业改革,更好激发非公有制经济活力和创造力。
\r\n    优化企业发展环境。开展降低实体经济企业成本行动,优化运营模式,增强盈利能力。限制政府对企业经营决策的干预,减少行政审批事项。清理和规范涉企行政事业性收费,减轻企业负担,完善公平竞争、促进企业健康发展的政策和制度。激发企业家精神,依法保护企业家财产权和创新收益。
\r\n    加快形成统一开放、竞争有序的市场体系,建立公平竞争保障机制,打破地域分割和行业垄断。深化市场配置要素改革,促进人才、资金、科研成果等在城乡、企业、高校、科研机构间有序流动。
\r\n    深化财税体制改革,建立健全有利于转变经济发展方式、形成全国统一市场、促进社会公平正义的现代财政制度,建立税种科学、结构优化、法律健全、规范公平、征管高效的税收制度。建立事权和支出责任相适应的制度,适度加强中央事权和支出责任。调动各方面积极性,考虑税种属性,进一步理顺中央和地方收入划分。建立全面规范、公开透明预算制度,完善政府预算体系,实施跨年度预算平衡机制和中期财政规划管理。建立规范的地方政府举债融资体制。健全优先使用创新产品、绿色产品的政府采购政策。
\r\n    加快金融体制改革,提高金融服务实体经济效率。健全商业性金融、开发性金融、政策性金融、合作性金融分工合理、相互补充的金融机构体系。构建多层次、广覆盖、有差异的银行机构体系,扩大民间资本进入银行业,发展普惠金融,着力加强对中小微企业、农村特别是贫困地区金融服务。积极培育公开透明、健康发展的资本市场,推进股票和债券发行交易制度改革,提高直接融资比重,降低杠杆率。开发符合创新需求的金融服务,推进高收益债券及股债相结合的融资方式。推进汇率和利率市场化,提高金融机构管理水平和服务质量,降低企业融资成本。规范发展互联网金融。加快建立巨灾保险制度,探索建立保险资产交易机制。
\r\n    加强金融宏观审慎管理制度建设,加强统筹协调,改革并完善适应现代金融市场发展的金融监管框架,健全符合我国国情和国际标准的监管规则,实现金融风险监管全覆盖。完善国有金融资本和外汇储备管理制度,建立安全高效的金融基础设施,有效运用和发展金融风险管理工具。防止发生系统性区域性金融风险。
\r\n    (七)创新和完善宏观调控方式。按照总量调节和定向施策并举、短期和中长期结合、国内和国际统筹、改革和发展协调的要求,完善宏观调控,采取相机调控、精准调控措施,适时预调微调,更加注重扩大就业、稳定物价、调整结构、提高效益、防控风险、保护环境。
\r\n    依据国家中长期发展规划目标和总供求格局实施宏观调控,稳定政策基调,增强可预期性和透明度,创新调控思路和政策工具,在区间调控基础上加大定向调控力度,增强针对性和准确性。完善以财政政策、货币政策为主,产业政策、区域政策、投资政策、消费政策、价格政策协调配合的政策体系,增强财政货币政策协调性。运用大数据技术,提高经济运行信息及时性和准确性。
\r\n    减少政府对价格形成的干预,全面放开竞争性领域商品和服务价格,放开电力、石油、天然气、交通运输、电信等领域竞争性环节价格。
\r\n    建立风险识别和预警机制,以可控方式和节奏主动释放风险,重点提高财政、金融、能源、矿产资源、水资源、粮食、生态环保、安全生产、网络安全等方面风险防控能力。
\r\n    四、坚持协调发展,着力形成平衡发展结构
\r\n    增强发展协调性,必须坚持区域协同、城乡一体、物质文明精神文明并重、经济建设国防建设融合,在协调发展中拓宽发展空间,在加强薄弱领域中增强发展后劲。
\r\n    (一)推动区域协调发展。塑造要素有序自由流动、主体功能约束有效、基本公共服务均等、资源环境可承载的区域协调发展新格局。
\r\n    深入实施西部大开发,支持西部地区改善基础设施,发展特色优势产业,强化生态环境保护。推动东北地区等老工业基地振兴,促进中部地区崛起,加大国家支持力度,加快市场取向改革。支持东部地区率先发展,更好辐射带动其他地区。支持革命老区、民族地区、边疆地区、贫困地区加快发展,加大对资源枯竭、产业衰退、生态严重退化等困难地区的支持力度。
\r\n    培育若干带动区域协同发展的增长极。推动京津冀协同发展,优化城市空间布局和产业结构,有序疏解北京非首都功能,推进交通一体化,扩大环境容量和生态空间,探索人口经济密集地区优化开发新模式。推进长江经济带建设,改善长江流域生态环境,高起点建设综合立体交通走廊,引导产业优化布局和分工协作。
\r\n    (二)推动城乡协调发展。坚持工业反哺农业、城市支持农村,健全城乡发展一体化体制机制,推进城乡要素平等交换、合理配置和基本公共服务均等化。
\r\n    发展特色县域经济,加快培育中小城市和特色小城镇,促进农产品精深加工和农村服务业发展,拓展农民增收渠道,完善农民收入增长支持政策体系,增强农村发展内生动力。
\r\n    推进以人为核心的新型城镇化。提高城市规划、建设、管理水平。深化户籍制度改革,促进有能力在城镇稳定就业和生活的农业转移人口举家进城落户,并与城镇居民有同等权利和义务。实施居住证制度,努力实现基本公共服务常住人口全覆盖。健全财政转移支付同农业转移人口市民化挂钩机制,建立城镇建设用地增加规模同吸纳农业转移人口落户数量挂钩机制。维护进城落户农民土地承包权、宅基地使用权、集体收益分配权,支持引导其依法自愿有偿转让上述权益。深化住房制度改革。加大城镇棚户区和城乡危房改造力度。
\r\n    促进城乡公共资源均衡配置,健全农村基础设施投入长效机制,把社会事业发展重点放在农村和接纳农业转移人口较多的城镇,推动城镇公共服务向农村延伸。提高社会主义新农村建设水平,开展农村人居环境整治行动,加大传统村落民居和历史文化名村名镇保护力度,建设美丽宜居乡村。
\r\n    (三)推动物质文明和精神文明协调发展。坚持“两手抓、两手都要硬”,坚持社会主义先进文化前进方向,坚持以人民为中心的工作导向,坚持把社会效益放在首位、社会效益和经济效益相统一,坚定文化自信,增强文化自觉,加快文化改革发展,加强社会主义精神文明建设,建设社会主义文化强国。
\r\n    坚持用邓小平理论、“三个代表”重要思想、科学发展观和习近平总书记系列重要讲话精神武装全党、教育人民,用中国梦和社会主义核心价值观凝聚共识、汇聚力量。深化马克思主义理论研究和建设工程,加强思想道德建设和社会诚信建设,增强国家意识、法治意识、社会责任意识,倡导科学精神,弘扬中华传统美德,注重通过法律和政策向社会传导正确价值取向。
\r\n    扶持优秀文化产品创作生产,加强文化人才培养,繁荣发展文学艺术、新闻出版、广播影视事业。实施哲学社会科学创新工程,建设中国特色新型智库。构建中华优秀传统文化传承体系,加强文化遗产保护,振兴传统工艺,实施中华典籍整理工程。加强和改进基层宣传思想文化工作,深化各类群众性精神文明创建活动。
\r\n    深化文化体制改革,实施重大文化工程,完善公共文化服务体系、文化产业体系、文化市场体系。推动基本公共文化服务标准化、均等化发展,引导文化资源向城乡基层倾斜,创新公共文化服务方式,保障人民基本文化权益。推动文化产业结构优化升级,发展骨干文化企业和创意文化产业,培育新型文化业态,扩大和引导文化消费。普及科学知识。倡导全民阅读。发展体育事业,推广全民健身,增强人民体质。做好二〇二二年北京冬季奥运会筹办工作。
\r\n    牢牢把握正确舆论导向,健全社会舆情引导机制,传播正能量。加强网上思想文化阵地建设,实施网络内容建设工程,发展积极向上的网络文化,净化网络环境。推动传统媒体和新兴媒体融合发展,加快媒体数字化建设,打造一批新型主流媒体。优化媒体结构,规范传播秩序。加强国际传播能力建设,创新对外传播、文化交流、文化贸易方式,推动中华文化走出去。
\r\n    (四)推动经济建设和国防建设融合发展。坚持发展和安全兼顾、富国和强军统一,实施军民融合发展战略,形成全要素、多领域、高效益的军民深度融合发展格局。
\r\n    同全面建成小康社会进程相一致,全面推进国防和军队建设。以党在新形势下的强军目标为引领,贯彻新形势下军事战略方针,加强军队党的建设和思想政治建设,加强各方向各领域军事斗争准备,加强新型作战力量建设,加快推进国防和军队改革,深入推进依法治军、从严治军。到二〇二〇年,基本完成国防和军队改革目标任务,基本实现机械化,信息化取得重大进展,构建能够打赢信息化战争、有效履行使命任务的中国特色现代军事力量体系。
\r\n    健全军民融合发展的组织管理体系、工作运行体系、政策制度体系。建立国家和各省(自治区、直辖市)军民融合领导机构。制定统筹经济建设和国防建设专项规划。深化国防科技工业体制改革,建立国防科技协同创新机制。推进军民融合发展立法。在海洋、太空、网络空间等领域推出一批重大项目和举措,打造一批军民融合创新示范区,增强先进技术、产业产品、基础设施等军民共用的协调性。
\r\n    加强全民国防教育和后备力量建设。加强现代化武装警察部队建设。密切军政军民团结。党政军警民合力强边固防。各级党委和政府要积极支持国防建设和军队改革,人民解放军和武警部队要积极支援经济社会建设。
\r\n    五、坚持绿色发展,着力改善生态环境
\r\n    坚持绿色富国、绿色惠民,为人民提供更多优质生态产品,推动形成绿色发展方式和生活方式,协同推进人民富裕、国家富强、中国美丽。
\r\n    (一)促进人与自然和谐共生。有度有序利用自然,调整优化空间结构,划定农业空间和生态空间保护红线,构建科学合理的城市化格局、农业发展格局、生态安全格局、自然岸线格局。设立统一规范的国家生态文明试验区。
\r\n    根据资源环境承载力调节城市规模,依托山水地貌优化城市形态和功能,实行绿色规划、设计、施工标准。
\r\n    支持绿色清洁生产,推进传统制造业绿色改造,推动建立绿色低碳循环发展产业体系,鼓励企业工艺技术装备更新改造。发展绿色金融,设立绿色发展基金。
\r\n    加强资源环境国情和生态价值观教育,培养公民环境意识,推动全社会形成绿色消费自觉。
\r\n    (二)加快建设主体功能区。发挥主体功能区作为国土空间开发保护基础制度的作用,落实主体功能区规划,完善政策,发布全国主体功能区规划图和农产品主产区、重点生态功能区目录,推动各地区依据主体功能定位发展。以主体功能区规划为基础统筹各类空间性规划,推进“多规合一”。
\r\n    推动京津冀、长三角、珠三角等优化开发区域产业结构向高端高效发展,防治“城市病”,逐年减少建设用地增量。推动重点开发区域提高产业和人口集聚度。重点生态功能区实行产业准入负面清单。加大对农产品主产区和重点生态功能区的转移支付力度,强化激励性补偿,建立横向和流域生态补偿机制。整合设立一批国家公园。
\r\n    维护生物多样性,实施濒危野生动植物抢救性保护工程,建设救护繁育中心和基因库。强化野生动植物进出口管理,严防外来有害物种入侵。严厉打击象牙等野生动植物制品非法交易。
\r\n    以市县级行政区为单元,建立由空间规划、用途管制、领导干部自然资源资产离任审计、差异化绩效考核等构成的空间治理体系。
\r\n    (三)推动低碳循环发展。推进能源革命,加快能源技术创新,建设清洁低碳、安全高效的现代能源体系。提高非化石能源比重,推动煤炭等化石能源清洁高效利用。加快发展风能、太阳能、生物质能、水能、地热能,安全高效发展核电。加强储能和智能电网建设,发展分布式能源,推行节能低碳电力调度。有序开放开采权,积极开发天然气、煤层气、页岩气。改革能源体制,形成有效竞争的市场机制。
\r\n    推进交通运输低碳发展,实行公共交通优先,加强轨道交通建设,鼓励自行车等绿色出行。实施新能源汽车推广计划,提高电动车产业化水平。提高建筑节能标准,推广绿色建筑和建材。
\r\n    主动控制碳排放,加强高能耗行业能耗管控,有效控制电力、钢铁、建材、化工等重点行业碳排放,支持优化开发区域率先实现碳排放峰值目标,实施近零碳排放区示范工程。
\r\n    实施循环发展引领计划,推行企业循环式生产、产业循环式组合、园区循环式改造,减少单位产出物质消耗。加强生活垃圾分类回收和再生资源回收的衔接,推进生产系统和生活系统循环链接。
\r\n    (四)全面节约和高效利用资源。坚持节约优先,树立节约集约循环利用的资源观。
\r\n    强化约束性指标管理,实行能源和水资源消耗、建设用地等总量和强度双控行动。实施全民节能行动计划,提高节能、节水、节地、节材、节矿标准,开展能效、水效领跑者引领行动。
\r\n    实行最严格的水资源管理制度,以水定产、以水定城,建设节水型社会。合理制定水价,编制节水规划,实施雨洪资源利用、再生水利用、海水淡化工程,建设国家地下水监测系统,开展地下水超采区综合治理。坚持最严格的节约用地制度,调整建设用地结构,降低工业用地比例,推进城镇低效用地再开发和工矿废弃地复垦,严格控制农村集体建设用地规模。探索实行耕地轮作休耕制度试点。
\r\n    建立健全用能权、用水权、排污权、碳排放权初始分配制度,创新有偿使用、预算管理、投融资机制,培育和发展交易市场。推行合同能源管理和合同节水管理。
\r\n    倡导合理消费,力戒奢侈浪费,制止奢靡之风。在生产、流通、仓储、消费各环节落实全面节约。管住公款消费,深入开展反过度包装、反食品浪费、反过度消费行动,推动形成勤俭节约的社会风尚。
\r\n    (五)加大环境治理力度。以提高环境质量为核心,实行最严格的环境保护制度,形成政府、企业、公众共治的环境治理体系。
\r\n    推进多污染物综合防治和环境治理,实行联防联控和流域共治,深入实施大气、水、土壤污染防治行动计划。实施工业污染源全面达标排放计划,实现城镇生活污水垃圾处理设施全覆盖和稳定运行。扩大污染物总量控制范围,将细颗粒物等环境质量指标列入约束性指标。坚持城乡环境治理并重,加大农业面源污染防治力度,统筹农村饮水安全、改水改厕、垃圾处理,推进种养业废弃物资源化利用、无害化处置。
\r\n    改革环境治理基础制度,建立覆盖所有固定污染源的企业排放许可制,实行省以下环保机构监测监察执法垂直管理制度。建立全国统一的实时在线环境监控系统。健全环境信息公布制度。探索建立跨地区环保机构。开展环保督察巡视,严格环保执法。
\r\n    (六)筑牢生态安全屏障。坚持保护优先、自然恢复为主,实施山水林田湖生态保护和修复工程,构建生态廊道和生物多样性保护网络,全面提升森林、河湖、湿地、草原、海洋等自然生态系统稳定性和生态服务功能。
\r\n    开展大规模国土绿化行动,加强林业重点工程建设,完善天然林保护制度,全面停止天然林商业性采伐,增加森林面积和蓄积量。发挥国有林区林场在绿化国土中的带动作用。扩大退耕还林还草,加强草原保护。严禁移植天然大树进城。创新产权模式,引导各方面资金投入植树造林。
\r\n    加强水生态保护,系统整治江河流域,连通江河湖库水系,开展退耕还湿、退养还滩。推进荒漠化、石漠化、水土流失综合治理。强化江河源头和水源涵养区生态保护。开展蓝色海湾整治行动。加强地质灾害防治。
\r\n    六、坚持开放发展,着力实现合作共赢
\r\n    开创对外开放新局面,必须丰富对外开放内涵,提高对外开放水平,协同推进战略互信、经贸合作、人文交流,努力形成深度融合的互利合作格局。
\r\n    (一)完善对外开放战略布局。推进双向开放,促进国内国际要素有序流动、资源高效配置、市场深度融合。
\r\n    完善对外开放区域布局,加强内陆沿边地区口岸和基础设施建设,开辟跨境多式联运交通走廊,发展外向型产业集群,形成各有侧重的对外开放基地。支持沿海地区全面参与全球经济合作和竞争,培育有全球影响力的先进制造基地和经济区。提高边境经济合作区、跨境经济合作区发展水平。
\r\n    加快对外贸易优化升级,从外贸大国迈向贸易强国。完善对外贸易布局,创新外贸发展模式,加强营销和售后服务网络建设,提高传统优势产品竞争力,巩固出口市场份额,推动外贸向优质优价、优进优出转变,壮大装备制造等新的出口主导产业。发展服务贸易。实行积极的进口政策,向全球扩大市场开放。
\r\n    完善投资布局,扩大开放领域,放宽准入限制,积极有效引进境外资金和先进技术。支持企业扩大对外投资,推动装备、技术、标准、服务走出去,深度融入全球产业链、价值链、物流链,建设一批大宗商品境外生产基地,培育一批跨国企业。积极搭建国际产能和装备制造合作金融服务平台。
\r\n    (二)形成对外开放新体制。完善法治化、国际化、便利化的营商环境,健全有利于合作共赢并同国际贸易投资规则相适应的体制机制。建立便利跨境电子商务等新型贸易方式的体制,健全服务贸易促进体系,全面实施单一窗口和通关一体化。提高自由贸易试验区建设质量,在更大范围推广复制。
\r\n    全面实行准入前国民待遇加负面清单管理制度,促进内外资企业一视同仁、公平竞争。完善境外投资管理,健全对外投资促进政策和服务体系。有序扩大服务业对外开放,扩大银行、保险、证券、养老等市场准入。
\r\n    扩大金融业双向开放。有序实现人民币资本项目可兑换,推动人民币加入特别提款权,成为可兑换、可自由使用货币。转变外汇管理和使用方式,从正面清单转变为负面清单。放宽境外投资汇兑限制,放宽企业和个人外汇管理要求,放宽跨国公司资金境外运作限制。加强国际收支监测,保持国际收支基本平衡。推进资本市场双向开放,改进并逐步取消境内外投资额度限制。
\r\n    推动同更多国家签署高标准双边投资协定、司法协助协定,争取同更多国家互免或简化签证手续。构建海外利益保护体系。完善反洗钱、反恐怖融资、反逃税监管措施,完善风险防范体制机制。
\r\n    (三)推进“一带一路”建设。秉持亲诚惠容,坚持共商共建共享原则,完善双边和多边合作机制,以企业为主体,实行市场化运作,推进同有关国家和地区多领域互利共赢的务实合作,打造陆海内外联动、东西双向开放的全面开放新格局。
\r\n    推进基础设施互联互通和国际大通道建设,共同建设国际经济合作走廊。加强能源资源合作,提高就地加工转化率。共建境外产业集聚区,推动建立当地产业体系,广泛开展教育、科技、文化、旅游、卫生、环保等领域合作,造福当地民众。
\r\n    加强同国际金融机构合作,参与亚洲基础设施投资银行、金砖国家新开发银行建设,发挥丝路基金作用,吸引国际资金共建开放多元共赢的金融合作平台。
\r\n    (四)深化内地和港澳、大陆和台湾地区合作发展。全面准确贯彻“一国两制”、“港人治港”、“澳人治澳”、高度自治的方针,发挥港澳独特优势,提升港澳在国家经济发展和对外开放中的地位和功能,支持港澳发展经济、改善民生、推进民主、促进和谐。
\r\n    支持香港巩固国际金融、航运、贸易三大中心地位,参与国家双向开放、“一带一路”建设。支持香港强化全球离岸人民币业务枢纽地位,推动融资、商贸、物流、专业服务等向高端高增值方向发展。支持澳门建设世界旅游休闲中心、中国与葡语国家商贸合作服务平台,促进澳门经济适度多元可持续发展。
\r\n    加大内地对港澳开放力度,加快前海、南沙、横琴等粤港澳合作平台建设。加深内地同港澳在社会、民生、科技、文化、教育、环保等领域交流合作。深化泛珠三角等区域合作。
\r\n    坚持“九二共识”和一个中国原则,秉持“两岸一家亲”,以互利共赢方式深化两岸经济合作。推动两岸产业合作协调发展、金融业合作及贸易投资等双向开放合作。推进海峡西岸经济区建设,打造平潭等对台合作平台。扩大两岸人员往来,深化两岸农业、文化、教育、科技、社会等领域交流合作,增进两岸同胞福祉,让更多台湾普通民众、青少年和中小企业受益。
\r\n    (五)积极参与全球经济治理。推动国际经济治理体系改革完善,积极引导全球经济议程,促进国际经济秩序朝着平等公正、合作共赢的方向发展。加强宏观经济政策国际协调,促进全球经济平衡、金融安全、经济稳定增长。积极参与网络、深海、极地、空天等新领域国际规则制定。
\r\n    推动多边贸易谈判进程,促进多边贸易体制均衡、共赢、包容发展,形成公正、合理、透明的国际经贸规则体系。支持发展中国家平等参与全球经济治理,促进国际货币体系和国际金融监管改革。
\r\n    加快实施自由贸易区战略,推进区域全面经济伙伴关系协定谈判,推进亚太自由贸易区建设,致力于形成面向全球的高标准自由贸易区网络。
\r\n    (六)积极承担国际责任和义务。坚持共同但有区别的责任原则、公平原则、各自能力原则,积极参与应对全球气候变化谈判,落实减排承诺。
\r\n    扩大对外援助规模,完善对外援助方式,为发展中国家提供更多免费的人力资源、发展规划、经济政策等方面咨询培训,扩大科技教育、医疗卫生、防灾减灾、环境治理、野生动植物保护、减贫等领域对外合作和援助,加大人道主义援助力度。主动参与二〇三〇年可持续发展议程。
\r\n    维护国际公共安全,反对一切形式的恐怖主义,积极支持并参与联合国维和行动,加强防扩散国际合作,参与管控热点敏感问题,共同维护国际通道安全。加强多边和双边协调,参与维护全球网络安全。推动国际反腐败合作。
\r\n    七、坚持共享发展,着力增进人民福祉
\r\n    按照人人参与、人人尽力、人人享有的要求,坚守底线、突出重点、完善制度、引导预期,注重机会公平,保障基本民生,实现全体人民共同迈入全面小康社会。
\r\n    (一)增加公共服务供给。坚持普惠性、保基本、均等化、可持续方向,从解决人民最关心最直接最现实的利益问题入手,增强政府职责,提高公共服务共建能力和共享水平。
\r\n    加强义务教育、就业服务、社会保障、基本医疗和公共卫生、公共文化、环境保护等基本公共服务,努力实现全覆盖。加大对革命老区、民族地区、边疆地区、贫困地区的转移支付。加强对特定人群特殊困难的帮扶。
\r\n    创新公共服务提供方式,能由政府购买服务提供的,政府不再直接承办;能由政府和社会资本合作提供的,广泛吸引社会资本参与。加快社会事业改革。
\r\n    (二)实施脱贫攻坚工程。农村贫困人口脱贫是全面建成小康社会最艰巨的任务。必须充分发挥政治优势和制度优势,坚决打赢脱贫攻坚战。
\r\n    实施精准扶贫、精准脱贫,因人因地施策,提高扶贫实效。分类扶持贫困家庭,对有劳动能力的支持发展特色产业和转移就业,对“一方水土养不起一方人”的实施扶贫搬迁,对生态特别重要和脆弱的实行生态保护扶贫,对丧失劳动能力的实施兜底性保障政策,对因病致贫的提供医疗救助保障。实行低保政策和扶贫政策衔接,对贫困人口应保尽保。
\r\n    扩大贫困地区基础设施覆盖面,因地制宜解决通路、通水、通电、通网络等问题。对在贫困地区开发水电、矿产资源占用集体土地的,试行给原住居民集体股权方式进行补偿,探索对贫困人口实行资产收益扶持制度。
\r\n    提高贫困地区基础教育质量和医疗服务水平,推进贫困地区基本公共服务均等化。建立健全农村留守儿童和妇女、老人关爱服务体系。
\r\n    实行脱贫工作责任制。进一步完善中央统筹、省(自治区、直辖市)负总责、市(地)县抓落实的工作机制。强化脱贫工作责任考核,对贫困县重点考核脱贫成效。加大中央和省级财政扶贫投入,发挥政策性金融和商业性金融的互补作用,整合各类扶贫资源,开辟扶贫开发新的资金渠道。健全东西部协作和党政机关、部队、人民团体、国有企业定点扶贫机制,激励各类企业、社会组织、个人自愿采取包干方式参与扶贫。把革命老区、民族地区、边疆地区、集中连片贫困地区作为脱贫攻坚重点。
\r\n    (三)提高教育质量。全面贯彻党的教育方针,落实立德树人根本任务,加强社会主义核心价值观教育,培养德智体美全面发展的社会主义建设者和接班人。深化教育改革,把增强学生社会责任感、创新精神、实践能力作为重点任务贯彻到国民教育全过程。
\r\n    推动义务教育均衡发展,全面提高教育教学质量。普及高中阶段教育,逐步分类推进中等职业教育免除学杂费,率先从建档立卡的家庭经济困难学生实施普通高中免除学杂费。发展学前教育,鼓励普惠性幼儿园发展。完善资助方式,实现家庭经济困难学生资助全覆盖。
\r\n    促进教育公平。加快城乡义务教育公办学校标准化建设,加强教师队伍特别是乡村教师队伍建设,推进城乡教师交流。办好特殊教育。
\r\n    提高高校教学水平和创新能力,使若干高校和一批学科达到或接近世界一流水平。建设现代职业教育体系,推进产教融合、校企合作。优化学科专业布局和人才培养机制,鼓励具备条件的普通本科高校向应用型转变。
\r\n    落实并深化考试招生制度改革和教育教学改革。建立个人学习账号和学分累计制度,畅通继续教育、终身学习通道。推进教育信息化,发展远程教育,扩大优质教育资源覆盖面。完善教育督导,加强社会监督。支持和规范民办教育发展,鼓励社会力量和民间资本提供多样化教育服务。
\r\n    (四)促进就业创业。坚持就业优先战略,实施更加积极的就业政策,创造更多就业岗位,着力解决结构性就业矛盾。完善创业扶持政策,鼓励以创业带就业,建立面向人人的创业服务平台。
\r\n    统筹人力资源市场,打破城乡、地区、行业分割和身份、性别歧视,维护劳动者平等就业权利。加强对灵活就业、新就业形态的支持,促进劳动者自主就业。落实高校毕业生就业促进和创业引领计划,带动青年就业创业。加强就业援助,帮助就业困难者就业。
\r\n    推行终身职业技能培训制度。实施新生代农民工职业技能提升计划。开展贫困家庭子女、未升学初高中毕业生、农民工、失业人员和转岗职工、退役军人免费接受职业培训行动。推行工学结合、校企合作的技术工人培养模式,推行企业新型学徒制。提高技术工人待遇,完善职称评定制度,推广专业技术职称、技能等级等同大城市落户挂钩做法。
\r\n    提高劳动力素质、劳动参与率、劳动生产率,增强劳动力市场灵活性,促进劳动力在地区、行业、企业之间自由流动。建立和谐劳动关系,维护职工和企业合法权益。
\r\n    完善就业服务体系,提高就业服务能力。完善就业失业统计指标体系。
\r\n    (五)缩小收入差距。坚持居民收入增长和经济增长同步、劳动报酬提高和劳动生产率提高同步,持续增加城乡居民收入。调整国民收入分配格局,规范初次分配,加大再分配调节力度。
\r\n    健全科学的工资水平决定机制、正常增长机制、支付保障机制,推行企业工资集体协商制度。完善最低工资增长机制,完善市场评价要素贡献并按贡献分配的机制,完善适应机关事业单位特点的工资制度。
\r\n    实行有利于缩小收入差距的政策,明显增加低收入劳动者收入,扩大中等收入者比重。加快建立综合和分类相结合的个人所得税制。多渠道增加居民财产性收入。规范收入分配秩序,保护合法收入,规范隐性收入,遏制以权力、行政垄断等非市场因素获取收入,取缔非法收入。
\r\n    支持慈善事业发展,广泛动员社会力量开展社会救济和社会互助、志愿服务活动。完善鼓励回馈社会、扶贫济困的税收政策。
\r\n    (六)建立更加公平更可持续的社会保障制度。实施全民参保计划,基本实现法定人员全覆盖。坚持精算平衡,完善筹资机制,分清政府、企业、个人等的责任。适当降低社会保险费率。完善社会保险体系。
\r\n    完善职工养老保险个人账户制度,健全多缴多得激励机制。实现职工基础养老金全国统筹,建立基本养老金合理调整机制。拓宽社会保险基金投资渠道,加强风险管理,提高投资回报率。逐步提高国有资本收益上缴公共财政比例,划转部分国有资本充实社保基金。出台渐进式延迟退休年龄政策。发展职业年金、企业年金、商业养老保险。
\r\n    健全医疗保险稳定可持续筹资和报销比例调整机制,研究实行职工退休人员医保缴费参保政策。全面实施城乡居民大病保险制度。改革医保支付方式,发挥医保控费作用。改进个人账户,开展门诊费用统筹。实现跨省异地安置退休人员住院医疗费用直接结算。整合城乡居民医保政策和经办管理。鼓励发展补充医疗保险和商业健康保险。鼓励商业保险机构参与医保经办。将生育保险和基本医疗保险合并实施。
\r\n    统筹救助体系,强化政策衔接,推进制度整合,确保困难群众基本生活。
\r\n    (七)推进健康中国建设。深化医药卫生体制改革,实行医疗、医保、医药联动,推进医药分开,实行分级诊疗,建立覆盖城乡的基本医疗卫生制度和现代医院管理制度。
\r\n    全面推进公立医院综合改革,坚持公益属性,破除逐利机制,建立符合医疗行业特点的人事薪酬制度。优化医疗卫生机构布局,健全上下联动、衔接互补的医疗服务体系,完善基层医疗服务模式,发展远程医疗。促进医疗资源向基层、农村流动,推进全科医生、家庭医生、急需领域医疗服务能力提高、电子健康档案等工作。鼓励社会力量兴办健康服务业,推进非营利性民营医院和公立医院同等待遇。加强医疗质量监管,完善纠纷调解机制,构建和谐医患关系。
\r\n    坚持中西医并重,促进中医药、民族医药发展。完善基本药物制度,健全药品供应保障机制,理顺药品价格,增加艾滋病防治等特殊药物免费供给。提高药品质量,确保用药安全。加强传染病、慢性病、地方病等重大疾病综合防治和职业病危害防治,通过多种方式降低大病慢性病医疗费用。倡导健康生活方式,加强心理健康服务。
\r\n    实施食品安全战略,形成严密高效、社会共治的食品安全治理体系,让人民群众吃得放心。
\r\n    (八)促进人口均衡发展。坚持计划生育的基本国策,完善人口发展战略。全面实施一对夫妇可生育两个孩子政策。提高生殖健康、妇幼保健、托幼等公共服务水平。帮扶存在特殊困难的计划生育家庭。注重家庭发展。
\r\n    积极开展应对人口老龄化行动,弘扬敬老、养老、助老社会风尚,建设以居家为基础、社区为依托、机构为补充的多层次养老服务体系,推动医疗卫生和养老服务相结合,探索建立长期护理保险制度。全面放开养老服务市场,通过购买服务、股权合作等方式支持各类市场主体增加养老服务和产品供给。
\r\n    坚持男女平等基本国策,保障妇女和未成年人权益。支持残疾人事业发展,健全扶残助残服务体系。
\r\n    八、加强和改善党的领导,为实现“十三五”规划提供坚强保证
\r\n    发展是党执政兴国的第一要务。各级党委必须深化对发展规律的认识,提高领导发展能力和水平,推进国家治理体系和治理能力现代化,更好推动经济社会发展。
\r\n    (一)完善党领导经济社会发展工作体制机制。坚持党总揽全局、协调各方,发挥各级党委(党组)领导核心作用,加强制度化建设,改进工作体制机制和方式方法,强化全委会决策和监督作用。提高决策科学化水平,完善党委研究经济社会发展战略、定期分析经济形势、研究重大方针政策的工作机制,健全决策咨询机制。完善信息发布制度。
\r\n    优化领导班子知识结构和专业结构,注重培养选拔政治强、懂专业、善治理、敢担当、作风正的领导干部,提高专业化水平。深化干部人事制度改革,完善政绩考核评价体系和奖惩机制,调动各级干部工作积极性、主动性、创造性。
\r\n    加强党的各级组织建设,强化基层党组织整体功能,发挥战斗堡垒作用和党员先锋模范作用,激励广大干部开拓进取、攻坚克难,更好带领群众全面建成小康社会。
\r\n    反腐倡廉建设永远在路上,反腐不能停步、不能放松。要坚持全面从严治党,落实“三严三实”要求,严明党的纪律和规矩,落实党风廉政建设主体责任和监督责任,健全改进作风长效机制,强化权力运行制约和监督,巩固反腐败成果,构建不敢腐、不能腐、不想腐的有效机制,努力实现干部清正、政府清廉、政治清明,为经济社会发展营造良好政治生态。
\r\n    (二)动员人民群众团结奋斗。充分发扬民主,贯彻党的群众路线,提高宣传和组织群众能力,加强经济社会发展重大问题和涉及群众切身利益问题的协商,依法保障人民各项权益,激发各族人民建设祖国的主人翁意识。
\r\n    加强思想政治工作,创新群众工作体制机制和方式方法,注重发挥工会、共青团、妇联等群团组织的作用,正确处理人民内部矛盾,最大限度凝聚全社会推进改革发展、维护社会和谐稳定的共识和力量。高度重视做好意识形态领域工作,切实维护意识形态安全。
\r\n    巩固和发展最广泛的爱国统一战线,全面落实党的知识分子、民族、宗教、侨务等政策,充分发挥民主党派、工商联和无党派人士作用,深入开展民族团结进步宣传教育,引导宗教与社会主义社会相适应,促进政党关系、民族关系、宗教关系、阶层关系、海内外同胞关系和谐,巩固全国各族人民大团结,加强海内外中华儿女大团结。
\r\n    (三)加快建设人才强国。深入实施人才优先发展战略,推进人才发展体制改革和政策创新,形成具有国际竞争力的人才制度优势。
\r\n    推动人才结构战略性调整,突出“高精尖缺”导向,实施重大人才工程,着力发现、培养、集聚战略科学家、科技领军人才、企业家人才、高技能人才队伍。实施更开放的创新人才引进政策,更大力度引进急需紧缺人才,聚天下英才而用之。发挥政府投入引导作用,鼓励企业、高校、科研院所、社会组织、个人等有序参与人才资源开发和人才引进。
\r\n    优化人力资本配置,清除人才流动障碍,提高社会横向和纵向流动性。完善人才评价激励机制和服务保障体系,营造有利于人人皆可成才和青年人才脱颖而出的社会环境,健全有利于人才向基层、中西部地区流动的政策体系。
\r\n    (四)运用法治思维和法治方式推动发展。厉行法治是发展社会主义市场经济的内在要求。必须坚持依法执政,全面提高党依据宪法法律治国理政、依据党内法规管党治党的能力和水平。
\r\n    加强党对立法工作的领导。加快重点领域立法,坚持立改废释并举,深入推进科学立法、民主立法,加快形成完备的法律规范体系。
\r\n    加强法治政府建设,依法设定权力、行使权力、制约权力、监督权力,依法调控和治理经济,推行综合执法,实现政府活动全面纳入法治轨道。深化司法体制改革,尊重司法规律,促进司法公正,完善对权利的司法保障、对权力的司法监督。弘扬社会主义法治精神,增强全社会特别是公职人员尊法学法守法用法观念,在全社会形成良好法治氛围和法治习惯。
\r\n    (五)加强和创新社会治理。建设平安中国,完善党委领导、政府主导、社会协同、公众参与、法治保障的社会治理体制,推进社会治理精细化,构建全民共建共享的社会治理格局。健全利益表达、利益协调、利益保护机制,引导群众依法行使权利、表达诉求、解决纠纷。增强社区服务功能,实现政府治理和社会调节、居民自治良性互动。
\r\n    加强社会治理基础制度建设,建立国家人口基础信息库、统一社会信用代码制度和相关实名登记制度,完善社会信用体系,健全社会心理服务体系和疏导机制、危机干预机制。
\r\n    完善社会治安综合治理体制机制,以信息化为支撑加快建设社会治安立体防控体系,建设基础综合服务管理平台。落实重大决策社会稳定风险评估制度,完善社会矛盾排查预警和调处化解综合机制,加强和改进信访和调解工作,有效预防和化解矛盾纠纷。严密防范、依法惩治违法犯罪活动,维护社会秩序。
\r\n    牢固树立安全发展观念,坚持人民利益至上,加强全民安全意识教育,健全公共安全体系。完善和落实安全生产责任和管理制度,实行党政同责、一岗双责、失职追责,强化预防治本,改革安全评审制度,健全预警应急机制,加大监管执法力度,及时排查化解安全隐患,坚决遏制重特大安全事故频发势头。实施危险化学品和化工企业生产、仓储安全环保搬迁工程,加强安全生产基础能力和防灾减灾能力建设,切实维护人民生命财产安全。
\r\n    贯彻总体国家安全观,实施国家安全战略,落实重点领域国家安全政策,完善国家安全审查制度,完善国家安全法治,建立国家安全体系。依法严密防范和严厉打击敌对势力渗透颠覆破坏活动、暴力恐怖活动、民族分裂活动、极端宗教活动,坚决维护国家政治、经济、文化、社会、信息、国防等安全。
\r\n    (六)确保“十三五”规划建议的目标任务落到实处。制定“十三五”规划纲要和专项规划,要坚决贯彻党中央决策部署,落实本建议确定的发展理念、主要目标、重点任务、重大举措。各地区要从实际出发,制定本地区“十三五”规划。各级各类规划要增加明确反映创新、协调、绿色、开放、共享发展理念的指标,增加政府履行职责的约束性指标,把全会确定的各项决策部署落到实处。
\r\n    实现“十三五”时期发展目标,前景光明,任务繁重。全党全国各族人民要更加紧密地团结在以习近平同志为总书记的党中央周围,万众一心,艰苦奋斗,共同夺取全面建成小康社会决胜阶段的伟大胜利!
\r\n 

\r\n', '', '', '113.4.72.190'), +(152, 10, '
\r\n         按照赵梅书记批示和我院16日会议部署,现将《黑龙江省人民政府关于深化体制机制改革加快实施创新驱动发展战略的实施意见》(黑政发[2015]32号)上传到院网站和群共享,请各部门认真学习贯彻落实。
\r\n
\r\n 附件:黑政发[2015]32号
\r\n', '', '', '113.4.72.190'), +(153, 10, '
\r\n         11月16日,在省能源院会议室,省能源院党委中心组召开学习贯彻十八届五中全会精神和“三严三实”专题教育第三专题研讨扩大会议。省能源院领导班子、省科学院机关党委刘颖书记及能源院中层干部参加了会议。会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n
\r\n
\r\n \"\"
\r\n  
\r\n
\r\n  
\r\n
\r\n         会议全文传达了《中共中央关于制定国民经济和社会发展第十三个五年规划的建议》内容,省能源院领导班子与参会人员交流了学习体会,并围绕“严以用权、为民务实创业”作了主题发言。徐晓秋院长指出,严以用权,要树立正确的政绩观、发挥监督作用,同时强化制度落实。务实创业,要真抓实干敢于担当,面对改革的关键时刻要不讲条件、不计得失、敢于承担、敢于负责。关春玲副院长指出,“修身”和“律己”主要是为用好权。权力是人民赋予的,行使权力必须为人民服务,一丝一毫都不能私用。官越大、权越重,为人民服务的担子就越重,越应该做出成绩。
\r\n         徐晓秋院长围绕“十三五规划”谈了自己的学习体会并部署了近期工作,强调“十三五规划”中提出要坚持绿色发展,着力改善生态环境,这与省能源院研究方向和研究领域相符合,同时也为省能源院未来的发展提供了指引和机会。省能源院全体科研人员要认真学习领会“十三五规划”中各项重要政策、举措、计划,充分结合各自研究领域开展科研工作,大胆扩展思路、树立超前发展理念,把握契机,执行好各项决策部署,确保我院的各项发展目标和任务圆满完成。
\r\n', '', '', '60.219.236.154'), +(154, 10, '        2015年12月15日,由深圳市建筑科学研究院股份有限公司主办的国家行业标准《住宅建筑室内装修污染控制技术规程》编制组第二次工作会议在哈尔滨召开,黑龙江省能源环境研究院作为参编单位,承办了此次大会。来自深圳市建筑科学研究院股份有限公司、清华大学、黑龙江省能源环境研究院、中国建筑科学研究院、中国林科院木材工业研究所、上海市建筑科学研究院(集团)有限公司、福建第一建筑集团公司、河南省建筑科学研究院有限公司、甘肃省建材科研设计院以及建筑装饰企业的23位代表参加了此次会议。省科学院王钢副院长和能源院徐晓秋院长在会议上发言,并对与会各单位代表表示热烈欢迎。
\r\n
\r\n \"\"
\r\n
\r\n        会议上,各编制组成员单位分别介绍了工作开展情况及研究工作中出现的问题,并由主编单位介绍了该标准编制的情况。会议围绕《住宅建筑室内装修污染控制技术规程》讨论稿初稿展开了广泛而深入的交流与讨论,各参编单位均发表了各自的观点和建议。最后,各参编单位讨论了下一步的工作计划及任务分工。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n        此次会议的召开,广泛征求了编制组各成员单位与会专家的意见和建议,有利于促进标准编制工作顺利有序进行,同时,也全面考虑了我国各地区的特殊气候情况,对提高该标准的适用范围和准确性起到了积极的推动作用。
\r\n 
\r\n
\r\n 黑龙江省能源环境研究院                
\r\n', '', '', '60.219.236.202'), +(155, 10, '        2015年12月17日,院科研处王阳处长一行3人莅临能源环境研究院检查学科创新团队发展情况和团队一年来的主要工作。
\r\n 
\r\n
\r\n
\r\n        王阳处长逐一听取了能源院三个学科创新团队2015年的工作进展情况和2016年的发展规划,针对学科创新团队发展过程中存在的突出问题与能源院领导和团队带头人进行了深入分析和讨论,同时,对各学科创新团队未来的发展方向,人员结构,年度目标等提出了具体要求。\r\n
\r\n
\r\n 
\r\n        王阳处长指出:1、能源院的三个团队要积极把握好国家“十三五”发展规划,努力寻求合作,积极拓展科研合作伙伴,把握好方向,找准定位,合理制定发展目标;2、要优化团队人员结构、努力培养科研骨干,促进团队科研能力整体提升;3、要积极开展国际合作与交流,不断提升学科团队在国内外的学术影响力;4、要加强高水平基金项目的申报和SCI/EI高水平论文的产出。
\r\n 
\r\n
\r\n 黑龙江省能源环境研究院         
\r\n', '', '', '60.219.236.202'), +(156, 10, '        2016年1月14日,黑龙江省科技厅在哈尔滨市组织专家对黑龙江省能源环境研究院承担的省院科技合作项目“寒区农业固体废弃物高值化利用关键技术研究”进行了成果鉴定。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n        鉴定委员会由哈尔滨工业大学、哈尔滨工程大学等高校专家组成,会议由省科技厅成果处领导主持,省院士办、省科学院科研处领导参加会议。
\r\n        与会专家认真听取了项目组的工作总结报告和技术报告,审查了相关技术资料,经质询、讨论,对项目组研究的高温湿法-干法耦合工艺给予了较高的评价,鉴定委员会认为,研究成果达到了国内领先水平,并建议进一步扩大农业废弃物处理范围。 
\r\n        此项目的圆满完成,标志中我院在农业废弃物利用领域又迈出坚实的一步,与中科院的合作又结出新的硕果。
', '', '', '113.4.72.99'), +(157, 10, '        2016年1月,黑龙江省科技厅组织鉴定委员会对黑龙江省能源环境研究院和科技孵化中心承担的省应用技术研究与开发计划项目《煤与废弃有机制品共焦化技术开发与应用》和《M25车用甲醇汽油应用技术研究》进行函审鉴定。鉴定委员会由哈工大、哈工程、哈理工的5位专家组成。
\r\n        鉴定专家认真审查了项目组提供的技术材料,并听取了二个项目组的工作汇报后,对各项目组的工作给予了充分肯定,认为项目组完成了课题任务书要求的各项内容,煤与废弃有机制品共焦化技术有良好的经济和社会效益,其技术性能达到国内领先水平。M25车用甲醇汽油应用技术拓展煤基甲醇替代石油资源,其技术性能达到国内先进水平。
\r\n        我院(中心)在煤化工领域及其下游产品应用领域又开拓出新的出路,为我省产业结构调整,提供新思路。这两项省级项目顺利通过鉴定,标志着我院(中心)煤化工领域部分成果水平已处于省内乃至国内的前列, 对能源化学省级领军人才梯队建设和发展也
到了重要的支撑作用。', '', '', '113.4.72.22'); +INSERT INTO `dede_addonarticles` (`aid`, `typeid`, `body`, `redirecturl`, `templet`, `userip`) VALUES +(158, 27, '\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n 序号\r\n 成果名称\r\n 鉴定时间
\r\n 1\r\n 油页岩低温热解条件对页岩油性质的影响研究\r\n 2015
\r\n 2\r\n 煤与废弃有机制品共焦化技术开发与应用\r\n 2015
\r\n 3\r\n M25车用甲醇汽油应用技术研究\r\n 2015
\r\n 4\r\n 寒区农业固体废弃物高值化利用关键技术研究\r\n 2015
\r\n 5\r\n 重质油乳化剂及乳化方式的优化研究\r\n 2015
\r\n 6\r\n 乳化柴油提高燃烧效率研究\r\n 2015
\r\n 7\r\n 一种亲水性无纺布的制备方法研究\r\n 2015
\r\n 8\r\n 水包油型乳化重油的稳定性研究\r\n 2015
\r\n 9\r\n 太阳能等清洁能源替代小型燃煤锅炉建筑采暖的关键技术研究及示范\r\n 2015
\r\n 10\r\n 太阳能空气采暖智能控制装置的应用研究\r\n 2015
\r\n 11\r\n 基于“一村一厂”生物质加工和清洁利用的寒区“无煤生态村”应用技术研究\r\n 2015
\r\n 12\r\n 中试沼气发酵系统节能控制研究\r\n 2015
\r\n 13\r\n 基于ZigBee和WLAN技术的中试沼气发酵监测系统\r\n 2015
\r\n 14\r\n 沼液回流喷淋对秸秆沼气产量的影响研究\r\n 2015
\r\n 15\r\n 酸预处理玉米秸秆与奶牛粪便混合厌氧消化工艺优化研究\r\n 2015
\r\n 16\r\n 三塔变压吸附沼气提纯技术研究\r\n 2015
\r\n 17\r\n 沼液超滤膜分离浓缩方法优化及膜再生机理研究\r\n 2015
\r\n 18\r\n 液相色谱法分析鸡粪中残留四环素类抗生素的研究\r\n 2015
\r\n 19\r\n 调和国Ⅴ标准车用汽油的抗爆剂技术研究\r\n 2015
\r\n 20\r\n 太阳能空气采暖系统的优化控制研究\r\n 2015
\r\n 21\r\n 页岩油加氢精制-延迟焦化组合工艺的研究\r\n 2015
\r\n 22\r\n 沼气工程进料固含量在线监测方法的研究\r\n 2015
\r\n 23\r\n 轻质木焦油加氢提质转化运输燃料油调和组分的工艺研究\r\n 2014
\r\n 24\r\n 寒地沼气发电机余热回收仿真优化研究\r\n 2014
\r\n 25\r\n 秸秆高温厌氧发酵过程关键技术参数研究\r\n 2014
\r\n 26\r\n 沼液高效回用及综合处理工艺研究\r\n 2014
\r\n 27\r\n 沼液回流对牛粪厌氧发酵沼气产量的影响及机理研究\r\n 2014
\r\n 28\r\n 厌氧发酵反应器温度监控及补偿系统的研究\r\n 2014
\r\n 29\r\n 复合调节剂(润滑性能)中试研究\r\n 2014
\r\n 30\r\n 利用炼厂90#汽油生产国Ⅳ标准93#汽油的复合添加剂应用\r\n 2014
\r\n 31\r\n 产油微藻的一体式培养及柴油提取的研究\r\n 2014
\r\n 32\r\n 从废源培养的产油微藻中提取生物柴油的研究\r\n 2014
\r\n 33\r\n 甲醇乳化柴油技术研究\r\n 2014
\r\n 34\r\n 利用页岩油制取油砂分离剂的研究\r\n 2013
\r\n 35\r\n 全馏分页岩油改质转化轻质运输燃料工艺的研究\r\n 2013
\r\n 36\r\n 膜生物反应器中改性复合膜的制备与性能研究\r\n 2013
\r\n 37\r\n 车用汽油复合调节剂技术研究\r\n 2013
\r\n 38\r\n 油页岩中有机质的分离和分析\r\n 2013
\r\n 39\r\n 发酵原料水解率对提高CSTR反应器产气率的机理研究\r\n 2013
\r\n 40\r\n 寒区牛粪两级厌氧高效发酵工艺研究\r\n 2013
\r\n 41\r\n 不同搅拌方式对反应器上层浮渣影响高温厌氧发酵产气率的研究\r\n 2013
\r\n 42\r\n 高温厌氧发酵过程中沼气净化系统的研究\r\n 2013
\r\n 43\r\n 基于混合模型的牛粪高温厌氧发酵过程参量监测\r\n 2013
\r\n 44\r\n 环氧树脂固化程度在线监测系统\r\n 2013
\r\n 45\r\n 沼气工程无线网络化系统控制与方法设计\r\n 2013
\r\n 46\r\n 工业化封闭环式沼气、发电系统\r\n 2012
\r\n 47\r\n 集成牛粪便综合利用系统(IMUS)示范工程\r\n 2012
\r\n 48\r\n 生物质资源综合利用的研究\r\n 2012
\r\n 49\r\n 厌氧消化过程中发酵原料的不同滞留时间对发酵过程的影响研究\r\n 2012
\r\n 50\r\n 厌氧发酵工艺过程仿真系统的研制\r\n 2012
\r\n 51\r\n 牛粪碱法与生物法联合预处理方法及机理研究\r\n 2012
\r\n 52\r\n 物理参数对提高牛粪高温厌氧性能影响机理的研究\r\n 2012
\r\n 53\r\n 接种物对牛粪高温厌氧消化过程的影响机理研究\r\n 2012
\r\n 54\r\n 大掺量甲醇汽油催化燃烧技术\r\n 2012
\r\n 55\r\n 黑龙江省油页岩分布及含油率分析研究\r\n 2012
\r\n 56\r\n 全馏分页岩油改质转化轻质运输燃料工艺的研究\r\n 2012
\r\n 57\r\n M15车用甲醇汽油复合添加剂\r\n 2012
\r\n 58\r\n 加拿大直贮热太阳能技术\r\n 2011
\r\n 59\r\n γ-射线辐照对牛粪厌氧消化过程影响的研究\r\n 2011
\r\n 60\r\n 牛粪高温厌氧消化动力学研究\r\n 2011
\r\n 61\r\n 奶牛场粪污水综合处理工艺研究\r\n 2011
\r\n 62\r\n 直贮热太阳能技术(DHS)示范温室\r\n 2011
\r\n 63\r\n M20甲醇汽油工业应用及性能考核\r\n 2011
\r\n 64\r\n 工业燃煤锅炉烟气净化技术\r\n 2011
\r\n 65\r\n 褐煤低温催化制油气研究\r\n 2011
\r\n 66\r\n 燃煤锅炉催化脱硫技术研究\r\n 2011
\r\n 67\r\n 烟气中二氧化硫催化固硫性能研究\r\n 2011
\r\n 68\r\n 油气分离系统的研究科技成果\r\n 2011
\r\n 69\r\n 中国加拿大油砂炼制技术合作研究\r\n 2011
\r\n 70\r\n 牛粪高温厌氧发酵机理研究\r\n 2009
\r\n 71\r\n 沼气生物脱硫机理研究\r\n 2009
\r\n 72\r\n 牛粪厌氧发酵工艺关键技术参数研究\r\n 2009
\r\n 73\r\n 沼气脱硫技术研究\r\n 2009
\r\n 74\r\n 高寒地区牛粪高温发酵工艺研究\r\n 2009
\r\n 75\r\n 以沼气为纽带的生态农场模式及经济评价体系\r\n 2008
\r\n 76\r\n 黑龙江省省属科研机构科技孵化器建设\r\n 2008
\r\n 77\r\n 黑龙江省科学院院属科研机构科技孵化器建设的研究\r\n 2008
\r\n
\r\n', '', '', '1.58.195.50'); +INSERT INTO `dede_addonarticles` (`aid`, `typeid`, `body`, `redirecturl`, `templet`, `userip`) VALUES +(159, 29, '\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n 序号\r\n 专利名称\r\n 专利号\r\n 类型
\r\n 1\r\n 利用高温厌氧发酵运行参数无线实时监测系统对高温厌氧发酵运行参数监测的方法\r\n ZL201310364454.2\r\n 发明专利
\r\n 2\r\n 一种基于沼气发电的余热回收利用系统\r\n ZL201310674344.6\r\n 发明专利
\r\n 3\r\n 一种车用燃料油抗水复合添加剂\r\n ZL201410445460.5\r\n 发明专利
\r\n 4\r\n 一种含超细稀土粉体润滑油添加剂\r\n ZL201310631999.5\r\n 发明专利
\r\n 5\r\n 车用汽油复合调节剂\r\n ZL201310140441.7\r\n 发明专利
\r\n 6\r\n 有机无灰类M15车用甲醇汽油复合添加剂\r\n ZL201210258097.7\r\n 发明专利
\r\n 7\r\n 采用全馏分页岩油生产低硫低凝柴油的方法\r\n ZL201310484593.9\r\n 发明专利
\r\n 8\r\n 一种沼气旋转冷凝的装置\r\n ZL201310381690.5\r\n 发明专利
\r\n 9\r\n 一种搅拌破壳于一体的发酵反应器\r\n ZL201310367177\r\n 发明专利
\r\n 10\r\n 一种改性聚对苯二甲酸乙二醇酯无纺布复合膜的制备方法\r\n ZL201310484592.4\r\n 发明专利
\r\n 11\r\n 甲醇乳化柴油及其制备方法\r\n ZL201410091283.5\r\n 发明专利
\r\n 12\r\n 一种利用啤酒厂污水培养产油微藻的方法\r\n ZL201310625139.0\r\n 发明专利
\r\n 13\r\n 一种基于沼气发电的余热回收利用系统\r\n 201310674345\r\n 发明专利
\r\n 14\r\n 一种温度自控风力制热装置\r\n 201310692604\r\n 发明专利
\r\n 15\r\n 一种环氧树脂固化程度在线监控系统及采用该系统对环氧树脂固化程度监控的方法\r\n 201310511396\r\n 发明专利
\r\n 16\r\n 一种太阳能集热控制系统及其集热控制方法\r\n 201310421572\r\n 发明专利
\r\n 17\r\n 可测定出料位置的CSTR反应器\r\n 201310470071\r\n 发明专利
\r\n 18\r\n 利用高温厌氧发酵运行参数无线实时监测系统对高温厌氧发酵运行参数监测的方法\r\n 201310364454\r\n 发明专利
\r\n 19\r\n 一种厌氧发酵分段控温系统及方法\r\n 201310364456\r\n 发明专利
\r\n 20\r\n 一种沼气旋转冷凝的装置\r\n 201310381691\r\n 发明专利
\r\n 21\r\n 一种搅拌破壳于一体的发酵反应器及搅拌破壳方法\r\n 201310367177\r\n 发明专利
\r\n 22\r\n 联合使用的厌氧发酵反应器\r\n 201210338447\r\n 发明专利
\r\n 23\r\n 厌氧发酵罐体沼气贮量的测量方法及实现该方法的装置\r\n 201110078502\r\n 发明专利
\r\n 24\r\n 一种原料预处理装置及利用该装置实现沼气收集的系统\r\n 201110058808\r\n 发明专利
\r\n 25\r\n 一种利用太阳能的直贮热厌氧消化装置\r\n 201110056367\r\n 发明专利
\r\n 26\r\n 厌氧往复折流复合消化装置\r\n 201110042375\r\n 发明专利
\r\n 27\r\n 一种用于牛场污水处理的二次厌氧消化装置\r\n 201010611390\r\n 发明专利
\r\n 28\r\n 一种60Coγ-射线辐照牛粪提高沼气产量的方法\r\n  \r\n 发明专利
\r\n 29\r\n 可测定出料位置的CSTR反应器\r\n 201320623818\r\n 实用新型
\r\n 30\r\n 一种高温厌氧发酵运行参数的无线实时监测系统\r\n 201320509482\r\n 实用新型
\r\n 31\r\n 联合使用的厌氧发酵反应器\r\n 201220466304\r\n 实用新型
\r\n 32\r\n 一种沼气发酵过程状态检测系统\r\n ZL201420711902.1\r\n 实用新型
\r\n 33\r\n 太阳能空气智能采暖装置\r\n ZL201420688401.6\r\n 实用新型
\r\n 34\r\n 一种厌氧发酵分段控温系统\r\n ZL201320509483.9\r\n 实用新型
\r\n 35\r\n 一种高温厌氧发酵运行参数的无线实时监测系统\r\n ZL201320509482.4 \r\n 实用新型
\r\n 36\r\n 一种太阳能集热控制系统\r\n ZL201320573185.6\r\n 实用新型
\r\n 37\r\n 基于Buck变换器的无刷直流电机驱动电路\r\n ZL201420663823.8\r\n 实用新型
\r\n 38\r\n 无刷直流电机反电动势三次谐波检测电路\r\n ZL201420678192.7\r\n 实用新型
\r\n 39\r\n 一种高温厌氧发酵装置\r\n ZL201420670351.9\r\n 实用新型
\r\n 40\r\n 太阳能助力式风力发电装置\r\n ZL201420759477.3\r\n 实用新型
\r\n 41\r\n 电线固定装置\r\n ZL201420711843.8\r\n 实用新型
\r\n 42\r\n 一种带有供热系统的恒温建筑\r\n ZL201420697172.4 \r\n 实用新型
\r\n 43\r\n 一种带有沼液回流管线的畜禽粪便厌氧发酵装置\r\n ZL201420697135.3\r\n 实用新型
\r\n 44\r\n 一种利用回收的沼液喷淋秸秆的干式厌氧发酵装置\r\n ZL201420707710.3\r\n 实用新型
\r\n 45\r\n 一种高温厌氧发酵装置\r\n ZL201420670351.9\r\n 实用新型
\r\n 46\r\n 可测定出料位置的CSTR反应器\r\n ZL201320623817.5\r\n 实用新型
\r\n 47\r\n 一种沼气旋转冷凝的装置\r\n ZL201320529632.8\r\n 实用新型
\r\n 48\r\n 一种搅拌破壳于一体的发酵反应器\r\n ZL201320512530.5\r\n 实用新型
\r\n 49\r\n 产油微藻的一体式培养装置\r\n ZL201420312552.1\r\n 实用新型
\r\n 50\r\n 一种太阳能集热控制系统\r\n 201320573186\r\n 实用新型
\r\n 51\r\n 一种厌氧发酵分段控温系统\r\n 201320509484\r\n 实用新型
\r\n 52\r\n 一种沼气旋转冷凝的装置\r\n 201320529633\r\n 实用新型
\r\n 53\r\n 一种搅拌破壳于一体的发酵反应器\r\n 201320512531\r\n 实用新型
\r\n 54\r\n 厌氧往复折流复合消化装置\r\n 201120045415\r\n 实用新型
\r\n 55\r\n 一种用于牛场污水沉降净化处理的二次厌氧消化装置\r\n 201020686844\r\n 实用新型
\r\n 56\r\n 用于恒温实验室的相转变太阳能贮热装置\r\n 200920317606\r\n 实用新型
\r\n
\r\n', '', '', '1.58.195.50'); +INSERT INTO `dede_addonarticles` (`aid`, `typeid`, `body`, `redirecturl`, `templet`, `userip`) VALUES +(160, 29, '\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n 序号\r\n 文章名称\r\n 类别\r\n 期刊名\r\n 作者\r\n 发表时间
\r\n 1\r\n 沼气脱碳提纯技术研究进展\r\n 一般\r\n 黑龙江科学\r\n 潘良;徐晓秋;高德玉;王欣;刘伟;\r\n 2015
\r\n 2\r\n 依兰油页岩逐级氧化/萃取及其产物的红外分析\r\n 一般\r\n 黑龙江科技大学学报\r\n 吴鹏;张星宇;周扬;解丽萍;朱秀栋;宋微娜;\r\n 2015
\r\n 3\r\n 微米稀土粉体表面改性技术研究\r\n 核心\r\n 化学工程师\r\n 唐诗洋;张树华;刘岩;李健;陈庆海;\r\n 2015
\r\n 4\r\n 寒地《M25车用煤基甲醇汽油》企业标准\r\n 一般\r\n 化工管理\r\n 张树华;唐诗洋;刘岩;刘维;\r\n 2015
\r\n 5\r\n 寒地M25车用(煤基)甲醇汽油性能研究\r\n 核心\r\n 化学工程师\r\n 张树华;唐诗洋;刘岩;李健;陈庆海;\r\n 2015
\r\n 6\r\n 页岩油深加工产业发展评述\r\n 一般\r\n 黑龙江科学\r\n 陈松;周扬;王晓栋;\r\n 2015
\r\n 7\r\n 水包油型乳化重油的制备条件及稳定性研究\r\n 一般\r\n 黑龙江科学\r\n 张玥;张宇;马宁;王志成;\r\n 2015
\r\n 8\r\n 基于ZigBee和WLAN技术的厌氧发酵中试监控系统\r\n 一般\r\n 黑龙江科学\r\n 秦国辉;王钢;王玉鹏;周闯;罗向东;\r\n 2015
\r\n 9\r\n 油页岩抚顺炉低温干馏的影响因素分析\r\n 一般\r\n 黑龙江科学\r\n 周扬;陈松;王晓栋;\r\n 2015
\r\n 10\r\n 沼气发酵过程状态监控系统设计\r\n 一般\r\n 黑龙江科学\r\n 李福裿;王玉鹏;周闯;秦国辉;罗向东;\r\n 2015
\r\n 11\r\n 分子印迹固相萃取技术在抗生素检测中的应用进展\r\n 一般\r\n 黑龙江科学\r\n 杨光;徐晓秋;高德玉;陆佳;潘良;\r\n 2015
\r\n 12\r\n 浅谈沼液处理与纳滤膜技术\r\n 一般\r\n 黑龙江科学\r\n 陆佳;徐晓秋;高德玉;刘伟;王欣;\r\n 2015
\r\n 13\r\n 页岩油预处理制取加氢原料的研究\r\n 核心\r\n 化学工程师\r\n 陈松;周扬;王晓栋;\r\n 2015
\r\n 14\r\n 紫外辐照接枝甲基丙烯酸对无纺布性能影响的研究\r\n 核心\r\n 化学与黏合\r\n 张玥;王志成;张宇;\r\n 2015
\r\n 15\r\n 在俄罗斯境内发展炼化一体化项目的工艺论证\r\n 核心\r\n 化学工程师\r\n 陈松;\r\n 2015
\r\n 16\r\n 变性梯度凝胶电泳(DGGE)技术在畜禽粪便厌氧发酵液中的研究进展\r\n 一般\r\n 黑龙江科学\r\n 王欣;苏小红;郭广亮;刘伟;徐晓秋;高德玉;\r\n 2015
\r\n 17\r\n 沼液回流对牛粪高温厌氧发酵产气性能的影响\r\n 一般\r\n 黑龙江科学\r\n 苏小红;刘伟;王欣;郭广亮;徐晓秋;高德玉;\r\n 2015
\r\n 18\r\n 秸秆厌氧消化预处理技术研究进展\r\n 一般\r\n 黑龙江科学\r\n 王欣;苏小红;郭广亮;刘伟;徐晓秋;高德玉;\r\n 2015
\r\n 19\r\n 寒地沼气发电机组余热回收的控制策略与设计\r\n 核心\r\n 自动化技术与应用\r\n 秦国辉;罗向东;王志成;王玉鹏;周闯;\r\n 2015
\r\n 20\r\n 太阳能空气采暖智能控制系统的研究\r\n 一般\r\n 黑龙江科学\r\n 秦国辉;王玉鹏;周闯;罗向东;\r\n 2015
\r\n 21\r\n 木焦油预处理制取加氢原料的方法\r\n 核心\r\n 化学工程师\r\n 陈松;周扬;王晓栋;\r\n 2014
\r\n 22\r\n 轻质木焦油加氢脱氧的影响因素\r\n 核心\r\n 化学工程师\r\n 陈松;周扬;王晓栋;\r\n 2014
\r\n 23\r\n 亲水性无纺布复合膜的制备及性能研究\r\n 核心\r\n 化学与黏合\r\n 张玥;王志成;张宇;\r\n 2014
\r\n 24\r\n 《M25车用甲醇汽油》企业标准解读\r\n 一般\r\n 黑龙江科学\r\n 张树华;刘辉;唐诗洋;刘维;刘岩;李健;\r\n 2014
\r\n 25\r\n 国际标准GB 17930-2011/XG1-2012《车用汽油》的胶质指标解析\r\n 一般\r\n 黑龙江科学\r\n 唐诗洋;张树华;刘岩;李健;\r\n 2014
\r\n 26\r\n 醇醚燃料在车用替代能源中的发展趋势\r\n 一般\r\n 黑龙江科学\r\n 陆海玲;\r\n 2014
\r\n 27\r\n 调和国IV标准车用汽油的抗爆剂研究\r\n 核心\r\n 化学工程师\r\n 唐诗洋;张树华;刘岩;李健;\r\n 2014
\r\n 28\r\n 石油产品脱硫技术研究进展\r\n 一般\r\n 黑龙江科学\r\n 马宁;张宇;张玥;王志成;\r\n 2014
\r\n 29\r\n 生物柴油的应用前景\r\n 一般\r\n 黑龙江科学\r\n 马宁;张玥;张宇;王志成;\r\n 2014
\r\n 30\r\n 国有单位科技人员培养的实践与思考\r\n 一般\r\n 黑龙江科学\r\n 陆海玲;\r\n 2014
\r\n 31\r\n 科技计划项目全过程管理研究\r\n 一般\r\n 黑龙江科学\r\n 张帆;\r\n 2014
\r\n 32\r\n 我国科技计划项目管理现状与对策分析\r\n 一般\r\n 黑龙江科学\r\n 陆海玲;\r\n 2014
\r\n 33\r\n 科研单位对科研仪器设备管理方案\r\n 一般\r\n 黑龙江科学\r\n 张帆;\r\n 2014
\r\n 34\r\n 微藻培养条件优化研究\r\n 一般\r\n 应用能源技术\r\n 张宇;王志成;张玥;马宁;周红霞;\r\n 2014
\r\n 35\r\n 应用浮选技术分离油砂的实验研究\r\n 核心\r\n 化学工程师\r\n 周扬;陈松;\r\n 2014
\r\n 36\r\n 太阳能空气集热控制系统的研究\r\n 一般\r\n 应用能源技术\r\n 王阳;秦国辉;罗向东;王玉鹏;刘旭丹;\r\n 2014
\r\n 37\r\n 发酵原料水解率对CSTR反应器产气率影响的研究\r\n 一般\r\n 应用能源技术\r\n 王欣;刘伟;徐晓秋;赵娴;王玉鹏;秦国辉;刘旭丹;\r\n 2014
\r\n 38\r\n 沼气工程工艺参数的优化模型研究\r\n 一般\r\n 自动化技术与应用\r\n 秦国辉;罗向东;王玉鹏;刘旭丹;\r\n 2014
\r\n 39\r\n 不同搅拌方式对浮渣层影响高温厌氧发酵产气率的研究\r\n 一般\r\n 黑龙江科学\r\n 王欣;王玉鹏;刘伟;苏小红;徐晓秋;\r\n 2014
\r\n 40\r\n 油砂分离剂的实验研究\r\n 核心\r\n 化学工程师\r\n 周扬;陈松;\r\n 2013
\r\n 41\r\n 科研成果转化中科技管理部门作用的探析\r\n 一般\r\n 黑龙江科学\r\n 张帆;\r\n 2013
\r\n 42\r\n 反应条件对轻质页岩油加氢脱氮性能的影响\r\n 核心\r\n 化学工程师\r\n 陈松;周扬;\r\n 2013
\r\n 43\r\n 我国中小企业技术创新的现状及对策\r\n 一般\r\n 黑龙江科技信息\r\n 陆海玲;\r\n 2013
\r\n 44\r\n 大掺量甲醇汽油初步探讨\r\n 核心\r\n 化学与黏合\r\n 王志成;\r\n 2013
\r\n 45\r\n 油页岩综合开发利用现状\r\n 一般\r\n 黑龙江科学\r\n 周红霞;王志成;陆海玲;张帆;\r\n 2013
\r\n 46\r\n 车用醇基燃料及其应用性能评价\r\n 一般\r\n 化学工程师\r\n 张树华;刘岩;唐诗洋;李健;\r\n 2013
\r\n 47\r\n 解读新修订的《科学事业单位财务管理制度》\r\n 一般\r\n 黑龙江科学\r\n 关春玲;\r\n 2013
\r\n 48\r\n 微藻研究进展及产油的影响因素\r\n 一般\r\n 黑龙江科学\r\n 张宇;王志成;张玥;周红霞;\r\n 2013
\r\n 49\r\n 全馏分页岩油改质转化运输燃料技术进展及其评价\r\n 核心\r\n 化学工程师\r\n 陈松;周扬;\r\n 2013
\r\n 50\r\n 汽油含硫量对排放的影响研究\r\n 核心\r\n 化学工程师\r\n 张树华;唐诗洋;刘岩;李健;\r\n 2013
\r\n 51\r\n 沼气发电工程沼气净化技术研究\r\n 一般\r\n 黑龙江科学\r\n 刘伟;王欣;徐晓秋;赵娴;\r\n 2013
\r\n 52\r\n 使用数学方法监测热固树脂固化程度的研究\r\n 一般\r\n 科技创新与应用\r\n 刘旭丹;秦国辉;王玉鹏;\r\n 2013
\r\n 53\r\n 沼气发电工程的无线监测系统\r\n 一般\r\n 黑龙江科学\r\n 秦国辉;罗向东;王玉鹏;刘旭丹;\r\n 2013
\r\n 54\r\n 寒区牛粪两级厌氧高效发酵工艺参数研究\r\n 一般\r\n 黑龙江科学\r\n 王欣;刘伟;赵娴;王玉鹏;秦国辉;刘旭丹;徐晓秋;\r\n 2013
\r\n 55\r\n 基于最小二乘向量机的厌氧发酵沼气产量建模研究\r\n 一般\r\n 黑龙江科学\r\n 秦国辉;刘伟;刘旭丹;\r\n 2013
\r\n 56\r\n 混合建模方法研究及其在牛粪高温厌氧发酵过程中的监测应用\r\n 一般\r\n 黑龙江科学\r\n 范庆丽;秦国辉;章力;\r\n 2013
\r\n 57\r\n Marathon 5kpro复用器配置介绍\r\n 一般\r\n 黑龙江科学\r\n 韩涛;刘旭丹;\r\n 2013
\r\n 58\r\n ADWR多普勒天气雷达伺服系统故障分析与处理\r\n 一般\r\n 黑龙江科学\r\n 韩涛;刘旭丹;\r\n 2013
\r\n 59\r\n 基于单片机的高温厌氧发酵罐温度控制系统\r\n 一般\r\n 黑龙江科学\r\n 赵娴;\r\n 2013
\r\n 60\r\n MTBE的国内外研究进展\r\n 一般\r\n 黑龙江科学\r\n 鞠春红;张伟君;李福裿;\r\n 2012
\r\n 61\r\n 褐煤热水干燥改质后的性能研究\r\n 核心\r\n 化学与黏合\r\n 鞠春红;张伟君;王志成;李福裿;\r\n 2012
\r\n 62\r\n 光催化还原二氧化碳的发展\r\n 一般\r\n 黑龙江科学\r\n 鞠春红;张伟君;王志成;李福裿;\r\n 2012
\r\n 63\r\n M15车用甲醇汽油复合添加剂的技术研究\r\n 核心\r\n 化学工程师\r\n 张树华;刘岩;唐诗洋;李健;\r\n 2012
\r\n 64\r\n 对我国醇醚燃料产业的发展思路与对策探讨\r\n 一般\r\n 农机使用与维修\r\n 刘岩;张树华;唐诗洋;李健;\r\n 2012
\r\n 65\r\n 臭氧助燃技术在柴油发动机中的应用\r\n 一般\r\n 农机使用与维修\r\n 张树华;刘岩;唐诗洋;李健;\r\n 2012
\r\n 66\r\n 蛇纹石粉体作为机械摩擦副磨损表面自修复添加剂的研究\r\n 一般\r\n 化学工程师\r\n 张树华;刘岩;唐诗洋;李健;\r\n 2012
\r\n 67\r\n 焦化废水中苯酚含量的测定方法研究\r\n 一般\r\n 中国给水排水\r\n 张宏森;周国江;周扬;王彦彪;\r\n 2012
\r\n 68\r\n 车用汽油复合调节剂技术研究\r\n 核心\r\n 化学工程师\r\n 张树华;刘岩;唐诗洋;李健;\r\n 2012
\r\n 69\r\n 关于车用替代燃料的发展状况与前景探析\r\n 一般\r\n 农机使用与维修\r\n 张树华;刘岩;唐诗洋;李健;\r\n 2012
\r\n 70\r\n 内燃机替代燃料的尴尬境地\r\n 一般\r\n 农机使用与维修\r\n 张树华;刘岩;唐诗洋;李健;\r\n 2012
\r\n 71\r\n 搅拌时间对高固含量奶牛粪便高温厌氧消化的影响研究\r\n 一般\r\n 应用能源技术\r\n 刘伟;王欣;徐晓秋;秦国辉;王玉鹏;刘旭丹;\r\n 2012
\r\n
\r\n', '', '', '1.58.195.50'); +INSERT INTO `dede_addonarticles` (`aid`, `typeid`, `body`, `redirecturl`, `templet`, `userip`) VALUES +(161, 10, '        2月15日下午,省能源院召开会议,传达和贯彻2016年省科学院党风廉政建设工作会议和院工作会议精神。会议由省能源院党委书记、院长徐晓秋同志主持。\r\n
\r\n
\r\n        徐晓秋院长首先传达了省科学院赵梅书记在院2016年党风廉政建设工作会议上的讲话精神,同时全文学习了省科学院郭春景院长在院工作会议上的工作报告和赵梅书记在院工作会议上的总结讲话,参会人员结合省能源院工作实际对 “一院(所)两制”、搭建“三大工作平台”、激励科研人员制度措施、学科团队建设、成果转化等方面进行了深入交流和讨论。
\r\n        徐晓秋院长围绕贯彻两个工作会议精神,提出了几点要求,一是继续强化学习贯彻落实各级精神要求,制定相关学习制度,要细化到具体日期,对需要长期学习、常态化学习和已经学习过的内容进行再学习、再巩固、再提高。二是将省科学院工作会议文件印发到各部门,各部门要围绕文件要求,把各项工作任务落到实处。最后,徐晓秋院长强调,各部门要提高认识,准确领会会议精神,把握好改革机遇,提高创新发展意识,在省科学院党组的领导下,全面推进省能源院2016年相关工作稳步开展。

\r\n', '', '', '113.4.72.223'), +(162, 10, '        2016年3月23日,省科学院人事处党支部与省能源环境研究院能源化学创新团队党建联系点工作对接会在能源院会议室召开。人事处党支部书记、处长张兴、副处长王向伟、盛力、曲恒峰、周磊,省能源院党委书记、院长徐晓秋及能源化学创新团队全体党员参加了会议。
\r\n 
\r\n
\r\n
\r\n 
\r\n        首先,院人事处党支部成员与能源化学创新团队成员就人员、工作内容、研究方向等情况进行了介绍。随后由院人事处张兴同志和能源化学创新团队负责人王志成同志分别宣读了《黑龙江省科学院2016年度党建联系点机关党支部与创新团队责任书》及《科学院人事处党支部与能源院创新团队建立党建联系点工作方案》。
\r\n        座谈中,张兴处长表示要全面落实《黑龙江省科学院2016年度党建联系点机关党支部与创新团队责任书》及《院人事处党支部与创新团队党建联系点工作方案》内容,不但做到积极互动、互相带动,还要帮助培养基层科研人员、创造良好科研环境。此外,还将持续深入开展共建活动,积极为创新团队探寻解决实际问题的有效举措,同时形成良好的沟通机制,提升党建工作水平、加强创新团队建设。
\r\n 
\r\n
\r\n
\r\n 
\r\n        徐晓秋院长指出,院人事处党支部与能源化学创新团队建立党建联系点将机关和基层党建工作融为一体,极大地促进了能源院的党建及科研工作。创新团队全体成员决心以党建联系点工作为契机,在人事处党支部的支持与帮助下,以院党组“四管四严”的要求为核心,积极开展党建活动,将党建联系点工作落到实处,同时将以科研发展为中心,为能源院培养尖端科技人才、建设一流的科研队伍而努力奋斗。
', '', '', '113.4.72.147'), +(163, 10, '        3月7日上午,省能源院召开以“创学习型组织、做知识型女性”为主题的女职工座谈会。省能源院领导班子及全体女职工参加了会议,会议由能源院党委书记、院长徐晓秋同志主持。\r\n
\r\n
\r\n        参会人员首先观看了2015年诺贝尔医学奖获得者屠呦呦女士的记录片。随后,大家围绕此次座谈会的主题,就女职工的工作、生活、健康等方面进行了交流,大家积极建言献策,提出了许多宝贵的意见和建议,会议在热烈的氛围中进行,参加会议女职工踊跃发言。
\r\n        最后徐晓秋院长强调,省能源院女职工人数约占全院人数的一半,女职工立足岗位,恪尽职守,为省能源院的发展和建设做出了积极贡献,充分体现了女职工的责任意识,大局意识,希望省能源院全体女职工在今后的工作中要沉得下心来,继续发挥女性专注与坚韧的特点,不断提高自己,十年磨一剑,取得更好的成绩。
', '', '', '125.211.31.163'), +(164, 10, '        3月29日上午,黑龙江省能源环境研究院召开全体职工专题学习会议,学习宣传和贯彻落实习近平总书记参加黑龙江代表团审议时的重要讲话精神、王宪魁同志在专题研讨班上的讲话、杨汭部长在研讨班上的总结讲话等3个文件精神,以及《中共黑龙江省委关于深入学习宣传贯彻落实习近平总书记重要讲话精神的决定》。会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n  
\r\n        徐晓秋院长首先传达了习近平总书记在黑龙江省代表团参加审议时的重要讲话和《中共黑龙江省委关于深入学习宣传贯彻落实习近平总书记重要讲话精神的决定》,关春玲副院长全文传达了王宪魁同志在省管主要领导干部专题研讨班上的讲话,和杨汭部长在研讨班上的总结讲话。
\r\n        徐晓秋院长强调,今后我院将根据科学院的安排部署,联系实际继续持续、深入地学习宣传贯彻落实习总书记重要讲话和王宪魁同志、杨汭同志的讲话精神,同时结合我院每周三学习日,把学习纳入 “两学一做”长期的学习内容,以支部为单位组织学习研讨,真正做到“铺满盖严,不留死角”,对照讲话谈思想、谈措施。增强广大职工的创新意识,坚定信心,明确工作方向,将科研工作落到实处,切实营造我院创新发展的浓厚氛围。
', '', '', '113.4.72.6'), +(165, 10, '        2016年4月27日,省能源院召开“两学一做”学习教育工作会议,省科学院人事处全体党员和省能源院全体党员参加了会议,会议由省能源院党委书记徐晓秋同志主持。\r\n
\r\n
\r\n        徐晓秋书记传达了省科学院“两学一做”学习教育工作会议精神,宣读了省能源院关于开展“两学一做”学习教育实施方案。
\r\n        徐晓秋书记强调,省能源院各党支部要按照省科学院统一安排,全体党员干部要严格认真进行每日一学、半月研讨、每月一测,通过“两学一做”学习教育的开展,切实加强自我提升,进一步增强党性意识和宗旨意识,始终保持干事创业、开拓进取的精气神,在省能源院振兴发展中当标兵、作模范。
\r\n
\r\n
\r\n        省科学院人事处张兴处长指出,要将“两学一做”学习教育与省科学院党建联系点制度紧密结合,加强与基层院所的联系沟通,切实解决相关实际问题,要充分调动广大党员干事创业的积极性与创造性,有效指导各领域工作。
\r\n
\r\n
\r\n 
\r\n                         黑龙江省科学院人事处    
\r\n                       黑龙江省能源环境研究院   
\r\n                               2016年4月27日      
', '', '', '113.4.72.111'), +(166, 10, '        根据《中国共产党章程》和相关规定,经省能源院党委研究,报请省科学院机关党委批准,中共黑龙江省能源环境研究院委员会于2016年5月19日召开全体党员大会,省能源院党委书记、院长徐晓秋同志主持会议,省科学院机关党委副书记刘颖同志参加会议并讲话。
\r\n
\r\n
\r\n
\r\n  
\r\n        大会共有两项议程:一是听取和审议《中共黑龙江省能源环境研究院第一届委员会工作报告》,二是选举产生中共黑龙江省能源环境研究院第二届委员会。
\r\n徐晓秋同志作了题为《党建工作是第一要务》的工作报告,总结回顾了第一届党委成立以来的主要工作情况,并对下一步的党建工作提出了思路和建议。
\r\n大会通过了第一届党委工作报告、大会选举办法和监票人、计票人名单。本次大会选举产生了徐晓秋、关春玲、刘伟、王欣、李福裿五名同志为中共黑龙江省能源环境研究院第二届委员会委员,徐晓秋同志为中共黑龙江省能源环境研究院第二届委员会书记。

\r\n
\r\n
\r\n
\r\n  
\r\n        最后,刘颖同志对能源院党建工作给予了肯定,她指出,在省科学院党组的领导下,省能源院党委始终把抓党建作为工作中的重中之重,严格按照省科学党组的相关部署,持续推进学习型、服务型和创新型党组织建设,切实履行两个责任,在思想建设、班子建设、创先争优、特色活动、统战工作等多方面都取得了不错的成绩,希望省能源院党委再接再厉,持续发挥先锋模范带头作用和战斗堡垒作用,不断创新党建工作的思维方式,结合新形势、新任务开拓党建工作的新格局。', '', '', '113.4.72.196'), +(167, 10, '        6月8日上午,黑龙江省能源环境研究院召开中心组学习扩大会议,学习贯彻落实省科学院党组中心组扩大会议精神和省委十一届七次全体会议上王宪魁书记的讲话及陆昊省长的总结讲话精神。能源院领导班子及全体职工参加了此次会议,会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n 
\r\n        会上,徐晓秋书记传达了省科学院党组中心组扩大会议精神和省委十一届七次全体会议的主要内容,强调要深刻领会、准确把握全面振兴指导思想、“三个方面”解放思想、“六个着力”走出新路子、做好“三篇大文章”和强化五个“进一步”的指示精神;深入学习“五头五尾”、“五个发展”工作要求、把握“四个四”精神实质、要牢固树立“四个意识”、强化领导干部的“四个过硬”、要重点把握“四个坚持”重要要求指导工作实践、深刻领会“九个三”重要意义。要结合省能源院实际情况继续推动创新创业发展,激发内生动力,抓住机遇,真正做到“走进去,走下去,走出去”,不惧艰难,奋力走出能源院创新发展的新路子。

\r\n
\r\n \"\"
\r\n 
\r\n        最后,徐晓秋书记指出,省能源院广大职工要将此次学习精神作为今后一段时期内首要学习内容,制定切实有效的工作计划,做到“铺满盖严、不留死角”,同时对青年科技工作者提出殷切希望,鼓励年轻人奋发图强、创新创业,敢于担当,为大科学院的创新发展贡献力量。

\r\n', '', '', '113.0.54.91'), +(168, 10, '        为纪念中国共产党建党九十五周年,省能源院全体职工及党建联系点院机关人事处党支部部分成员共同参观了爱国主义教育基地——东北烈士纪念馆,一同缅怀先烈,深受教育,全体党员重温入党誓词。\r\n
\r\n
\r\n \"\"
\r\n  
\r\n        纪念馆分为《黑土英魂——东北抗日战争时期烈士事迹》和《伪满哈尔滨警察厅遗址及罪恶展》两部分。直观的图片、雕塑、实物及影像资料真实地再现了自九一八事件以来一直到抗日战争胜利的十四年间,东北抗日烈士的英雄事迹。大家在参观过程中感触很深,表示要继承党的优良传统,坚定革命理想信念,弘扬先烈们面对流血牺牲不改气节的无私奉献精神,努力做弘扬正气的楷模。
\r\n        在重温入党誓词仪式中,全体党员们面对党旗庄严宣誓,立下对党忠诚的誓言,表达了为党的事业奋斗终身的决心。
\r\n        此次活动让广大职工受到了一次深刻的党性洗礼,使大家牢记职责使命,激发攻坚克难、乘势而进的动力,以求真务实的精神深入开展“两学一做”学习教育,同时立足本职岗位,推动能源院又好又快发展,不断开创各项工作的新局面。
\r\n', '', '', '1.58.162.54'), +(169, 10, '        2016年7月13日,由黑龙江省科学院组织专家对省能源环境研究院承担的两项黑龙江省院所基本应用技术研究专项《车用甲醇汽油抗水复合添加剂技术研究》、《太阳能空气采暖智能控制装置的应用研究》进行了成果鉴定。鉴定委员会由哈尔滨工程大学、哈尔滨理工大学、哈尔滨703研究所、哈尔滨电站设备成套所、黑龙江省节能技术中心等单位的7位学科专家组成。省科学院科研处王阳处长主持了此次鉴定会。
\r\n
\r\n  
\r\n
\r\n \"\"
\r\n
\r\n        鉴定委员会专家认真听取了各项目负责人的工作汇报,审议了项目组提供的全部鉴定材料。经充分质询、讨论,鉴定专家委员会认为项目组提供的鉴定材料齐全、研究路线合理,对项目的实用性给予了较高的评价:抗水复合添加剂解决了甲醇汽油在实际应用中出现的问题,提高了煤基甲醇的经济利用效益;太阳能空气采暖智能装置实现了系统运行的高效性、实用性和室内生活的舒适性,经审议一致同意两个项目的研究成果均达到了国内领先水平。
\r\n        这两个项目的顺利鉴定,将进一步促进我院在节能技术方向的深入研究,对学科团队的建设和发展起到了重要的支撑作用。
', '', '', '1.58.162.54'), +(170, 9, '        8月2日,黑龙江省科学院与牡丹江市政府举行院市合作会议暨合作协议签约仪式,省科学院党组书记赵梅、院长郭春景、牡丹江市市委书记张雨浦、市长刘忻、副市长王钢出席会议。签约仪式上,省能源环境研究院党委书记、院长徐晓秋代表省能源院与宁安市佳清化工有限公司、奥通汽车部件制造有限公司成功签订合作协议,未来省能源院将与上述企业在煤基燃料甲醇应用技术、生物质压缩燃料领域开展全面产学研合作。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '60.219.236.117'), +(171, 9, '
\r\n         2016年7月13日下午,省科学院郭春景院长,沙长青副院长,科研处王阳处长,隋月梅副处长赴能源院调研检查学科团队发展建设情况。在听取完两个团队的工作汇报后,郭院长结合团队现状,对团队学科方向、人才队伍构建、未来定位进行了细致点评,沙长青副院长也对团队建设中的关键问题进行了点评。通过此次会议,使能源院两个团队更明确了发展定位,更明确了今后自主创新的发力点。 
\r\n
\r\n \"\"
\r\n
\r\n
\r\n \"\"
\r\n', '', '', '221.4.219.18'), +(172, 9, '
\r\n          8月17日,穆棱市长、工信局局长和相关企业负责人一行到省能源院考察调研,洽谈合作。 省能源院党委书记、院长徐晓秋同志、副院长关春玲同志对来访人员表示欢迎,相关研究室科研人员向来访人员介绍我院科研成果。
\r\n  
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '221.4.219.18'), +(173, 9, '
\r\n          8月18日省能源院党委召开中心组学习扩大会议,深入学习贯彻落实全省“两学一做”学习教育工作座谈会上省委常委、组织部长杨汭同志讲话精神和院党组书记赵梅同志的重要讲话精神,会议由省能源院党委书记、院长徐晓秋同志主持,随后召开支部书记会议,部署下一步“两学一做”学习教育工作任务。 
\r\n
\r\n  
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '221.4.219.18'), +(174, 9, '
\r\n         8月29日上午,省能源院召开会议,传达全省科技创新大会精神和王宪魁书记、陆昊省长及省科学院党组赵梅书记的讲话精神,省能源院党委成员及中层干部参加了会议。按照赵梅书记的指示,省能源院党委书记、院长徐晓秋同志部署了近期相关工作,要求省能源院全体干部职工,将各文件精神、相关政策学深、深透,围绕国家、省委及省科学院改革总体要求,结合省能源院工作实际,经全体职工充分研究讨论,形成《黑龙江省能源环境研究院科技改革实施方案》。 
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '221.4.219.18'), +(175, 9, '
\r\n         9月22日, 第十八届中国科协年会-暨全国科技工作者创新创业总决赛在西安举行,省能源院关春玲副院长担任领队,省能源院周闯和陆佳两位选手携《工业化封闭环式沼气发电系统1.0》参加此次总决赛。 
\r\n  
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '221.4.219.18'), +(176, 9, '        2016年9月30日,能源环境研究院与自动化研究所举行“情系青山绿水 共庆祖国华诞” 关爱环境社会实践活动。——国庆前夕艳阳天,环保志愿松峰山,能源自动化齐携手,助建环保美家园。沿途尽览秋景色,车内尽情把言欢,兄弟院所增友谊,双创争优齐向前。 
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '221.4.219.18'), +(177, 10, '        2016年10月12-14日,黑龙江省能源环境研究院参加了由黑龙江省知识产权局举办的“关于举办全省高校、科研院所知识产权管理工作经验交流会”,为进一步提升我院所知识产权工作管理水平和能力奠定了基础。
\r\n
\r\n \"\"
\r\n
\r\n        会议在鸡西市委机关招待所举行,省知识产权局张毅副局长和中科院、哈工程专家教授就高校、科研院所知识产权战略实施,专利转化运用等内容进行发言。并选取部分典型单位在会上就本单位知识产权管理体制机制建设进行经验介绍。黑龙江省科学院科研处隋月梅副处长介绍了专利创造、运用、保护、管理等方面情况和知识产权文化建设情况。为我院知识产权及成果转化制定工作策略、启发创新思路提供了有益参考与帮助。
\r\n
\r\n
\r\n \"\"
\r\n', '', '', '112.102.104.182'), +(178, 10, '      2016年10月13日,省能源院郭广亮、丁会敏、范超三人参加了黑龙江省科协双创活动周一线工程师创新方法培训班课程,三人带着各自在工作中遇到的一些技术机械难题参加培训,在6天的高强度紧张的培训学习中,积极参与小组讨论、与老师沟通探讨,经过培训不但解决了各自的技术机械问题,且顺利通过答辩,表现突出。其中我院丁会敏同志荣获优秀学员光荣称号。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '112.102.104.182'), +(179, 10, '        我院参加全国科学院联盟能源分会会议。
\r\n        我院作为全国科学院联盟能源分会的会员单位,与其他成员单位共同推动中科院、地方科学院和骨干院所企业在能源领域的战略合作和协同创新,提升能源领域技术创新和产业转型升级。

\r\n
\r\n \"\"
\r\n', '', '', '112.102.104.182'), +(180, 10, '        10月13日,省能源院参加全国科学院洁净能源知识产权联盟成立大会。
\r\n        会上,我院与联盟单位共商能源产业布局、低碳经济发展和知识产权运营事宜,提升产业创新能力,探索实践科技与经济相结合的体制机制。

\r\n
\r\n \"\"
\r\n', '', '', '112.102.104.182'), +(181, 16, '        10月19日,我院召开“两学一做”“双创争优”延安学习培训汇报会,能源院领导班子和全体党员参加了本次汇报会。
\r\n
\r\n \"\"
\r\n \"\"
\r\n
\r\n        参加省科学院延安培训班的两名党员代表李福裿和王欣,分别做了以”学习光荣历史,汲取精神力量”和“胜利延安,红色之旅”的学习汇报,与全体党员同志一同分享了延安之行的所见、所学、所悟,并表示将会把延安精神与自身工作结合好,更好的为省能源院的发展贡献力量。', '', '', '112.102.104.182'), +(182, 9, '        根据省科学院关于学习贯彻落实《中国共产党问责条例》的相关部署,我院结合“两学一做”学习教育工作,利用午休时间,组织广大职工观看纪录《永远在路上》。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '125.211.31.152'), +(183, 9, '
\r\n          7月7日下午能源院召开了全体职工大会,会议传达了中央办公厅关于学习贯彻习近平总书记在庆祝中国共产党成立95周年大会上的讲话;学习贯彻王宪魁书记在中共黑龙江省委庆祝中国共产党成立95周年暨表彰大会上的讲话;以及学习赵梅书记在省科学院纪念建党95周年“两学一做、双创争优”暨先优表彰大会上的讲话,并部署了下一步党建工作。 
\r\n  
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '125.211.31.152'), +(184, 9, '        按照省科学院机关党委《关于认真学习贯彻习近平总书记在纪念红军长征胜利80周年大会上的讲话的通知》及学习十八届六中全会精神相关要求,10月28日省能源院召开全体职工会议,会议围绕赵梅书记在省科学院《中国共产党问责条例》学习大会上的讲话及提出的要求,认真学习习近平总书记在纪念红军长征80周年大会上的讲话,全文宣读学习了十八届六中全会公报,并进行了讨论。\r\n
\r\n \"\"
\r\n        通过学习,大家一致认为,习近平总书记的重要讲话回顾了红军长征这一革命壮举、壮丽史诗和巍峨丰碑,总结了长征的伟大意义和深刻精神内涵,提出了弘扬伟大长征精神、走好今天的长征路的六方面要求,对于我们不忘初心、继续前进,全面做好各项工作,具有重要指导意义,会议要求各党支部要开展好长征精神的学习,并进行集中讨论,会议同时对我院近期科研和党建工作做了进一步部署。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n  
\r\n', '', '', '125.211.44.62'), +(185, 9, '        按照省科学院机关党委《关于认真学习贯彻习近平总书记在纪念红军长征胜利80周年大会上的讲话的通知》及学习十八届六中全会精神相关要求,10月28日省能源院召开全体职工会议,会议围绕赵梅书记在省科学院《中国共产党问责条例》学习大会上的讲话及提出的要求,认真学习习近平总书记在纪念红军长征80周年大会上的讲话,全文宣读学习了十八届六中全会公报,并进行了讨论。
\r\n
\r\n  
\r\n
\r\n \"\"
\r\n        通过学习,大家一致认为,习近平总书记的重要讲话回顾了红军长征这一革命壮举、壮丽史诗和巍峨丰碑,总结了长征的伟大意义和深刻精神内涵,提出了弘扬伟大长征精神、走好今天的长征路的六方面要求,对于我们不忘初心、继续前进,全面做好各项工作,具有重要指导意义,会议要求各党支部要开展好长征精神的学习,并进行集中讨论,会议同时对我院近期科研和党建工作做了进一步部署。
\r\n
\r\n
\r\n \"\"\"\"
\r\n
\r\n
\r\n  
\r\n', '', '', '125.211.44.62'), +(186, 10, '
\r\n         黑龙江省能源环境研究院(黑龙江省科学院科技孵化中心)间接费用管理办法(试行),经2017年3月20日全体职工大会审议通过,即日起进行公示,公示期五个工作日。如有任何异议请与综合办联系。
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \"\"\r\n 黑龙江省能源环境研究院(黑龙江省科学院科技孵化中心)间接费用管理办法(试行)
\r\n
\r\n
\r\n', '', '', '113.0.39.25'), +(187, 10, '
\r\n          4月28日,省能源院召开党风廉政建设扩大会议,迅速传达省科学院月报会上关于党风廉政建设的相关要求,并部署各项工作,省能源院领导班子,全体职工参加了会议,会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         徐晓秋同志全文传达了省委纪委“关于‘五一’和‘端午节’节日期间纪律要求的通知”;“关于加强车辆管理严防节假日期间公车私用的通知”,同时要求省能源院全体干部职工要围绕省科学院2017年党风廉政工作会议上党组书记赵梅同志和纪检组长宫杰同志的讲话要求,时刻严明政治纪律、严肃劳动纪律,严格遵守各项法律及规章条例、严格执行各项制度,用高标准规范自身行为,各部门负责人要发挥“一岗双责”积极作用,坚决杜绝迟到早退、工作态度散漫、从事与无关的事宜,公车私用等现象,并再次强调要严格履行钉钉平台请假审批手续。最后,关春玲副院长指出各部门要做好节假日期间相关安全工作。
\r\n  
\r\n', '', '', '125.211.31.4'), +(188, 10, '        2017年4月19日,由黑龙江省科学院组织专家对省能源环境研究院承担的黑龙江省院所基本应用技术研究专项《基于“一村一厂”生物质加工和清洁利用的寒区“无煤生态村”应用技术研究》进行了成果鉴定。鉴定委员会由哈尔滨工程大学、哈尔滨理工大学、哈尔滨电站设备成套所等单位的7位专家组成。省科学院科研处王阳处长主持了此次鉴定会。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n \"\"
\r\n
\r\n        鉴定委员会专家认真听取了项目组的工作汇报,审议了项目组提供的全部鉴定材料。经充分质询、讨论,鉴定专家委员会认为项目组提供的鉴定材料齐全、技术路线合理,对项目的实用性给予了较高的评价:采用“一村一厂”运营模式,大幅降低家户式炊事及采暖的煤炭和薪柴消耗,实现了秸秆生物质加工和清洁利用,减轻了环境污染,通过示范村应用,为农村住宅用能提供了节能环保手段,为我国北方“无煤村”建设推广提供了示范。经审议一致同意项目的研究成果达到了国内领先水平。
\r\n        该成果的鉴定和应用为我省秸秆综合利用提供新思路,可以有效处置秸秆,减少环境,节省煤炭资源,产业前景广阔。
', '', '', '125.211.31.4'), +(189, 10, '
\r\n          为纪念并弘扬五四精神,展现青春风采,激发广大青年科技人员立足本职岗位、投身科研事业的热情,5月5日上午,省能源环境研究院开展了“成长 责任 理想”为主题的五四青年节座谈会,院班子成员和全院青年进行了交流座谈。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         会上,院领导与参会青年人一起围绕主题,结合个人经历,立足岗位,分享了成长中的感悟,青年人敞开心扉,畅谈了工作、学习、生活中的体会,展示了当代青年思想活跃,蓬勃朝气的精神风貌。徐晓秋院长在认真听取了青年员工的发言后,鼓励青年员工要敢于担当、勇于创新创造,善于运用科学的工作方法,加强交流沟通,充分利用我院为年轻人搭建的学习交流平台,借鉴先进经验,创造性地开展工作。 
\r\n         最后,院所班子成员对全体青年人寄予厚望,希望青年人有理想有担当,不断加强业务学习锻炼,脚踏实地开展工作,全面提升自身素质修养,肩负起青年人建设能源院的责任,在激情奋斗中绽放青春光芒。 
\r\n', '', '', '113.0.54.137'), +(190, 10, '
\r\n          5日上午,黑龙江省能源环境研究院组织召开全体职工大会,院班子成员参加会议,会议由党委书记兼院长徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         会议传达了黑龙江省第十二次党代会精神、科学院党组扩大会议精神及赵梅书记讲话精神,同时对下阶段工作进行部署。会议指出,省第十二次党代会是凝心聚力、团结奋进、风清气正的会议,全体职工要把深入学习贯彻省第十二次党代会精神作为当前和今后一个时期的重要政治任务。要围绕中心工作谋实招,积极把各项工作融入到单位新一轮发展的总体布局之中加以谋划和部署。党员干部要起模范带头作用,以支部为单位开展学习活动,强化制度机制建设、作风效能建设,强化政治纪律,抓细抓小,进一步开拓工作的领域、创新工作的机制。会议还传达了科学院党组扩大会议精神及赵梅书记讲话精神,以新理念引领新路子,要求各支部将把此次学习活动与“两学一做”活动结合起来,坚持学以致用,知行合一,不断团结广大党员干部和群众,加大力气抓建设,以更加富有成效的工作推动党代会精神的全面落实,为决战决胜全面小康贡献力量。 
\r\n', '', '', '113.0.54.137'), +(191, 10, '        5日上午,省能源院与其他3家院所一起参加省 省直工委文明办文明单位创建工作验收会,并顺利通过验收。
\r\n
\r\n \"\"
\r\n', '', '', '61.180.173.43'), +(192, 10, '
\r\n          4月28日,省能源院召开党风廉政建设扩大会议,迅速传达省科学院月报会上关于党风廉政建设的相关要求,并部署各项工作,省能源院领导班子,全体职工参加了会议,会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         徐晓秋同志全文传达了省委纪委“关于‘五一’和‘端午节’节日期间纪律要求的通知”;“关于加强车辆管理严防节假日期间公车私用的通知”,同时要求省能源院全体干部职工要围绕省科学院2017年党风廉政工作会议上党组书记赵梅同志和纪检组长宫杰同志的讲话要求,时刻严明政治纪律、严肃劳动纪律,严格遵守各项法律及规章条例、严格执行各项制度,用高标准规范自身行为,各部门负责人要发挥“一岗双责”积极作用,坚决杜绝迟到早退、工作态度散漫、从事与无关的事宜,公车私用等现象,并再次强调要严格履行钉钉平台请假审批手续。最后,关春玲副院长指出各部门要做好节假日期间相关安全工作。
\r\n  
\r\n', '', '', '113.0.54.137'), +(193, 10, '
\r\n         4月19日,省能源院党委召开中心组学习扩大会议,学习贯彻落实省科学院党风廉政会议精神,省能源院领导班子、党委委员,各党支部书记、部门负责人、职工代表参加了会议,会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         孵化中心主任姜宏宇同志全文传达了省科学院党组书记赵梅同志的讲话及派驻纪检组组长宫杰同志的讲话精神。随后,徐晓秋同志指出,各部门要持续加强党风廉政建设工作,按照中央、省委及省科学院的要求,牢固树立“四个意识”,严格遵守相关“条例”“准则”,认真落实“一岗双责”,有效执行好已签订的党风廉政建设责任书中的相关工作,全体党员干部要以身作则,做好表率,为省能源院的发展打牢思想基础。最后,徐晓秋同志对近期相关工作进行了部署,副院长关春玲同志对安全工作做出了相应安排。 
\r\n', '', '', '61.180.173.43'), +(194, 10, '
\r\n         3月31日,省能源院党委召开中心组学习会议,院领导班子参加会议,会议由徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         参会人员学习了省科学院第二期“关键少数”政治理论能力提升班相关学习内容及党组书记赵梅同志在学习贯彻党的十八届六中会精神中组心学习研讨班上的讲话,围绕讲政治、强意识、重行动,结合自身学习,相互交流学习心得,同时针对科技体制改革工作,聚集省能源院未来发展,就如何发挥好“关键少数”带头作用,将十八届六中全会精神及赵梅书记讲话精神落实到实处,开展讨论。与会人员一致认为,在今后的工作中,要带头增强“四个意识”,带头坚定理想信念,带头严守党规党纪,不断促进省能源院各项工作取得新成绩、新发展。 
\r\n', '', '', '113.0.54.137'), +(195, 10, '
\r\n         值此“三八”妇女节来临之际,省能源院举行庆祝活动,组织全体女职工观看电影,这次活动营造出了浓郁的节日气氛,使广大女职工能在平日繁忙的工作中,放松身心,以更好的状态投入工作,创出新业绩。 
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(196, 10, '
\r\n         2月15日,黑龙江省能源环境研究院党委召开“两学一做”专题民主生活会,省能源院党委书记、院长徐晓秋同志和省能源院党委委员、副院长关春玲同志参加会议,省科学院党组书记赵梅同志和院机关党委书记刘颖同志列席会议,会议由徐晓秋书记主持。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         民主生活会上,省能源院党委书记徐晓秋同志代表班子及个人紧扣“两学一做”学习教育主题,围绕全面学习党的十八届六中全会精神,重点对照《关于新形势下党内政治生活的若干准则》和《中国共产党党内监督条例》,针对省科学院党建联系点及“三走”战略要求,紧密联系班子和个人思想、工作实际,深入查找剖析了各方面存在的问题及原因,同时坚持问题导向、准确、中恳地对班子成员和个人开展了批评与自我批评,并提出了明确具体、切实可行的整改措施。关春玲同志随后进行了发言,进行了深刻的剖析和批评与自我批评。
\r\n         会上,省科学院党组书记赵梅同志就如何深入落实好党的十八届六中全会的学习,如何高质量的开展、规范、执行好党内政治生活、提高政治生活严肃性,如何把党建工作抓实抓细,如何申报重大事项,如何提高领导班子示范性和如何落实责任等若干问题提出了要求,围绕党内政治生活“怎么看、怎么做、怎么抓”与省能源院领导班子进行了深入交流探讨,最后赵梅书记对省能源院专题民主生活会给予肯定,指出此次会议准备充分,态度端正,希望省能源院领导班子根据自身查找的问题,迅速积极制定出方向性措施,全面推进省能源院党建工作。 
\r\n', '', '', '113.0.54.137'), +(197, 10, '
\r\n          20日,省能源院各党支部组织全体党员及广大干部职工集体观看省科学院党组赵梅书记受邀坐客人民网视频访谈。 
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(198, 10, '
\r\n        2月17日上午,省能源院召开全体职工会议,省科学院党组成员曾祥俊同志、人事处处长张兴同志参加了会议,会议由省能源院院长徐晓秋同志主持。会上,张兴处长宣读了关于任命姜宏宇同志为孵化中心主任,参与省能源院班子分工的任职文件,省能源院领导班子及全体职工对姜宏宇同志表示热烈的欢迎,姜宏宇同志对日后的工作做出了表态,最后,曾祥俊同志对省能源院的工作给予肯定,同时对姜宏宇同志今后的工作提出了五点要求,祝愿省能源院在班子的带领下,一定会有更加美好的未来。 
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(199, 10, '
\r\n          2月16日,省科学院郭春景院长、能源院徐晓秋院长和生物能团队带头人刘伟一同前往伊春格润生态养殖公司的大型沼气工程进行调研,郭院长要求能源院要结合我省养殖业现状,在废弃物处理与利用领域以“坑口电站”模式打造寒地沼气全产业链。 
\r\n  
\r\n
\r\n \"\"
\r\n \"\"
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(200, 10, '
\r\n         2017年1月24日上午,省能源环境研究院召开职工大会传达省科学院2017年工作会议精神,会上徐晓秋院长传达了省科学院2017年工作报告及院党组书记赵梅同志的讲话精神,要求各部门会后系统学习,领会会议精神,并按照省科学院工作的总体思路和工作目标,明确工作重点,开展好2017年度相关工作,最后,对春节期间安全工作进行了部署。 
\r\n  
\r\n
\r\n \"\"
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(201, 10, '
\r\n         2017年1月10日,由黑龙江省科学院组织专家对省能源环境研究院和科技孵化中心承担的三项课题省科学院预研项目《寒区农业固体废弃物循环厌氧发酵关键技术研究》、学部委员指导专项《抗生素对鸡粪厌氧消化过程影响的研究》和院所基本应用技术研究专项《污泥超声预处理对厌氧消化工艺性能的影响研究》进行了成果鉴定。鉴定委员会由来自东北农业大学等多家单位的专家组成。省科学院科研处王阳处长主持了此次鉴定会。
\r\n
\r\n
\r\n \"\"
\r\n
\r\n \"\"

\r\n  
\r\n
\r\n         鉴定委员会专家认真听取了各课题组的工作汇报,审议了课题组提供的全部鉴定材料。经充分质询、讨论,鉴定专家委员会认为课题组提供的鉴定材料齐全、研究路线合理,并对项目的现实指导意义和取得的成果给予了较高的评价,经审议一致同意三个课题的研究成果达到了国内领先水平。
\r\n         这三个课题顺利通过鉴定,将进一步促进我院在废弃物处理技术方向的深入研究,对生物能学科团队的建设和发展起到了重要的支撑作用。 
\r\n', '', '', '113.0.54.137'), +(202, 10, '
\r\n         12月21日,省能源院召开全体党员大会,省能源院党建联系点、党组成员曾祥俊同志,院人事处副处长王向伟同志参加了会议,会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n          首先,徐晓秋书记就一年的党委书记工作情况进行了述职,述职报告经全体党员表决,全票通过。曾祥俊同志对省能源院党委一年的工作情况给予充分肯定,指出省能源院在班子带领下,无论是在硬实力还是软实力方面都取得了长足突破式的进步,希望省能源院坚定走改革发展探索之路,要重点突破,做到有所为有所不为;内引外联,实现协同创新;注重人才培养,充分发挥青年生力军的优势。王向伟副处长对省能源院与院人事处党建联系点一年来的工作给予了肯定,并希望有更多的机会与省能源院相互学习,共同进步。
\r\n
\r\n          随后,省能源院召开全体职工大会,会议由徐晓秋院长主持,首先,中层干部进行了述职,并选举出2016年先进个人和先进集体,最后,徐晓秋院长就全年工作情况及2017年工作要点,做了题为《深化改革,凝聚力量,创新发展,提质增效》的工作报告,报告经全体职工表决,全票通过。 
\r\n', '', '', '113.0.54.137'), +(203, 10, '
\r\n         11月28日,省能源院召开会议,学习贯彻落实省委十一届八次全会精神、省委书记王宪魁同志讲话精神及省科学院党组书记赵梅同志在省科学院学习全会精神会议上的讲话,会议由省能源院党委书记、院长徐晓秋同志主持,省能源院全体班子成员、中层干部、党支部书记、党员和民主人士参加了会议。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         会议学习了省委十一届八次全会精神、省委书记王宪魁同志讲话精神及省科学院党组书记赵梅同志在省科学院学习全会精神会议上的讲话。徐晓秋书记强调,各党支部要组织好党员群众,深入认真学习相关会议精神,准确把握“五位一体”总体布局和“四个全面”战略布局,不断提高“四个意识”,坚持开展好周三学习工作,按照省科学院党组的要求,制定好党的十八届六中全会学习方案,把理论学习与科研工作有机结合,抓住深入开展科技体制改革的有利时机,全面推进省能源院长足发展。 
\r\n', '', '', '113.0.54.137'), +(204, 10, '
\r\n          11月26日,作为黑龙江省科学技术协会学术年会的重要组成部分,也是第八届黑龙江省科学技术协会学术年会暨太阳岛科技论坛分会场,由黑龙江省能源环境学会,黑龙江省自然辩证法研究会,城市水资源水环境国家重点实验室共同组织的“环境伦理与废弃物循环再利用技术学术研讨会”在哈尔滨工业大学城市水资源与水环境国家重点实验室召开。本次研讨会的主题是废弃物的循环利用与环境伦理思想透析,会议由省能源环境研究院徐晓秋院长主持,省科学院副院长沙长青做重要讲话,多名知名专家学者作精彩学术报告,本次会议对促进我省废弃物循环利用起到积极的推动作用。 
\r\n
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(205, 10, '
\r\n        11月4日,省能源院召开党委中心组学习扩大会议,省能源院领导班子、党委委员、党支部书记、各部门负责人和党外人士出席了会议,会议由党委书记、院长徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n
\r\n       会议第一项,全文学习十八届六中全会公报,徐晓秋书记从政治立场、思想意识、行为要求、党内民主、群众监督等方面对公报进行了详细解读,参会人员就学习内容进行了认真的讨论。
\r\n       会议第二项,认真学习《关于新形势下党内政治生活的若干准则》和《中国共产党党内监督条例》,并将上述文件共享到工作群,方便广大党员干部及职工学习。
\r\n       徐晓秋书记强调,政治学习不能只局限于党内学习,各党支部会后要组织全体党员干部、党外人士、群众,认真学习十八届六中全会公报内容、政策及要求,并严格执行《关于新形势下党内政治生活的若干准则》和《中国共产党党内监督条例》。
\r\n       最后,徐晓秋书记对近期相关工作作了具体安排及部署。 
\r\n', '', '', '113.0.54.137'), +(206, 10, '
\r\n          按照省科学院机关党委《关于认真学习贯彻习近平总书记在纪念红军长征胜利80周年大会上的讲话的通知》及学习十八届六中全会精神相关要求,28日省能源院召开全体职工会议,会议围绕赵梅书记在省科学院《中国共产党问责条例》学习大会上的讲话及提出的要求,认真学习习近平总书记在纪念红军长征80周年大会上的讲话,全文宣读学习了十八届六中全会公报,并继续观看纪录片《永远在路上》,会议同时对我院近期科研和党建工作做了进一步部署。 
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(207, 28, '
\r\n \"\"
\r\n
\r\n  
\r\n', '', '', '113.0.54.137'), +(208, 28, '\"\"', '', '', '113.0.54.137'), +(209, 28, '
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(210, 28, '
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(211, 28, '
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(212, 28, '
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(213, 28, '
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(214, 28, '
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(215, 28, '
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(216, 28, '
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(217, 28, '
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(218, 28, '
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(219, 28, '
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(220, 28, '
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(221, 28, '
\r\n \"\"
\r\n', '', '', '113.0.54.137'), +(222, 10, '        6月5日上午,根据院党组关于开展全院2016年度财务收支审计工作的部署,院党组成员副院长沙长青同志,审计部副处长曹海虹同志率院审计部协同审计师事务所进驻省能源院开展2016年度财务收支情况审计工作,省能源院党委书记院长徐晓秋同志,孵化中心主任姜宏宇同志及省能源院财务人员参加了会议。
\r\n
\r\n \"\"
\r\n', '', '', '113.4.102.164'), +(223, 10, '
\r\n                      8月1日上午10:00,庆祝中国人民解放军建军90周年大会在人民大会堂举行,中共中央总书记、国家主席、中央军委主席习近平出席大会并发表重要讲话。按照省委办公厅及省科学院机关党委通知要求,省能源院党委组织能源院全体职工集体观看大会直播。
\r\n
\r\n \"\"
\r\n', '', '', '221.207.159.140'), +(224, 10, '
\r\n
\r\n                  7月27日上午,作为龙广结合首批抵哈的科研单位,中国科学院广州能源院所庄新姝研究员、孔晓英博士一行到省能源环境研究院调研,就涉及的研究领域进行洽谈交流,同时与生物能创新团队开展科研对接,省科学院产业化处、省科技厅成果转化中心及省能源院的领导和部
\r\n
\r\n 分科研人员参加了会议。
\r\n \"\"
\r\n  
\r\n
\r\n', '', '', '113.4.144.245'), +(225, 10, '
\r\n
\r\n               2017年8月22日,山东大学鲍晓明教授,黑龙江中丹建业生物能源公司总经理王建业一行两人来到省能源环境研究院,就纤维素秸秆乙醇工业所涉及的纤维素降解菌及酵母菌的研发与应用进行洽谈交流,并就今后的合作方向、优势互补和合作模式等方面进行了深入探讨,能源院院长徐晓秋和相关科研人员参加了此次会议。
\r\n \"\"
\r\n
\r\n         
\r\n
\r\n', '', '', '113.0.131.101'), +(226, 10, '               9月20日,省能源环境学会到漠河县宏林菌业种植有限公司进行林下产业废弃物再利用技术及室内空气污染控制技术科普活动,并与石忠斌董事长探讨了菌业废弃物综合利用方案等问题。\r\n
\r\n \"\"
\r\n', '', '', '1.58.6.164'), +(227, 10, '               18日9:00,按照省科学院相关部署,省能源环境研究院党委组织全体干部职工共同观看十九大召开盛况直播,共唱国歌,以饱满的精神工作状态,庆祝十九大胜利召开!\r\n
\r\n \"\"
\r\n', '', '', '221.207.158.79'), +(228, 10, '
\r\n                    10月19日上午,省能源院召开全体职工大会,全面部署学习贯彻落实十九大会议精神,省能源院党委书记、院长徐晓秋同志主持会议,省能源院领导班子、全体党员干部及民主人士参加会议,会议对报告全文进行了学习,参会人员围绕省能源院发展实际进行了解读学习和讨论,徐晓秋书记指出,各党支部要按照十九大报告中对科研工作提出的新任务、新要求开展形式多样的学习活动,全体党员干部要不忘初心,牢记使命,强化党建引领,推动创新发展,要通过系统学习,广泛讨论,加强宣传,以十九大会议精神武装头脑,指导实践,推进省能源院各项工作再上新台阶,满怀信心迈向新征程。
\r\n
\r\n \"\"
\r\n', '', '', '221.207.158.79'), +(229, 10, '                  为深入贯彻落实党的十九大精神,落实院党组提出关于“新思想引领改革发展思路,新征程凝聚创新创业力量”工作的相关部署,11月15日上午,省能源环境研究院生物能创新团队党支部支部开展了“以向善、向上、向阳、向党精气神 打造一流科研创新团队”为主题的“说讲谈”活动,院党组书记赵梅同志,院直属机关党委、人事处领导,省能源院领导班子、党员代表及石化院、塑料所代表参加了此次活动。会议由生物能创新团队党支部书记王欣同志主持。\r\n
\r\n         活动开始,王欣同志首先介绍了生物能创新团队党支部概况,展示了支部建在团队上的发展理念及支部“三创”(创新学、创新做、创新用)工作成果,并围绕“向善、向上、向阳、向党”,从党务工作者的角度解读了要以积极向上,风雨兼程的精气神的开展各项工作;党支部其他成员和生物能创新团队民主人士代表,围绕十九大报告中与自身研究领域和工作实际联系最紧密的内容,与参会同事一同分享了学习工作心得,并结合对“向善、向上、向阳、向党”深刻理解,分别从科研建设、创新工作、科研新思路、学习感想、人文关怀和团队合作等多角度多视角,深入谈及党对自身工作的引领和对学习生活的积极影响;期间,在北京出差的支部成员也通过语音连线的方式参加了活动。与会同志一致表示,作为一名科技工作者,在党的十九大精神指引下,要不忘初心,牢记使命,以“加快生态文明体制改革 建设美丽中国”为目标,扎实做好本职工作,不负重托,做科技创新的引领者、成果转化的实践者、科学知识的传播者,在科研领域干事创业,共建大科学院。随后,省能源院党建联系点院人事处张兴处长与大家交流了学习党的十九大报告的方法和对本次活动的观摩体会,石化院、塑料所代表也分别谈了观摩体会。
\r\n
\r\n         院党组书记赵梅同志对省能源院生物能创新团队党支部“说讲谈”活动给予了充分肯定,并对此次活动作出点评,赵书记指出,此次活动一是从不同角度展示了活动主题,丰富了党建文化;二是活动方向明确,主题紧密联系科研工作实际;三是党建文化开展的好,体现出对十九大报告的突出学习能力,同时赵书记对下一阶段学习重点进行了部署,指出要进一步深入学习贯彻落实党的十九大精神和加强基层党支部建设,一是要进一步深入学习领会理解党的十九大精神,这是一项长期的政治任务,将这“说讲谈”活动持续开展下去,将十九大的学习常态化;二是要强化基层党支部的政治功能建设,以政治建设作为统领,促进科研工作与政治功能互相融合推进,构建政治生态良好的党建文化;三是,通过对十九大会议精神的学习带动科研创新,立足岗位,发挥作用,为国家和社会做出贡献。
\r\n
\r\n         活动最后,与会全体人员全体起立,与习总书记一起重温入党誓词,不忘初心,牢记使命,不断激发前进动力。
\r\n \"\"\"\"
\r\n', '', '', '221.207.158.226'), +(230, 10, '
\r\n              为进一步巩固并发挥省能源院生物能创新团队在寒区固体废弃物处理处置、清洁能源领域的科研技术优势,经过省能源院与农业部沼气科学研究所的前期准备,11月13日上午,省科学院郭春景院长与来访的农业部沼气科学研究所邓宇副所长一行,在省科学院会议室进行了座谈,省科学院产业化处李骏处长,省能源院徐晓秋院长,省能源院相关科研人员参加了会议。
\r\n
\r\n         双方就在省能源院建立“寒区生物能源利用联合实验室”相关工作进行了深入交流。郭院长首先对邓副所长一行的到来表示欢迎,郭院长指出,要充分发挥好沼气所和能源院各自在生物质能源上的技术优势,拿出更好的技术和成果,解决好养殖业末端处理能力不强的问题,更好的为省域经济服务,要用“场口气站”模式,建设寒区沼气示范工程,实现寒区养殖业、种植业废弃物的高效循环利用,打造以沼气为纽带的循环经济产业。
\r\n
\r\n         随后邓副所长介绍了农业部沼气科学研究所的相关情况,包括历史沿革、科学设置、平台条件、团队配置,邓副所长表示,此次合作即是机遇也是挑战,第一要通过建立联合实验室,针对黑龙江省农村生态环境、产业转型进行准确的战略布局;第二要建立更加完善的合作运行机制;第三要真正把合作落实落靠,让寒区生物质成果成规模成体系,实现预期目标。
\r\n
\r\n         最后,郭院长与邓副所长共同签署了《农业部沼气科学研究所与黑龙江省科学院共建“寒区生物能源利用联合实验室”》协议。
\r\n \"\"\"\"
\r\n
\r\n  
\r\n', '', '', '221.207.158.226'), +(231, 10, '
\r\n                 11月27日下午,省能源院召开全体党员会议,传达贯彻落实省委第十二届二次全会精神,省能源院领导班子,全体党员干部,民主人士代表参加了会议,会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n         会议首先学习传达了省委第十二届二次全会精神和全文学习了陆昊省长到自动化所调研时的讲话。会议要求,省能源院全体党员干部要认真学习、深入领会省委第十二届二次全会精神和陆昊省长讲话精神,切实提高认识,深刻理解全会鲜明主题;深刻理解建设现代化新龙江时代特征;深刻理解建设现代化新龙江战略安排;深刻理解建设现代化新龙江政治保证。
\r\n         最后,徐晓秋同志强调,学习贯彻党的十九大和省委第十二届二次全会精神,是当前和今后一个时期的重要政治任务。各党支部要以多种形式,组织、指导、推动全体党员干部开展学习,班子成员要以身作则、率先垂范、先学深学,作出表率,要把学习宣传贯彻党的十九大精神和省委第十二届二次全会精神紧密结合,围绕陆昊省长讲话精神,学深悟透、知行合一,迅速掀起学习宣传贯彻热潮,确保学习贯彻落实取得实效。
\r\n
\r\n                \"\"
\r\n', '', '', '113.4.149.77'), +(232, 10, '
\r\n               1月2日上午,省能源院在会议室隆重召开2017年度总结表彰大会,省科学院郭春景院长,省能源院领导班子及全体职工参加了大会,会议由院长徐晓秋同志主持。
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n
\r\n               徐晓秋院长首先代表省能源院全体干部职工对郭春景院长一年来对省能源院的关心、支持表示衷心感谢。随后孵化中心主任姜宏宇同志、省能源院副院长关春玲同志分别做了2107年度省能源院工作总结报告及2018年度工作要点报告,徐晓秋院长宣读了2017年省能源院表彰决定,并由郭春景院长为获得表彰的集体和个人颁奖。郭院长对省能源院过去一年的工作情况给予肯定,指出未来一年省能源院要持续围绕科研创新、学科团队建设、创新工程、人才培养、对外交流等方面重点开展工作。会上郭院长还与职工亲切座谈,鼓舞广大青年科技工作者要立足岗位,不驰于空想,不骛于虚声,脚踏实地努力工作。
\r\n
\r\n \"\"\"\"
\r\n
\r\n  
\r\n
\r\n               会后,全体职工纷纷表示此次大会深受鼓舞,在新的一年中将牢记使命,实干担当,走好能源院创新发展之路。
\r\n', '', '', '1.62.164.53'); +INSERT INTO `dede_addonarticles` (`aid`, `typeid`, `body`, `redirecturl`, `templet`, `userip`) VALUES +(233, 10, '                      3月5日上午9:00时,按照省科学院部署,省能源院组织全体党员干部集中收看全国人大一次会议开幕盛况\r\n
\r\n \"\"\"\"\"\"\"\"
\r\n', '', '', '113.4.236.5'), +(234, 10, '
\r\n                    为庆祝全国人大召开,喜迎三八国际妇女节的到来,省能院开展系列活动,3月7日召开“聪慧时尚,自信坚韧,创新进取”主题女职工座谈会,能源院领导班子与全体女职工一同畅谈工作心得,共叙新时代女性风貌;3月8日组织全体职工观看爱国题材影片《厉害了我的国》,共同领略祖国桑田碧海须臾改的巨大变化以及取得的卓著成就,共同感受中国共产党直挂云帆济沧海的伟大信念。
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n', '', '', '113.4.236.5'), +(235, 10, '
\r\n            3月26日上午9:00,省能源院召开全中心组学习扩大会议,学习传达3月23日省科学院党组扩大会议精神。会议由党委书记、院长徐晓秋同志主持,能源院全体职工参加了会议。
\r\n
\r\n         会上,徐晓秋同志、姜宏宇同志、关春玲同志分别传达了“第十三届全国人民代表大会第一次会议”、“十三届全国人大一次会议期间习总书记重要讲话”、“栗战书同志在十三届全国人大一次会议闭幕会上的讲话”、“中国人民政治协商会议第十三届全国委员会第一次会议”的主要内容和“张庆伟同志在全省领导干部大会上的讲话”。
\r\n
\r\n         徐晓秋书记要求能源院全体职工要把学习贯彻两会精神作为当前重要的政治任务及工作目标,持续加强基层支部建设及作风整顿工作,要把学习重要讲话与贯彻习近平新时代中国特色社会主义思想结合起来,与贯彻党的十九大精神部署结合起来,切实将两会精神学在深处落在实处。
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n', '', '', '122.159.32.134'), +(236, 10, '
\r\n        按照省科学院团委的安排部署,省能源院组织全体干部职工开展“汇聚阅读力量 托起明日希望”文化扶贫慰问活动。
\r\n
\r\n        省能源院全院上下对此次文化扶贫工作高度重视,2018年5月14日,全体职工在江北会议室举办捐书仪式,班子成员带头为贫困村的孩子们捐献了儿童文学、儿童教育、青少年成长等方面的书籍,共计170余本。
\r\n
\r\n        2018年5月15日,省能源院副院长关春玲同志等一行4人到我院精准扶贫对接点七台河市勃利县吉兴乡合庆村进行帮扶活动。 活动中,首先对扶贫点进行文化帮扶,将职工捐赠的170余本爱心书籍送到合庆村委会主任手中。然后,关春玲同志详细询问了合庆村新建住房的室内环境情况,我院专业人员为其进行了室内甲醛等有害气体的检测及室内环境的评估,并为改善其室内环境提出了合理化建议。扶贫工作从“扶志”与“扶智”做起,生物质领域的专家还对帮扶点进行了秸秆综合利用的科普宣传,此次帮扶工作圆满完成。
\r\n
\r\n         吉兴乡合庆村委会主任对省科学院给予的支持和对帮扶工作的高度重视表示感谢,同时对我院此次的文化扶贫慰问活动表示感谢。   
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n', '', '', '221.212.38.234'), +(237, 10, '               5月24日上午,在院科研处倪宏伟处长带领下,院科研处一行三人到省能源院开展科研情况调研工作,省能源院领导班子及科研办相关人员参加了调研,省能源院分别从科研总体情况、项目情况、研究领域、研究方向、创新团队等方面进行了汇报。\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n', '', '', '45.115.217.214'), +(238, 10, '                      6月28日下午,能源院徐晓秋院长带队一行4人赴理工大学化学与环境工程学院洽谈合作事宜,双方围绕废弃物厌氧处理、木质纤维素降解转化等方面展开深入交流,并对学生培养、互聘导师、建立联合实验室等方面进行商讨。双方最终商定将建立联合科研教学基地、学生实践实习基地及互聘导师机制。会后,双方座谈人员建立了微信群,便于后续工作开展。\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n', '', '', '45.115.217.214'), +(239, 10, '                       2018年7月4-6日,2018年斯里兰卡城市固体废弃物处理研修班在哈尔滨举办。本次研修班由商务部主办,农业农村部沼气科学研究所承办,共有20名来自斯里兰卡不同地区的市政官员参加了此次培训,黑龙江省能源环境研究院作为协办单位组织了本次研修班。7月4日上午,培训专题讲座在省科学院会议中心举行,能源院徐晓秋院长首先对来自斯里兰卡的20名学员表示热烈欢迎,随后王欣副研究员做了“城市固废处理的方法和技术”的专题培训报告,普及了中国先进的城市固废处理技术,对斯里兰卡学员的提问做了专业解答。7月5日,研修班在徐晓秋院长的陪同下来到了方正县,方正县县委书记董文琴代表县委县政府对斯里兰卡友人的到来表示了热烈的欢迎,并且在董文琴书记的陪同下,研修班来到天门乡垃圾处理中心,参观了ERCM垃圾处理示范项目,董文琴书记、徐晓秋院长及企业技术人员在现场给研修班学员进行了项目讲解。7月6日,能源院刘伟副研究员与斯里兰卡学员进行了深入交流,学员们对能源院的协办工作给予肯定和感谢,希望将中国先进的有机固废处理技术引进到斯里兰卡,提高斯里兰卡的有机固废处理水平。通过此次培训,加强了能源院在有机固废处理领域的宣传力度,为一带一路发展中国家的发展提供了帮助。\r\n
\r\n \"\"
\r\n
\r\n \"\"
\r\n', '', '', '45.115.217.214'), +(240, 10, '
\r\n                          省能源环境研究院党委开展庆“七一”不忘初心跟党走、牢记使命有作为系列主题活动
\r\n 
\r\n        为热烈庆祝中国共产党成立97周年,进一步增强党组织的凝聚力和战斗力,不断深入学习贯彻党的十九大精神,不断强化党员"四个意识",不断深化“两学一做”学习教育,不断夯实基层党建全面提升工程基础,不断提升基层党组织的引导力、号召力和凝聚力,“七一”期间,省能源院党委开展了以“不忘初心跟党走、牢记使命有作为”为主题的系列纪念活动,持续展现省能源院党员干部的精神风貌。
\r\n一、重温入党誓词
\r\n       省能源院党委与党建联系点院人事处党支部全体同志共同重温入党誓词,不忘初心牢记使命,坚定入党信念和为共产主义奋斗终生的决心,激励党员以自身的实际行动积极实践誓词,以更加饱满的热情发挥共产党员的先锋模范作用,永葆共产党员的政治本色。
\r\n
\r\n \"\"
\r\n  
\r\n二、参观爱国主义教育基地
\r\n       省能源院与党建联系点院人事处党支部全体党员沿着习近平总书记考察调研的足迹,重温总书记的殷切嘱托及东北抗日联军的英雄事迹,牢记历史、不忘过去,从思想和心灵深处接受了一次深刻的党性教育,使大家倍加珍惜无数先烈用生命给我们换来的幸福生活,激励大家克服一切艰难险阻,勤勉务学,努力工作,珍爱和平、开创未来!
\r\n      1.“东北抗日联军政治军事干部学校遗址纪念碑”
\r\n
\r\n \"\"
\r\n
\r\n       2.“抗联遗址老钱柜纪念碑”\r\n
\r\n \"\"
\r\n
\r\n 三、钉钉“两学一做“答题活动
\r\n        围绕今年中央和省委重要会议精神、领导重要讲话精神和习近平谈治国理政内容,能源院全体党员干部每日登陆钉钉“ 两学一做”进行学习和答题,既检验了党员“两学一做”学习教育的成果,以及掌握党章党规知识水平,又激发了广大党员的学习热情,在今后的工作和生活中积极发挥党员的先锋模范带头作用。
\r\n
\r\n \"\"
\r\n
\r\n 四、井冈山红色教育学习心得报告会
\r\n        为纪念建党97周年,我院陈松同志以“不忘初心牢记使命,坚定理想信念跟党走”为题,分享培训心得。会上反响热烈,与会人员深受鼓舞,表示在今后潜心专研本职工作,增强党性修养,在科研战线上为党和国家做出贡献。
\r\n
\r\n \"\"
\r\n
\r\n 五、基层支部“说讲谈”
\r\n       为纪念建党97周年和改革开放40周年,三个党支部组织党员重温入党志愿书并结合个人成长历程和组织发展历程,围绕“习近平看重的'三个担当'”内容,分别开展一了次支部“说讲谈”活动,每名支部党员充分结合实际阐述观点、讲述感悟。
\r\n
\r\n \"\"
\r\n
\r\n        1. 省能源院行政管理党支部召开了“坚定理想信念,敢于担当尽职,牢记初心使命,助力科研一线”说讲谈活动,整场座谈会气氛热烈。 王书可同志表示 ,发展没有终点,改革没有停顿,未来还有更多的四十年需要我们去拼搏奋斗。姜宏宇同志表示人民美好的生活离不开党的领导,我们由原来的贫穷落后发展到现在的小康社会,人民的幸福感和满意度极大的增强。大家表示,坚决贯彻院党委的决策部署,立足岗位,踏实肯干,实实在在为一线办实事。
\r\n        2. 省能源院能源化学创新团队党支部结合建党97周年和改革开放40周年,以及习近平看重的“三个担当”内容,召开了主题为“初心逐梦诵改革,砥砺迈进新时代”的说讲谈活动。会上支部同志踊跃发言,气氛热烈。关春玲同志讲述了赵一曼、赵尚志、杨靖宇等东北抗联战士的英雄事迹,大家从不忘初心艰苦奋斗的老一辈红色精神说起,谈到了改革开放四十年来国家发生的巨大变化,都感到无比自豪,表示在今后工作中要不忘初心,坚守信仰,勇于担当,开拓未来。
\r\n        3. 正时七一建党97周年和改革开放40周年纪念之际,省能源院生物能创新团队党支部组织党员谈认识 、谈感受。王欣同志深情诵读入党志愿书,畅谈心路历程、表明践诺决心。徐晓秋同志表示合格党员就要有敢担当、能担当、善担当的样子。党建联系点院人事处党支部张兴同志表示这次说讲谈气氛热烈,同志们理解深刻,在新时代我们应该初心如磐、使命在肩,坚守入党时的信仰信念,始终铭记誓言和志愿、始终永葆共产党员政治本色。
\r\n 六、 基层党建提升工程总结表彰活动
\r\n        为巩固基层党建全面提升工程成果,推进服务型党组织建设,总结党建工作的成效和经验,发挥先进典型的示范引领作用,我院开展“2017年党建提升工程优秀个人、优秀基层组织、优秀团队”等评选表彰活动。此次表彰活动推动了党建工作落地见效,形成了“党委有号召力、党支部有凝聚力、党员有向心力”的党建发展局面,有效推动了各项工作上台阶上水平。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n  
\r\n
\r\n', '', '', '45.115.217.214'), +(241, 10, '
\r\n                              7月12日下午,哈尔滨理工大学化学与环境工程学院党委书记徐春霖带队到能源院进行第二次深入交流。双方首先签署了“教学科研实践基地共建协议”和“研究生导师互聘协议”,共同为“哈尔滨理工大学教学科研实践基地”揭牌,随后,徐春霖书记走访了实验室,对双方的合作的交叉点进行了细致探讨。通过第二次交流和合作协议的签订,为双方在科研、教学、互聘导师等方面的长久合作奠定了基础。石化院王阳书记带队一行,也到我院和哈尔滨理工大学化学与环境工程学院进行了深入交流。
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n', '', '', '45.115.217.214'), +(242, 10, '
\r\n                    8月16日上午,省能源院召开 “深入学习张庆伟书记调研讲话精神”会议,会议由徐晓秋院长主持,全体职工参加了会议。徐院长传达和讲解了“关于在省科学院系统开展学习贯彻落实张庆伟书记调研讲话精神的通知”、“张庆伟书记在省科学院调研座谈会上的讲话”两项重要文件,要求全体职工立足本职岗位,认真学习贯彻张庆伟书记调研时的讲话精神,采取行之有效的学习方式,积极组织开展支部“说讲坛”等专题学习活动。创新团队要以庆伟书记在我院的调研精神为引领加强顶层设计,合理规划构建协同创新体系。院所要牢牢把握正确的改革方向,探索改革创新发展新思路,推动科研事业单位深化改革。
\r\n
\r\n \"\"
\r\n \"\"
\r\n
\r\n  
\r\n', '', '', '45.115.217.214'), +(243, 10, '                 8月17日,能源院组织召开2019年度储备项目评审会,两个创新团队共组织10项科研项目参与本次储备项目评审。评审委员会由来自哈尔滨工业大学、哈尔滨工程大学、黑龙江大学等七名省内知名专家组成。
\r\n       上午,先进行了院所基本应用技术研究专项和中试基地建设项目的评审,省科学院条财处陆凯参加会议。专家结合指南分别对院所基本应用技术储备项目给与了充分的建议和评价,对团队提出科研仪器设备进行了相关性、均衡性和匹配性的评价,并对储备项目进行了量化打分,一致同意进入项目储备库。
\r\n
\r\n \"\"
\r\n            下午,召开了院基金项目、院青年基金项目、中试熟化项目、院长基金项目的储备项目评审会,与会专家对项目的选题、研究思路、技术路
\r\n 线、考核指标等方面提出了细致的修改意见,并对入库项目进行的打分排序,形成推荐意见。
\r\n
\r\n \"\"
\r\n                 本次评审会本着公开、公平、公正的原则,聘请的专家全部由系统外专家组成,同时,专家组对项目给与了充分、细致的评价,充分发挥了专家的咨询作用,对提升储备项目质量具有重要的指导作用。
\r\n
\r\n  
\r\n', '', '', '45.115.217.214'), +(244, 10, '                  为深入贯彻落实中央、省委及省科学院相关精神,同时围绕法制年建设,11月5日,省能源院党委召开中心组学习扩大会议,能源院全体党员参加会议,会议由党委书记、院长徐晓秋同志主持。\r\n
\r\n         会前徐晓秋同志带领全体党员再学新修订的《中国共产党纪律处分条例》。
\r\n
\r\n         会议传达了中共黑龙江省第十二届委员会第四次全体会议决议、省科学院党组《关于学习宣传贯彻习近平总书记在深入推进东北振兴座谈会上重要讲话和考察黑龙江时重要指示精神的通知》和院党组书记赵梅同志在11月2日全院处级以上干部会议上提出的三点学习贯彻落实意见。
\r\n
\r\n         会议要求全体党员要将上述各项学习精神作为当前和今后一个时期首要政治任务,深刻领会全会精神实质。坚持以问题为导向,结合自身工作学以致用,进一步解放思想、统一思想、形成共识,认真开展“支部说讲谈”活动,每一名职工都要自觉肩负创新驱动的历史重任,要以实际行动助力我院振兴发展。
\r\n \"\"\"\"
\r\n
\r\n  
\r\n', '', '', '1.58.50.10'), +(245, 10, '             2018年11月17日,太阳岛科技论坛系列活动——2018能源环境可持续发展论坛暨省能源环境学会第四届学术年会在哈尔滨工业大学城市水资源与水环境国家重点实验室隆重举行。本次会议的主题为“能源环境可持续发展”,围绕秸秆综合利用技术、乡村厕所革命关键技术、生物制氢、土壤修复等主要议题进行大会报告。
\r\n       哈尔滨工业大学副校长任南琪院士、黑龙江省科学院院长郭春景研究员、城市水资源开发利用(北方)国家工程研究中心主任石广济教授、哈尔滨工业大学环境学院党委书记齐晶瑶教授、黑龙江省能源环境研究院院长徐晓秋研究员、东北农业大学资源与环境学院院长张颖教授等领导出席论坛。省内能源环境领域的高校、院所、企业的领导、学科带头人和骨干教师、学生等共计140余人参加了论坛。 
\r\n        论坛邀请了哈工大副校长、中国工程院院士任南琪教授、同济大学周雪飞教授、东北农业大学资源与环境学院院长张颖教授等七位知名专家学者做了精彩的学术报告。此次论坛的召开使科技人员能够结合我省的实际情况,立足服务发展需要,把握领域前沿动态,在提升学术水平的同时把理论应用于实践,最终实现我省能源环境的可持续发展。这次论坛对生态文明理念的提升、环境污染源头治理的加强以及资源循环利用能力的升级,具有重大的现实意义。
\r\n\"\"\"\"
\r\n\"\"\"\"
\r\n\"\"\"\"
\r\n\"\"\"\"
\r\n\"\"\"\"
\r\n\"\"

\r\n', '', '', '221.212.192.10'), +(246, 10, '
\r\n         12月7日上午,省科学院党组成员、副院长赵立涛同志、院对外合作处处长刘志忠同志以及对外合作处全体同志来到能源院调研座谈。此次调研的主题为“解放思想,开放办院,协同创新”。
\r\n
\r\n         能源院介绍了2018年外事工作情况、合作平台建设及运转情况、海外人才工作站专家及聘请院级客座研究员情况 、明年外事工作计划。赵院长对我院外事工作给予较高评价,并对每项具体工作都进行了点评,直接指导我院外事工作健康有序推进。特别是叮嘱我院要高度关注各种渠道的国合项目,提前谋划,签署合作协议,争取参与指南编写,认真对待项目申报和答辩,才有可能获得资助。明确了技术引进、消化吸收再创新、服务第三世界国家的工作思路。对引智工作和援外培训等工作也给予了指导。
\r\n
\r\n         赵院长一行的到来明晰了我院外事工作思路,给我院树立起对外合作工作的信心和决心,2019年,我院要解放思想、提前谋划、凝心聚力,外事工作再谱新篇。
\r\n \"\"\"\"
\r\n', '', '', '1.62.80.131'), +(247, 10, '                12月18上午10点,根据省委办公厅要求,能源环境研究院认真组织全体职工收看中共中央国务院召开的庆祝改革开放40周年大会。\r\n
\r\n \"\"\"\"
\r\n', '', '', '113.0.21.85'), +(248, 10, '                 3月5日上午9时,能源院全体党员干部集体收看第十三届全国人民代表大会第二次会议开幕。\r\n
\r\n \"\"\"\"
\r\n', '', '', '113.0.21.125'), +(249, 10, '
\r\n             2019年2月28日,省能源院召开了全体职工大会,传达学习贯彻省科学院2019年工 作会议精神,能源院领导班子及全体职工参加了会议。
\r\n       会议全文传达了郭春景院长的工作会议报告及赵梅书记的总结讲话。省能源院党 委书记、院长徐晓秋同志围绕“双提行动计划”和打造“五新”科学院的发展目标, 及认真学习贯彻落实2019年各项工作任务及9项重点工作,进行了深入全面部署,同时 加强三点工作,一是加强政治建设,引领优良工作作风;二是着力攻坚克难,为科研 高质量发展提供科技和人才支撑;三是加强科技宣传,营造和谐安全稳定发展环境, 能源院全体干部职工,将以百倍的热情,深入学习贯彻落实中央、省委及省科学院各项精神,不断加强支部建设,树立优良作风,加快实现创新引领和关键核心技术突破,扎实推进科研工作,完善机制,落实责任,以优异成绩向中华人民共和国成立70周年献礼。
\r\n
\r\n \"\"
\r\n', '', '', '1.58.47.77'), +(250, 10, '
\r\n           为庆祝“三八”国际妇女节,省能源院举办“聚巾帼力量 筑美丽未来”座谈会,全院女职工和班子成员参加了座谈会,能源院党委书记、院长徐晓秋同志主持会议。
\r\n
\r\n        徐院长首先对全体女职工致以节日的祝福,对女同胞们多年来在能源院的建设和发展过程中做出的贡献给予了充分的肯定。女职工们纷纷发言,一致表示,作为新时代的女性,要认真学习领会全国“两会”精神,落实院工作会议精神,立足本职岗位,解放思想、勇于担当、锐意进取、奋发作为,不断提升科技创新能力和质量,为实现全院“双提”目标任务和我院创新发展做贡献。随后,我院邀请的专业老师为女职工们奉上了一堂精彩的服装搭配课程,受到了女职工们的热烈欢迎。
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n', '', '', '1.58.47.77'), +(251, 10, '
\r\n 国家重点研发计划“村镇低成本清洁能源供暖及蓄热技术研究”项目启动会顺利召开
\r\n
\r\n
\r\n           2019年3月27日,由中国建筑科学研究院有限公司作为项目牵头单位、建筑环境与节能研究院李忠研究员作为项目负责人的“十三五”国家重点研发计划“绿色宜居村镇技术创新”重点专项“村镇低成本清洁能源供暖及蓄热技术研究”项目启动会在北京顺利召开。
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n
\r\n  
\r\n
\r\n
\r\n         项目主管、中国农村技术开发中心副处长王峻,项目专员朱浩、流动专员张志伟、张志强;住房和城乡建设部标准定额司副调研员姚秋实;中国建筑科学研究院有限公司副总经理王清勤、科技处副处长张靖岩、财务处副处长杨如冰;建筑环境与节能研究院副院长邹瑜;专项及项目咨询专家、21家项目参与单位共60余名研究人员参加了此次会议。
\r\n
\r\n \"\"
\r\n
\r\n
\r\n           项目启动会由建筑环境与节能研究院副院长邹瑜主持。院公司王清勤副总经理代表项目承担单位致辞,住房和城乡建设部标准定额司副调研员姚秋实代表项目推荐单位、中国农村技术开发中心王峻副处长代表项目管理团队发表讲话。
\r\n
\r\n \"\" 
\r\n
\r\n
\r\n         项目专员朱浩详细讲解了国家层面关于“十三五”重点研发计划的各项制度文件,以及中国农村技术开发中心对项目管理的各项要求。华建会计师事务所张小艳高级会计师就重点研发计划项目资金管理的相关事项做出了细致的培训与专业的讲解。
\r\n         随后,会议进入实施方案咨询阶段。项目启动会咨询专家组由专项咨询专家中国建设科技集团股份有限公司教授级高工李宏,天津大学教授朱能,华建会计师事务所高级会计师张小艳;项目咨询专家中国建筑标准设计研究院有限公司教授级高工李军,北京工业大学教授陈超,中国建筑节能协会秘书长李德英共六人组成。此次启动会的咨询专家也被聘为项目的特聘专家,并由项目负责人李忠研究员向各位专家颁发了聘书。 
\r\n
\r\n
\r\n
\r\n \"\"
\r\n
\r\n
\r\n         项目实施方案讨论会由李宏教授级高工主持。项目负责人李忠研究员汇报项目实施方案,重点介绍研究内容、统筹与分解、年度计划、组织保障和风险控制对策及加强项目内部控制的各项措施等内容。随后,各课题负责人李忠研究员、朱民教授、谭羽非教授、刘猛教授、张景高级工程师就课题实施方案进行汇报。
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n
\r\n
\r\n        汇报结束后,专家组通过质询和论证,并为项目和课题后期实施提出了意见和建议,指出项目的实施按照以课题服务于项目为宗旨,课题各项考核指标应制定详实周密的研究计划,落实到具体时间节点,同时对于国拨经费的使用应严格按照研究进度支出。另外,示范工程建设项目任务繁重,需要周密计划与部署,为后续测试、总结与验收预留充足的时间。
\r\n
\r\n        最后,项目负责人李忠研究员做总结发言,他感谢与会专家提出的宝贵意见,指出项目实施之前需要定好规矩,将项目考核指标进展落到实处,确保项目能够顺利完成,不负嘱托,切实为推动乡村振兴战略的落实提供有力的技术支撑。
\r\n
\r\n 此次启动会的顺利召开标志着本项目正式启动。该项目中央财政经费4295万元,项目执行周期为2018年12月到2022年12月。项目针对我国绿色宜居村镇建设的需求,将为绿色宜居村镇建设提供战略和技术决策支撑。
\r\n
\r\n  
\r\n', '', '', '113.0.50.83'), +(252, 10, '            (一) 5月6日下午14时,省能源院召开全院职工大会,学习传达贯彻省科学院落实机构改革方案动员大会的精神。会议由党委书记、院长徐晓秋同志主持。
\r\n    会上,徐晓秋同志传达了《关于印发<黑龙江省科学院及所属事业单位机构改革方案>的通知》、全文传达了赵梅书记在省科学院落实机构改革方案动员大会上的讲话精神及郭春景院长提出的三点要求。会议要求全体干部职工,认真领会机构改革方案的精神,结合实际抓好落实,要按照科学院党组的要求,把会上布置的十一项工作落实落靠,要以改革为动力,为实现我院“双提”计划,打造"五新"科学院继续努力。动员全体党员积极开展“说讲谈”活动,要求各支部围绕落实动员大会精神,切实全面推进改革工作。
\r\n           (二)下午15时许,省科学院党组赵梅书记一行来到省能源院,与省能源院领导班子进行了亲切的交流,省能源院党委书记、院长徐晓秋同志将省能源院基本情况及改革涉及工作开展情况向赵书记一行进行了汇报,赵梅书记和四位院机关部门领导,根据省能源院实际情况,给予了现场指导,赵梅书记对落实改革工作中的责任任务、时间节点、人员组织、职能融合、队伍建设等重点工作做了进一步部署。
\r\n
\r\n \"\"
\r\n \"\"
\r\n', '', '', '113.4.101.246'), +(253, 10, '
\r\n 守初心、担使命、找差距、抓落实
\r\n 
\r\n                     --省能源环境研究院党委“不忘初心、牢记使命”主题教育开展情况汇总
\r\n 
\r\n      “不忘初心、牢记使命”主题教育活动开展以来,省能源院党委始终把党的政治建设摆在突出位置,坚定政治信仰、增强“四个意识”、维护党中央权威和集中统一领导、严明党的政治纪律和政治规矩、加强和规范新形势下党内政治生活,确保各项工作取得实效。现将主题教育开展情况汇报如下。
\r\n一、以理论学习为基础
\r\n1.坚持读原著学原文悟原理。以习近平新时代中国特色社会主义思想为主题教育的主线,在学懂弄通做实上下功夫。组织党员干部学习党章、十九大报告,学习《习近平新时代中国特色社会主义思想学习纲要》《习近平关于“不忘初心、牢记使命”重要论述选编》《中共共产党党内法规汇编》,深入学习习近平总书记在振兴东北座谈会和到我省视察时的重要指示精神,以及习近平总书记最新重要讲话精神。党委成员带头认真开展学习,深学细悟,深入开展研讨,各党支部、各部门坚持自学、集中学习相结合,夯实学习基础。
\r\n2.开展集中学习研讨。召开中心组学习扩大学习会,带头深入开展专题研讨,集中研讨将自学、研讨、交流相结合,将革命传统教育和先进典型教育相结合,坚持领导带头、上下联动、同频共振。
\r\n3.丰富学习教育形式。结合观看纪录片《丰碑》、《楷模》,组织全体党员干部和党外人士集体参观《丰碑》中“北大荒精神”的代表-农垦北大荒博物馆,学习践行“艰苦奋斗、勇于开拓、顾全大局、无私奉献”的北大荒精神;组织全体党员干部与党建联系点省科学院人事处党支部共赴纪录片《楷模》中尚志市元宝村,开展“观《丰碑》 学《楷模》 促‘双提’ 助‘落地’”主题教育活动,此行受到了元宝村村委会成员的亲切接待,村党总支书记也是“楷模”人物之一的张宝金同志对我们的到来表示热烈欢迎。全体人员首先来到抗日烈士赵尚志赵一曼纪念馆,追寻英雄足迹,缅怀英雄事迹,随后参观了以作家周立波长篇小说命名的暴风骤雨纪念馆,深入了解土地改革运动,以及改革前后元宝村发生的翻天覆地的变化,并重温入党誓词,以坚定有力的宣誓表达时刻不忘初心、牢记使命的信念和决心,并在元宝村围绕活动主题,现场召开了“不忘初心、牢记使命”主题座谈会。
\r\n二、以调查研究为载体
\r\n1.坚持问题导向。按照主题教育要求认真制定调研方案,聚焦党中央重大决策部署、群众反映突出的热点问题、党的建设面临的突出矛盾,切实把调查研究与履职尽责结合起来。在调研中紧盯问题,摸清实情,分析症结,理清思路,找出办法。
\r\n2.调查研究注重实际。紧密结合履职实际,分别制定调研方案,领导班子成员带头开展调研,聚焦问题,及时了解掌握干部职工思想动态,分别召开各层面座谈会,听取相关意见建议。
\r\n3.讲好专题党课。在学习调研的基础上,领导班子认真撰写党课提纲,为党员干部讲授党课。党委书记围绕“学党史、知党情、强党性”为全体党员干部讲授专题党课,并在支部围绕“聚焦两会,助力科院”、“守初心 严律己 担使命”分别讲授党课2次。
\r\n三、以检视问题为契机
\r\n1.广泛听取意见建议。突出主题教育目标之一“为民服务解难题”,通过谈话、问卷、座谈、设置征求意见箱等方式,广泛征集广大党员群众意见。
\r\n2.自觉对标查摆问题,深刻剖析反思。带头坚持高标准、严要求,按照总书记关于“四个对照”、“四个找一找”的要求,在征求意见基础上,把职责摆进去,把问题找出来,进一步细化问题,列出清单,从思想、政治、作风、能力、廉政方面全面检视,不留死角。认领问题,深入剖析症结,深刻反思原因,逐一对标,逐条逐项制定整改措施。
\r\n四、以整改落实为驱动
\r\n1.突出重点整改。认真研究制定主题教育专项整治实施方案,进一步强化宗旨意识,从政治站位上找差距,从思想深处找根源,从工作落实上找不足,从责任担当上找缺失。集中开展问题治理,对调硏发现的重点问题、群众反映强烈的问题和专项整治的问题列出清单、建立台账,逐条研究制定具体的解决办法和整改方案,有序有力抓整改,确保整改到位。
\r\n2.坚持立行立改。坚持把“改”字贯穿始终,注重将学习教育、调查研究和检视反思发现的问题纳入其中,明确整改任务。召开专项整治工作推进会议,对调研发现的问题、群众反映的问题、自身查找的问题列出清单、建立台账,逐条研究制定具体的解决办法和整改措施,能够当下改的,立行立改、即知即改,确保各项问题整改全部落实到位。
\r\n3.高质量开好专题民主生活会。高度重视、精心筹备、进一步认真开展学习、广泛征集意见,深入谈心交心,严格査摆问题并撰写检视剖析材料,为高质量的召开民主生活会夯实基础。
\r\n
\r\n', '', '', '1.62.164.183'), +(254, 10, '        11月7日上午,省能源院召开全体职工大会,学习贯彻落实传达党的十九届四中全会精神,全文学习了中国共产党第十九届中央委员会第四次全体会议公报,会议由能源院党委书记、院长徐晓秋同志主持。
\r\n       会议要求全体职工,坚持以马克思列宁主义、毛泽东思想、邓小平理论、“三个代表”重要思想、科学发展观、习近平新时代中国特色社会主义思想为指导,全面贯彻党的十九届四中全会精神,准确把握大局,着力抓好发展,攻坚克难、砥砺前行,推动能源院科研事业取得新的进展。
\r\n
\r\n \"\"
\r\n', '', '', '1.62.164.183'), +(255, 10, '          10月24日,按照省委“不忘初心、牢记使命”主题教育领导小组办公室《关于转发<关于认真做好《榜样4》专题节目学习收看工作的通知>的通知》和省科学院机关党委通知要求,省能源院组织全体党员干部,集体观看《榜样4》。
\r\n        《榜样4》讲述了“本色英雄”张富清、“吃亏”书记李连成、“扶贫之花”黄文秀、“大湖鸿雁”唐真亚、“环卫天使”李萌、扶贫“硬汉”隋耀达、揽月“天团”嫦娥四号参研参试人员群体代表的感人故事,彰显了优秀共产党员坚定入党初心、无私敬业奉献、热心服务群众的精神风貌,深刻诠释了中国共产党人不忘初心、牢记使命的执着坚守。
\r\n        全体党员干部纷纷表示深受感动和鼓舞,作为一名共产党员,要以榜样为镜,在以后的工作中自觉向榜样看齐,自足本职、主动作为、敢于担当。
\r\n
\r\n \"\"
\r\n', '', '', '1.62.164.183'), +(256, 10, '         2019年8月11-15日,“2019年刚果(金)环保和可持续发展研修班”在哈尔滨举办。本次研修班由商务部主办,农业农村部沼气科学研究所承办,共有25名来自刚果(金)政府部门、企业协会、基金会的官员和学者参加了此次培训,黑龙江省能源环境研究院作为协办单位组织了本次研修班。
\r\n        8月12日,研修班在徐晓秋院长和方正县农业局的陪同下来到了得莫利镇,参观了得莫利镇垃圾处理中心,鼎地科技公司技术人员对ERCM垃圾处理示范项目给研修班学员进行了详细讲解。
\r\n        8月13日,研修班参观了黑龙江省能源环境研究院生物质能实验室,生物质能团队刘伟副研究员对实验室的研究领域、研究内容进行了详细介绍,并与研修班学员进行了细致交流。
\r\n        8月14日,生物质能团队王欣副研究员做了“城市固废处理的方法和技术”的专题培训报告,普及了中国先进的城市固废处理技术,对研修班学员的提问做了专业解答。
\r\n        通过此次培训,加强了能源院在有机固废处理领域的宣传力度,为“一带一路”发展中国家的发展提供了帮助。
\r\n
\r\n \"\"
\r\n \"\"
\r\n
\r\n', '', '', '1.62.164.183'), +(257, 10, '
\r\n        为贯彻落实张庆伟同志《在全省工业强省暨产业发展大会上的讲话》精神和《黑龙江省委、省政府关于加快煤炭资源型城市转型推动高质量发展的指导意见》,进一步做好低热值固废(煤矸石)燃烧项目对接工作,应七台河市相关企业要求,2019年10月20日至23日省科学院能源环境研究院徐晓秋院长带队,由七台河市科技局牵头市直部门及七台河市吉伟煤焦有限公司、黑龙江省德利能源股份有限公司、亿达信煤焦化能源有限公司、联顺能源有限责任公司等相关企业赴湖南乾能新能源科技开发有限公司、江西省萍乡市安源电厂等地对低热值固废(煤矸石)燃烧(35吨—40吨)项目进行实地考察。
\r\n\"\"\"\"\r\n
\r\n \"\"
\r\n', '', '', '1.62.246.42'), +(260, 10, '         为进一步深入开展“不忘初心、牢记使命”主题教育活动,7月4日,黑龙江省能源环境研究院党委组织全体党员和部分党外人士参观北大荒博物馆,学习践行“艰苦奋斗、勇于开拓、顾全大局、无私奉献”的北大荒精神。
\r\n       通过此次参观学习,大家都深刻体会到几代北大荒人献青春、献终身的无私伟大,大家纷纷表示本次活动不仅是一次学习教育,更是一次深刻的精神洗礼,应铭记历史,在今后工作生活中继续弘扬北大荒精神,初心不改,敢担当、顾大局、乐于奉献、奋勇向前!

\r\n', '', '', '1.62.246.42'), +(258, 10, '        8月21日上午,省能源院组织全体党员干部,集体学习省委关于《切实加强党的建设、严明党的政治纪律和政治规矩》主题教育宣传片,“不忘初心、牢记使命”主题教育活动开展以来,省能源院党委始终把党的政治建设摆在突出位置,坚定政治信仰、增强“四个意识”、维护党中央权威和集中统一领导、严明党的政治纪律和政治规矩、加强和规范新形势下党内政治生活,确保在各项工作中取得实效。\r\n
\r\n \"\"
\r\n', '', '', '1.62.246.42'), +(259, 10, '           7月10日,省能源院党委组织全体党员干部与党建联系点省科学院人事处党支部共赴纪录片《楷模》中尚志市元宝村,开展观《丰碑》,学《楷模》,促“双提”,助落地主题教育活动。
\r\n        上午10时许,全体人员来到抗日烈士赵尚志赵一曼纪念馆,追寻英雄足迹,缅怀英雄事迹,深刻感受革命先烈不怕牺牲、艰苦奋斗、矢志报国的爱国情怀。
\r\n        下午13时许,全体人员抵达“中国土改文化第一村”元宝镇元宝村,受到了元宝村村委会成员的亲切接待,村总支张宝金书记对我们的到来表示热烈欢迎。全体人员参观了以作家周立波长篇小说命名的暴风骤雨纪念馆,深入了解土地改革运动,以及改革前后元宝村发生的翻天覆地的变化,并重温入党誓词,以坚定有力的宣誓表达时刻不忘初心、牢记使命的信念和决心。随后全体人员在元宝村围绕活动主题现场召开了“不忘初心、牢记使命”主题座谈会,并参观了元宝村雪莲笔业有限公司。
\r\n\"\"\"\"
\r\n\"\"\"\"

\r\n
\r\n', '', '', '1.62.246.42'), +(261, 10, '           根据中央、省委和省科学院党组关于开展“不忘初心,牢记使命”主题教育相关部署,省能源院迅速响应,组织全体党员干部,以主题教育为主导,将各项工作全面推向深入。
\r\n        1.6月13日,省能源院召开全体党员大会暨省能源院“不忘初心、牢记使命”主题教育启动会,省能源院领导班子,全体党员参加会议,会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n会议深入学习贯彻落实了中央、省委及省科学院关于开展“不忘初心、牢记使命”主题教育各项工作精神,全文学习了《关于开展“不忘初心、牢记使命”主题教育实施方案》、赵梅书记重要讲话精神、第九巡回督导组组长刘杰同志讲话精神。会议强调,要紧跟上级主题教育各项步伐,根据相关要求,迅速制定实施方案,准确把握目标要求,明确学习内容,强加组织领导,以上率下,层层传导,各支部要严格按照方案要求,切实行动起来,确保主题教育高质量完成。
\r\n        2.6月14日,省能源院召开党委会议,为保障主题教育全面开展,成立“不忘初心、牢记使命”主题教育领导小组,研讨制定省能源环境研究院“不忘实心、牢记使命”主题教育理论学习方案。
\r\n        省能源院党委书记、院长徐晓秋同志在会议中指出:一要提高认识站位。要站在战略和全局的高度,充分认识主题教育的重要意义,坚定不移贯彻落实中央、省委和省科学院的部署要求,把理论学习作为严肃党内政治生活、强化党性修养的重要举措,切实把学习任务落到实处。二要突出学习重点。要坚持以学习贯彻习近平总书记系列重要讲话精神为重点,以学习贯彻习近平新时代中国特色社会主义思想为首要任务,原原本本学、原汁原味学,结合“不忘初心、牢记使命”主题教育,对标思想和工作实际,明方向、找差距、定措施,提升境界,改进工作。三要创新学习形式。要根据学习内容及实际情况,不断改进学习方式和拓展学习载体。坚持把个人自学思考与集体学习研讨相结合、把理论学习与专题调研相结合、把常规学习与线上学习相结合,进一步增强学习的吸引力、感染力。积极拓宽学习渠道、丰富学习手段,运用网络、移动新媒体、客户端等新技术新应用,不断激发学习兴趣,提高学习的主动性和自觉性。
\r\n        3.6月21日,根据省科学院相关要求和省能源院理论学习方案安排,组织全体党员干部集体观看纪录片《丰碑》(抗联精神,北大荒精神,大庆铁人精神)、《楷模》(于海河,张宝金,张秀林,星火变电所,前哨林场)、《英雄的本色-张富清》、《初心无悔-马旭》,省能源院全体党员干部身受感动与鼓舞,会后主动撰写观后感,纷纷表示,这些英雄和楷模经在经历困难和面对牺牲时,心中始终怀揣着共产党人坚定不移的共产主义信念以及不畏艰难、不怕牺牲的大无畏精神,是共产党人舍己为公、无私奉献、忠诚担当的高贵品质,是共产党人为人民谋幸福、为民族谋复兴的高尚情怀,是所有共产党员学习的楷模和标准。回顾过去的艰苦创业、奋斗历程和光辉成就,是为了坚定今天的理想信念,激励全省党员干部不忘初心、牢记使命,锐意进取、担当作为,不断开创龙江全面振兴全方位振兴新局面。
\r\n        4.6月26日,省能源院召开党委中心组学习扩大会议,党委委员、支部书记参加会议。党委书记、院长徐晓秋同志主持并领学习近平关于“不忘初心,牢记使命”重要论述选编中《走的再远都不能忘记来时的路》《党必须勇于自我革命》。副院长关春玲同志领学习近平关于“不忘初心,牢记使命”重要论述选编中《牢固树立“四个意识”,维护党中央权威》《坚持和发展中国特色社会主义要一以贯之》,徐晓秋同志强调,全体党员干部要提高政治站位,增强思想自觉、政治自觉、行动自觉。开展主题教育是初心所在,是党心所系,是民心所向,党员领导干部只有打牢思想之基,不断增强“四个意识”、坚定“四个自信”、做到“两个维护”,才能确保改革发展沿着正确方向前进;只有勇于自我革命,坚持不懈地推动全面从严治党向纵深发展,才能全身心的投入改革发展大业中去;只有牢固树立群众观念、自觉践行群众路线,才能使职工群众满意,最终凝聚成砥砺奋进的强大力量。
\r\n\"\"\"\"
\r\n
\r\n \"\"
\r\n', '', '', '1.62.246.42'), +(262, 10, '
\r\n         2019年11月30日,由黑龙江省能源环境学会主办,黑龙江省能源环境研究院承办的“2019黑龙江省能源环境学会第五届学术年会暨生态文明建设与资源环境技术研讨会”在哈尔滨北大荒国际饭店举行。
\r\n
\r\n         省科协学会部吕强部长到会,并发表贺词。他感谢省能源环境学会对科协工作的支持,对学会的发展壮大表示祝贺,对今后加强学会建设、促进创新驱动助力龙江发展等方面提出殷切希望。会议以“生态文明建设与资源环境”为主题,特邀了哈尔滨工业大学马放教授、城市水资源开发利用(北方)国家工程研究中心陈志强教授、黑龙江省农业科学院农村能源与环保研究所刘杰研究员、黑龙江八一农垦大学王伟东教授、黑龙江省能源环境研究院王志成研究员级高工做会议主旨报告。
\r\n
\r\n         与会专家学者围绕“生态文明建设与资源环境技术”等方面,开展学术交流和研讨,探讨如何发挥资源环境技术的作用,促进我省生态文明建设,为龙江经济社会发展服务。
\r\n
\r\n         2019黑龙江省能源环境学会学术年会在浓重的学术氛围中取得了圆满成功。
\r\n
\r\n
\r\n
\r\n \"\"
\r\n
\r\n  
\r\n', '', '', '1.58.195.247'), +(263, 10, '      2019年12月31日,省能源院召开2019年度总结大会,院领导班子,全体职工参加会议,会议由省能源院党委书记、院长徐晓秋同志主持。
\r\n       会议认真总结了省能源院2019年各项工作情况,并对全体职工进行了年终考核。2019年在省科学院党组的正确领导下,省能源紧跟新时代奋斗新征程,以“双提行动”和“省科学院新时代科技创新发展规划”为工作重点,以全面推进高质量发展为总要求,不断发扬“双创争优”精神,明确发展目标、坚持发展战略,建团队、强机制,全体科研人员用品质和创新突破自我,真抓实干,勇于奉献,圆满完成了各项目标任务。
\r\n       随后开展了省能源院“学习强国”知识竞赛,竞赛分三个部分,分别为“持续巩固主题教育成果”;“不断夯实党建提升工程”;“突出党建全面引领中心工作”,此次活动意在提高全体干部职工善于学习、善于总结、善于提高的能力,激励干部职工不懈努力,为省能源院全面发展贡献力量。\r\n
\r\n \"\"\"\"
\r\n
\r\n  
\r\n 
\r\n', '', '', '113.4.115.84'), +(264, 10, '      1月3日下午,省科学院伍跃辉院长,人事处机、关党委相关同志一行莅临省能源院,对省能源院领导班子及成员进行年终考核,并指导工作。省能源院全体干部职工参加会议。
\r\n      省能源院党委书记、院长徐晓秋代表领导班子就省能源院2019年目标完成情况、重点亮点工作、改革情况、存在问题及取得成绩等方面向伍院长一行进行全面了汇报,随后班子成员就分管领域工作完成情况进行了汇报。伍院长对省能源院2019年度工作给予了充分肯定,高度评价省能源院领导班子在各项工作中发挥的强有力作用,指出省能源院班子、团队坚强有力、科研工作稳中创新,并希望省能源院在2020年取得更大的成绩。
\r\n      随后,为更好的调动和鼓舞广大干部职工干事创业的积极性和创造性,伍院长为省能源院在创新发展中取得显著业绩获得表彰的先进个人颁奖。
\r\n      \"\"\"\"
\r\n 

\r\n', '', '', '113.4.115.84'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `dede_archives` +-- + +CREATE TABLE `dede_archives` ( + `id` mediumint(8) UNSIGNED NOT NULL DEFAULT '0', + `typeid` smallint(5) UNSIGNED NOT NULL DEFAULT '0', + `typeid2` varchar(90) NOT NULL DEFAULT '0', + `sortrank` int(10) UNSIGNED NOT NULL DEFAULT '0', + `flag` set('c','h','p','f','s','j','a','b') DEFAULT NULL, + `ismake` smallint(6) NOT NULL DEFAULT '0', + `channel` smallint(6) NOT NULL DEFAULT '1', + `arcrank` smallint(6) NOT NULL DEFAULT '0', + `click` mediumint(8) UNSIGNED NOT NULL DEFAULT '0', + `money` smallint(6) NOT NULL DEFAULT '0', + `title` char(255) NOT NULL, + `shorttitle` char(36) NOT NULL DEFAULT '', + `color` char(7) NOT NULL DEFAULT '', + `writer` char(20) NOT NULL DEFAULT '', + `source` char(30) NOT NULL DEFAULT '', + `litpic` char(100) NOT NULL DEFAULT '', + `pubdate` int(10) UNSIGNED NOT NULL DEFAULT '0', + `senddate` int(10) UNSIGNED NOT NULL DEFAULT '0', + `mid` mediumint(8) UNSIGNED NOT NULL DEFAULT '0', + `keywords` char(30) NOT NULL DEFAULT '', + `lastpost` int(10) UNSIGNED NOT NULL DEFAULT '0', + `scores` mediumint(8) NOT NULL DEFAULT '0', + `goodpost` mediumint(8) UNSIGNED NOT NULL DEFAULT '0', + `badpost` mediumint(8) UNSIGNED NOT NULL DEFAULT '0', + `voteid` mediumint(8) NOT NULL, + `notpost` tinyint(1) UNSIGNED NOT NULL DEFAULT '0', + `description` varchar(255) NOT NULL DEFAULT '', + `filename` varchar(40) NOT NULL DEFAULT '', + `dutyadmin` mediumint(8) UNSIGNED NOT NULL DEFAULT '0', + `tackid` int(10) NOT NULL DEFAULT '0', + `mtype` mediumint(8) UNSIGNED NOT NULL DEFAULT '0', + `weight` int(10) NOT NULL DEFAULT '0' +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- 转存表中的数据 `dede_archives` +-- + +INSERT INTO `dede_archives` (`id`, `typeid`, `typeid2`, `sortrank`, `flag`, `ismake`, `channel`, `arcrank`, `click`, `money`, `title`, `shorttitle`, `color`, `writer`, `source`, `litpic`, `pubdate`, `senddate`, `mid`, `keywords`, `lastpost`, `scores`, `goodpost`, `badpost`, `voteid`, `notpost`, `description`, `filename`, `dutyadmin`, `tackid`, `mtype`, `weight`) VALUES +(8, 10, '0', 1364455080, 'p,f', 1, 1, 0, 220, 0, '我院与黑龙江科技大学签订科研合作与人才培养协议', '', '', '李福裿', '综合办', '/kjfh/uploads/130628/1-13062Q0313c11.jpg', 1364455080, 1372384851, 1, '黑龙江省,能源,环境,研究院,与,黑龙江,科技,', 0, 0, 0, 0, 0, 0, '黑龙江省能源环境研究院与黑龙江科技大学 签订科研合作与人才培养协议 为了更好的促进科研院所与高校之间资源的优势互补,黑龙江省能源环境研究院与黑龙江科技大学科技合作签约', '', 1, 0, 0, 5), +(9, 10, '0', 1364023020, 'p,f', 1, 1, -2, 123, 0, '中国绿色农业联盟刘连馥主席赴大庆杜尔伯特考察省科学院科技孵化中心生物质能源示范项目', '', '', '李福裿', '综合办', '/kjfh/uploads/130628/130628/1-13062Q12211928.jpg', 1364023020, 1372389432, 1, '中国,绿色农业,联盟,刘连馥,主席,赴,大庆,', 0, 0, 0, 0, 0, 0, '中国绿色农业联盟刘连馥主席赴大庆杜尔伯特考察 省科学院科技孵化中心生物质能源示范项目 中国绿色农业联盟刘连馥主席及国家财政部农发办项目审批专家组组长、华南农大食品学', '', 1, 0, 0, 1), +(10, 16, '0', 1368158040, 'p,f', 1, 1, -2, 96, 0, '我院职工赴杜尔伯特基地开展五四活动', '', '', '李福裿', '综合办', '/kjfh/uploads/allimg/130630/1-1306301149150-L.jpg', 1368158040, 1372564180, 1, '我院,职工,赴,杜尔伯特,基地,开展,五四,活动,', 0, 0, 0, 0, 0, 0, '黑龙江省能源环境研究中心(孵化中心)赴杜尔伯特基地开展五四活动 黑龙江省能源环境研究院(孵化中心)全体职工,于5月10日到位于大庆市杜尔伯特蒙古族自治县的黑龙江省科学院', '', 1, 0, 0, 2), +(11, 10, '0', 1367911020, '', 1, 1, -2, 88, 0, '黑龙江省科学院产业化处到省能源环境研究院产业化基地调研', '', '', '李福裿', '综合办', '', 1367911020, 1372564661, 1, '黑龙江省,科学院,产业化,处,到,省,能源,环境,', 0, 0, 0, 0, 0, 0, '2013年5月7日,省科学院产业化处孙宇峰处长、范延新副处长、李晓辉副处长在省能源环境研究院院长徐晓秋同志的陪同下来到位于双城的M15车用甲醇汽油复合添加剂产业化基地进行调研', '', 1, 0, 0, 3), +(12, 10, '0', 1370589360, 'p,f', 1, 1, 0, 66, 0, '“领导关怀,实地解决问题”黑龙江省科学院潘忠院长一行到能源院召开现场会', '', '', '李福裿', '综合办', '/kjfh/uploads/allimg/130630/1-1306301202010-L.jpg', 1370589360, 1372565081, 1, '“,领导关怀,实地,解决问题,”,黑龙江省,', 0, 0, 0, 0, 0, 0, '2013年6月7日,潘忠院长率部分领导班子成员及相关处室负责人一行12人赴能源院(孵化中心)召开现场办公会议。能源院(孵化中心)班子成员、各部门负责人、副高职以上人员参加了', '', 1, 0, 0, 4), +(13, 10, '0', 1372557420, 'p', 1, 1, 0, 116, 0, '“磨练意志 以球会友”技术物理研究所与能源环境研究院篮球友谊赛', '', '', 'admin', '综合办', '/kjfh/uploads/allimg/130630/1-130630120Z0I3-lp.jpg', 1372557420, 1372565453, 1, '“,磨练意志,以,球,会友,”,技术,物理,研究所,', 0, 0, 0, 0, 0, 0, '为丰富职工业余文化生活,增强兄弟院所之间的交流与合作,提高研究院所团队的协作能力,6月5日下午,省科学院技术物理研究所与能源环境研究院(孵化)共同进行了一场篮球友谊', '', 1, 0, 0, 5), +(14, 10, '0', 1371107760, 'p,f', 1, 1, -2, 75, 0, '“探索新路、实现合作”我院与俄罗斯“梅索-克”科学生产应用中心实现科技合作', '', '', '李福裿', '综合办', '/kjfh/uploads/allimg/130630/1-1306301221320-L.jpg', 1371107760, 1372566247, 1, '“,探索新路,、,实现,合作,”,我院,与,俄罗斯,', 0, 0, 0, 0, 0, 0, '2013年06月13日,省能源环境研究院(孵化中心)院长及相关科室人员在能源院(孵化中心)会议室会见了俄罗斯梅索-克科学生产应用中心总经理杰诺夫.尼古拉.杰奥里耶维奇博士一行二', '', 1, 0, 0, 6), +(15, 10, '0', 1372583640, 'p,f', 1, 1, 0, 161, 0, '“携手同行 共圆大科学院梦”省科学院自动化研究所与能源院帽儿山活动小记', '', '', '李福裿', '综合办', '/kjfh/uploads/allimg/130630/1-130630122P40-L.png', 1372583640, 1372566696, 1, '“,携手同行,共圆,大,科学院,梦,”,省,自动化,', 0, 0, 0, 0, 0, 0, '​为了更好的完成收官之年的各项工作,增强干劲,凝心聚力,鼓舞势气,使大家能够在紧张而忙碌的工作中,放松心情、愉悦身心,同时为加强科学院各兄弟院所之间的感情,6月14日', '', 1, 0, 0, 7), +(16, 27, '0', 1372657500, '', 1, 1, 0, 126, 0, '工厂化厌氧沼气发电控制系统仿真平台的开发研究', '', '', '李福裿', '综合办', '', 1372657500, 1372627302, 1, '工厂化,厌氧,沼气,发电,控制系统,仿真,平台,', 0, 0, 0, 0, 0, 0, '工厂化厌氧沼气发电控制系统仿真平台以加拿大阿尔伯塔研究院集成粪便综合利用系统(IMUS)设计工艺为基础,针对工业化沼气发电过程中,厌氧发酵工艺过程自动控制的复杂性和多样', '', 1, 0, 0, 8), +(17, 16, '0', 1353899760, 'p,f', 1, 1, 0, 111, 0, '认真学习贯彻十八大开创科研工作新局面', '', '', 'admin', '未知', '/uploads/allimg/130802/1-130P2111431507-lp.jpg', 1353899760, 1372628562, 1, '认真学习贯彻十八大开创科研工作新局面', 0, 0, 0, 0, 0, 0, '高举旗帜奋力开拓铸就辉煌业绩,领航中国信心满怀共创美好未来。举世瞩目的中国共产党第十八次全国代表大会在北京胜利闭幕以来,科技孵化中心掀起了深入学习、领会和贯彻十八', '', 1, 0, 0, 9), +(18, 16, '0', 1372821420, '', 1, 1, 0, 173, 0, '七一表彰的通知', '', '', 'admin', '未知', '', 1372821420, 1372629454, 1, '七一,表彰,的,通知,为,促进省,科学院,创新,', 0, 0, 0, 0, 0, 0, '为促进省科学院创新2020发展规划实施,确保三年目的全面实现,根据黑龙江省科学院关于《七一表彰的通知》的相关要求,通过全体党员投票,选举产生孵化中心支部为先进党组织,王', '', 1, 0, 0, 10), +(19, 27, '0', 1372657500, '', 1, 1, 0, 141, 0, 'M15车用甲醇汽油复合添加剂', '', '', '李福裿', '综合办', '', 1372657500, 1372630211, 1, 'M15,车用,甲醇,汽油,复合,添加剂,《,', 0, 0, 0, 0, 0, 0, '《M15车用甲醇汽油复合添加剂》是含有辛烷值增强剂、动力增强剂、金属腐蚀抑制剂、橡胶溶胀抑制剂、助燃剂和助溶剂的复合添加剂。通过互配性试验、溶解性试验、辛烷值加和性和', '', 1, 0, 0, 11), +(20, 27, '0', 1372657500, '', 1, 1, 0, 203, 0, '大掺量甲醇汽油催化燃烧技术', '', '', '李福裿', '综合办', '', 1372657500, 1372630387, 1, '大掺,量,甲醇,汽油,催化,燃烧,技术,技术,特点,', 0, 0, 0, 0, 0, 0, '技术特点: 催化剂包括能量及辛烷值增强组份,自溶合组份、尾气净化组份等。 M45甲醇汽油合成工艺研究,采用化学自溶合技术,甲醇、催化剂、汽油三种物质不需要搅拌,即可相互溶', '', 1, 0, 0, 12), +(21, 27, '0', 1372657440, '', 1, 1, 0, 103, 0, '直贮热太阳能技术', '', '', '李福裿', '综合办', '', 1372657440, 1372630972, 1, '热太阳能技术', 0, 0, 0, 0, 0, 0, '新能源是二十一世纪世界经济发展中最具决定力的五大技术领域之一。太阳能是一种清洁、高效和永不衰竭的新能源。在新世纪中,各国政府都将太阳能资源利用作为国家可持续发展战', '', 1, 0, 0, 13), +(22, 27, '0', 1372657440, '', 1, 1, 0, 77, 0, '油页岩中有机质的分离和分析', '', '', '李福裿', '综合办', '', 1372657440, 1372631153, 1, '油页岩,中,有机,质的,分离,和,分析,油页岩,', 0, 0, 0, 0, 0, 0, '油页岩作为非常规能源,已成为当前世界范围内开发利用的热点,由于油页岩的组成和结构的未知使得油页岩的开发、利用手段单一。如何提高其有效利用途径,发挥其在能源和化工原', '', 1, 0, 0, 14), +(23, 27, '0', 1372657380, '', 1, 1, 0, 90, 0, '集成牛粪便综合利用系统', '', '', 'admin', '未知', '', 1372657380, 1372631299, 1, '集成,牛,粪便,综合利用,系统,集成,粪便,', 0, 0, 0, 0, 0, 0, '集成粪便综合利用系统(IMUS)是阿尔伯塔研究院开发的工业化封闭环式沼气系统,它采用独特的高温消化技术,将畜禽粪便转换为能源、生物肥料和可再利用的水,通过高温厌氧发酵来', '', 1, 0, 0, 15), +(24, 17, '0', 1372637700, 'p', 1, 1, 0, 77, 0, 'The Catcher in the Rye', '', '', 'admin', '未知', '/kjfh/uploads/130701/1-130F10F219336.jpg', 1372637700, 1372632968, 1, 'The,Catcher,the,Rye,The,Catche', 0, 0, 0, 0, 0, 0, '麦田里的守望者(The Catcher in the Rye)简介: The Catcher in the Rye is a 1951 novel by J. D. Salinger. Originally published for adults, it has been translated into almost all of the worlds major languages. Around 250,000 copies ar', '', 1, 0, 0, 16), +(25, 17, '0', 1372613640, 'p', 1, 1, 0, 192, 0, 'The Old Man and the Sea', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130701/1-130F10F5120-L.jpg', 1372613640, 1372633553, 1, 'The,Old,Man,and,the,Sea,老人与海,T', 0, 0, 0, 0, 0, 0, '老人与海(The Old Man and the Sea)简介: 这本书讲了古巴的一个名叫圣地亚哥的老渔夫,独自一个人出海打鱼,在一无所获的84天之后钓到了一条无比巨大的马林鱼。这是老人从来没见过也没', '', 1, 0, 0, 17), +(26, 17, '0', 1372633598, 'p', 1, 1, 0, 98, 0, 'Pride and Prejudice', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130701/1-130F10FA90-L.jpg', 1372633598, 1372633646, 1, 'Pride,and,Prejudice,傲慢与偏见,Prid', 0, 0, 0, 0, 0, 0, '傲慢与偏见(Pride and Prejudice)简介: Few have failed to be charmed by the witty and independent spirit of Elizabeth Bennet. Her early determination to dislike Mr. Darcy is a prejudice only matched by the folly of his arrogant pride', '', 1, 0, 0, 18), +(27, 17, '0', 1372633736, 'p', 1, 1, 0, 162, 0, 'Who Moved My Cheese', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130701/1-130F10FZ30-L.jpg', 1372633736, 1372633793, 1, 'Who,Moved,Cheese,谁,动了,我的,奶酪,Wh', 0, 0, 0, 0, 0, 0, '谁动了我的奶酪(Who Moved My Cheese)简介: Change can be a blessing or a curse, depending on your perspective. The message of Who Moved My Cheese? is that all can come to see it as a blessing, if they understand the nature of chees', '', 1, 0, 0, 19), +(28, 14, '0', 1372647488, 'p', 1, 1, -2, 79, 0, '科研人员档案', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130701/1-130F11046360-L.jpg', 1372647488, 1372647138, 1, '罗向东,罗,向东,罗向东,罗,向东,1989年,毕,', 0, 0, 0, 0, 0, 0, '罗向东,1989年毕业于国防科技大学应用物理系,黑龙江省能源环境研究院(孵化中心)工程实验室主任,研究员。 具有本专业广博、坚实的基础理论知识,并有深入的研究和独到的见', '', 1, 0, 0, 20), +(29, 14, '0', 1372647199, 'p', 1, 1, -2, 107, 0, '科研人员档案', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130701/1-130F11055020-L.jpg', 1372647199, 1372647362, 1, '科研,人员,档案,王志成,王,志成,1973年,出生,', 0, 0, 0, 0, 0, 0, '王志成,1973年出生,学士,研究员级高级工程师,能源化学省级领军人才梯队后备带头人,省级燃油燃煤清洁能源重点实验室成员,省能源环境研究院科研与产业化办公室主任,环境科', '', 1, 0, 0, 21), +(30, 27, '0', 1213940820, 'p', 1, 1, 0, 163, 0, '褐煤催化提炼轻质燃料油及石油干气技术', '', '', '李福裿', '综合办', '/kjfh/uploads/allimg/130703/1-130F3142624405.jpg', 1213940820, 1372832893, 1, '褐煤,催化,提炼,轻质,燃料油,及,石油,干气,我,', 0, 0, 0, 0, 0, 0, '我研究院经过6年的努力攻关,采用低档褐煤做原料,通过采用催化低温热裂解国家发明专利技术,成功地从褐煤中催化提炼出20.4%轻质燃料油、9.2%石油干气及70.4%焦炭。轻质燃料油经过', '', 1, 0, 0, 22), +(31, 10, '0', 1351062900, '', 1, 1, 0, 90, 0, '能源院省级重点实验室通过省科技厅评估认定', '', '', '李福裿', '综合办', '', 1351062900, 1372833115, 1, '能源,院,省级,重点,实验室,通过省,科技厅,', 0, 0, 0, 0, 0, 0, '2012年5月,在院领导班子高度重视及各部门的大力配合下,能源院省级重点实验室-燃油燃煤清洁能源重点实验室参加了黑龙江省科技厅展开的省级各类科技平台评估认定工作,经自评申', '', 1, 0, 0, 23), +(32, 27, '0', 1197957360, '', 1, 1, 0, 166, 0, '奥里油或超重质沥青蒸馏轻质燃料油技术研究及产业化项目', '', '', '李福裿', '综合办', '', 1197957360, 1372906304, 1, '国家,振兴东北,老,工业,基地,科技,专项,—,由,', 0, 0, 0, 0, 0, 0, '由黑龙江省能源环境研究院承担的国家振兴东北老工业基地科技专项奥里油或超重质沥青蒸馏轻质燃料油技术研究及产业化项目,2007年12月18日,圆满通过国家验收。 该技术不采用传统', '', 1, 0, 0, 24), +(36, 27, '0', 1204524240, 'p', 1, 1, 0, 130, 0, '国家“九五”重点科技攻关计划——化学脱硫技术工业试验及性能考核', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130707/1-130FH11334T9.jpg', 1204524240, 1373202916, 1, '国家,“,九五,”,重点,科技,攻关计划,—,化学,', 0, 0, 0, 0, 0, 0, '我研究院承担的国家九五重点科技攻关计划化学脱硫技术工业试验及性能考核[课题任务书编号(96- A19-02-05)], 在邹家华副委员长和国家环保总局解振华局长的关怀和支持下,完成了在', '', 1, 0, 0, 28), +(35, 15, '0', 1164956520, 'p', 1, 1, -2, 59, 0, '棕榈毛油直接法转换生物柴油及催化燃烧技术', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130704/1-130F41223151b-lp.jpg', 1164956520, 1372921309, 1, '棕榈,毛油,直接,法,转换,生物,柴油,及,催化,', 0, 0, 0, 0, 0, 0, '棕榈毛油直接法转换生物柴油及催化燃烧技术,是黑龙江省能源环境研究院自主研发并完全拥有该技术知识产权的创新技术。生物柴油是被当前世界公认的石化柴油的友好替代燃料,是', '', 1, 0, 0, 27), +(33, 27, '0', 1173938880, '', 1, 1, 0, 58, 0, '国家“十五”科技攻关计划——工业锅炉脱硫试验与性能考核', '', '', '李福裿', '综合办', '', 1173938880, 1372906729, 1, '国家,“,十五,”,科技,攻关计划,—,工业,锅炉,', 0, 0, 0, 0, 0, 0, '由黑龙江省能源环境研究院承担的国家十五科技攻关计划 工业锅炉脱硫试验与性能考核项目,2007年1月,圆满通过国家验收。 该技术已在山西省工业锅炉上应用,脱硫率高达95%。经法定', '', 1, 0, 0, 25), +(34, 27, '0', 1165903500, '', 1, 1, -1, 56, 0, '国际科技合作项目——中加沙油炼制技术合作研究', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130704/1-130F4110353502-lp.jpg', 1165903500, 1372907065, 1, '国际,科技,合作项目,—,中,加沙,油,炼制,', 0, 0, 0, 0, 0, 0, '黑龙江省能源环境研究院历时两年,圆满完成国家政府间国际科技合作项目中加沙油炼制技术合作研究。我院科技人员研发了加拿大沙油在非高压不加氢气的条件下,蒸馏出轻质燃料油', '', 1, 0, 0, 26), +(37, 27, '0', 1204524240, 'p', 1, 1, 0, 170, 0, '国家“十五”重点科技攻关计划——清洁能源项目', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130707/1-130FH1204H08-lp.jpg', 1204524240, 1373203428, 1, '国家,“,十五,”,重点,科技,攻关计划,—,注,', 0, 0, 0, 0, 0, 0, '注:黑龙江省能源环境研究院原名为黑龙江省节油技术开发中心 我研究院与清华、中科院工程热物理所、国家电力公司西安热工院、国家电站工程技术研究中心、中国洁净煤中心等国家', '', 1, 0, 0, 29), +(38, 27, '0', 1204524180, 'p', 1, 1, 0, 204, 0, '国家“十五”重点科技攻关计划—工业锅炉脱硫试验与性能考核', '', '', '李福裿', '综合办', '/kjfh/uploads/allimg/130707/1-130FH12F2263-lp.jpg', 1204524180, 1373203731, 1, '国家,“,十五,”,重点,科技,攻关计划,—,工业,', 0, 0, 0, 0, 0, 0, '《工业锅炉脱硫试验与性能考核》是国家十五期间化学脱硫课题的深化研究,脱硫效率进一步提高。燃煤锅炉烟气中污染物排放达到国家《锅炉大气污染物排放标准》要求,烟气中SO2排', '', 1, 0, 0, 30), +(39, 27, '0', 1204523880, 'p', 1, 1, 0, 174, 0, '奥里油或超重质沥青蒸馏轻质燃料油技术研究', '', '', '李福裿', '综合办', '/kjfh/uploads/allimg/130707/1-130FH13314330-lp.jpg', 1204523880, 1373204177, 1, '奥里,油,或,超重,质,沥青,蒸馏,轻质,燃料油,', 0, 0, 0, 0, 0, 0, '奥里油或超重质沥青是应用常规技术提炼出汽、煤、柴油等石化产品后的终极产品,目前,国内外都是采用高温、高压、加氢气方法从奥里油或超重质沥青中加工轻质燃料油。我院研制', '', 1, 0, 0, 31), +(40, 13, '0', 1149775560, 'p', 1, 1, -2, 104, 0, 'M30车用甲醇汽油技术', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130707/1-130FH15TU30-lp.jpg', 1149775560, 1373205647, 1, 'M30,车用,甲醇,汽油,技术,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 32), +(41, 27, '0', 1149775860, 'p', 1, 1, 0, 86, 0, '奥里油转化轻质燃料油技术', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130707/1-130FH2192T55-lp.jpg', 1149775860, 1373206842, 1, '奥里,油,转化,轻质,燃料油,技术,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 33), +(42, 27, '0', 1149776400, 'p', 1, 1, 0, 139, 0, '含油岩石提炼轻质燃料油技术', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130707/1-130FH2261a52-lp.jpg', 1149776400, 1373207237, 1, '含油,岩石,提炼,轻质,燃料油,技术,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 34), +(43, 27, '0', 1149776820, 'p', 1, 1, 0, 77, 0, '石脑油转化高性能燃料', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130707/1-130FH23024364-lp.jpg', 1149776820, 1373207522, 1, '石脑油,转化,高性能,燃料,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 35), +(44, 13, '0', 1149777120, 'p', 1, 1, -2, 64, 0, 'M65型车用甲醇汽油技术', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130707/1-130FH235301X-lp.jpg', 1149777120, 1373207774, 1, 'M65,型,车用,甲醇,汽油,技术,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 36), +(45, 13, '0', 1149777360, 'p', 1, 1, -2, 116, 0, 'M18型车用甲醇汽油技术', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130707/1-130FH23910G3-lp.jpg', 1149777360, 1373207983, 1, 'M18,型,车用,甲醇,汽油,技术,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 37), +(46, 13, '0', 1149777660, 'p', 1, 1, -2, 117, 0, 'M20型车用甲醇汽油技术', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130707/1-130FH24211416-lp.jpg', 1149777660, 1373208167, 1, 'M20,型,车用,甲醇,汽油,技术,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 38), +(47, 9, '0', 1375410076, '', 1, 1, 0, 113, 0, '新版网站上线', '', '', 'admin', '未知', '', 1375410076, 1375234895, 1, '通知,通知,', 0, 0, 0, 0, 0, 0, '能源环境研究院(孵化中心)新版网站现已重新上线啦!', '', 1, 0, 0, 39), +(149, 10, '0', 1445228400, 'p,f', 1, 1, 0, 157, 0, '黑龙江省能源环境学会成立大会暨首届学术年会在哈顺利召开', '', '', 'admin', '未知', '/uploads/allimg/151021/1-15102112162D17.jpg', 1445228400, 1445401129, 1, '黑龙江省,能源,环境,学会,成立,大会,暨,首届,', 0, 0, 0, 0, 0, 0, '2015年10月18日,黑龙江省能源环境学会成立大会暨首届学术年会在哈隆重举行。此次活动由省能源环境学会筹备委员会主办,省能源环境研究院、哈工大城市水资源与水环境国家重点实', '', 1, 0, 0, 137), +(49, 9, '0', 1376638307, '', 1, 1, -2, 139, 0, '关于举办万方数据平台使用培训的通知', '', '', '李福裿', '综合办', '', 1376638307, 1376637734, 1, '万方,数据,平台,使用,培训,高效,检索,与,文献,', 0, 0, 0, 0, 0, 0, '高效检索与文献分析万方数据知识服务平台使用详解培训大概定在本月20日或23日,请大家留意。', '', 1, 0, 0, 41), +(50, 9, '0', 1376292720, '', 1, 1, 0, 105, 0, '关于举办Triz理论讲座的通知', '', '', '李福裿', '综合办', '', 1376292720, 1376638156, 1, 'Triz,理论,讲座,通知,题目,Triz,理论,时间,8月', 0, 0, 0, 0, 0, 0, '题目:Triz理论 时间:8月16日下午1:00 地点:孵化中心8楼会议室 主讲:王志成 欢迎各位同事积极参加!', '', 1, 0, 0, 42), +(51, 10, '0', 1376640574, 'p,f', 1, 1, 0, 165, 0, '我院举办TRIZ科技创新讲座', '', '', '李福裿', '综合办', '/uploads/allimg/130816/1-130Q6160551549-lp.jpg', 1376640574, 1376640538, 1, '我院,举办,TRIZ,科技创新,讲座,8月,16日,我院,', 0, 0, 0, 0, 0, 0, '8月16日,我院在8楼会议室举办了TRIZ科技创新讲座,由环境科学研究室主任王志成同志进行宣讲。此次讲座是根据我院2013年的工作指示精神而安排,旨在加强和提升院科研人员的创新能', '', 1, 0, 0, 43), +(52, 9, '0', 1376895492, '', 1, 1, 0, 115, 0, '关于万方数据“高效检索与文献分析”专题培训的通知', '', '', '李福裿', '综合办', '', 1376895492, 1376895481, 1, '关于,万方,数据,“,高效,检索,与,文献,分析,', 0, 0, 0, 0, 0, 0, '培训主题:高效检索与文献分析万方数据知识服务平台使用详解 培训讲师:万方数据周雷 培训时间:2013年8月23日13:30---16:30 培训地点:嵩山路15号省科学院会议中心', '', 1, 0, 0, 44), +(53, 16, '0', 1376537220, '', 1, 1, 0, 145, 0, '倾听民意 关注发展', '', '', '李福裿', '综合办', '', 1376537220, 1377474873, 1, '倾听,民意,关注,发展,省,科学院,群众,', 0, 0, 0, 0, 0, 0, '--省科学院群众路线教育实践活动调研组到我院调研 8月15日下午,省科学院群众路线教育实践活动调研组,来到省能源环境研究院(孵化中心)召开听取群众意见调研会议。省能源环境', '', 1, 0, 0, 45), +(54, 17, '0', 1377579749, '', 1, 1, 0, 121, 0, '生物质能源发展趋势', '', '', 'admin', '能源化学研究室', '', 1377579749, 1377579732, 1, '生物质,能源,发展,趋势,生物质,能源,发展,', 0, 0, 0, 0, 0, 0, '生物质能源发展趋势', '', 1, 0, 0, 46), +(55, 17, '0', 1377579819, '', 1, 1, 0, 64, 0, '我国生物质能源的特点和发展方向', '', '', 'admin', '未知', '', 1377579819, 1377579960, 1, '我国,生物质,能源,的,特点,和,发展方向,请,', 0, 0, 0, 0, 0, 0, '请点击下载: 我国生物质能源的特点和发展方向', '', 1, 0, 0, 47), +(56, 10, '0', 1377593516, 'p,f', 1, 1, 0, 105, 0, '黑龙江省能源环境研究院与延寿县技术合作洽谈', '', '', '刘伟', '生物质能源实验室', '/uploads/allimg/130827/1-130RGA504317-lp.JPG', 1377593516, 1377593755, 1, '黑龙江省,能源,环境,研究院,与,延,寿县,2013年,', 0, 0, 0, 0, 0, 0, '2013年8月22日,应延寿县政协主席杨晓春的邀请,黑龙江省能源环境研究院院长徐晓秋、副院长关春玲同志以及科研办和财务办同志,一行五人来到延寿县交流访问。 徐晓秋院长一行受', '', 1, 0, 0, 48), +(57, 10, '0', 1381388940, 'p,f', 1, 1, 0, 112, 0, '能源环境研究院举办“马来西亚培训学习”经验交流会', '', '', '王志成', '环境科学与节能技术研究', '/uploads/allimg/131010/1-13101016351M43-lp.JPG', 1381388940, 1381394157, 1, '能源,环境,研究院,孵化,中心,举办,“,能源,院,', 0, 0, 0, 0, 0, 0, '能源院孵化中心举办马来西亚培训学习经验交流会 2013年9月18日下午,能源院孵化中心举办了马来西亚培训学习经验交流会。我院青年科技人员张玥同志做了内容丰富的培训学习汇报,', '', 1, 0, 0, 49), +(58, 10, '0', 1382949016, 'p,f', 1, 1, -2, 103, 0, '院产业处领导来我院产业基地检查指导工作', '', '', '王志成', '科研与产业化办公室', '/uploads/allimg/131028/1-13102Q620470-L.jpg', 1382949016, 1382949000, 1, '院,产业,处,领导,来,我院,基地,检查,指导工作,', 0, 0, 0, 0, 0, 0, '院产业处领导来我院产业基地检查指导工作 2013年10月11日上午,院产业处孙宇峰处长、范延新、曹海虹副处长来到我院双城产业基地检查院产业化基金项目《M15车用甲醇汽油复合添加剂', '', 1, 0, 0, 50), +(59, 10, '0', 1383203593, 'p,f', 1, 1, 0, 153, 0, '能源院四项课题顺利通过鉴定', '', '', '王志成', '科研与产业化办公室', '/uploads/allimg/131031/1-131031151Z0534-lp.JPG', 1383203593, 1383204010, 1, '能源,院,四项,课题,顺利,通过鉴定,10月,23日,', 0, 0, 0, 0, 0, 0, '10月23日,我院成功地召开科学院预研课题利用页岩油制取油砂分离剂的研究、全馏分页岩油改质转化轻质运输燃料工艺的研究,院青年基金膜生物反应器中改性复合膜的制备与性能研究', '', 1, 0, 0, 51), +(60, 9, '0', 1385605260, '', 1, 1, 0, 52, 0, '关于认真落实党的群众路线教育实践活动整改工作的通知', '', '', '李福裿', '综合办', '', 1385605260, 1389579876, 1, '关于,认真,落实,党的,群众,路线教育,实践,院,', 0, 0, 0, 0, 0, 0, '院各部门: 为深入推进党的群众路线教育实践活动,认真做好整改工作,使整改工作扎实、有序推进,现就有关要求通知如下: 一、提高思想认识,增强工作紧迫性 整改落实是确保党', '', 1, 0, 0, 52), +(61, 10, '0', 1379820480, '', 1, 1, -2, 81, 0, '践行群众路线、深入一线检查', '', '', 'admin', '未知', '', 1379820480, 1389669663, 1, '践行,群众路线,、,深入,一线,检查,省,财政厅,', 0, 0, 0, 0, 0, 0, '--省财政厅庄炳艳处长到能源院检查维修施工情况 9月22日下午,省财政厅教科文处庄炳艳处长、曹铁峰,省科学院条财处沙长青处长、张云志副处长,一同到我院实验楼维修项目施工现', '', 1, 0, 0, 53), +(62, 10, '0', 1392772320, 'p,f', 1, 1, -2, 128, 0, '践行群众路线、科技服务先行', '', '', '王志成', '科研与产业化办公室', '/uploads/allimg/140225/1-1402250U9100-L.jpg', 1392772320, 1393290138, 1, '践行,群众路线,、,科技服务,先行,为,实践,', 0, 0, 0, 0, 0, 0, '为实践党的群众路线活动,2014年2月19日,黑龙江省能源环境研究院院长徐晓秋、省科学院外事处处长高德玉以及科研办和寒区生物质能源技术研究中心科研人员等5名同志,来到齐齐哈', '', 1, 0, 0, 54), +(63, 10, '0', 1394590680, 'p,f', 1, 1, -2, 146, 0, '积极作为 凝聚推动环保事业正能量
--省科学院产业化处到能源院考察指导工作', '', '', '李福裿', '综合办', '/uploads/allimg/140312/1-140312141110525.JPG', 1394590680, 1394604796, 1, '积极,作为,凝聚,推动,环保,事业,正,能量,省,', 0, 0, 0, 0, 0, 0, '2014年3月12日,黑龙江省科学院产业化处李骏处长一行到我院考察指导工作。李骏处长考察了我院改造后的综合实验楼和中试实验室,并认真听取了我院近期的工作成果以及未来的发展计', '', 1, 0, 0, 55), +(66, 10, '0', 1395111690, 'p,f', 1, 1, -2, 182, 0, '黑龙江省能源环境研究院
首批科研人员赴清华大学学习交流', '', '', '李福裿', '综合办公室', '/uploads/allimg/140318/1-14031Q05955136-lp.JPG', 1395111690, 1395111651, 1, '黑龙江省,能源,环境,研究院,首批,科研,人员,', 0, 0, 0, 0, 0, 0, '为学习借鉴先进技术,汲取科研经验,我院选派的首批科研骨干,于3月14日起程赴清华大学开展学习交流活动,省科学院王钢副院长、省能源院徐晓秋院长和关春玲副院长亲自到场送行', '', 1, 0, 0, 58), +(65, 10, '0', 1394493180, 'p,f', 1, 1, -2, 109, 0, '下基层 接地气
--省科学院产业化处与能源院', '', '', '王志成', '科研与产业化办公室', '/uploads/allimg/140318/1-14031Q01031493-lp.jpg', 1394493180, 1395108865, 1, '下基层,接地,气,省,科学院,产业化,处,与,能源,', 0, 0, 0, 0, 0, 0, '为进一步了解黑龙江省各地农作物秸秆资源化利用现状,2014年3月11日,黑龙江省科学院产业化处处长李骏,黑龙江省能源环境研究院院长徐晓秋,黑龙江省能源环境研究院总工程师高德', '', 1, 0, 0, 57), +(67, 10, '0', 1394838720, 'p,f', 1, 1, 0, 155, 0, '院校交流,优势互补,扩大人才互动
--能源院科研人员赴清华大学学习', '', '', 'admin', '未知', '/uploads/allimg/140318/1-14031Q05955136-lp.JPG', 1394838720, 1395270567, 1, '院校,交流,优势互补,扩大,人才,互动,能源,院,', 0, 0, 0, 0, 0, 0, '根据2013年清华大学杨旭东教授来院指导工作期间双方达成的关于人才培养方面的协议,我院从现在开始选派科研人员赴清华大学学习,首批人员一行四人于3月14日启程。省科学院王钢副', '', 1, 0, 0, 59), +(68, 10, '0', 1395906505, 'h,p,f', 1, 1, 0, 112, 0, '贯彻精神 认真部署
--省能源院召开科研工作会议', '', '', '李福裿', '综合办公室', '/uploads/allimg/140327/1-14032G52Z0Y3-lp.JPG', 1395906505, 1395905599, 1, '贯彻,精神,认真,部署,省,能源,院,召开,3月,', 0, 0, 0, 0, 0, 0, '3月27日上午,我院2014年创新团队建设工作会议在能源院会议室召开,各科研部门负责人出席会议。 徐晓秋院长主持会议并发言,在发言中,徐晓秋院长指出,要紧密围绕郭春景院长到', '', 1, 0, 0, 60), +(69, 17, '0', 1396199344, '', 1, 1, 0, 71, 0, '油页岩加工工艺进展', '', '', '陈松', '能源化学研究室', '', 1396199344, 1396199472, 1, '油页岩,加工,工艺,进展,我国,页岩,油中,约,', 0, 0, 0, 0, 0, 0, '我国页岩油中约含有40%左右的轻柴油馏分,约含有45%左右的重柴油馏分,其十六烷值较高,经过精制后可作高速柴油机燃料。我国页岩重柴油馏分含有大量石蜡,也称为含蜡油,从中脱', '', 1, 0, 0, 61), +(70, 17, '0', 1396200653, 'p', 1, 1, 0, 50, 0, '煤焦油深加工现状、新技术和发展方向', '', '', '陈松', '能源化学研究室', '/uploads/140331/1-140331013114D9.jpg', 1396200653, 1396199748, 1, '煤焦油,深加工,现状,、,新技术,和,发展方向,', 0, 0, 0, 0, 0, 0, '煤焦油行业是一个比较传统的行业,尽管近30年来受到石油化工行业的激烈竞争,煤焦油行业仍然具有较大的发展潜力,尤其近几年来随着新材料和钢铁行业的发展,煤焦油资源的高效', '', 1, 0, 0, 62), +(71, 17, '0', 1396200185, 'p', 1, 1, 0, 83, 0, '页岩气真的能掀起一场能源革命吗?', '', '', '陈松', '能源化学研究室', '/uploads/140331/1-140331012335D4.jpg', 1396200185, 1396199898, 1, '页岩,气,真的,能,掀起,一场,能源,革命,吗,', 0, 0, 0, 0, 0, 0, '2012年争论最热烈的能源话题,莫过于页岩气革命。而随着隆冬来临,对这场革命的关注热度也在降温。激烈的唱多派声音有些嘶哑了,务实派的冷静思考开始占上风。这种转变有点成也', '', 1, 0, 0, 63), +(72, 17, '0', 1396201497, '', 1, 1, -2, 167, 0, '页岩气真的能掀起一场能源革命吗?', '', '', '陈松', '能源化学研究室', '', 1396201497, 1396201537, 1, '页岩,气,真的,能,掀起,一场,能源,革命,吗,', 0, 0, 0, 0, 0, 0, '2012年争论最热烈的能源话题,莫过于页岩气革命。而随着隆冬来临,对这场革命的关注热度也在降温。激烈的唱多派声音有些嘶哑了,务实派的冷静思考开始占上风。这种转变有点成也', '', 1, 0, 0, 64), +(73, 16, '0', 1390446180, '', 1, 1, 0, 173, 0, '我院第一届工会委员会成立', '', '', '李福裿', '综合办公室', '', 1390446180, 1396233753, 1, '我院,召开,工会,委员会,第一次,会员,大会,', 0, 0, 0, 0, 0, 0, '经过近半年的筹备,依据科学院的批复,1月20日,我院党委组织召开了黑龙江省能源环境研究院工会委员会第一次会员大会,选举工会主席1人,工会委员4人,发展会员26人。 随着工会', '', 1, 0, 0, 65), +(74, 10, '0', 1397798542, 'p,f', 1, 1, -2, 62, 0, '加拿大李筱梅博士到我院访问交流', '', '', '苏小红', '生物质能源实验室', '/uploads/allimg/140418/1-14041Q31URc-lp.JPG', 1397798542, 1397798442, 1, '加拿大,李筱梅,博士,到,我院,访问,交流,为,', 0, 0, 0, 0, 0, 0, '为深入开展厌氧发酵技术的应用研究,交流IMUS技术的推广经验,2014年4月17日,阿尔伯塔创新能源环境研究院李筱梅博士应邀到能源院访问,在能源院徐晓秋院长、高德玉总工程师及相', '', 1, 0, 0, 66), +(75, 10, '0', 1401333060, 'p,f', 1, 1, 0, 66, 0, '我院创新团队工作落实情况', '', '', '王志成', '科研办', '/uploads/allimg/140604/1-1406041105230-L.jpg', 1401333060, 1401851352, 1, '院,创新,团队,工作,落实,情况,2014年,3月,24日,', 0, 0, 0, 0, 0, 0, '2014年3月24日,郭院长带队调研我院学科创新团队工作,作出重要指示:调整研究方向,找准主线,抓住切入点,确立目标,建设创新团队。我院领导班子对郭院长的指示特别重视,先后', '', 1, 0, 0, 67), +(76, 16, '0', 1401762240, 'p,f', 1, 1, 0, 194, 0, '开展消防演练 提高防火意识', '', '', '李福裿', '综合办公室', '/uploads/allimg/140605/1-1406051021203R-lp.JPG', 1401762240, 1401934956, 1, '开展,消防,演练,提高,防火,意识,为,进一步,', 0, 0, 0, 0, 0, 0, '为进一步提高我院职工的消防安全意识,检验与巩固职工掌握灭火器材扑灭火灾的能力,6月3日下午,我院举行了消防演习活动,各部门防火负责人及职工约15人参加了演习。 演习由我', '', 1, 0, 0, 68), +(77, 9, '0', 1401936960, '', 1, 1, 0, 169, 0, '关于省科学院系统乒乓球比赛的通知', '', '', 'admin', '未知', '', 1401936960, 1401937252, 1, '关于省,科学院,系统,乒乓球,比,赛的,通知,院,', 0, 0, 0, 0, 0, 0, '院各部门: 省科学院系统乒乓球赛拟定于6月27日召开,比赛项目设定为团体比赛(男单、女单、男双、女双和混双),请各部门乒乓球好手踊跃报名。 报名地点:综合办 联 系 人:赵', '', 1, 0, 0, 69), +(78, 17, '0', 1401937777, '', 1, 1, 0, 128, 0, '我国液化石油气(LPG)发展现状及趋势', '', '', 'admin', '能源化学研究室', '', 1401937777, 1401937876, 1, '我国,液化,石油气,LPG,发展现状,及,趋势,2013年,', 0, 0, 0, 0, 0, 0, '2013年原油依旧维持箱体震荡格局,走势与品种的季节性规律密切相关。在3月、9月形成两个高点,在10、11月整体维持弱势,低点曾触及82美元/桶。总体上是下行的趋势。2012年国际液化', '', 1, 0, 0, 70), +(79, 17, '0', 1401938011, '', 1, 1, 0, 84, 0, '我国替代能源的现实选择', '', '', 'admin', '能源化学研究室', '', 1401938011, 1401938002, 1, '我国,替代,能源,的,现实,选择,以,煤炭,为主,', 0, 0, 0, 0, 0, 0, '以煤炭为主的能源消耗结构,是我国空气污染不断恶化的主要原因。在全国上下寻找治理污染特别是治理雾霾突破口的关键时期,发展清洁的替代能源,推动我国能源结构的调整优化,', '', 1, 0, 0, 71), +(80, 17, '0', 1401938023, '', 1, 1, 0, 90, 0, '生物燃料发展重心将向原料生产倾斜', '', '', 'admin', '能源化学研究室', '', 1401938023, 1401938248, 1, '生物,燃料,发展,重心,将向,原料,生产,倾斜,', 0, 0, 0, 0, 0, 0, '生物燃料通常指生物液体燃料,是重要的交通替代燃料。相对于其他替代燃料,生物燃料具有与现有基础设施兼容性好、能量密度高、清洁低碳、资源可再生且资源基础广阔等优点,而', '', 1, 0, 0, 72), +(81, 9, '0', 1402543792, '', 1, 1, 0, 51, 0, '我院关于召开2014年上半年工作会议的通知', '', '', '李福裿', '综合办公室', '', 1402543792, 1402543920, 1, '我院,关于,召开,2014年,上半年,工作,会议,的,', 0, 0, 0, 0, 0, 0, '院各部门: 2014年已经过半,为及时总结上半年工作情况,并对下半年工作做好规划和部署,我院决定召开上半年工作会议,具体事宜如下: 一、会议时间:暂定为6月末-7月初。 二、会', '', 1, 0, 0, 73), +(82, 9, '0', 1402543792, '', 1, 1, -2, 51, 0, '我院关于召开2014年上半年工作会议的通知', '', '', '李福裿', '综合办公室', '', 1402543792, 1402543961, 1, '我院,关于,召开,2014年,上半年,工作,会议,的,', 0, 0, 0, 0, 0, 0, '院各部门: 2014年已经过半,为及时总结上半年工作情况,并对下半年工作做好规划和部署,我院决定召开上半年工作会议,具体事宜如下: 一、会议时间:暂定为6月末-7月初。 二、会', '', 1, 0, 0, 73), +(83, 16, '0', 1404128880, 'p,f', 1, 1, 0, 104, 0, '我院开展系列活动庆祝中国共产党成立93周年', '', '', '李福裿', '综合办公室', '/uploads/allimg/140701/1-140F10F0349B-lp.JPG', 1404128880, 1404169510, 1, '我院,开展,系列,活动,庆祝,中国共产党,成立,', 0, 0, 0, 0, 0, 0, '为了隆重庆祝中国共产党成立93周年,我院党委组织全体党员及群众开展党史知识测试等活动祝福党的生日。活动以共筑中国梦喜迎建党93周年为主题,通过回顾93年来党的光辉历程、认', '', 1, 0, 0, 75), +(84, 16, '0', 1403825160, '', 1, 1, 0, 96, 0, '我院参加省科学院乒乓球赛', '', '', '赵娴', '综合办公室', '', 1403825160, 1404170734, 1, '我院,参加省,科学院,乒乓球赛,由,院,', 0, 0, 0, 0, 0, 0, '由院机关党委举办的省科学院职工乒乓球赛在省科学院石油化学研究院举行,共70多名选手参加了比赛。比赛分三组,为团体比赛。我院共有6名队员参加比赛,虽然大家平时没有经过专', '', 1, 0, 0, 76), +(85, 10, '0', 1404289740, '', 1, 1, 0, 193, 0, '我院参加温室、沼气产品创新联盟暨产学研合作对接会', '', '', '王志成', '科研与产业化办公室', '', 1404289740, 1404193349, 1, '我究,院,参加,温室,、,沼气,产品,创新,联盟,', 0, 0, 0, 0, 0, 0, '2014年6月28日黑龙江省能源环境研究院科研办主任王志成同志参加了省科技厅组织召开的温室、沼气产品创新联盟暨产学研合作对接会。会议主要内容:1.研究温室、沼气产品产业发展的', '', 1, 0, 0, 77), +(86, 10, '0', 1404372905, '', 1, 1, 0, 68, 0, '我院参加全省高校科研院所知识产权管理工作座谈会', '', '', '王志成', '科研办', '', 1404372905, 1404373069, 1, '我院,参加,全省,高校,科研院所,知识产权,', 0, 0, 0, 0, 0, 0, '2014年7月2日,在黑龙江工会大厦,我院科研办主任王志成同志参加了省专利管理局组织的全省高校科研院所知识产权管理工作座谈会。与会的有省专利管理局马峰副局长和综合处领导,', '', 1, 0, 0, 78), +(87, 10, '0', 1404441769, 'p,f', 1, 1, 0, 168, 0, '加拿大阿尔伯塔大学医学和病理学实验室庞晓莉教授
到我院进行讲座', '', '', '', '综合办公室', '/uploads/allimg/140703/1-140F31AT4621.JPG', 1404441769, 1404377947, 1, '加拿大,阿尔伯塔,大学,医学,和,病理学,7月,', 0, 0, 0, 0, 0, 0, '7月2日,加拿大阿尔伯塔大学医学和病理学实验室庞晓丽教授Pang Xiaoli(Lilly),在能源院一楼会议室就如何建立分子生物实验室举行了精彩的讲座,我院徐晓秋院长、关春玲副院长及部分', '', 1, 0, 0, 79), +(88, 10, '0', 1405044708, 'p,f', 1, 1, 0, 149, 0, '我院召开上半年工作会议', '', '', 'admin', '未知', '/uploads/allimg/140709/1-140F913010c25-lp.JPG', 1405044708, 1404882364, 1, '我院,召开,上半年,工作,会议,7月,9日,我院,在,', 0, 0, 0, 0, 0, 0, '7月9日,我院在江北会议室召开了由全体职工参加的2014年上半年工作会议。会议由党委书记、院长徐晓秋同志主持。会上各部门负责人分别汇报了本部门上半年工作进展情况,并提出了', '', 1, 0, 0, 80), +(89, 10, '0', 1405568134, 'p,f', 1, 1, 0, 121, 0, '热烈祝贺我院三名科研工作者获得ACI及MOHRSS认证', '', '', 'admin', '未知', '/uploads/allimg/140717/1-140GG1245EH-lp.jpg', 1405568134, 1405567749, 1, '热烈,祝贺,我院,三名,科研,工作者,获得,ACI,及,', 0, 0, 0, 0, 0, 0, '近日,我院三名科研工作者通过了ACI(美国认证协会)和MOHRSS(中国人力资源和社会保障部)联合举办的能源管理、能源审计及能源评估岗位培训考核,并获得ACI和MOHRSS颁发的国际注册', '', 1, 0, 0, 81), +(90, 17, '0', 1406162786, '', 1, 1, 0, 173, 0, '油页岩低温热解的影响因素', '', '', 'admin', '能源化学研究室', '', 1406162786, 1406162870, 1, '油页岩,低,温热,解,的,影响,因素,油页岩,热解,', 0, 0, 0, 0, 0, 0, '油页岩热解生成的液态产物汽化后,与气态产物一起首先通过页岩内部的空隙和毛细管扩散到油页岩块之外,然后通过页岩间的空隙至页岩层之外,最后通过页岩层外空间导出干馏装置', '', 1, 0, 0, 82), +(91, 17, '0', 1406162876, '', 1, 1, 0, 180, 0, '油页岩综合利用行业发展概述', '', '', 'admin', '能源化学研究室', '', 1406162876, 1406163096, 1, '油页岩,综合利用,行业发展,概述,油页岩,干馏,', 0, 0, 0, 0, 0, 0, '油页岩干馏分为两种,即地下干馏和地上干馏。地下干馏也被称为就地干馏,是在地下对油页岩矿层进行加热和裂解,促使其转化为高品质的油或气,再通过相关通道将油、气分别提取', '', 1, 0, 0, 83), +(92, 10, '0', 1406857860, 'p,f', 1, 1, 0, 111, 0, '热烈祝贺我院选手在省科学院外语大赛中获得一等奖', '', '', 'admin', '未知', '/uploads/allimg/140801/1-140P1113112H5-lp.jpg', 1406857860, 1406863952, 1, '热烈,祝贺,我院,选手,在,省,科学院,外语,大,', 0, 0, 0, 0, 0, 0, '7月30日,省科学院第5届外语大赛在高研院举行,经过个人演讲,评委提问,团体展示等环节,我院参赛的选手不负重望,取得了优异的成绩。其中,杨光获得个人赛一等奖,陆佳获个人', '', 1, 0, 0, 84), +(93, 10, '0', 1407114060, 'p,f', 1, 1, -2, 91, 0, '省环科院专家考察我院杜蒙IMUS装置', '', '', 'admin', '未知', '/uploads/allimg/140909/1-140ZZZTVB-lp.jpg', 1407114060, 1410225440, 1, '省,环科,院,专家,考察,我院,杜蒙,IMUS,装置,', 0, 0, 0, 0, 0, 0, '2014年7月29日我院徐晓秋院长、关春玲副院长陪同省环科院叶真主任、黑龙江科技大学周国江教授,到我院位于杜蒙的集成粪便综合利用系统(IMUS)示范装置考察。徐院长向两位专家详', '', 1, 0, 0, 85), +(94, 17, '0', 1410225560, '', 1, 1, 0, 172, 0, '世界原油加工消费现状和趋势', '', '', 'admin', '未知', '', 1410225560, 1410225647, 1, '世界,原油,加工,消费,现状,和,趋势,截至,', 0, 0, 0, 0, 0, 0, '截至2012年底,世界原油探明储量2358亿吨,比2011年增长0.9%。原油储量最多的中东地区,保持小幅增长,已探明储量为1093亿吨,同比增长1.2%。原油资源仍然集中在欧佩克,欧佩克控制着', '', 1, 0, 0, 86), +(95, 17, '0', 1410225654, '', 1, 1, 0, 150, 0, '我国炼油产能现状分析', '', '', 'admin', '未知', '', 1410225654, 1410225771, 1, '我国,炼油,产能,现状,分析,目前,我国,炼油,', 0, 0, 0, 0, 0, 0, '目前我国炼油产能严重过剩,2013年炼厂平均开工率仅67.3%,同比下降了2.4个百分点。受益于成品油定价机制调整,2013年我国炼油行业实现了扭亏,实现利润400亿元。但由于一方面炼厂产', '', 1, 0, 0, 87), +(96, 17, '0', 1410225774, '', 1, 1, 0, 75, 0, '中国能源如何应对全球能源格局的转变
—2035年前世界能源局势预测', '', '', 'admin', '未知', '', 1410225774, 1410225892, 1, '中国,能源,如何,应对,全球,格局,的,转变,—,', 0, 0, 0, 0, 0, 0, '当前,国际能源格局正处于深刻变化之中,全球经济期待新的增长引擎拉动,欧元区危机日益加深,延宕世界经济复苏,西方社会整体陷入体制性危机。国际社会陷于全球经济危机后的', '', 1, 0, 0, 88), +(97, 10, '0', 1413361286, 'p,f', 1, 1, 0, 92, 0, '营造健康运动氛围,丰富职工业余生活
-省能源环境研究院开展羽毛球比赛', '', '', 'admin', '未知', '/uploads/allimg/141011/1-141011112F0224-lp.JPG', 1413361286, 1412998149, 1, '营造,健康,运动,氛围,丰富,职工,业余,生活,省,', 0, 0, 0, 0, 0, 0, '为使我院职工在工作之余放松身心,劳逸结合,经过精心筹备,我院羽毛球比赛于9月28日正式开始,此次活动得到了院领导的大力支持和职工的积极响应。 比赛中选手们挥舞球拍、腾挪', '', 1, 0, 0, 89), +(98, 10, '0', 1416798314, 'p,f', 1, 1, 0, 76, 0, '知识产权助推创新
--省能源院专利知识培训', '', '', 'admin', '未知', '/uploads/allimg/141124/1-141124110J93I-lp.jpg', 1416798314, 1416798528, 1, '知识产权,助推,创新,省,能源,院,专利,知识,', 0, 0, 0, 0, 0, 0, '11月17日,第八届中国专利周黑龙江省系列活动正式启幕。为配合专利周系列活动,11月20日,黑龙江省能源环境研究院举办了知识产权培训讲座。特邀黑龙江省知识产权服务中心副主任', '', 1, 0, 0, 90), +(99, 28, '0', 1494581758, 'p,f', 1, 1, 0, 140, 0, '黑龙江省科学技术进步一等奖', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130707/1-130FH2593T91-lp.jpg', 1494581758, 1416813470, 1, '科学技术,进步,一等奖,科学技术,发明,一等奖,', 0, 0, 0, 0, 0, 0, '科学技术发明一等奖 科学技术进步一等奖 全国化工系统技术二等奖', '', 1, 0, 0, 10), +(102, 29, '0', 1417162645, '', 1, 1, 0, 92, 0, '论文《木焦油预处理制取加氢原料的方法》', '', '', 'admin', '未知', '', 1417162645, 1417162693, 1, '论文,《,木焦油预处理制取加氢原料的方法,', 0, 0, 0, 0, 0, 0, '以廊乡林业局木焦油为原料,采取萃取破乳液固分离蒸馏脱水的方法对木焦油原料进行净化预处理,脱除原料中的水分和杂质等非理想组分,使木焦油的含水量降至0.56%,固体含量降至', '', 1, 0, 0, 94), +(103, 29, '0', 1417162711, '', 1, 1, 0, 188, 0, '论文《轻质木焦油加氢脱氧的影响因素》', '', '', 'admin', '未知', '', 1417162711, 1417162733, 1, '论文,《,轻质木焦油加氢脱氧的影响因素,》,', 0, 0, 0, 0, 0, 0, '摘要:在固定床加氢微反装置上,采用硫化态NiMoW/Al 2 O 3 催化剂,以廊乡林业局轻质木焦油(<300℃馏分)为原料考察反应条件对加氢脱氧性能的影响。结果表明,适当降低反应空速、', '', 1, 0, 0, 95), +(104, 29, '0', 1417162822, '', 1, 1, 0, 139, 0, '论文《企业标准解读》', '', '', 'admin', '未知', '', 1417162822, 1417162791, 1, '论文,《,M25车用甲醇汽油,》,摘要,为,推动,', 0, 0, 0, 0, 0, 0, '摘要:为推动车用燃料的多元化发展,拓展代用燃料的应用领域,经黑龙江省科技厅推介,黑龙江省能源环境研究院与哈尔滨市依兰巨澜清洁能源发展有限公司共同签订了《产研技术研', '', 1, 0, 0, 96), +(105, 29, '0', 1417162846, '', 1, 1, 0, 199, 0, '论文《<车用汽油>的胶质指标解析》', '', '', 'admin', '未知', '', 1417162846, 1417162893, 1, '论文,《,<车用汽油>的胶质指标解析,》,摘要,', 0, 0, 0, 0, 0, 0, '摘要:近几年,随着我国汽车工业的快速发展,石油能源快速消耗,车辆尾气排放对环境的污染日益增加。考虑到已经实施国三和将要实施的国四、国五标准要求,国家发布了GB1793020', '', 1, 0, 0, 97), +(106, 29, '0', 1417162895, '', 1, 1, 0, 164, 0, '论文《调和国IV标准车用汽油的抗爆剂研究》', '', '', 'admin', '未知', '', 1417162895, 1417162950, 1, '论文,《,调和国IV标准车用汽油的抗爆剂研究,', 0, 0, 0, 0, 0, 0, '摘要:针对提高油品辛烷值,使调和后汽油的质量指标符合GB17930-2011/XG1-2012国家《车用汽油》IV标准的目的。本文创新了一种由0.365%MMT、60%MTBE、8%TBAC、3.635%二氯甲烷、28%抗爆助剂(m/m)', '', 1, 0, 0, 98), +(107, 29, '0', 1417076880, '', 1, 1, 0, 109, 0, '论文《沼气工程工艺参数的优化模型研究》', '', '', 'admin', '未知', '', 1417076880, 1417163371, 1, '论文,《,沼气工程工艺参数的优化模型研究,', 0, 0, 0, 0, 0, 0, '《自动化技术与应用》2014.06', '', 1, 0, 0, 99), +(108, 29, '0', 1417077000, '', 1, 1, 0, 141, 0, '专利《一种搅拌破壳于一体的发酵反应器》', '', '', 'admin', '未知', '', 1417077000, 1417163597, 1, '专利,《,一种搅拌破壳于一体的发酵反应器,', 0, 0, 0, 0, 0, 0, '专利名称 申请号 授 权 时 间 一种搅拌破壳于一体的发酵反应器 (实用新型,王玉鹏) 201320512530.5 2014.1.15', '', 1, 0, 0, 100), +(109, 29, '0', 1417077180, '', 1, 1, 0, 71, 0, '专利《一种太阳能集热控制系统》', '', '', 'admin', '未知', '', 1417077180, 1417163704, 1, '专利,《,一种太阳能集热控制系统,》,专利,', 0, 0, 0, 0, 0, 0, '专利名称 申请号 授 权 时 间 一种太阳能集热控制系统 (实用新型,罗向东) 201320573185.6 2014.2.19', '', 1, 0, 0, 101), +(110, 29, '0', 1417077300, '', 1, 1, 0, 132, 0, '一种厌氧发酵分段控温系统', '', '', 'admin', '未知', '', 1417077300, 1417163740, 1, '一种,厌氧,发酵,分段,控温,系统,专利,名称,', 0, 0, 0, 0, 0, 0, '专利名称 申请号 授 权 时 间 一种厌氧发酵分段控温系统 (实用新型,秦国辉) 201320509483.9 2014.1.8', '', 1, 0, 0, 102), +(111, 29, '0', 1417163743, '', 1, 1, 0, 105, 0, '专利《一种高温厌氧发酵运行参数的无线实时监测系统》', '', '', 'admin', '未知', '', 1417163743, 1417163815, 1, '专利,《,专利,名称,申请,号,授,权,时,间,一种,', 0, 0, 0, 0, 0, 0, '专利名称 申请号 授 权 时 间 一种高温厌氧发酵运行参数的无线实时监测系统(实用新型,徐晓秋) 201320509482.4 2014.1.15', '', 1, 0, 0, 103), +(112, 10, '0', 1417769162, 'p,f', 1, 1, 0, 140, 0, '黑龙江省能源环境研究院两项课题通过省级鉴定', '', '', 'admin', '未知', '/uploads/allimg/141205/1-141205164U1518-lp.JPG', 1417769162, 1417769377, 1, '黑龙江省,能源,环境,研究院,两项,课题,通过,', 0, 0, 0, 0, 0, 0, '2014年12月4日,在省能源环境研究院嵩山路15号8楼会议室召开了项目鉴定会,会议对我院承担的《轻质木焦油加氢提质转化运输燃料油调和组分的工艺研究》和《利用炼厂90 # 汽油生产国', '', 1, 0, 0, 104), +(113, 10, '0', 1418018128, 'p,f', 1, 1, 0, 51, 0, '黑龙江省能源环境研究院科技人员参加CHINA EPA STAR MEETING', '', '', 'admin', '未知', '/uploads/allimg/141208/1-14120Q35642917-lp.jpg', 1418018128, 1418018273, 1, '黑龙江省,能源,环境,研究院,科技人员,参加,', 0, 0, 0, 0, 0, 0, '2014年12月4日至6日,黑龙江省能源环境研究院春苗秦国辉、唐诗洋,青年科技人员周扬参加了在清华大学举办的CHINA EPA STAR MEETING。加拿大麦吉尔大学、美国明尼苏达大学、英国帝国理工', '', 1, 0, 0, 105), +(114, 10, '0', 1418019639, 'p,f', 1, 1, 0, 133, 0, '清华大学杨旭东博士到省能源环境研究院洽谈合作', '', '', 'admin', '未知', '/uploads/allimg/141208/1-14120Q42122206-lp.jpg', 1418019639, 1418019776, 1, '清华大学,杨旭东,杨,旭东,博士,到,省,能源,', 0, 0, 0, 0, 0, 0, '12月1日,清华大学建筑环境与设备研究所副所长、清华大学百人计划引进教授、教育部长江学者特聘教授、美国麻省理工学院(MIT)博士、美国迈阿密大学终身教授杨旭东一行两人,携最', '', 1, 0, 0, 106), +(115, 28, '0', 1494581940, 'p,f', 1, 1, 0, 182, 0, '黑龙江省科学技术发明一等奖', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130707/1-130FH25Z3220-lp.jpg', 1494581940, 1418020080, 1, '科学技术,发明,一等奖,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 1), +(116, 28, '0', 1494581351, 'p,f', 1, 1, 0, 159, 0, '中国石油与化工协会科技进步二等奖', '', '', 'admin', '未知', '/kjfh/uploads/allimg/130707/1-130FH3000BQ-lp.jpg', 1494581351, 1418020278, 1, '科技,进步,二等奖,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 6), +(117, 10, '0', 1418370133, 'p,f', 1, 1, 0, 77, 0, '黑龙江省能源环境研究院三项课题顺利通过鉴定', '', '', 'admin', '未知', '/uploads/allimg/141212/1-141212154255N3-lp.jpg', 1418370133, 1418370219, 1, '黑龙江省,能源,环境,研究院,三项,课题,顺利,', 0, 0, 0, 0, 0, 0, '2014年12月11日,在省能源环境研究院召开了由能源院农业生物环境与能源工程创新团队承担的《秸秆高温厌氧发酵过程关键技术参数研究》、《沼液高效会用及综合处理工艺研究》和《', '', 1, 0, 0, 109), +(118, 10, '0', 1418693820, '', 1, 1, 0, 89, 0, '黑龙江省能源环境研究院两项课题通过鉴定', '', '', 'admin', '未知', '', 1418693820, 1419212305, 1, '黑龙江省,能源,环境,研究院,两项,课题,2014年,', 0, 0, 0, 0, 0, 0, '2014年12月16日,黑龙江省科学院科研基金项目《寒地沼气发电机余热回收仿真优化研究》与院青年基金项目《厌氧发酵反应器温度监控及补偿系统的研究》鉴定会在省能源环境研究院召', '', 1, 0, 0, 110), +(119, 10, '0', 1418781000, 'p,f', 1, 1, 0, 122, 0, '热烈祝贺我院选手在省科学院TRIZ大赛中获得二等奖', '', '', 'admin', '未知', '/uploads/allimg/141222/1-14122209493E19-lp.jpg', 1418781000, 1419213049, 1, '热烈,祝贺,我院,选手,在,省,科学院,TRIZ,大,', 0, 0, 0, 0, 0, 0, '2014年12月17日,我院有两组TRIZ作品参加了黑龙江省科学院第三届TRIZ理论创新大赛,经过作品展示、答辩及评审委员会的评审等环节,我院参赛选手不负众望,取得了优异的成绩,其中参', '', 1, 0, 0, 111), +(120, 10, '0', 1419474225, 'p,f', 1, 1, 0, 166, 0, '我院三项省科学院青年科学基金项目通过验收', '', '', 'admin', '未知', '/uploads/allimg/141225/1-14122510251V35-lp.jpg', 1419474225, 1419474345, 1, '我院,三项省,科学院,青年科学,基金,项目,', 0, 0, 0, 0, 0, 0, '2014年12月22日,黑龙江省能源环境研究院召开了省科学院青年创新基金资助项目《浮选技术在油砂分离中的应用研究》、《木醋液成份分析及对肿瘤细胞杀伤作用初探》和《微米稀土粉', '', 1, 0, 0, 112), +(121, 10, '0', 1419840120, 'p,f', 1, 1, 0, 194, 0, '黑龙江省能源环境研究院召开2014年全体职工大会', '', '', 'admin', '未知', '/uploads/allimg/150115/1-1501151A33E11.JPG', 1419840120, 1421312139, 1, '黑龙江省,能源,环境,研究院,召开,2014年,全体,', 0, 0, 0, 0, 0, 0, '2014年12月19日上午,省能源环境研究院召开了全体职工大会,领导班子及全体职工参加了会议,会议由工会主席李福裿同志主持。 会上,能源院院长徐晓秋同志做能源院2014年工作总结报', '', 1, 0, 0, 113), +(122, 17, '0', 1421807363, 'p', 1, 1, 0, 159, 0, '页岩油不是“页岩油”', '', '', 'admin', '未知', '/uploads/allimg/150121/1-150121095P2X7.JPG', 1421807363, 1421805534, 1, '页岩,油,不是,“,页岩油,”,金银,岛,财经,', 0, 0, 0, 0, 0, 0, '金银岛财经 石油价格高位暴跌,评论纷纷,从评论的字里行间经常出现打压美国页岩油发展等,好多人不知道,这里所指的页岩油不是页岩油,而是致密油。美国能源信息署(EIA)将页', '', 1, 0, 0, 114), +(123, 17, '0', 1421808482, '', 1, 1, 0, 112, 0, '2015年全球将重新进入廉价石油时代', '', '', 'admin', '未知', '', 1421808482, 1421808448, 1, '2015年,全球,将,重新,进入,廉价,石油,时代,', 0, 0, 0, 0, 0, 0, '华夏时报 2014年全球大宗商品市场最瞩目的事件是石油暴跌的黑天鹅事件引发了俄罗斯卢布危机。2014年7月初,国际原油价格还在100美元之上,12月25日,纽约原油价格已经跌到56美元,短', '', 1, 0, 0, 115), +(124, 17, '0', 1421808499, '', 1, 1, 0, 125, 0, '煤化工与石油化工“嫁接”新路径', '', '', 'admin', '未知', '', 1421808499, 1421808570, 1, '煤化工,与,石油化工,“,嫁接,”,新路径,新,', 0, 0, 0, 0, 0, 0, '中国科学报 在煤价下行和天然气荒愈演愈烈的背景下,发展现代煤化工已是大势所趋。现代煤化工包括煤制油、煤制天然气、煤制甲醇、煤制烯烃等。截至目前,虽然我国煤化工仍处于', '', 1, 0, 0, 116), +(125, 17, '0', 1421808802, '', 1, 1, 0, 153, 0, '煤化工重新开闸 环境约束待考', '', '', 'admin', '未知', '', 1421808802, 1421808896, 1, '煤化工,重新,开闸,环境,约束,待考,21世纪,', 0, 0, 0, 0, 0, 0, '21世纪经济报道 核心提示:面对中国重启的煤化工大幕,水资源、环境、能耗以及将要出台的碳税,成为发展这一产业必须克服的风险,国家高层对煤化工产业的态度也不无谨慎,截至', '', 1, 0, 0, 117), +(126, 17, '0', 1421808910, '', 1, 1, 0, 124, 0, '现代煤化工:心急难吃热豆腐', '', '', 'admin', '未知', '', 1421808910, 1421808951, 1, '现代,煤化工,心急,难吃,热,豆腐,中国,化工,报,', 0, 0, 0, 0, 0, 0, '中国化工报 近十年来,我国现代煤化工在争议声中从起步磕磕绊绊走到今天,就像时下的天气一样由暖转寒不断降温。从当初的争先恐后,到如今的观望退出,现代煤化工似乎走到了发', '', 1, 0, 0, 118), +(127, 17, '0', 1421808969, '', 1, 1, 0, 192, 0, '新型煤化工五路径:谁能走得更远?', '', '', 'admin', '未知', '', 1421808969, 1421809231, 1, '新型,煤化工,五,路径,谁能,走得,更远,中化,', 0, 0, 0, 0, 0, 0, '中化新网 2014年7月以来,国际原油价格暴跌近50%。有机构研究认为,本轮油价下跌远未见底,后期仍有下跌空间。若参照煤炭及主要大宗商品近几年的跌幅,预计国际原油价格最低将探', '', 1, 0, 0, 119), +(128, 10, '0', 1422246723, 'p,f', 1, 1, 0, 193, 0, '黑龙江省能源环境研究院召开全体职工大会', '', '', 'admin', '未知', '/uploads/allimg/150126/1-150126122I43W.JPG', 1422246723, 1422246503, 1, '黑龙江省,能源,环境,研究院,召开,全体,职工,', 0, 0, 0, 0, 0, 0, '2015年1月26日,黑龙江省能源环境研究院召开全体职工大会,会议由能源院徐晓秋院长主持,院班子及全体职工参加了会议。 徐晓秋院长首先传达了省科学院郭春景院长在省科学院2015年', '', 1, 0, 0, 120), +(129, 10, '0', 1422334800, '', 1, 1, 0, 190, 0, '我院召开科研人员座谈会', '', '', 'admin', '未知', '', 1422334800, 1425272881, 1, '我院,召开,科研,人员,座谈会,1月,27日,', 0, 0, 0, 0, 0, 0, '1月27日,黑龙江省能源环境研究院召开了科研人员座谈会,院长徐晓秋、副院长关春玲与我院一线科研骨干、高级职称人员参加了座谈,院长徐晓秋主持会议。 与会科研人员认真总结了', '', 1, 0, 0, 121), +(130, 10, '0', 1422508200, '', 1, 1, 0, 116, 0, '黑龙江省能源环境研究院召开青年科研人员座谈会', '', '', 'admin', '未知', '', 1422508200, 1425273065, 1, '黑龙江省,能源,环境,研究院,召开,青年,科研,', 0, 0, 0, 0, 0, 0, '1月29日,我院召开了青年科研人员座谈会,院长徐晓秋、副院长关春与青年科研人员10余人参加了会议,会议由院长徐晓秋主持。徐院长指出,希望通过此次会议,为我院青年人提供交', '', 1, 0, 0, 122), +(131, 10, '0', 1425632100, 'p,f', 1, 1, 0, 132, 0, '我院召开庆“三八”座谈会', '', '', 'admin', '未知', '/uploads/allimg/150309/1-1503091A309593-lp.JPG', 1425632100, 1425891224, 1, '我院,召开,庆,“,三八,”,座谈会,3月,6日,上午,', 0, 0, 0, 0, 0, 0, '3月6日上午,我院召开了三八妇女节座谈会,院长徐晓秋、副院长关春玲与十余名女同志参加了座谈会。院长徐晓秋向全体女同志表示节日的问候和祝贺,感谢大家一年来在各自岗位上', '', 1, 0, 0, 123), +(132, 16, '0', 1428388980, '', 1, 1, 0, 137, 0, '我院召开全体党员会议学习习近平总书记2月2日讲话精神', '', '', 'admin', '未知', '', 1428388980, 1428455269, 1, '我院,召开,全体,党员,会议,4月,7日,省,能源,院,', 0, 0, 0, 0, 0, 0, '4月7日,省能源院党委在一楼会议室召开了全体党员会议,党委书记、院长徐晓秋同志、党委委员、副院长关春玲同志、各支部书记及全体党员参加了会议。会议由徐晓秋同志主持。 会', '', 1, 0, 0, 124), +(133, 10, '0', 1429246702, 'p,f', 1, 1, 0, 178, 0, '我院与天津大学签订合作协议', '', '', 'admin', '未知', '/uploads/allimg/150417/1-15041G3004TT-lp.JPG', 1429246702, 1429246928, 1, '我院,与,天津,大学,签订,合作,协议,2015年,3月,', 0, 0, 0, 0, 0, 0, '2015年3月16日,应天津大学内燃机燃烧学国家重点实验室主任、博士生导师姚春德教授的邀请,黑龙江省科学院科研处王阳处长、黑龙江省能源环境研究院徐晓秋院长和油品助剂研发中心', '', 1, 0, 0, 125), +(134, 10, '0', 1430722575, 'p,f', 1, 1, 0, 182, 0, '黑龙江省能源环境研究院参加国家行业标准编制', '', '', 'admin', '未知', '/uploads/allimg/150504/1-150504145242U3-lp.jpg', 1430722575, 1430722472, 1, '黑龙江省,能源,环境,研究院,参加,国家,2015年,', 0, 0, 0, 0, 0, 0, '2015年4月27日,国家行业标准《住宅建筑室内装修污染控制技术规程》启动会暨编制组第一次工作会议在深圳市召开。黑龙江省能源环境研究院作为编制组成员单位,由徐晓秋院长带队,', '', 1, 0, 0, 126), +(135, 10, '0', 1432639115, 'p,f', 1, 1, 0, 92, 0, '农业部沼气科学研究所专家团访问黑龙江省能源环境研究院', '', '', 'admin', '未知', '/uploads/allimg/150526/1-150526192050T1-lp.jpg', 1432639115, 1432639369, 1, '农业部,沼气,科,学研究所,专家团,访问,2015年,', 0, 0, 0, 0, 0, 0, '2015年5月12日,农业部沼气科学研究所生物质能中心主任胡启春研究员一行四人到黑龙江省能源环境研究院进行交流与访问。 胡启春研究员首先来到能源院江北实验室,在会议室做了沼', '', 1, 0, 0, 127), +(136, 10, '16', 1433389200, 'p,f', 1, 1, 0, 68, 0, '我院召开“三严三实”专题教育动员会', '', '', 'admin', '未知', '/uploads/allimg/150608/1-15060Q0232O11.jpg', 1433389200, 1433394709, 1, '我院,召开,“,三严三实,”,专题,教育,动员会,', 0, 0, 0, 0, 0, 0, '根据省科学院通知要求,6月4日,黑龙江省能源环境研究院在一楼会议室召开了党委扩大会议暨省能源院三严三实专题教育动员会,省能源院领导班子、全体党员、部门负责人及副科级', '', 1, 0, 0, 128), +(137, 10, '0', 1433725205, 'p,f', 1, 1, 0, 199, 0, '省知识产权局张毅副局长到我院调研', '', '', 'admin', '未知', '/uploads/allimg/150608/1-15060PU64Q64-lp.JPG', 1433725205, 1433725033, 1, '省,知识产权局,张毅,副局长,到,我院,调研,5月,', 0, 0, 0, 0, 0, 0, '5月27日,省知识产权局张毅副局长率综合协调处负责同志就全省高校院所专利提质促量工作,到黑龙江省能源环境研究院进行调研。省能源院徐晓秋院长、关春玲副院长、科研与产业化', '', 1, 0, 0, 129), +(138, 10, '0', 1433734306, 'p,f', 1, 1, 0, 191, 0, '我院参加省高校、科研院所知识产权专题培训班学习', '', '', 'admin', '未知', '/uploads/allimg/150608/1-15060Q13402934-lp.JPG', 1433734306, 1433734477, 1, '我院,参加省,高校,、,科研院所,知识产权,', 0, 0, 0, 0, 0, 0, '2015年6月4日至5日,省知识产权局举办了黑龙江省高校、科研院所知识产权专题培训班。我院科研办王志成主任、设计部王玉鹏和环境与节能研究室张玥参加了此次培训。 此次培训课程', '', 1, 0, 0, 130), +(139, 10, '0', 1433924755, 'p,f', 1, 1, 0, 187, 0, '黑龙江省能源环境学会成立', '', '', 'admin', '未知', '/uploads/allimg/150610/1-150610161231964-lp.JPG', 1433924755, 1433924020, 1, '黑龙江省,能源,环境,学会,成立,2015年,6月,8日,', 0, 0, 0, 0, 0, 0, '2015年6月8日,由黑龙江省能源环境研究院发起的黑龙江省能源环境学会正式成立。学会由黑龙江省民政厅批准,并发放《社会团体法人登记证书》,业务主管部门为黑龙江省科学技术协', '', 1, 0, 0, 131), +(140, 10, '16', 1434346140, 'p,f', 1, 1, 0, 151, 0, '黑龙江省能源环境研究院党委书记徐晓秋同志带头讲“三严三实”专题党课', '', '', 'admin', '未知', '/uploads/allimg/150616/1-150616130424M7.jpg', 1434346140, 1434356019, 1, '黑龙江省,能源,环境,研究院,党委书记,徐晓,', 0, 0, 0, 0, 0, 0, '6月15日,在省能源院一楼会议室,省能源院党委书记、院长徐晓秋同志以《践行三严三实要求,聚力五年会战》为题,为全体党员、副科级以上人员讲了一堂三严三实专题党课。 徐晓秋', '', 1, 0, 0, 132), +(141, 10, '0', 1435026651, 'p,f', 1, 1, 0, 149, 0, '低碳环保,健康生活
-省能源院举办职工徒步活动', '', '', 'admin', '未知', '/uploads/allimg/150623/1-150623100631N0-lp.jpg', 1435026651, 1435025373, 1, '低碳,环保,健康生活,省,能源,院,举办,职工,', 0, 0, 0, 0, 0, 0, '6月18日清晨,省能源院举办了首届能源杯徒步活动,活动的主题为 低碳环保,健康生活。 本次活动全程约8公里,环绕阿勒锦岛一周,历时两个 小时。一路上大家奋勇争先、相互鼓励,', '', 1, 0, 0, 133), +(142, 10, '16', 1436160480, 'p,f', 1, 1, 0, 165, 0, '黑龙江省能源环境研究院开展系列庆祝活动
为中国共产党成立94周年献礼', '', '', 'admin', '未知', '/uploads/allimg/150706/1-150F6145634K6-lp.JPG', 1436160480, 1436166009, 1, '黑龙江省,能源,环境,研究院,开展,系列,为,', 0, 0, 0, 0, 0, 0, '为喜迎中国共产党成立94周年,继承和发扬党的优良传统和作风,切实加强基层党组织建设,七一期间,省能源环境研究开展内了容丰富、形式多样的庆祝活动,通过主题鲜明、广泛参', '', 1, 0, 0, 134), +(143, 10, '0', 1436749506, 'p,f', 1, 1, 0, 191, 0, '我院与加拿大阿尔伯塔技术创新研究院签订框架协议', '', '', 'admin', '未知', '/uploads/allimg/150713/1-150G30U9244D.JPG', 1436749506, 1436749190, 1, '我院,与,加拿大,阿尔伯塔,技术创新,研究院,', 0, 0, 0, 0, 0, 0, '2015年7月3日,在省科学院四楼会议室,黑龙江省科学院与加拿大阿尔伯塔省技术创新研究院合作协议签约仪式正式举行。省科学院院长郭春景、黑龙江省能源环境研究院院长徐晓秋及加', '', 1, 0, 0, 135), +(144, 10, '16', 1438320480, 'p,f', 1, 1, 0, 112, 0, '我院组织全体职工观看记录片《筑梦中国》', '', '', 'admin', '未知', '/uploads/allimg/150731/1-150I1100346239.JPG', 1438320480, 1438308300, 1, '我院,组织,全体,职工,观看,记录片,《,根据省,', 0, 0, 0, 0, 0, 0, '根据省科学院机关党委关于观看大型历史文献记录片《筑梦中国》相关要求,我院高度重视,积极部署观看学习活动。于7月24日、27日、28日每天下午13:30在能源院一楼会议室组织全院职', '', 1, 0, 0, 136), +(145, 10, '0', 1439953140, 'p,f', 1, 1, 0, 130, 0, '我院参加全国科学院联盟能源分会启动仪式', '', '', 'admin', '未知', '/uploads/allimg/150819/1-150Q9130104925-lp.jpg', 1439953140, 1439960502, 1, '我院,参加,全国,科学院,联盟,能源,分会,启动,', 0, 0, 0, 0, 0, 0, '2015年8月13日-14日黑龙江省能源环境研究院院长徐晓秋同志应邀参加了全国科学院联盟能源分会启动仪式。本次会议由中国科学院科技促进发展局和中国科学院沈阳分院主办,由中国科学', '', 1, 0, 0, 137), +(146, 10, '0', 1440646938, 'p,f', 1, 1, 0, 79, 0, '省科学院督研委对能源环境研究院
科研基金项目的执行情况进行督导和检查', '', '', 'admin', '未知', '/uploads/allimg/150827/1-150RG14423309-lp.JPG', 1440646938, 1440647096, 1, '省,科学院,督研,委,对,能源,环境,研究院,科研,', 0, 0, 0, 0, 0, 0, '2015年8月26日,省科学院督研委对院基金项目页岩油深加工工艺关键技术的执行情况进行阶段性督导和检查。会议由院科研处隋月梅副处长主持。 督研委专家们听取了课题组的工作汇报', '', 1, 0, 0, 138), +(147, 10, '16', 1441782300, 'p,f', 1, 1, 0, 160, 0, '热烈祝贺我院选手在省科学院“三严三实”青年党史知识竞赛中获三等奖', '', '', 'admin', '未知', '/uploads/allimg/150916/1-15091614595c35-lp.JPG', 1441782300, 1442386850, 1, '热烈,祝贺,我院,选手,在,省,科学院,“,月,9日,', 0, 0, 0, 0, 0, 0, '9 月9日 ,由省科学院团委主办的 三严三实 青年党史知识竞赛在嵩山路15号8楼会议室拉开帷幕。此次竞赛内容涵盖了党章,党史,十八大报告,十八届三中、四中全会精神,习总书记系', '', 1, 0, 0, 139), +(148, 10, '0', 1444801440, 'p,f', 1, 1, 0, 163, 0, '黑龙江省科学院党组书记赵梅同志莅临黑龙江省能源环境研究院调研指导工作', '', '', 'admin', '未知', '/uploads/allimg/151015/1-151015113633c1-lp.JPG', 1444801440, 1444880298, 1, '黑龙江省,科学院,党组书记,赵梅,同志,莅临,', 0, 0, 0, 0, 0, 0, '10月13日下午,省科学院党组书记赵梅同志在院办公室主任章力同志的陪同下莅临黑龙江省能源环境研究院调研指导工作。省能源院徐晓秋院长、关春玲副院长参加了此次调研。 调研会', '', 1, 0, 0, 140), +(150, 10, '16', 1446521563, '', 1, 1, 0, 167, 0, '关于转发《中国共产党廉政自律准则》和《中国共产党纪律处分条例》的通知', '', '', 'admin', '未知', '', 1446521563, 1446521851, 1, '关于,转发,《,中国共产党廉政自律准则,》,和,', 0, 0, 0, 0, 0, 0, '能源院全体党员: 为扎实开展三严三实专题教育工作,紧扣《中国共产党巡视工作条例》对六大纪律的要求,引导和教育全体党员牢固树立自觉遵守党章党纪党规的政治意识和大局观念', '', 1, 0, 0, 138), +(151, 10, '0', 1447393980, '', 1, 1, 0, 191, 0, '中共中央关于制定国民经济和社会发展第十三个五年规划的建议', '', '', 'admin', '未知', '', 1447393980, 1447566727, 1, '中共中央,关于,制定,国民经济,和,社会发展,', 0, 0, 0, 0, 0, 0, '(2015年10月29日中国共产党第十八届中央委员会第五次全体会议通过) 到二〇二〇年全面建成小康社会,是我们党确定的两个一百年奋斗目标的第一个百年奋斗目标。十三五时期是全面', '', 1, 0, 0, 139), +(152, 10, '0', 1447663869, '', 1, 1, 0, 200, 0, '关于转发《黑龙江省人民政府关于深化体制机制改革加快实施创新驱动发展战略的实施意见》的通知', '', '', 'admin', '未知', '', 1447663869, 1447664040, 1, '关于,转发,《,黑龙江省,人民政府,深化,体制,', 0, 0, 0, 0, 0, 0, '按照赵梅书记批示和我院16日会议部署,现将《黑龙江省人民政府关于深化体制机制改革加快实施创新驱动发展战略的实施意见》(黑政发[2015]32号)上传到院网站和群共享,请各部门认', '', 1, 0, 0, 140), +(153, 10, '16', 1447999958, 'p,f', 1, 1, 0, 58, 0, '黑龙江省能源环境研究院召开中心组学习(扩大)会议', '', '', 'admin', '未知', '/uploads/allimg/151120/1-15112014063YY-lp.JPG', 1447999958, 1447999652, 1, '黑龙江省,能源,环境,研究院,召开,中心组,11月,', 0, 0, 0, 0, 0, 0, '11月16日,在省能源院会议室,省能源院党委中心组召开学习贯彻十八届五中全会精神和三严三实专题教育第三专题研讨扩大会议。省能源院领导班子、省科学院机关党委刘颖书记及能源', '', 1, 0, 0, 141), +(154, 10, '0', 1450234560, 'p,f', 1, 1, 0, 133, 0, '我院承办国家行业标准《住宅建筑室内装修污染控制技术规程》编制组第二次工作会议', '', '', 'admin', '未知', '/uploads/allimg/151225/1-151225110013332-lp.JPG', 1450234560, 1451012516, 1, '我院,承办,国家,行业标准,《,2015年,12月,15日,', 0, 0, 0, 0, 0, 0, '2015年12月15日,由深圳市建筑科学研究院股份有限公司主办的国家行业标准《住宅建筑室内装修污染控制技术规程》编制组第二次工作会议在哈尔滨召开,黑龙江省能源环境研究院作为', '', 1, 0, 0, 142), +(155, 10, '0', 1450407720, 'p,f', 1, 1, 0, 107, 0, '省科学院科研处莅临省能源环境研究院指导检查学科创新团队建设工作', '', '', 'admin', '未知', '/uploads/allimg/151225/1-15122511042EC-lp.JPG', 1450407720, 1451012765, 1, '省,科学院,科研处,莅临省,能源,环境,研究院,', 0, 0, 0, 0, 0, 0, '2015年12月17日,院科研处王阳处长一行3人莅临能源环境研究院检查学科创新团队发展情况和团队一年来的主要工作。 王阳处长逐一听取了能源院三个学科创新团队2015年的工作进展情况', '', 1, 0, 0, 143), +(156, 10, '0', 1452822060, 'p,f', 1, 1, 0, 188, 0, '黑龙江省能源环境研究院省院科技合作项目顺利通过鉴定', '', '', 'admin', '未知', '/uploads/allimg/160122/1-160122093932Z9-lp.JPG', 1452822060, 1453426824, 1, '黑龙江省,能源,环境,研究院省,院,科技,2016年,', 0, 0, 0, 0, 0, 0, '2016年1月14日,黑龙江省科技厅在哈尔滨市组织专家对黑龙江省能源环境研究院承担的省院科技合作项目寒区农业固体废弃物高值化利用关键技术研究进行了成果鉴定。 鉴定委员会由哈', '', 1, 0, 0, 144), +(157, 10, '0', 1454035080, '', 1, 1, 0, 156, 0, '我院两项黑龙江省应用技术研究与开发计划项目通过验收', '', '', 'admin', '未知', '', 1454035080, 1454378801, 1, '我院,两项,黑龙江省,应用技术,研究,与,开发,', 0, 0, 0, 0, 0, 0, '2015年1月,黑龙江省科技厅组织鉴定委员会对黑龙江省能源环境研究院和科技孵化中心承担的省应用技术研究与开发计划项目《煤与废弃有机制品共焦化技术开发与应用》和《M25车用甲', '', 1, 0, 0, 145), +(158, 27, '0', 1455500242, '', 1, 1, 0, 126, 0, '黑龙江省能源环境研究院
部分科技成果汇编目录(2008-2015)', '', '', 'admin', '未知', '', 1455500242, 1455499725, 1, '黑龙江省,能源,环境,研究院,部分,科技成果,', 0, 0, 0, 0, 0, 0, '序号 成果名称 鉴定时间 1 油页岩低温热解条件对页岩油性质的影响研究 2015 2 煤与废弃有机制品共焦化技术开发与应用 2015 3 M25车用甲醇汽油应用技术研究 2015 4 寒区农业固体废弃物高', '', 1, 0, 0, 146), +(159, 29, '0', 1455502609, '', 1, 1, 0, 56, 0, '黑龙江省能源环境研究院
专利目录(2008-2015)', '', '', 'admin', '未知', '', 1455502609, 1455501247, 1, '黑龙江省,能源,环境,研究院,专利,目录,序号,', 0, 0, 0, 0, 0, 0, '序号 专利名称 专利号 类型 1 利用高温厌氧发酵运行参数无线实时监测系统对高温厌氧发酵运行参数监测的方法 ZL201310364454.2 发明专利 2 一种基于沼气发电的余热回收利用系统 ZL201310', '', 1, 0, 0, 147), +(160, 29, '0', 1455502637, '', 1, 1, 0, 105, 0, '黑龙江省能源环境研究院
论文目录(2012-2015)', '', '', 'admin', '未知', '', 1455502637, 1455502806, 1, '黑龙江省,能源,环境,研究院,论文目录,2012-2015,', 0, 0, 0, 0, 0, 0, '序号 文章名称 类别 期刊名 作者 发表时间 1 沼气脱碳提纯技术研究进展 一般 黑龙江科学 潘良;徐晓秋;高德玉;王欣;刘伟; 2015 2 依兰油页岩逐级氧化/萃取及其产物的红外分析 一般 黑龙', '', 1, 0, 0, 148), +(161, 10, '0', 1455597060, 'p,f', 1, 1, 0, 153, 0, '黑龙江能源环境研究院召开会议学习贯彻2016年省科学院党风廉政建设工作会议和省科学院工作会议精神', '', '', 'admin', '未知', '/uploads/allimg/160225/1-160225123025Z2-lp.JPG', 1455597060, 1456374646, 1, '黑龙江,能源,环境,研究院,召开,会议,2月,15日,', 0, 0, 0, 0, 0, 0, '2月15日下午,省能源院召开会议,传达和贯彻2016年省科学院党风廉政建设工作会议和院工作会议精神。会议由省能源院党委书记、院长徐晓秋同志主持。 徐晓秋院长首先传达了省科学', '', 1, 0, 0, 149), +(162, 10, '0', 1458785400, 'p,f', 1, 1, 0, 186, 0, '省科学院人事处党支部与能源院能源化学创新团队召开党建联系点工作对接会', '', '', 'admin', '未知', '/uploads/allimg/160325/1-160325100Z33M-lp.JPG', 1458785400, 1458871784, 1, '省,科学院,人事处,党支部,与,能源,院,化学,', 0, 0, 0, 0, 0, 0, '2016年3月23日,省科学院人事处党支部与省能源环境研究院能源化学创新团队党建联系点工作对接会在能源院会议室召开。人事处党支部书记、处长张兴、副处长王向伟、盛力、曲恒峰、', '', 1, 0, 0, 150), +(163, 10, '0', 1457401080, 'p,f', 1, 1, 0, 177, 0, '创学习型组织 做知识型女性
省能源院召开“三八”妇女节女职工座谈会', '', '', 'admin', '未知', '/uploads/allimg/160328/1-16032P9321T09.jpg', 1457401080, 1459128781, 1, '创,学习型,组织,做,知识型,女性,省,能源,院,', 0, 0, 0, 0, 0, 0, '3月7日上午,省能源院召开以创学习型组织、做知识型女性为主题的女职工座谈会。省能源院领导班子及全体女职工参加了会议,会议由能源院党委书记、院长徐晓秋同志主持。 参会人', '', 1, 0, 0, 151), +(164, 10, '0', 1459239780, 'p,f', 1, 1, 0, 156, 0, '黑龙江省能源环境研究院召开全体职工大会学习贯彻落实习近平总书记参加黑龙江代表团审议时的重要讲话精神', '', '', 'admin', '未知', '/uploads/allimg/160329/1-160329163HYG-lp.JPG', 1459239780, 1459240698, 1, '黑龙江省,能源,环境,研究院,召开,全体,职工,', 0, 0, 0, 0, 0, 0, '3月29日上午,黑龙江省能源环境研究院召开全体职工专题学习会议,学习宣传和贯彻落实习近平总书记参加黑龙江代表团审议时的重要讲话精神、王宪魁同志在省委中心组学习上的讲话', '', 1, 0, 0, 152), +(165, 10, '0', 1461724284, 'p,f', 1, 1, 0, 136, 0, '黑龙江省能源环境研究院召开“两学一做”学习教育工作会议', '', '', 'admin', '未知', '/uploads/allimg/160427/1-16042G02P31c-lp.JPG', 1461724284, 1461724206, 1, '黑龙江省,能源,环境,研究院,召开,“,2016年,', 0, 0, 0, 0, 0, 0, '2016年4月27日,省能源院召开两学一做学习教育工作会议,省科学院人事处全体党员和省能源院全体党员参加了会议,会议由省能源院党委书记徐晓秋同志主持。 徐晓秋书记传达了省科', '', 1, 0, 0, 153), +(166, 10, '16', 1463634600, 'p,f', 1, 1, 0, 120, 0, '中共黑龙江省能源环境研究院委员会召开换届选举大会', '', '', 'admin', '未知', '/uploads/allimg/160520/1-1605200P531419-lp.JPG', 1463634600, 1463702827, 1, '中共,黑龙江省,能源,环境,研究院,委员会,', 0, 0, 0, 0, 0, 0, '根据《中国共产党章程》和相关规定,经省能源院党委研究,报请省科学院机关党委批准,中共黑龙江省能源环境研究院委员会于2016年5月19日召开全体党员大会,省能源院党委书记、院', '', 1, 0, 0, 154), +(167, 10, '16', 1465366775, 'p,f', 1, 1, 0, 195, 0, '黑龙江省能源环境研究院召开中心组学习扩大会议', '', '', 'admin', '未知', '/uploads/allimg/160608/1-16060Q421404Q-lp.JPG', 1465366775, 1465366979, 1, '黑龙江省,能源,环境,研究院,召开,中心组,6月,', 0, 0, 0, 0, 0, 0, '6月8日上午,黑龙江省能源环境研究院召开中心组学习扩大会议,学习贯彻落实省科学院党组中心组扩大会议精神和省委十一届七次全体会议上王宪魁书记的讲话及陆昊省长的总结讲话', '', 1, 0, 0, 155), +(168, 10, '16', 1467597540, 'p,f', 1, 1, 0, 110, 0, '缅怀先烈 铭记历史--省能源院开展纪念建党95周年活动', '', '', 'admin', '未知', '/uploads/allimg/160720/1-160H01002402E-lp.JPG', 1467597540, 1468980260, 1, '缅怀,先烈,铭记,历史,省,能源,院,开展,纪念,', 0, 0, 0, 0, 0, 0, '为纪念中国共产党建党九十五周年,省能源院全体职工及党建联系点院机关人事处党支部部分成员共同参观了爱国主义教育基地东北烈士纪念馆,一同缅怀先烈,深受教育,全体党员重', '', 1, 0, 0, 156), +(169, 10, '0', 1468462800, 'p,f', 1, 1, 0, 128, 0, '黑龙江省能源环境研究院两项课题顺利通过鉴定', '', '', 'admin', '未知', '/uploads/allimg/160720/1-160H0101Q4226-lp.JPG', 1468462800, 1468981161, 1, '黑龙江省,能源,环境,研究院,两项,课题,顺利,', 0, 0, 0, 0, 0, 0, '2016年7月13日,由黑龙江省科学院组织专家对省能源环境研究院承担的两项黑龙江省院所基本应用技术研究专项《车用甲醇汽油抗水复合添加剂技术研究》、《太阳能空气采暖智能控制装', '', 1, 0, 0, 157), +(170, 9, '0', 1470281087, 'p,f', 1, 1, 0, 77, 0, '省科学院与牡丹江市举行院市合作会议-省能源院两项成果成功签约', '', '', 'admin', '未知', '/uploads/allimg/160804/1-160P411225D57-lp.jpg', 1470281087, 1470281039, 1, '省,科学院,与,牡丹江市,举行,院市,合作,会议,', 0, 0, 0, 0, 0, 0, '8月2日,黑龙江省科学院与牡丹江市政府举行院市合作会议暨合作协议签约仪式,省科学院党组书记赵梅、院长郭春景、牡丹江市市委书记 张雨浦、 市长刘忻、副市长王钢出席会议。签', '', 1, 0, 0, 158), +(171, 9, '0', 1468487820, 'p', 1, 1, 0, 178, 0, '省科学院郭春景院长一行到省能源院调研检查学科团队发展建设情况', '', '', 'admin', '未知', '/uploads/allimg/161007/1-16100GH0102Q-lp.jpg', 1468487820, 1475832108, 1, '省,科学院,郭春景,郭,春景,院长,一行,到,能源,', 0, 0, 0, 0, 0, 0, '2016年7月13日下午,省科学院郭春景院长,沙长青副院长,科研处王阳处长,隋月梅副处长赴能源院调研检查学科团队发展建设情况。在听取完两个团队的工作汇报后,郭院长结合团队现', '', 1, 0, 0, 159), +(172, 9, '0', 1471514160, 'p', 1, 1, 0, 174, 0, '穆棱市长一行到省能源院考察调研', '', '', 'admin', '未知', '/uploads/allimg/161007/1-16100GJT1227-lp.JPG', 1471514160, 1475833869, 1, '穆棱,市长,一行,到,省,能源,院,考察,调研,8月,', 0, 0, 0, 0, 0, 0, '8月17日,穆棱市长、工信局局长和相关企业负责人一行到省能源院考察调研,洽谈合作。 省能源院党委书记、院长徐晓秋同志、副院长关春玲同志对来访人员表示欢迎,相关研究室科研', '', 1, 0, 0, 160), +(173, 9, '0', 1471600320, 'p', 1, 1, 0, 160, 0, '省能源院党委召开中心组学习扩大会议,深入学习贯彻落实全省“两学一做”学习教育工作座谈会上省委常委、组织部长杨汭同志讲话精神和院党组书记赵梅同志的重要讲话精神', '', '', 'admin', '未知', '/uploads/allimg/161007/1-16100GK510356-lp.JPG', 1471600320, 1475834193, 1, '省能源院党委召开中心组学习扩大会议,深入学', 0, 0, 0, 0, 0, 0, '8月18日省能源院党委召开中心组学习扩大会议,深入学习贯彻落实全省两学一做学习教育工作座谈会上省委常委、组织部长杨汭同志讲话精神和院党组书记赵梅同志的重要讲话精神,会', '', 1, 0, 0, 161); +INSERT INTO `dede_archives` (`id`, `typeid`, `typeid2`, `sortrank`, `flag`, `ismake`, `channel`, `arcrank`, `click`, `money`, `title`, `shorttitle`, `color`, `writer`, `source`, `litpic`, `pubdate`, `senddate`, `mid`, `keywords`, `lastpost`, `scores`, `goodpost`, `badpost`, `voteid`, `notpost`, `description`, `filename`, `dutyadmin`, `tackid`, `mtype`, `weight`) VALUES +(174, 9, '0', 1472465340, 'p', 1, 1, 0, 145, 0, '省能源院召开会议,传达全省科技创新大会精神和王宪魁书记、陆昊省长及省科学院党组赵梅书记的讲话精神', '', '', 'admin', '未知', '/uploads/allimg/161007/1-16100GQ01S34-lp.JPG', 1472465340, 1475835061, 1, '省,能源,院,召开,会议,传达,全省,科技创新,', 0, 0, 0, 0, 0, 0, '8月29日上午,省能源院召开会议,传达全省科技创新大会精神和王宪魁书记、陆昊省长及省科学院党组赵梅书记的讲话精神,省能源院党委成员及中层干部参加了会议。按照赵梅书记的', '', 1, 0, 0, 162), +(175, 9, '0', 1474625940, 'p', 1, 1, 0, 73, 0, '第十八届中国科协年会-暨全国科技工作者创新创业总决赛在西安举行,我院两选手参加比赛', '', '', 'admin', '未知', '/uploads/allimg/161007/1-16100GR35MG-lp.JPG', 1474625940, 1475835913, 1, '第十,八届,中国科协,年会,暨,全国,科技,9月,', 0, 0, 0, 0, 0, 0, '9月22日, 第十八届中国科协年会-暨全国科技工作者创新创业总决赛在西安举行,省能源院关春玲副院长担任领队,省能源院周闯和陆佳两位选手携《工业化封闭环式沼气发电系统1.0》', '', 1, 0, 0, 163), +(176, 9, '0', 1475231220, 'p', 1, 1, 0, 191, 0, '省能源院举办“情系青山绿水 共庆祖国华诞” 关爱环境社会实践活动', '', '', 'admin', '未知', '/uploads/allimg/161007/1-16100GS00a37-lp.JPG', 1475231220, 1475836263, 1, '省,能源,院,举办,“,情系,青山绿水,共庆,祖国,', 0, 0, 0, 0, 0, 0, '2016年9月30日,能源环境研究院与自动化研究所举行情系青山绿水共庆祖国华诞关爱环境社会实践活动。国庆前夕艳阳天,环保志愿松峰山,能源自动化齐携手,助建环保美家园。沿途尽', '', 1, 0, 0, 164), +(177, 10, '0', 1476439560, 'p,f', 1, 1, 0, 148, 0, '与时俱进,知识产权工作再上新台阶', '', '', 'admin', '未知', '/uploads/allimg/161021/1-1610210Q2193D-lp.jpg', 1476439560, 1477008852, 1, '与时俱进,知识产权,工作,再上,新台阶,新,', 0, 0, 0, 0, 0, 0, '2016年10月12-14日,黑龙江省能源环境研究院参加了由黑龙江省知识产权局举办的关于举办全省高校、科研院所知识产权管理工作经验交流会,为进一步提升我院所知识产权工作管理水平', '', 1, 0, 0, 165), +(178, 10, '0', 1476789420, 'p,f', 1, 1, 0, 147, 0, '我院参加省科协创新方法培训班-丁会敏同志荣获优秀学员光荣称号', '', '', 'admin', '未知', '/uploads/allimg/161021/1-1610210R624I8-lp.jpg', 1476789420, 1477009653, 1, '我院,参加省,科协,创,新方法,培训班,丁会敏,', 0, 0, 0, 0, 0, 0, '2016年10月13日,省能源院郭广亮、丁会敏、范超三人参加了黑龙江省科协双创活动周一线工程师创新方法培训班课程,三人带着各自在工作中遇到的一些技术机械难题参加培训,在6天的', '', 1, 0, 0, 166), +(179, 10, '0', 1476405840, 'p,f', 1, 1, 0, 147, 0, '我院参加全国科学院联盟能源分会会议', '', '', 'admin', '未知', '/uploads/allimg/161021/1-1610210T230Y6-lp.jpg', 1476405840, 1477010571, 1, '我院,参加,全国,科学院,联盟,能源,分会,会议,', 0, 0, 0, 0, 0, 0, '10月13日,我院参加全国科学院联盟能源分会会议。 我院作为全国科学院联盟能源分会的会员单位,与其他成员单位共同推动中科院、地方科学院和骨干院所企业在能源领域的战略合作', '', 1, 0, 0, 167), +(180, 10, '0', 1476406200, 'p,f', 1, 1, 0, 61, 0, '省能源院参加全国科学院洁净能源知识产权联盟成立大会', '', '', 'admin', '未知', '/uploads/allimg/161021/1-1610210TZ3J7-lp.JPG', 1476406200, 1477011001, 1, '省,能源,院,参加,全国,科学院,洁净,知识产权,', 0, 0, 0, 0, 0, 0, '10月13日,省能源院参加全国科学院洁净能源知识产权联盟成立大会。 会上,我院与联盟单位共商能源产业布局、低碳经济发展和知识产权运营事宜,提升产业创新能力,探索实践科技', '', 1, 0, 0, 168), +(181, 16, '10', 1476838380, 'p,f', 1, 1, 0, 72, 0, '我院召开“两学一做”“双创争优”延安学习培训汇报会', '', '', 'admin', '未知', '/uploads/allimg/161021/1-1610210ZK02R-lp.JPG', 1476838380, 1477012122, 1, '我院,召开,“,两学一做,”,双创争优,延安,', 0, 0, 0, 0, 0, 0, '10月19日,我院召开两学一做双创争优延安学习培训汇报会,能源院领导班子和全体党员参加了本次汇报会。 参加省科学院延安培训班的两名党员代表李福裿和王欣,分别做了以学习光', '', 1, 0, 0, 169), +(182, 9, '0', 1477444179, 'p,f', 1, 1, 0, 172, 0, '我院组织全院职工观看纪录片《永远在路上》', '', '', 'admin', '未知', '/uploads/allimg/161026/1-161026091U3336-lp.JPG', 1477444179, 1477444815, 1, '我院,组织,全院,职工,观看,纪录片,《,根据省,', 0, 0, 0, 0, 0, 0, '根据省科学院关于学习贯彻落实《中国共产党问责条例》的相关部署,我院结合两学一做学习教育工作,利用午休时间,组织广大职工观看纪录《永远在路上》。', '', 1, 0, 0, 170), +(183, 9, '0', 1467944040, 'p', 1, 1, 0, 118, 0, '召开职工大会学习共产党成立95周年各项讲话精神', '', '', 'admin', '未知', '/uploads/allimg/161026/1-16102610150I35-lp.JPG', 1467944040, 1477448150, 1, '召开,职工,大会,学习,共产党,成立,95周年,7月,', 0, 0, 0, 0, 0, 0, '7月7日下午能源院召开了全体职工大会,会议传达了中央办公厅关于学习贯彻习近平总书记在庆祝中国共产党成立95周年大会上的讲话;学习贯彻王宪魁书记在中共黑龙江省委庆祝中国共', '', 1, 0, 0, 171), +(184, 9, '0', 1477647000, 'p', 1, 1, 0, 74, 0, '我院组织全体职工认真学习贯彻习长征精神', '', '', 'admin', '未知', '/uploads/allimg/161111/1-161111093936144-lp.JPG', 1477647000, 1478829372, 1, '我院,组织,全体,职工,认真,学习贯彻,习,长征,', 0, 0, 0, 0, 0, 0, '按照省科学院机关党委《关于认真学习贯彻习近平总书记在纪念红军长征胜利80周年大会上的讲话的通知》及学习十八届六中全会精神相关要求,10月28日省能源院召开全体职工会议,会', '', 1, 0, 0, 172), +(185, 9, '0', 1414486620, 'p', 1, 1, 0, 74, 0, '我院组织全体职工认真学习贯彻习长征精神', '', '', 'admin', '未知', '/uploads/allimg/161111/1-161111093936144-lp.JPG', 1414486620, 1478829378, 1, '我院,组织,全体,职工,认真,学习贯彻,习,长征,', 0, 0, 0, 0, 0, 0, '按照省科学院机关党委《关于认真学习贯彻习近平总书记在纪念红军长征胜利80周年大会上的讲话的通知》及学习十八届六中全会精神相关要求,10月28日省能源院召开全体职工会议,会', '', 1, 0, 0, 172), +(186, 10, '0', 1489978973, '', 1, 1, 0, 146, 0, '公示-“黑龙江省能源环境研究院(黑龙江省科学院科技孵化中心)间接费用管理办法(试行)”', '', '', 'admin', '未知', '', 1489978973, 1489978913, 1, '“,黑龙江省,能源,环境,研究院,科学院,科技,', 0, 0, 0, 0, 0, 0, '黑龙江省能源环境研究院(黑龙江省科学院科技孵化中心)间接费用管理办法(试行),经2017年3月20日全体职工大会审议通过,即日起进行公示,公示期五个工作日。如有任何异议请与', '', 1, 0, 0, 174), +(187, 10, '16', 1492653840, 'p,f', 1, 1, -2, 62, 0, '我院召开党风廉政建设扩大会议', '', '', 'admin', '未知', '/uploads/allimg/170502/1-1F5020QH6427-lp.JPG', 1492653840, 1493684745, 1, '我院,召开,党风,廉政建设,扩大会议,4月,28日,', 0, 0, 0, 0, 0, 0, '4月28日,省能源院召开党风廉政建设扩大会议,迅速传达省科学院月报会上关于党风廉政建设的相关要求,并部署各项工作,省能源院领导班子,全体职工参加了会议,会议由省能源院', '', 1, 0, 0, 175), +(188, 10, '0', 1492566780, 'p,f', 1, 1, 0, 146, 0, '我院承担的省院所基本应用技术研究专项顺利通过鉴定', '', '', 'admin', '未知', '/uploads/allimg/170502/1-1F502100322b4-lp.JPG', 1492566780, 1493690675, 1, '我院,承担,的,省,院所,基本,应用技术,研究,', 0, 0, 0, 0, 0, 0, '2017年4月19日,由黑龙江省科学院组织专家对省能源环境研究院承担的黑龙江省院所基本应用技术研究专项《基于一村一厂生物质加工和清洁利用的寒区无煤生态村应用技术研究》进行了', '', 1, 0, 0, 176), +(189, 10, '16', 1493968740, 'p,f', 1, 1, 0, 74, 0, '“成长 责任 理想”我院召开青年职工交流座谈会', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F512152GCM-lp.JPG', 1493968740, 1494574160, 1, '“,成长,责任,理想,”,我院,召开,青年,职工,', 0, 0, 0, 0, 0, 0, '为纪念并弘扬五四精神,展现青春风采,激发广大青年科技人员立足本职岗位、投身科研事业的热情,5月5日上午,省能源环境研究院开展了成长责任理想为主题的五四青年节座谈会,', '', 1, 0, 0, 177), +(190, 10, '16', 1493958540, 'p,f', 1, 1, 0, 148, 0, '省能源院召开全体职工大会传达黑龙江省第十二次党代会精神、科学院党组扩大会议精神及赵梅书记讲话精神', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F512153040C1-lp.JPG', 1493958540, 1494574382, 1, '省,能源,院,召开,全体,职工,大会,传达,5日,', 0, 0, 0, 0, 0, 0, '5日上午,黑龙江省能源环境研究院组织召开全体职工大会,院班子成员参加会议,会议由党委书记兼院长徐晓秋同志主持。 会议传达了黑龙江省第十二次党代会精神、科学院党组扩大', '', 1, 0, 0, 178), +(191, 10, '9', 1493961120, 'p,f', 1, 1, 0, 149, 0, '省能源院顺利通过省直精神文明单位标兵验收', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F512153K3D0-lp.JPG', 1493961120, 1494574897, 1, '省,能源,院,顺利,通过,省直,精神,文明单位,', 0, 0, 0, 0, 0, 0, '5日上行,省能源院与其他3家院所一起参加省省直工委文明办文明单位创建工作验收会,并顺利通过验收。', '', 1, 0, 0, 179), +(192, 10, '16', 1493365260, 'p,f', 1, 1, 0, 189, 0, '省能源院召开党风廉政建设扩大会议迅速传达省科学院党风廉政建设相关要求', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F512154321335-lp.JPG', 1493365260, 1494575102, 1, '省,能源,院,召开,党风,廉政建设,扩大会议,4月,', 0, 0, 0, 0, 0, 0, '4月28日,省能源院召开党风廉政建设扩大会议,迅速传达省科学院月报会上关于党风廉政建设的相关要求,并部署各项工作,省能源院领导班子,全体职工参加了会议,会议由省能源院', '', 1, 0, 0, 180), +(193, 10, '16', 1492593240, 'p,f', 1, 1, 0, 108, 0, '省能源院党委召开中心组学习扩大会议学习贯彻落实省科学院党风廉政会议精神', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F51215542O40-lp.JPG', 1492593240, 1494575710, 1, '省,能源,院,党委,召开,中心组,学习,扩大会议,', 0, 0, 0, 0, 0, 0, '4月19日,省能源院党委召开中心组学习扩大会议,学习贯彻落实省科学院党风廉政会议精神,省能源院领导班子、党委委员,各党支部书记、部门负责人、职工代表参加了会议,会议由', '', 1, 0, 0, 181), +(194, 10, '16', 1490946900, 'p,f', 1, 1, 0, 161, 0, '省能源院党委召开中心组学习会议', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121556302J-lp.JPG', 1490946900, 1494575832, 1, '省,能源,院,党委,召开,中心组,学习,会议,3月,', 0, 0, 0, 0, 0, 0, '3月31日,省能源院党委召开中心组学习会议,院领导班子参加会议,会议由徐晓秋同志主持。 参会人员学习了省科学院第二期关键少数政治理论能力提升班相关学习内容及党组书记赵梅', '', 1, 0, 0, 182), +(195, 10, '9', 1488960000, 'p,f', 1, 1, 0, 68, 0, '省能源院举办女职工观影活动喜迎“三八”妇女节', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F512155PHC-lp.JPG', 1488960000, 1494575999, 1, '省,能源,院,举办,女,职工,观影,活动,喜迎,“,', 0, 0, 0, 0, 0, 0, '值此三八妇女节来临之际,省能源院举行庆祝活动,组织全体女职工观看电影,这次活动营造出了浓郁的节日气氛,使广大女职工能在平日繁忙的工作中,放松身心,以更好的状态投入', '', 1, 0, 0, 183), +(196, 10, '16', 1487145600, 'p,f', 1, 1, 0, 167, 0, '省能源环境研究院党委召开“两学一做”专题民主生活会', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F51216023S96-lp.JPG', 1487145600, 1494576215, 1, '省,能源,环境,研究院,党委,召开,“,两学一做,', 0, 0, 0, 0, 0, 0, '2月15日,黑龙江省能源环境研究院党委召开两学一做专题民主生活会,省能源院党委书记、院长徐晓秋同志和省能源院党委委员、副院长关春玲同志参加会议,省科学院党组书记赵梅同', '', 1, 0, 0, 184), +(197, 10, '9', 1487577840, 'p,f', 1, 1, 0, 200, 0, '省能源院各党支部组织全体党员及广大干部职工集体观看省科学院党组赵梅书记受邀坐客人民网视频访谈', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121605241R-lp.JPG', 1487577840, 1494576431, 1, '省,能源,院各,党支部,组织,全体,党员,及,20日,', 0, 0, 0, 0, 0, 0, '20日,省能源院各党支部组织全体党员及广大干部职工集体观看省科学院党组赵梅书记受邀坐客人民网视频访谈。', '', 1, 0, 0, 185), +(198, 10, '9', 1487318820, 'p,f', 1, 1, 0, 146, 0, '省能源院召开全体职工会议宣布关于任命姜宏宇同志为孵化中心主任的任命文件', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F512160QNN-lp.JPG', 1487318820, 1494576611, 1, '省,能源,院,召开,全体,职工,会议,宣布,关于,', 0, 0, 0, 0, 0, 0, '2月17日上午,省能源院召开全体职工会议,省科学院党组成员曾祥俊同志、人事处处长张兴同志参加了会议,会议由省能源院院长徐晓秋同志主持。会上,张兴处长宣读了关于任命姜宏', '', 1, 0, 0, 186), +(199, 10, '9', 1487232600, 'p,f', 1, 1, 0, 87, 0, '省科学院郭春景院长与我院人员一共赴伊春调研', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F512161255R0-lp.JPG', 1487232600, 1494576936, 1, '省,科学院,郭春景,郭,春景,院长,与,我院,人员,', 0, 0, 0, 0, 0, 0, '2月16日,省科学院郭春景院长、能源院徐晓秋院长和生物能团队带头人刘伟一同前往伊春格润生态养殖公司的大型沼气工程进行调研,郭院长要求能源院要结合我省养殖业现状,在废弃', '', 1, 0, 0, 187), +(200, 10, '0', 1485245760, 'p,f', 1, 1, 0, 165, 0, '省能源环境研究院召开职工大会传达省科学院2017年工作会议精神', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F512161H3134-lp.JPG', 1485245760, 1494577074, 1, '省,能源,环境,研究院,召开,职工,大会,传达省,', 0, 0, 0, 0, 0, 0, '2017年1月24日上午,省能源环境研究院召开职工大会传达省科学院2017年工作会议精神,会上徐晓秋院长传达了省科学院2017年工作报告及院党组书记赵梅同志的讲话精神,要求各部门会后', '', 1, 0, 0, 188), +(201, 10, '0', 1484036280, 'p,f', 1, 1, 0, 196, 0, '省能源院三项课题顺利通过鉴定', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121619492K-lp.JPG', 1484036280, 1494577272, 1, '省,能源,院,三项,课题,顺利,通过鉴定,2017年,', 0, 0, 0, 0, 0, 0, '2017年1月10日,由黑龙江省科学院组织专家对省能源环境研究院和科技孵化中心承担的三项课题省科学院预研项目《寒区农业固体废弃物循环厌氧发酵关键技术研究》、学部委员指导专项', '', 1, 0, 0, 189), +(202, 10, '0', 1482308580, 'p,f', 1, 1, 0, 153, 0, '省能源院召开全体党员大会及全体职工大会', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F512162430E7-lp.JPG', 1482308580, 1494577573, 1, '省,能源,院,召开,全体,党员,大会,及,职工,12月,', 0, 0, 0, 0, 0, 0, '12月21日,省能源院召开全体党员大会,省能源院党建联系点、党组成员曾祥俊同志,院人事处副处长王向伟同志参加了会议,会议由省能源院党委书记、院长徐晓秋同志主持。 首先,', '', 1, 0, 0, 190), +(203, 10, '16', 1480321740, 'p,f', 1, 1, 0, 66, 0, '省能源院召开会议学习贯彻落实省委十一届八次全会精神、省委书记王宪魁同志讲话精神及省科学院党组书记赵梅同志在省科学院学习全会精神会议上的讲话', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F512163002V9-lp.JPG', 1480321740, 1494577893, 1, '省,能源,院,召开,会议,学习贯彻,落实,省委,', 0, 0, 0, 0, 0, 0, '11月28日,省能源院召开会议,学习贯彻落实省委十一届八次全会精神、省委书记王宪魁同志讲话精神及省科学院党组书记赵梅同志在省科学院学习全会精神会议上的讲话,会议由省能源', '', 1, 0, 0, 191), +(204, 10, '0', 1480149120, 'p,f', 1, 1, 0, 195, 0, '黑龙江省能源环境学会召开第二次年会', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F512163406459-lp.JPG', 1480149120, 1494578199, 1, '黑龙江省,能源,环境,学会,召开,第二次,年会,', 0, 0, 0, 0, 0, 0, '11月26日,作为黑龙江省科学技术协会学术年会的重要组成部分,也是第八届黑龙江省科学技术协会学术年会暨太阳岛科技论坛分会场,由黑龙江省能源环境学会,黑龙江省自然辩证法研', '', 1, 0, 0, 192), +(205, 10, '16', 1478248800, 'p,f', 1, 1, 0, 92, 0, '省能源院召开党委中心组学习扩大会议', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F512164025935-lp.JPG', 1478248800, 1494578483, 1, '省,能源,院,召开,党委,中心组,学习,扩大会议,', 0, 0, 0, 0, 0, 0, '11月4日,省能源院召开党委中心组学习扩大会议,省能源院领导班子、党委委员、党支部书记、各部门负责人和党外人士出席了会议,会议由党委书记、院长徐晓秋同志主持。 会议第一', '', 1, 0, 0, 193), +(206, 10, '0', 1477644240, 'p,f', 1, 1, 0, 139, 0, '省能源院召开全体职工会议学习习近平总书记在纪念红军长征80周年大会上的讲话', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F512164420353-lp.JPG', 1477644240, 1494578752, 1, '省,能源,院,召开,全体,职工,会议,学,习习,近,', 0, 0, 0, 0, 0, 0, '按照省科学院机关党委《关于认真学习贯彻习近平总书记在纪念红军长征胜利80周年大会上的讲话的通知》及学习十八届六中全会精神相关要求,28日省能源院召开全体职工会议,会议围', '', 1, 0, 0, 194), +(207, 28, '0', 1494581381, 'p,f', 1, 1, 0, 116, 0, '省科学院科技进步一等奖', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121AJEc-lp.JPG', 1494581381, 1494579504, 1, '省,科学院,科技,进步,一等奖,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 6), +(208, 28, '0', 1494579549, 'p', 1, 1, 0, 133, 0, '省科学院TRIZ大赛三等奖', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121A922X3-lp.JPG', 1494579549, 1494579594, 1, '省,科学院,TRIZ,大赛,三等奖,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 196), +(209, 28, '0', 1494579607, 'p,f', 1, 1, 0, 63, 0, '省科学院书写党章优秀组织奖', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121F0261R-lp.JPG', 1494579607, 1494579671, 1, '省,科学院,书写,党章,优秀,组织奖,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 197), +(210, 28, '0', 1494579678, 'p,f', 1, 1, 0, 130, 0, '省科学院TRIZ大赛三等奖', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121F133421-lp.JPG', 1494579678, 1494579731, 1, '省,科学院,TRIZ,大赛,三等奖,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 198), +(211, 28, '0', 1494581638, 'p,f', 1, 1, 0, 161, 0, '黑龙江省科学技术三等奖', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121F353P8-lp.JPG', 1494581638, 1494579893, 1, '黑龙江省,科学技术,三等奖,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 3), +(212, 28, '0', 1494581999, 'p,f', 1, 1, 0, 194, 0, '黑龙江省科学技术发明一等奖', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121F522936-lp.JPG', 1494581999, 1494579955, 1, '黑龙江省,科学技术,发明,一等奖,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 1), +(213, 28, '0', 1494579958, 'p', 1, 1, 0, 161, 0, '中国环境科学学会团体会员', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121F614C7-lp.JPG', 1494579958, 1494580019, 1, '中国,环境科学,学会,团体,会员,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 201), +(214, 28, '0', 1494580023, 'p', 1, 1, 0, 186, 0, '省科技厅共享服务平台先进集体、先进个人', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121FH4S2-lp.JPG', 1494580023, 1494580105, 1, '省,科技厅,共享,服务平台,先进集体,、,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 202), +(215, 28, '0', 1494580109, 'p', 1, 1, 0, 70, 0, '省科技厅共享服务平台先进集体、先进个人', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121FT2441-lp.JPG', 1494580109, 1494580148, 1, '省,科技厅,共享,服务平台,先进集体,、,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 203), +(216, 28, '0', 1494580151, 'p,f', 1, 1, 0, 55, 0, '省科技厅共享服务平台先进集体、先进个人', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121F930448-lp.JPG', 1494580151, 1494580191, 1, '省,科技厅,共享,服务平台,先进集体,、,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 204), +(217, 28, '0', 1494580195, 'p,f', 1, 1, 0, 55, 0, '省直文明单位', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121G015V4-lp.JPG', 1494580195, 1494580242, 1, '省直,文明单位,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 205), +(218, 28, '0', 1494580246, 'p,f', 1, 1, 0, 162, 0, '省直“五一巾帼奖”集体', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121G10KQ-lp.JPG', 1494580246, 1494580310, 1, '省直,“,五一巾帼奖,”,集体,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 206), +(219, 28, '0', 1494580313, 'p,f', 1, 1, 0, 75, 0, '省科学院先进党组织', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121G212551-lp.JPG', 1494580313, 1494580374, 1, '省,科学院,先进,党组织,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 207), +(220, 28, '0', 1494580381, 'p,f', 1, 1, 0, 130, 0, '省直精神文明单位', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121G405D6-lp.JPG', 1494580381, 1494580471, 1, '省直,精神,文明单位,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 208), +(221, 28, '0', 1494580476, 'p,f', 1, 1, 0, 110, 0, '省直青年文明号', '', '', 'admin', '未知', '/uploads/allimg/170512/1-1F5121G44a92-lp.JPG', 1494580476, 1494580515, 1, '省直,青年文明号,', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 209), +(222, 10, '0', 1496711640, 'p,f', 1, 1, 0, 127, 0, '省科学院审计部进驻我院开展2016年度审计工作', '', '', 'admin', '未知', '/uploads/allimg/170616/1-1F616091925Y9-lp.jpg', 1496711640, 1497576057, 1, '省,科学院,审计部,进驻,我院,开展,2016,年度,', 0, 0, 0, 0, 0, 0, '6月5日上午,根据院党组关于开展全院2016年度财务收支审计工作的部署,院党组成员副院长沙长青同志,审计部副处长曹海虹同志率院审计部协同审计师事务所进驻省能源院开展2016年度', '', 1, 0, 0, 210), +(223, 10, '0', 1502242507, 'p,f', 1, 1, 0, 181, 0, '能源院党委组织全体职工观看中国人民解放军建军90周年大会直播', '', '', 'admin', '未知', '/uploads/allimg/170809/1-1FPZ939495X-lp.jpg', 1502242507, 1502243113, 1, '能源,院,党委,组织,全体,职工,观看,8月,1日,', 0, 0, 0, 0, 0, 0, '8月1日上午10:00,庆祝中国人民解放军建军90周年大会在人民大会堂举行,中共中央总书记、国家主席、中央军委主席习近平出席大会并发表重要讲话。按照省委办公厅及省科学院机关党', '', 1, 0, 0, 211), +(224, 10, '0', 1501142160, 'p,f', 1, 1, 0, 118, 0, '中国科学院广州能源院所庄新姝研究员、孔晓英博士到我院调研', '', '', 'admin', '未知', '/uploads/allimg/170809/1-1FP9151G6105-lp.jpg', 1501142160, 1502263265, 1, '中国科学院,广州,能源,院所,庄新,姝,研究员,', 0, 0, 0, 0, 0, 0, '7月27日上午,作为龙广结合首批抵哈的科研单位,中国科学院广州能源院所庄新姝研究员、孔晓英博士一行到省能源环境研究院调研,就涉及的研究领域进行洽谈交流,同时与生物能创', '', 1, 0, 0, 212), +(225, 10, '0', 1503448797, 'p,f', 1, 1, 0, 64, 0, '山东大学鲍晓明教授,黑龙江中丹建业生物能源公司总经理王建业一行两人来我院进行洽谈交流', '洽谈交流', '', 'admin', '未知', '/uploads/allimg/170823/1-1FR30T21M20-lp.jpg', 1503448797, 1503449429, 1, '山东,大学,鲍,晓明,教授,黑龙,江中,丹,建业,', 0, 0, 0, 0, 0, 0, '2017年8月22日,山东大学鲍晓明教授,黑龙江中丹建业生物能源公司总经理王建业一行两人来到省能源环境研究院,就纤维素秸秆乙醇工业所涉及的纤维素降解菌及酵母菌的研发与应用进', '', 1, 0, 0, 213), +(226, 10, '0', 1506321153, 'p,f', 1, 1, 0, 126, 0, '能源院开展科普活动', '', '', 'admin', '未知', '/uploads/allimg/170925/1-1F925143Q0603-lp.jpg', 1506321153, 1506321569, 1, '能源,院,开展,科普活动,9月,20日,省,能源,环境,', 0, 0, 0, 0, 0, 0, '9月20日,省能源环境学会到漠河县宏林菌业种植有限公司进行林下产业废弃物再利用技术及室内空气污染控制技术科普活动,并与石忠斌董事长探讨了菌业废弃物综合利用方案等问题。', '', 1, 0, 0, 214), +(227, 10, '16', 1508291700, 'p,f', 1, 1, 0, 136, 0, '18日9:00 省能源环境研究院党委组织全体干部职工共同观看十九大召开盛况直播', '', '', 'admin', '未知', '/uploads/allimg/171020/1-1G020095H4433-lp.jpg', 1508291700, 1508464828, 1, '18日,省,能源,环境,研究院,党委,组织,全体,', 0, 0, 0, 0, 0, 0, '18日9:00,按照省科学院相关部署,省能源环境研究院党委组织全体干部职工共同观看十九大召开盛况直播,共唱国歌,以饱满的精神工作状态,庆祝十九大胜利召开!', '', 1, 0, 0, 215), +(228, 10, '16', 1508378540, 'p,f', 1, 1, 0, 108, 0, '10月19日上午省能源院领导班子、全体党员干部对十九大报告全文进行了学习,参会人员围绕省能源院发展实际进行了解读学习和讨论', '', '', 'admin', '未知', '/uploads/allimg/171020/1-1G020100J41X-lp.jpg', 1508378540, 1508465312, 1, '10月,19日,上午省,能源,院,领导班子,、,全体,', 0, 0, 0, 0, 0, 0, ' 10月19日上午,省能源院召开全体职工大会,全面部署学习贯彻落实十九大会议精神,省能源院党委书记、院长徐晓秋同志主持会议,省能源院领导班子、全体党员干部及民主人士', '', 1, 0, 0, 216), +(229, 10, '0', 1510819005, 'p,f', 1, 1, 0, 145, 0, '以向善、向上、向阳、向党精气神 打造一流科研创新团队 --省能源院生物能创新团队党支部开展“说讲谈”活动', '', '', 'admin', '未知', '/uploads/allimg/171116/1-1G11616001V39-lp.JPG', 1510819005, 1510819412, 1, '以,向善,、,向上,向阳,向,党,精气神,打造,为,', 0, 0, 0, 0, 0, 0, '为深入贯彻落实党的十九大精神,落实院党组提出关于“新思想引领改革发展思路,新征程凝聚创新创业力量”工作的相关部署,11月15日上午,省能源环境研究院生物能创新团队党支部', '', 1, 0, 0, 217), +(230, 10, '0', 1510560600, 'p', 1, 1, 0, 92, 0, ' 为进一步巩固并发挥省能源院生物能创新团队在寒区固体废弃物处理处置、清洁能源领域的科研技术优势,经过省能源院与农业部沼气科学研究所的前期准备,11月13日上午,省科学院郭春景院长与来访的农业部沼气科学研究所邓宇副所长一行,在省科学院会议室进行了座谈,省科学院产业化处李骏处长,省能源院徐晓秋院长,省能源院相关科研人员参加了会议。 双方就在省能源院建立“寒区生物能源利用联合实验室”相关工作进行了深入交流。郭院长首先对邓副所长一行的到来表示欢迎,郭院长指出,要充分发挥好沼气所和能源院各自在生物质', '', '', 'admin', '未知', '/uploads/allimg/171116/1-1G116161130414-lp.JPG', 1510560600, 1510820021, 1, '为,进一步,巩固,并,发挥省,能源,院,生物能,为,', 0, 0, 0, 0, 0, 0, ' 为进一步巩固并发挥省能源院生物能创新团队在寒区固体废弃物处理处置、清洁能源领域的科研技术优势,经过省能源院与农业部沼气科学研究所的前期准备,11月13日上午,省科学院郭', '', 1, 0, 0, 218), +(231, 10, '10', 1511829000, 'p,f', 1, 1, 0, 74, 0, '省能源院召开全体职工会议 传达贯彻落实省委第十二届二次全会精神', '', '', 'admin', '未知', '/uploads/allimg/171204/1-1G2040S9332A-lp.jpg', 1511829000, 1512348104, 1, '省,能源,院,召开,全体,职工,会议,传达,贯彻,', 0, 0, 0, 0, 0, 0, '11月27日下午,省能源院召开全体党员会议,传达贯彻落实省委第十二届二次全会精神,省能源院领导班子,全体党员干部,民主人士代表参加了会议,会议由省能源院党委书记、院长徐', '', 1, 0, 0, 219), +(232, 10, '0', 1515142680, 'p,f', 1, 1, 0, 102, 0, '省能源院召开2017年度总结表彰大会', '', '', '李福裿', '未知', '/uploads/allimg/180108/1-1P10PZ0464B-lp.JPG', 1515142680, 1515373470, 1, '省,能源,院,召开,2017,年度,总结,表彰大会,1月,', 0, 0, 0, 0, 0, 0, '1月2日上午,省能源院在会议室隆重召开2017年度总结表彰大会,省科学院郭春景院长,省能源院领导班子及全体职工参加了大会,会议由院长徐晓秋同志主持。', '', 1, 0, 0, 220), +(233, 10, '16', 1520818014, 'p,f', 1, 1, 0, 95, 0, '省能源院组织全体党员干部集中收看全国人大一次会议开幕盛况', '', '', 'admin', '未知', '/uploads/allimg/180305/1-1P305114129A6-lp.JPG', 1520818014, 1520223898, 1, '省,能源,院,组织,全体,党员,干部,集中,收看,', 0, 0, 0, 0, 0, 0, '3月5日上午9:00时,按照省科学院部署,省能源院组织全体党员干部集中收看全国人大一次会议开幕盛况', '', 1, 0, 0, 221), +(234, 10, '16', 1520817978, 'p,f', 1, 1, 0, 82, 0, '能源院开展庆祝“三八国际妇女节"系列活动', '', '', 'admin', '未知', '/uploads/allimg/180309/1-1P309105GR46-lp.jpg', 1520817978, 1520564423, 1, '能源,院,开展,庆祝,“,三八国际妇女节,系列,', 0, 0, 0, 0, 0, 0, '为庆祝全国人大召开,喜迎三八国际妇女节的到来,省能院开展系列活动,3月7日召开“聪慧时尚,自信坚韧,创新进取”主题女职工座谈会,能源院领导班子与全体女职工一同畅谈工作', '', 1, 0, 0, 222), +(235, 10, '10,16', 1522221418, 'p,f', 1, 1, 0, 172, 0, '省能源院召开全中心组学习扩大会议,学习传达3月23日省科学院党组扩大会议精神', '', '', 'admin', '未知', '/uploads/allimg/180328/1-1P32Q513193L-lp.jpg', 1522221418, 1522221407, 1, '省,能源,院,召开,全,中心组,学习,扩大会议,', 0, 0, 0, 0, 0, 0, ' 3月26日上午9:00,省能源院召开全中心组学习扩大会议,学习传达3月23日省科学院党组扩大会议精神。会议由党委书记、院长徐晓秋同志主持,能源院全体职工参加了会议。', '', 1, 0, 0, 223), +(236, 10, '0', 1526544740, 'p,f', 1, 1, 0, 83, 0, '能源院开展“汇聚读书力量 托起明日希望”文化扶贫慰问活动', '', '', 'admin', '未知', '/uploads/allimg/180517/1-1P51G61053292-lp.jpg', 1526544740, 1526544716, 1, '能源,院,开展,“,汇聚,读书,力量,托起,明日,', 0, 0, 0, 0, 0, 0, ' 按照省科学院团委的安排部署,省能源院组织全体干部职工开展“汇聚阅读力量 托起明日希望”文化扶贫慰问活动。\r\n', '', 1, 0, 0, 224), +(237, 10, '0', 1531121347, 'p', 1, 1, 0, 83, 0, '省科学院科研处到省能源院进行科研情况调研', '', '', 'admin', '未知', '/uploads/allimg/180709/1-1PF9153620917-lp.JPG', 1531121347, 1531121927, 1, '省,科学院,科研处,到,能源,院,进行,科研,情况,', 0, 0, 0, 0, 0, 0, '5月24日上午,在院科研处倪宏伟处长带领下,院科研处一行三人到省能源院开展科研情况调研工作,省能源院领导班子及科研办相关人员参加了调研,省能源院分别从科研总体情况、项', '', 1, 0, 0, 225), +(238, 10, '0', 1530171780, 'p', 1, 1, 0, 66, 0, '省能源环境研究院与化工学院项目对接会', '', '', 'admin', '未知', '/uploads/allimg/180709/1-1PF91546132Y-lp.jpg', 1530171780, 1531122523, 1, '省,能源,环境,研究院,与,化工学院,项目,对接,', 0, 0, 0, 0, 0, 0, '6月28日下午,能源院徐晓秋院长带队一行4人赴理工大学化学与环境工程学院洽谈合作事宜,双方围绕废弃物厌氧处理、木质纤维素降解转化等方面展开深入交流,并对学生培养、互聘导', '', 1, 0, 0, 226), +(239, 10, '0', 1531122715, 'p', 1, 1, 0, 185, 0, '2018年斯里兰卡城市固体废弃物处理研修班访问黑龙江省能源环境研究院', '', '', '刘伟', '未知', '/uploads/allimg/180709/1-1PF9155404438-lp.jpg', 1531122715, 1531122904, 1, '2018年,斯里兰卡,城市,固体,废弃物,处理,2018年,', 0, 0, 0, 0, 0, 0, '2018年7月4-6日,2018年斯里兰卡城市固体废弃物处理研修班在哈尔滨举办。本次研修班由商务部主办,农业农村部沼气科学研究所承办,共有20名来自斯里兰卡不同地区的市政官员参加了此', '', 1, 0, 0, 227), +(240, 10, '16', 1530416040, 'p,f', 1, 1, 0, 134, 0, '省能源环境研究院党委开展庆“七一”不忘初心跟党走、牢记使命有作为系列主题活动', '', '', 'admin', '未知', '/uploads/allimg/180710/1-1PG0113625596-lp.jpg', 1530416040, 1531194387, 1, '省,能源,环境,研究院,党委,开展,庆,“,七一,', 0, 0, 0, 0, 0, 0, '为热烈庆祝中国共产党成立97周年,进一步增强党组织的凝聚力和战斗力,不断深入学习贯彻党的十九大精神,不断强化党员\"四个意识\",不断深化“两学一做”学习教育,不断夯实基层', '', 1, 0, 0, 228), +(241, 10, '0', 1531400321, 'p,f', 1, 1, 0, 141, 0, '省能源院同哈理工化学与工程学院签署共建协议,成立教学科研实践基地', '', '', 'admin', '未知', '/uploads/allimg/180712/1-1PG2205959203-lp.jpg', 1531400321, 1531400432, 1, '省,能源,院同,哈理工,哈,理工,化学,与,7月,', 0, 0, 0, 0, 0, 0, '7月12日下午,哈尔滨理工大学化学与环境工程学院党委书记徐春霖带队到能源院进行第二次深入交流。双方首先签署了“教学科研实践基地共建协议”和“研究生导师互聘协议”,共同', '', 1, 0, 0, 229), +(242, 10, '0', 1534399968, 'p,f', 1, 1, 0, 87, 0, '省能源院召开 “深入学习张庆伟书记调研讲话精神”会议', '', '', 'admin', '未知', '/uploads/allimg/180816/1-1PQ6141P1545-lp.jpg', 1534399968, 1534400348, 1, '省,能源,院,召开,“,深入,学习,张庆伟,书记,', 0, 0, 0, 0, 0, 0, '8月16日上午,省能源院召开 “深入学习张庆伟书记调研讲话精神”会议,会议由徐晓秋院长主持,全体职工参加了会议。', '', 1, 0, 0, 230), +(243, 10, '0', 1534497638, 'p,f', 1, 1, 0, 141, 0, '能源院召开2019年度储备项目评审会', '', '', 'admin', '未知', '/uploads/allimg/180817/1-1PQGH33B13-lp.jpg', 1534497638, 1534498031, 1, '能源,院,召开,2019,年度,储备,项目,评审会,8月,', 0, 0, 0, 0, 0, 0, '8月17日,能源院组织召开2019年度储备项目评审会,两个创新团队共组织10项科研项目参与本次储备项目评审。评审委员会由来自哈尔滨工业大学、哈尔滨工程大学、黑龙江大学等七名省', '', 1, 0, 0, 231), +(244, 10, '16', 1541726162, 'p,f', 1, 1, 0, 105, 0, '省能源院贯彻落实中央、省委及省科学院党组各项精神', '', '', 'admin', '未知', '/uploads/allimg/181109/1-1Q10Z929492R-lp.jpg', 1541726162, 1541727047, 1, '省,能源,院,贯彻,落实,中央,、,省委,及,为,', 0, 0, 0, 0, 0, 0, '为深入贯彻落实中央、省委及省科学院相关精神,同时围绕法制年建设,11月5日,省能源院党委召开中心组学习扩大会议,能源院全体党员参加会议,会议由党委书记、院长徐晓秋同志', '', 1, 0, 0, 232), +(245, 10, '0', 1542765515, 'p,f', 1, 1, 0, 69, 0, '2018能源环境可持续发展论坛 暨省能源环境学会第四届学术年会召开', '', '', 'admin', '未知', '/uploads/allimg/181121/1-1Q12110005D08-lp.png', 1542765515, 1542765882, 1, '2018,能源,环境,可,持续,发展论坛,暨省,学会,', 0, 0, 0, 0, 0, 0, '2018年11月17日,太阳岛科技论坛系列活动——2018能源环境可持续发展论坛暨省能源环境学会第四届学术年会在哈尔滨工业大学城市水资源与水环境国家重点实验室隆重举行。本次会议的', '', 1, 0, 0, 233), +(246, 10, '0', 1544161380, 'p,f', 1, 1, 0, 148, 0, '“解放思想,开放办院,协同创新”副院长赵立涛同志来能源院调研', '', '', 'admin', '未知', '/uploads/allimg/181210/1-1Q210094431926-lp.jpg', 1544161380, 1544406472, 1, '“,解放思想,开放,办院,协同,创新,”,副院长,', 0, 0, 0, 0, 0, 0, ' 12月7日上午,省科学院党组成员、副院长赵立涛同志、院对外合作处处长刘志忠同志以及对外合作处全体同志来到能源院调研座谈。此次调研的主题为“解放思想,开放办院,协同创新', '', 1, 0, 0, 234), +(247, 10, '16', 1545273138, 'p', 1, 1, 0, 124, 0, '省能源院集体观看中共中央国务院庆祝改革开放40周年大会', '', '', 'admin', '未知', '/uploads/allimg/181220/1-1Q220103332364-lp.png', 1545273138, 1545273284, 1, '省,能源,院,集体,观看,中共中央,国务院,庆祝,', 0, 0, 0, 0, 0, 0, '12月18上午10点,根据省委办公厅要求,能源环境研究院认真组织全体职工收看中共中央国务院召开的庆祝改革开放40周年大会。', '', 1, 0, 0, 235), +(248, 10, '16', 1551749787, 'p,f', 1, 1, 0, 137, 0, '能源院全体党员干部收看第十三届全国人民代表大会第二次会议开幕', '', '', 'admin', '未知', '/uploads/allimg/190305/1-1Z305093T4X8-lp.JPG', 1551749787, 1551749973, 1, '能源,院,全体,党员,干部,收看,第十,三届,全国,', 0, 0, 0, 0, 0, 0, '3月5日上午9时,能源院全体党员干部集体收看第十三届全国人民代表大会第二次会议开幕。', '', 1, 0, 0, 236), +(249, 10, '0', 1552959049, 'p,f', 1, 1, 0, 189, 0, '能源院召开全体职工大会 传达学习贯彻省科学院2019年工作会议精神', '', '', 'admin', '未知', '/uploads/allimg/190319/1-1Z31Z93452143-lp.JPG', 1552959049, 1552959316, 1, '能源,院,召开,全体,职工,大会,传达,2019年,2月,', 0, 0, 0, 0, 0, 0, '2019年03月28日,能源院召开全体职工大会,传达学习贯彻省科学院2019年工作会议精神', '', 1, 0, 0, 237), +(250, 10, '0', 1552009320, 'p', 1, 1, 0, 144, 0, '能源院举办“聚巾帼力量 筑美丽未来”座谈会庆祝“三八”国际妇女节', '', '', 'admin', '未知', '/uploads/allimg/190319/1-1Z31Z94359601-lp.JPG', 1552009320, 1552959868, 1, '能源,院,举办,“,聚巾帼力量,筑,美丽,未来,”,', 0, 0, 0, 0, 0, 0, ' 为庆祝“三八”国际妇女节,省能源院举办“聚巾帼力量 筑美丽未来”座谈会,全院女职工和班子成员参加了座谈会,能源院党委书记、院长徐晓秋同志主持会议。', '', 1, 0, 0, 238), +(251, 10, '0', 1554772922, 'p,f', 1, 1, 0, 56, 0, '省能源院参加的国家重点研发计划“村镇低成本清洁能源供暖及蓄热技术研究”项目启动会顺利召开', '', '', 'admin', '未知', '/uploads/allimg/190409/1-1Z40Z929251W-lp.JPG', 1554772922, 1554773801, 1, '省,能源,院,参加,的,国家,重点,研发,计划,“,', 0, 0, 0, 0, 0, 0, '2019年3月27日,由中国建筑科学研究院有限公司作为项目牵头单位、建筑环境与节能研究院李忠研究员作为项目负责人的“十三五”国家重点研发计划“绿色宜居村镇技术创新”重点专项', '', 1, 0, 0, 239), +(252, 10, '10', 1557211514, 'p,f', 1, 1, 0, 50, 0, '省能源院召开全院职工大会,学习传达贯彻省科学院落实机构改革方案动员大会的精神', '', '', 'admin', '未知', '/uploads/allimg/190507/1-1Z50G44049615-lp.JPG', 1557211514, 1557211291, 1, '省,能源,院,召开,全院,职工,大会,学习,传达,', 0, 0, 0, 0, 0, 0, '5月6日下午14时,省能源院召开全院职工大会,学习传达贯省科学院落实机构改革方案动员大会的精神。会议由党委书记、院长徐晓秋同志主持。', '', 1, 0, 0, 240), +(253, 10, '0', 1573024753, 'p,f', 1, 1, 0, 103, 0, '守初心、担使命、找差距、抓落实', '', '', 'admin', '未知', '', 1573024753, 1573024723, 1, '守初,心,、,担,使命,找,差距,抓,落实,守初,心,', 0, 0, 0, 0, 0, 0, '--省能源环境研究院党委“不忘初心、牢记使命”主题教育开展情况汇总\r\n\r\n“不忘初心、牢记使命”主题教育活动开展以来,省能源院党委始终把党的政治建设摆在突出位置,坚定政治', '', 1, 0, 0, 241), +(254, 10, '16', 1573109149, 'p', 1, 1, 0, 130, 0, '能源院全体职工学习贯彻落实传达党的十九届四中全会精神', '', '', 'admin', '未知', '/uploads/allimg/191107/1-19110G45100394-lp.jpg', 1573109149, 1573109634, 1, '能源,院,全体,职工,学习贯彻,落实,传达,党的,', 0, 0, 0, 0, 0, 0, '11月7日上午,省能源院召开全体职工大会,学习贯彻落实传达党的十九届四中全会精神,全文学习了中国共产党第十九届中央委员会第四次全体会议公报,会议由能源院党委书记、院长', '', 1, 0, 0, 242), +(255, 10, '16', 1571900400, 'p', 1, 1, 0, 106, 0, '能源院全体党员干部观看《榜样4》', '', '', 'admin', '未知', '/uploads/allimg/191107/1-19110G501592Q-lp.jpg', 1571900400, 1573110305, 1, '能源,院,全体,党员,干部,观看,《,榜样4,》,', 0, 0, 0, 0, 0, 0, ' 10月24日,按照省委“不忘初心、牢记使命”主题教育领导小组办公室《关于转发<关于认真做好《榜样4》专题节目学习收看工作的通知>的通知》和省科学院机关党委通知要求,省能源院', '', 1, 0, 0, 243), +(256, 10, '0', 1565854320, 'p', 1, 1, 0, 145, 0, '能源院协办“2019年刚果(金)环保可持续发展研修班”在哈尔滨举办', '', '', 'admin', '未知', '/uploads/allimg/191107/1-19110G52120A4-lp.jpg', 1565854320, 1573111226, 1, '能源,院,协办,“,2019年,刚果,金,环保,2019年,', 0, 0, 0, 0, 0, 0, '2019年8月11-15日,“2019年刚果(金)环保和可持续发展研修班”在哈尔滨举办。本次研修班由商务部主办,农业农村部沼气科学研究所承办,共有25名来自刚果(金)政府部门、企业协会', '', 1, 0, 0, 244), +(257, 10, '0', 1571547900, 'p,f', 1, 1, 0, 154, 0, '省能源院与七台河市相关门、企业赴湖南省、江西省就低热值固废(煤矸石)资源化利用开展项目对接', '', '', 'admin', '未知', '/uploads/allimg/191112/1-19111209164Y48-lp.png', 1571547900, 1573521500, 1, '赴,湖南省,、,江西省,对接,低,热值,固废,赴,', 0, 0, 0, 0, 0, 0, '为贯彻落实张庆伟同志《在全省工业强省暨产业发展大会上的讲话》精神和《黑龙江省委、省政府关于加快煤炭资源型城市转型推动高质量发展的指导意见》,进一步做好低热值固废(', '', 1, 0, 0, 245), +(258, 10, '16', 1566357000, 'p,f', 1, 1, 0, 148, 0, '省能源院组织全体党员干部,集体学习省委关于《切实加强党的建设、严明党的政治纪律和政治规矩》主题教育宣传片', '', '', 'admin', '未知', '/uploads/allimg/191118/1-19111Q11400524-lp.JPG', 1566357000, 1574046973, 1, '省,能源,院,组织,全体,党员,干部,集体,学习,', 0, 0, 0, 0, 0, 0, '8月21日上午,省能源院组织全体党员干部,集体学习省委关于《切实加强党的建设、严明党的政治纪律和政治规矩》主题教育宣传片,“不忘初心、牢记使命”主题教育活动开展以来,', '', 1, 0, 0, 246), +(259, 10, '16', 1562728680, 'p,f', 1, 1, 0, 121, 0, '省能源院党委组织全体党员干部与党建联系点省科学院人事处党支部共赴纪录片《楷模》中尚志市元宝村,开展观《丰碑》,学《楷模》,促“双提”,助落地主题教育活动', '', '', 'admin', '未知', '/uploads/allimg/191118/1-19111Q13RCL-lp.jpg', 1562728680, 1574048423, 1, '省,能源,院,党委,组织,全体,党员,干部,与,7月,', 0, 0, 0, 0, 0, 0, '省能源院党委组织全体党员干部与党建联系点省科学院人事处党支部共赴纪录片《楷模》中尚志市元宝村,开展观《丰碑》,学《楷模》,促“双提”,助落地主题教育活动', '', 1, 0, 0, 247), +(260, 10, '16', 1562216760, '', 1, 1, 0, 120, 0, '黑龙江省能源环境研究院党委组织全体党员和部分党外人士参观北大荒博物馆', '', '', 'admin', '未知', '', 1562216760, 1574053818, 1, '黑龙江省,能源,环境,研究院,党委,组织,全体,', 0, 0, 0, 0, 0, 0, '为进一步深入开展“不忘初心、牢记使命”主题教育活动,7月4日,黑龙江省能源环境研究院党委组织全体党员和部分党外人士参观北大荒博物馆,学习践行“艰苦奋斗、勇于开拓、顾全', '', 1, 0, 0, 248), +(261, 10, '16', 1561525980, 'p', 1, 1, 0, 138, 0, '能源院组织全体党员干部开展“不忘初心,牢记使命”主题教育启动会', '', '', 'admin', '未知', '/uploads/allimg/191118/1-19111Q314514H-lp.jpg', 1561525980, 1574054319, 1, '能源,院,组织,全体,党员,干部,开展,“,根据,', 0, 0, 0, 0, 0, 0, '根据中央、省委和省科学院党组关于开展“不忘初心,牢记使命”主题教育相关部署,省能源院迅速响应,组织全体党员干部,以主题教育为主导,将各项工作全面推向深入。', '', 1, 0, 0, 249), +(262, 10, '0', 1576821180, 'p,f', 1, 1, 0, 62, 0, '能源院承办第五届学术年会暨生态文明建设与资源环境技术研讨会', '', '', 'admin', '未知', '/uploads/allimg/191220/1-191220110U3Q4-lp.jpg', 1576821180, 1576811454, 1, '能源,院,承办,第五届,学术年会,暨,生态,简讯,', 0, 0, 0, 0, 0, 0, '2019年11月30日,由黑龙江省能源环境学会主办,黑龙江省能源环境研究院承办的“2019黑龙江省能源环境学会第五届学术年会暨生态文明建设与资源环境技术研讨会”在哈尔滨北大荒国际', '', 1, 0, 0, 250), +(263, 10, '0', 1577776980, 'p,f', 1, 1, 0, 83, 0, '省能源环境研究院召开2019年度总结大会', '', '', 'admin', '未知', '/uploads/allimg/200115/1-200115150132C6-lp.jpg', 1577776980, 1579071819, 1, '省,能源,环境,研究院,召开,2019,年度,总结,省,', 0, 0, 0, 0, 0, 0, '2019年12月31日,省能源院召开2019年度总结大会,院领导班子,全体职工参加会议,会议由省能源院党委书记、院长徐晓秋同志主持。', '', 1, 0, 0, 251), +(264, 10, '0', 1577778180, 'p', 1, 1, 0, 74, 0, '省科学院伍跃辉院长一行 莅临省能源院指导工作', '', '', 'admin', '未知', '/uploads/allimg/200115/1-200115154154124-lp.jpg', 1577778180, 1579074154, 1, '省,科学院,伍跃,辉,院长,一行,莅临省,能源,院,', 0, 0, 0, 0, 0, 0, '1月3日下午,省科学院伍跃辉院长,人事处机、关党委相关同志一行莅临省能源院,对省能源院领导班子及成员进行年终考核,并指导工作。省能源院全体干部职工参加会议。', '', 1, 0, 0, 252); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `dede_arctypes` +-- + +CREATE TABLE `dede_arctypes` ( + `id` smallint(5) UNSIGNED NOT NULL, + `reid` smallint(5) UNSIGNED NOT NULL DEFAULT '0', + `topid` smallint(5) UNSIGNED NOT NULL DEFAULT '0', + `sortrank` smallint(5) UNSIGNED NOT NULL DEFAULT '50', + `typename` char(30) NOT NULL DEFAULT '', + `typedir` char(60) NOT NULL DEFAULT '', + `isdefault` smallint(6) NOT NULL DEFAULT '0', + `defaultname` char(15) NOT NULL DEFAULT 'index.html', + `issend` smallint(6) NOT NULL DEFAULT '0', + `channeltype` smallint(6) DEFAULT '1', + `maxpage` smallint(6) NOT NULL DEFAULT '-1', + `ispart` smallint(6) NOT NULL DEFAULT '0', + `corank` smallint(6) NOT NULL DEFAULT '0', + `tempindex` char(50) NOT NULL DEFAULT '', + `templist` char(50) NOT NULL DEFAULT '', + `temparticle` char(50) NOT NULL DEFAULT '', + `namerule` char(50) NOT NULL DEFAULT '', + `namerule2` char(50) NOT NULL DEFAULT '', + `modname` char(20) NOT NULL DEFAULT '', + `description` char(150) NOT NULL DEFAULT '', + `keywords` varchar(60) NOT NULL DEFAULT '', + `seotitle` varchar(80) NOT NULL DEFAULT '', + `moresite` tinyint(1) UNSIGNED NOT NULL DEFAULT '0', + `sitepath` char(60) NOT NULL DEFAULT '', + `siteurl` char(50) NOT NULL DEFAULT '', + `ishidden` smallint(6) NOT NULL DEFAULT '0', + `cross` tinyint(1) NOT NULL DEFAULT '0', + `crossid` text, + `content` text, + `smalltypes` text +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- 转存表中的数据 `dede_arctypes` +-- + +INSERT INTO `dede_arctypes` (`id`, `reid`, `topid`, `sortrank`, `typename`, `typedir`, `isdefault`, `defaultname`, `issend`, `channeltype`, `maxpage`, `ispart`, `corank`, `tempindex`, `templist`, `temparticle`, `namerule`, `namerule2`, `modname`, `description`, `keywords`, `seotitle`, `moresite`, `sitepath`, `siteurl`, `ishidden`, `cross`, `crossid`, `content`, `smalltypes`) VALUES +(1, 0, 0, 1, '简介', '{cmspath}/a/jigouqingkuang', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '机构情况', 0, '{cmspath}/a/jigouqingkuang', '', 0, 0, '0', ' \r\n

\r\n 黑龙江省能源环境研究院(孵化中心)组织结构

\r\n

\r\n  

\r\n

\r\n 1、科研开发部门

\r\n

\r\n     ·环境科学与节能技术研究室

\r\n

\r\n     ·能源化学研究室

\r\n

\r\n     ·油品助剂研发中心

\r\n

\r\n     ·控制实验室

\r\n

\r\n     ·生物质能源实验室

\r\n

\r\n     ·寒区生物质能源基地

\r\n

\r\n 2、行政管理部门

\r\n

\r\n     ·科研与产业化办公室

\r\n

\r\n     ·综合管理办公室

\r\n

\r\n     ·财务管理办公室

\r\n

\r\n 3、领军人才梯队

\r\n

\r\n     ·能源化学

\r\n

\r\n 4、省重点室验室

\r\n

\r\n     ·燃油燃煤清洁能源重点实验室

\r\n', ''), +(2, 1, 1, 0, '院所简介', '{cmspath}/a/jigouqingkuang/yuansuojianjie', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '院所简介', 0, '{cmspath}/a/jigouqingkuang', '', 0, 0, '0', '

\r\n 黑龙江省能源环境研究院简介

\r\n

\r\n        黑龙江省能源环境研究院创建于1995年,前身为“黑龙江省节油技术开发中心”,隶属于黑龙江省科技厅,2003年更名为“黑龙江省能源环境研究院”。2010年隶属于黑龙江省科学院,属公益一类事业单位。

\r\n        黑龙江省能源环境研究院在能源和环境领域是一个基础研究与应用研究并重、公益服务与技术创新相结合的综合性研究院。二十多年来,黑龙江省能源环境研究院根据地域特点,不断完善学科体系,稳步提高科研水平,形成了鲜明的科研特色。其职能为“围绕国家重大战略需求,面向黑龙江省政府决策和公益事业发展的战略需求,在环境工程、一次能源、二次能源等学科领域开展基础性、系统性和前瞻性研究,掌握和突破关键核心技术,为国家和黑龙江省战略、经济和社会发展提供科技支撑”。拥有能源化学省级领军人才梯队和黑龙江省燃油燃煤清洁能源重点实验室。
\r\n        近年来形成了能源化学、生物质能和固废处理与环境改善三个学科领域六个重点研究方向的科研体系。在黑龙江省建成了首座可全年连续稳定运行的大型沼气发电工程,在催化油浆制备新材料形成技术创新,在油页岩综合利用形成技术储备。在煤矸石处理、室内空气质量改善、农村垃圾、厕所革命、秸秆固体燃料等方向积极与国内知名高校、科研院所和企业开展联合,大力推进废弃物处理技术联合研发和成果落地,改善农村和城市环境,助推污染防治攻坚战。
\r\n        建院以来,累计完成国家攻关项目4项,科技部国际科技合作项目2项,黑龙江省重大项目1项,黑龙江省科技攻关项目11项,省自然科学基金2项,各级科研项目120余项。获得省科技进步一等奖1项,省科技发明一等奖2项,中国石油和化学协会科技进步二等奖1项,省科技进步三等奖1项,省科学院科技进步一等奖2项,二等奖1项;获得国家专利100余项;发表科技论文200余篇。
\r\n        进入新时代的黑龙江省能源环境研究院,将“不忘初心,牢记使命”,面向政府战略需求,面向技术创新前沿,面向公益事业发展,通过“协同创新、开放合作”的办院理念,推动高质量发展,为黑龙江省在能源和环境领域的全方位发展提供技术引领,为国家和地方经济、社会发展做出应有的贡献。
', ''), +(3, 1, 1, 1, '机构职能', '{cmspath}/a/jigouqingkuang/jigouzhinen', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '机构职能', 0, '{cmspath}/a/jigouqingkuang', '', 1, 0, '0', ' \r\n

\r\n 黑龙江省能源环境研究院(孵化中心)组织结构

\r\n

\r\n  

\r\n

\r\n 1、科研开发部门

\r\n

\r\n     ·环境科学与节能技术研究室

\r\n

\r\n     ·能源化学研究室

\r\n

\r\n     ·油品助剂研发中心

\r\n

\r\n     ·控制实验室

\r\n

\r\n     ·生物质能源实验室

\r\n

\r\n     ·寒区生物质能源基地

\r\n

\r\n 2、行政管理部门

\r\n

\r\n     ·科研与产业化办公室

\r\n

\r\n     ·综合管理办公室

\r\n

\r\n      ·财务管理办公室

\r\n

\r\n 3、领军人才梯队

\r\n

\r\n     ·能源化学

\r\n

\r\n 4、省重点室验室

\r\n

\r\n     ·燃油燃煤清洁能源重点实验室

\r\n', ''), +(4, 1, 1, 2, '领导关怀', '{cmspath}/a/jigouqingkuang/lingdaoguanhuai', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '领导关怀', 0, '{cmspath}/a/jigouqingkuang', '', 1, 0, '0', ' ', ''), +(5, 1, 1, 3, '人才队伍', '{cmspath}/a/jigouqingkuang/rencaiduiwu', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '人才队伍', 0, '{cmspath}/a/jigouqingkuang', '', 1, 0, '0', '

\r\n (一)、我院现有正高3人,副高7人,中级11人,初级9人,春苗1人,研究生9人。
\r\n  

\r\n

\r\n (二)、引进清华大学的杨旭东博士和黑龙江科技大学的周国江、吕哲博士。三位博士的引进可以使我院在环境和煤化工领域找到准确的切入点,并提升现有科技人员的研究水平,使科研团队的能力得到加强。

\r\n', ''), +(6, 1, 1, 4, '光荣榜', '{cmspath}/a/jigouqingkuang/guangrongbang', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '光荣榜', 0, '{cmspath}/a/jigouqingkuang', '', 1, 0, '0', '
\r\n  \"\"
\r\n

\r\n 科学技术发明一等奖
\r\n
\r\n  

\r\n
\r\n \"\"
\r\n

\r\n 科学技术进步一等奖
\r\n  

\r\n
\r\n \"\"
\r\n

\r\n 全国化工系统技术二等奖

\r\n', ''), +(7, 1, 1, 5, '历任领导', '{cmspath}/a/jigouqingkuang/lirenlingdao', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '历任领导', 0, '{cmspath}/a/jigouqingkuang', '', 1, 0, '0', ' ', ''), +(8, 0, 0, 3, '能源院动态', '{cmspath}/a/nenyuanyuandongtai', 1, 'index.html', 1, 1, -1, 0, 0, '{style}/index_article.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '能源院动态', 0, '{cmspath}/a/nenyuanyuandongtai', '', 0, 0, '0', ' ', ''), +(9, 8, 8, 0, '简讯', '{cmspath}/a/nenyuanyuandongtai/gonggaolan', 1, 'index.html', 1, 1, -1, 0, 0, '{style}/index_article.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '公告栏', 0, '{cmspath}/a/nenyuanyuandongtai', '', 0, 0, '0', ' ', ''), +(10, 8, 8, 1, '能源院新闻', '{cmspath}/a/nenyuanyuandongtai/nenyuanyuanxinwen', 1, 'index.html', 1, 1, -1, 0, 0, '{style}/index_article.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '能源院新闻', 0, '{cmspath}/a/nenyuanyuandongtai', '', 0, 0, '0', '', ''), +(24, 1, 1, 50, '历史沿革', '{cmspath}/a/jigouqingkuang/lishiyange', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '', 0, '{cmspath}/a/jigouqingkuang', '', 0, 0, '', '

\r\n         黑龙江省能源环境研究院成立于1995年,前身为黑龙江省节油技术开发中心,单位性质为公益三类事业单位,隶属于黑龙江省科学技术厅,2003年更名为黑龙江省能源环境研究院,2006年单位性质转变为公益一类事业单位,2010年隶属关系由黑龙江省科学技术厅变更为黑龙江省科学院,2013年3月与黑龙江省科学院科技孵化中心合并。

\r\n ', ''), +(12, 0, 0, 3, '科研靓点', '{cmspath}/a/keyanliangdian', 1, 'index.html', 1, 1, -1, 0, 0, '{style}/index_article.htm', '{style}/list_article_s.htm', '{style}/article_article_s.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '科研靓点', 0, '{cmspath}/a/keyanliangdian', '', 1, 0, '0', ' ', ''), +(13, 12, 12, 0, '科研项目情况', '{cmspath}/a/keyanliangdian/keyanxiangmuqingkuang', 1, 'index.html', 1, 1, -1, 0, 0, '{style}/index_article.htm', '{style}/list_article_s.htm', '{style}/article_article_s.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '科研项目情况', 0, '{cmspath}/a/keyanliangdian', '', 1, 0, '0', '', ''), +(14, 12, 12, 1, '科研人员档案', '{cmspath}/a/keyanliangdian/keyanrenyuandangan', 1, 'index.html', 1, 1, -1, 0, 0, '{style}/index_article.htm', '{style}/list_article_s.htm', '{style}/article_article_s.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '科研人员档案', 0, '{cmspath}/a/keyanliangdian', '', 1, 0, '0', '', ''), +(15, 12, 12, 2, '行业信息', '{cmspath}/a/keyanliangdian/xingyexinxi', 1, 'index.html', 1, 1, -1, 0, 0, '{style}/index_article.htm', '{style}/list_article_s.htm', '{style}/article_article_s.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '行业信息', 0, '{cmspath}/a/keyanliangdian', '', 1, 0, '0', '', ''), +(16, 0, 0, 6, '党政建设', '{cmspath}/a/dangtuanshenghuo', 1, 'index.html', 1, 1, -1, 0, 0, '{style}/index_article.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '党团生活', 0, '{cmspath}/a/dangtuanshenghuo', '', 0, 0, '0', ' ', ''), +(17, 0, 0, 7, '学习园地', '{cmspath}/a/xuexiyuandi', 1, 'index.html', 1, 1, -1, 0, 0, '{style}/index_article.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '学习园地', 0, '', '', 0, 0, '0', '', ''), +(22, 0, 0, 8, '联系我们', '{cmspath}/a/lianxiwomen', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '联系我们', 0, '{cmspath}/a/lianxiwomen', '', 0, 0, '0', '

\r\n 邮箱:hljnyfh@163.com   hljnyhj@163.com

\r\n

\r\n 电话:0451-88071351   0451-82387268

\r\n', ''), +(36, 25, 25, 47, '环境科学研究室', '{cmspath}/a/jigoushezhi/diyibumen', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}/{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '', 0, '{cmspath}/a/jigoushezhi', '', 0, 0, '', '
\r\n 环境科学研究室简介
\r\n \r\n

\r\n         环境科学研究室一直致力于节能减排技术和室内环境污染分析方面的研究工作。主要从事生物法处理生活、工业污水和室内空气中污染物的源解析及治理研究。
\r\n         环境科学研究室曾完成过多项省部级科研项目,如:《奥里油脱硫技术研制及应用 》、《燃煤锅炉催化脱硫技术研究》和《工业燃煤锅炉烟气净化技术 》等项目,为我国固定污染源减排提供新技术,并分别获得黑龙江省科技一等奖1项、中国石油和化学工业科技进步类二等奖1项。还完成了基于废碳源的产油微藻提取生物油脂技术,既解决污水排放问题,又提供生物能源,为排污综合利用储备了基础技术。研究室正在参与编制国家行业标准《住宅建筑室内装修污染控制技术规程》,并承担室内环境相关课题两项。
\r\n         环境科学研究室下设生物环境实验室、室内环境实验室、乳化实验室等,具有较为完备的分析测试仪器设备,如热脱附仪,粉尘检测仪,臭氧检测仪,甲醛便携检测仪,TVOC便携检测仪,测氡仪,1m3环境气候箱等。同时,研究室成员专业互补,高中初级分布合理,并拥有多年的实验室工作经验,可以处理各种环境、节能实验,科研实力较强。
\r\n         研究室主任介绍:
\r\n         王志成,1973年出生,学士,研究员级高级工程师,能源化学省级领军人才梯队后备带头人,省级燃油燃煤清洁能源重点实验室成员,兼任:省能源环境学会常务理事、省化学会理事。从事新型醇醚燃料催化剂和乳化燃料催化剂及合成工艺研究,以及室内空气污染研究工作。主持和主研科研课题22项,其中包括国家攻关计划项目3项,省自然科学基金项目1项,国家政府间国际合作项目1项,省攻关计划项目6项。获省科技进步一等奖1项,省科技发明一等奖2项,三等奖1项,国家石化协会科技二等奖1项,发表学术论文11篇。

\r\n', ''), +(25, 0, 0, 2, '机构设置', '{cmspath}/a/jigoushezhi', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/article_article1.htm', '{style}/article_article.htm', '{typedir}/{Y}/{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '', 0, '{cmspath}/a/jigoushezhi', '', 0, 0, '', ' \r\n

\r\n 黑龙江省能源环境研究院组织结构

\r\n

\r\n  

\r\n

\r\n 1、科研开发部门

\r\n

\r\n     ·环境科学研究室

\r\n

\r\n     ·能源化学研究室

\r\n

\r\n     ·能源微生物研究室

\r\n

\r\n     ·节能技术研究室

\r\n

\r\n     ·生物质能源实验室

\r\n

\r\n     ·控制实验室

\r\n

\r\n 2、行政管理部门

\r\n

\r\n     ·科研管理办公室

\r\n

\r\n     ·综合管理办公室

\r\n

\r\n     ·财务管理办公室

\r\n

\r\n 3、领军人才梯队

\r\n

\r\n     ·能源化学

\r\n

\r\n 4、省重点室验室

\r\n

\r\n     ·燃油燃煤清洁能源重点实验室

\r\n', ''), +(26, 0, 0, 4, '科研成果', '{cmspath}/a/keyanchengguo', 1, 'index.html', 1, 1, -1, 0, 0, '{style}/index_article.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '科研成果', 0, '', '', 0, 0, '0', '', ''), +(27, 26, 26, 0, '成果', '{cmspath}/a/keyanchengguo/chengguo', 1, 'index.html', 1, 1, -1, 0, 0, '{style}/index_article.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '成果', 0, '', '', 0, 0, '0', '', ''), +(28, 26, 26, 1, '获奖', '{cmspath}/a/keyanchengguo/huojiang', 1, 'index.html', 1, 1, -1, 0, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '获奖', 0, '', '', 0, 0, '0', '', ''), +(29, 26, 26, 2, '专利/论文', '{cmspath}/a/keyanchengguo/zhuanli_lunwen', 1, 'index.html', 1, 1, -1, 0, 0, '{style}/index_article.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '专利/论文', 0, '', '', 0, 0, '0', '', ''), +(30, 0, 0, 5, '服务与支持', '{cmspath}/a/fuwuyuzhichi', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '服务与支持', 0, '{cmspath}/a/fuwuyuzhichi', '', 1, 0, '0', ' ', ''), +(31, 30, 30, 0, '节能评估', '{cmspath}/a/fuwuyuzhichi/jienenpinggu', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '节能评估', 0, '{cmspath}/a/fuwuyuzhichi', '', 1, 0, '0', '
\r\n 节能咨询评估
\r\n  
\r\n        根据《黑龙江省节能服务机构备案管理暂行办法》黑发改环资{2010}799号文件规定,黑龙江省能源环境研究院于2011年向省发改委申请节能服务机构备案,并通过审核批准,获准在我省行政辖区内从事节能咨询评估、能源审计监测、清洁生产审核等业务。
\r\n        该资质使黑龙江省能源环境研究院成为我省第三批拥有审核资质的节能服务机构。
\r\n        主要业务:受项目建设单位委托,可编制固定资产投资项目节能评估文件。 
', ''), +(32, 30, 30, 1, '能源审计', '{cmspath}/a/fuwuyuzhichi/nenyuanshenji', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '能源审计', 0, '{cmspath}/a/fuwuyuzhichi', '', 1, 0, '0', '
\r\n  能源审计监测
\r\n  
\r\n         根据《黑龙江省节能服务机构备案管理暂行办法》黑发改环资{2010}799号文件规定,黑龙江省能源环境研究院于2011年向省发改委申请节能服务机构备案,并通过审核批准,获准在我省行政辖区内从事节能咨询评估、能源审计监测、清洁生产审核等业务。
\r\n        该资质使黑龙江省能源环境研究院成为我省第二批拥有审核资质的节能服务机构。
\r\n        主要业务:受政府部门委托,可对外提供能源审计、能源监测、节能改造项目节能量审核及竣工节能验收等服务。
', ''), +(33, 30, 30, 2, '清洁生产审核', '{cmspath}/a/fuwuyuzhichi/qingjieshengchanshenhe', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '清洁生产审核', 0, '{cmspath}/a/fuwuyuzhichi', '', 1, 0, '0', '
\r\n 清洁生产审核
\r\n  
\r\n
\r\n         根据《黑龙江省节能服务机构备案管理暂行办法》黑发改环资{2010}799号文件规定,黑龙江省能源环境研究院于2011年向省发改委申请节能服务机构备案,并通过审核批准,获准在我省行政辖区内从事节能咨询评估、能源审计监测、清洁生产审核等业务。
\r\n        该资质使黑龙江省能源环境研究院成为我省第二批拥有审核资质的节能服务机构。
\r\n        主要业务:受政府部门委托,可对外提供编制清洁生产审核报告等服务。 
', ''), +(34, 30, 30, 3, '检测中心', '{cmspath}/a/fuwuyuzhichi/jiancezhongxin', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '检测中心', 0, '{cmspath}/a/fuwuyuzhichi', '', 1, 0, '0', '
\r\n 检测中心
\r\n  
\r\n        黑龙江省科学院能源环境研究院检测中心成立于2011年,该中心依托黑龙江省燃煤、燃油重点实验室,分别于2011年和2012年建立由省科学技术厅组织的“黑龙江省科技创新创业共享服务平台”,及由省科学院组织的“大中型科学仪器共享平台”。平台针对我院实验中心油品检测的现状,发挥资源优势,提高实验仪器设备利用率。
\r\n        检测中心现有实验分析检测仪器共计40余台/套,包括石油产品闭口闪点测定器、石油产品运动粘度测定器、石油产品蒸馏测定器、石油产品饱和蒸汽压测定器、石油产品铜片腐蚀测定器、汽油辛烷值、汽油氧化安定性、全自动量热仪、傅里叶变换红外光谱仪和气相色谱-质谱联用仪等。2012年先后为24个公司/集团提供服务达到695次,服务机时数达7948小时。并连续两年获得黑龙江科技创新创业共享服务平台的“共享服务优秀集体”、“先进加盟单位”以及“先进个人”的荣誉称号。 
', ''), +(35, 30, 30, 4, '控制工程编程设计', '{cmspath}/a/fuwuyuzhichi/kongzhigongchengbianchengsheji', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '控制工程编程设计', 0, '{cmspath}/a/fuwuyuzhichi', '', 1, 0, '0', '

\r\n 控制工程编程设计

\r\n

\r\n         工程设计部有一批具有丰富经验的电气、自控方面的专家,能够承揽清洁能源、生物质能等领域的控制工程的工作,对沼气发酵工艺控制、太阳能集热器控制都有丰富的实践经验。尤其擅长工艺设计及PLC编程设计方面的工作。

\r\n', ''), +(37, 25, 25, 48, '能源化学研究室', '{cmspath}/a/jigoushezhi/nenyuanhuaxueyanjiushi', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}/{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '', 0, '{cmspath}/a/jigoushezhi', '', 0, 0, '', '
\r\n 能源化学研究室简介
\r\n

\r\n         能源化学研究室主要从事常规能源、非常规能源、生物质能及清洁能源技术的研究,研究范围涉及石油化工、煤化工、生物化工和燃料化工等领域。近三年,先后承担省级、市(地)级各类科技开发项目10余项,取得了一批达到国内先进水平的标志性成果。目前,该研究室在科研领域已初步形成四条技术开发链条,即:页岩油加氢提质转化技术;页岩油制取油砂分离剂技术;煤与废弃有机制品共焦化技术;木焦油加氢提质转化技术。
\r\n         能源化学研究室经过多年的实践,逐步形成一支结构合理、自主研发能力强的创新型科研梯队。与中科院大连物化所、大庆石化研究院、大连理工大学、哈尔滨工业大学等多家科研院所和高校在基础研究、信息交流、资源共享等方面建立了良好的科研互联关系。

\r\n         研究室主任介绍:
\r\n         陈松,1969年出生,高级工程师,现任黑龙江省能源环境研究院能源化学研究室主任。黑龙江省节能评估审查中心化工专家,黑龙江科技大学校外研究生导师。主要从事能源化学领域前沿技术的研究,研究范围包括:常规、非常规能源的加工工艺和工程的研究;高硫高酸原油、稠油的改质及转化工艺的研究。其成果在石油化工、煤化工、油页岩资源综合利用等方面具有较高理论指导意义和实用价值。

\r\n', ''), +(38, 25, 25, 50, '节能技术研究室', '{cmspath}/a/yanfazhongxin/', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}/{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '', 0, '{cmspath}/a/jigoushezhi', '', 0, 0, '', '
\r\n 节能技术研究室简介
\r\n  
\r\n        黑龙江省能源环境研究院节能技术研究室先后承担和参与承担完成了国家“九五”重点科技攻关计划项目,国家“十五”重点科技攻关项目,获得了国家级、省级科研成果20多项。获黑龙江省科技发明一等奖一项。获黑龙江省科技进步一等奖一项、获得了全国石油化工系统二等奖一项,获黑龙江省科技进步三等一项奖等。
\r\n        黑龙江省能源环境研究院
节能技术研究室秉承“崇尚科学,求实创新”的指导方针,具有人员素质高、仪器种类齐全、测试手段标准可靠和可达到测试要求的工作环境等特点。
\r\n        
\r\n
\r\n  
\r\n \r\n
\r\n \"\"
\r\n \r\n
\r\n  
\r\n \r\n
\r\n  
\r\n 
\r\n
\r\n  
\r\n', ''), +(39, 25, 25, 50, '生物质能源实验室', '{cmspath}/a/shiyanshi/', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}/{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '', 0, '{cmspath}/a/jigoushezhi', '', 0, 0, '', '
\r\n 生物质能源实验室简介
\r\n 
\r\n        生物质能源实验室主要从事寒区沼气工程、固体废弃物利用、农村生物质资源、厌氧微生物机理、厌氧消化技术以及农村资源与环境综合研究与开发等工作,涉及微生物学、生物化学与分子生物学、环境工程、能源工程、农业资源与环境等学科。拥有先进科研仪器设备40余台,具有较完备的研究平台和实验条件。实验室已承担和在研的有国家国际科技合作专项课题、黑龙江省科技攻关计划、黑龙江省科学院科学研究基金、黑龙江省科学院青年创新基金等十余项课题。已经在高温厌氧消化技术、寒区沼气发电工程研究等寒区生物质资源能源化利用技术方面取得了突破性研究进展;另外还开展了高效产甲烷菌的分子生物学、沼液高效回用、厌氧菌影响因素等研究,为在我国寒区兴建大型沼气工程奠定了理论及技术基础。目前已发表研究论文10余篇,申报专利10项。
', ''), +(40, 25, 25, 49, '能源微生物研究室', '{cmspath}/a/jigoushezhi/hanqushengwuzhinenyuanjishuyingyongg', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}/{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '', 0, '{cmspath}/a/jigoushezhi', '', 0, 0, '', '
\r\n 能源微生物研究室简介
\r\n  
\r\n
\r\n         能源微生物研究室致力于环境工程、二次能源技术和生物工程三大学科交叉领域的应用基础研究。主要研究方向是:
\r\n         1、畜禽粪便资源化技术;
\r\n         2、秸秆资源化技术。

\r\n
\r\n  
\r\n
\r\n
\r\n \"\"
\r\n  
\r\n
\r\n         近年来,能源微生物研究室承担国家级、省市级、院基金项目20余项,多项成果获奖。其中畜禽粪便高温厌氧消化技术与牛粪沼液秸秆联用技术是我国唯一成功应用于高寒地区连续作业的技术,并取得了显著的社会效益。
\r\n', ''), +(41, 25, 25, 50, '控制实验室', '{cmspath}/a/jigoushezhi/gongchengshejibu', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}/{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '', 0, '{cmspath}/a/jigoushezhi', '', 0, 0, '', '

\r\n 控制实验室简介

\r\n

\r\n         控制实验室主要进行电气设计、自控设计、仪表安装调试及控制系统的设计和编制工作,工作中善于提出改进措施,解决项目中遇到的关键性的技术难题。
\r\n         控制实验室参与研制建设的国家级国际科技合作项目《工业化封闭环式沼气、发电系统》以及省国际科技合作项目《加拿大直贮热太阳能技术》提升了我省高寒地区高温厌氧发酵和光伏发酵温室控制领域在国际上的知名度,该项目得到了加拿大阿尔伯塔研究院业内专家的一致好评。

\r\n', ''), +(42, 1, 1, 50, '领导班子', '{cmspath}/a/jigouqingkuang/lingdaobanzi', 1, 'index.html', 1, 1, -1, 1, 0, '{style}/article_article1l.htm', '{style}/list_article.htm', '{style}/article_article.htm', '{typedir}/{Y}/{M}{D}/{aid}.html', '{typedir}/list_{tid}_{page}.html', 'default', '', '', '', 0, '{cmspath}/a/jigouqingkuang', '', 0, 0, '', ' \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \"\"\r\n  \r\n  
\r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n  
\r\n                  徐 晓 秋
\r\n
\r\n        中共党员
\r\n        黑龙江省能源环境研究院院长、党委书记
\r\n        研究员级高级工程师

\r\n  
\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \"\"\r\n  \r\n  
\r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n  
\r\n                  关 春 玲
\r\n
\r\n        中共党员
\r\n        黑龙江省能源环境研究院副院长、党委委员
\r\n        高级会计师

\r\n  
\r\n 
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \"\"\r\n  \r\n  
\r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n  
\r\n                  刘    伟
\r\n
\r\n        中共党员
\r\n        黑龙江省能源环境研究院副院长、党委委员
\r\n        副研究员

\r\n  
\r\n 
\r\n', ''); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `failed_jobs` +-- + +CREATE TABLE `failed_jobs` ( + `id` bigint(20) UNSIGNED NOT NULL, + `connection` text COLLATE utf8mb4_unicode_ci NOT NULL, + `queue` text COLLATE utf8mb4_unicode_ci NOT NULL, + `payload` longtext COLLATE utf8mb4_unicode_ci NOT NULL, + `exception` longtext COLLATE utf8mb4_unicode_ci NOT NULL, + `failed_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `links` +-- + +CREATE TABLE `links` ( + `id` bigint(20) UNSIGNED NOT NULL, + `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `url` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- 转存表中的数据 `links` +-- + +INSERT INTO `links` (`id`, `title`, `url`, `created_at`, `updated_at`) VALUES +(1, '黑龙江省科学院', 'http://www.has.ac.cn', '2020-05-28 08:46:27', '2020-05-29 06:09:24'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `migrations` +-- + +CREATE TABLE `migrations` ( + `id` int(10) UNSIGNED NOT NULL, + `migration` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `batch` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- 转存表中的数据 `migrations` +-- + +INSERT INTO `migrations` (`id`, `migration`, `batch`) VALUES +(1, '2014_10_12_000000_create_users_table', 1), +(2, '2014_10_12_100000_create_password_resets_table', 1), +(3, '2016_01_04_173148_create_admin_tables', 1), +(4, '2019_08_19_000000_create_failed_jobs_table', 1), +(5, '2020_05_28_153525_create_articles_table', 2), +(6, '2020_05_28_153536_create_categories_table', 2), +(7, '2020_05_28_163818_create_links_table', 3), +(8, '2017_07_17_040159_create_config_table', 4); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `password_resets` +-- + +CREATE TABLE `password_resets` ( + `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `token` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `users` +-- + +CREATE TABLE `users` ( + `id` bigint(20) UNSIGNED NOT NULL, + `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `email_verified_at` timestamp NULL DEFAULT NULL, + `password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- 转储表的索引 +-- + +-- +-- 表的索引 `admin_config` +-- +ALTER TABLE `admin_config` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `admin_config_name_unique` (`name`); + +-- +-- 表的索引 `admin_menu` +-- +ALTER TABLE `admin_menu` + ADD PRIMARY KEY (`id`); + +-- +-- 表的索引 `admin_operation_log` +-- +ALTER TABLE `admin_operation_log` + ADD PRIMARY KEY (`id`), + ADD KEY `admin_operation_log_user_id_index` (`user_id`); + +-- +-- 表的索引 `admin_permissions` +-- +ALTER TABLE `admin_permissions` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `admin_permissions_name_unique` (`name`), + ADD UNIQUE KEY `admin_permissions_slug_unique` (`slug`); + +-- +-- 表的索引 `admin_roles` +-- +ALTER TABLE `admin_roles` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `admin_roles_name_unique` (`name`), + ADD UNIQUE KEY `admin_roles_slug_unique` (`slug`); + +-- +-- 表的索引 `admin_role_menu` +-- +ALTER TABLE `admin_role_menu` + ADD KEY `admin_role_menu_role_id_menu_id_index` (`role_id`,`menu_id`); + +-- +-- 表的索引 `admin_role_permissions` +-- +ALTER TABLE `admin_role_permissions` + ADD KEY `admin_role_permissions_role_id_permission_id_index` (`role_id`,`permission_id`); + +-- +-- 表的索引 `admin_role_users` +-- +ALTER TABLE `admin_role_users` + ADD KEY `admin_role_users_role_id_user_id_index` (`role_id`,`user_id`); + +-- +-- 表的索引 `admin_users` +-- +ALTER TABLE `admin_users` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `admin_users_username_unique` (`username`); + +-- +-- 表的索引 `admin_user_permissions` +-- +ALTER TABLE `admin_user_permissions` + ADD KEY `admin_user_permissions_user_id_permission_id_index` (`user_id`,`permission_id`); + +-- +-- 表的索引 `adverts` +-- +ALTER TABLE `adverts` + ADD PRIMARY KEY (`id`) USING BTREE; + +-- +-- 表的索引 `articles` +-- +ALTER TABLE `articles` + ADD PRIMARY KEY (`id`) USING BTREE, + ADD KEY `category_id` (`category_id`) USING BTREE; + +-- +-- 表的索引 `categories` +-- +ALTER TABLE `categories` + ADD PRIMARY KEY (`id`), + ADD KEY `parent_id` (`parent_id`); + +-- +-- 表的索引 `dede_addonarticles` +-- +ALTER TABLE `dede_addonarticles` + ADD PRIMARY KEY (`aid`), + ADD KEY `typeid` (`typeid`); + +-- +-- 表的索引 `dede_archives` +-- +ALTER TABLE `dede_archives` + ADD PRIMARY KEY (`id`), + ADD KEY `sortrank` (`sortrank`), + ADD KEY `mainindex` (`arcrank`,`typeid`,`channel`,`flag`,`mid`), + ADD KEY `lastpost` (`lastpost`,`scores`,`goodpost`,`badpost`,`notpost`); + +-- +-- 表的索引 `dede_arctypes` +-- +ALTER TABLE `dede_arctypes` + ADD PRIMARY KEY (`id`), + ADD KEY `reid` (`reid`,`isdefault`,`channeltype`,`ispart`,`corank`,`topid`,`ishidden`), + ADD KEY `sortrank` (`sortrank`); + +-- +-- 表的索引 `failed_jobs` +-- +ALTER TABLE `failed_jobs` + ADD PRIMARY KEY (`id`); + +-- +-- 表的索引 `links` +-- +ALTER TABLE `links` + ADD PRIMARY KEY (`id`); + +-- +-- 表的索引 `migrations` +-- +ALTER TABLE `migrations` + ADD PRIMARY KEY (`id`); + +-- +-- 表的索引 `password_resets` +-- +ALTER TABLE `password_resets` + ADD KEY `password_resets_email_index` (`email`); + +-- +-- 表的索引 `users` +-- +ALTER TABLE `users` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `users_email_unique` (`email`); + +-- +-- 在导出的表使用AUTO_INCREMENT +-- + +-- +-- 使用表AUTO_INCREMENT `admin_config` +-- +ALTER TABLE `admin_config` + MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT; + +-- +-- 使用表AUTO_INCREMENT `admin_menu` +-- +ALTER TABLE `admin_menu` + MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=17; + +-- +-- 使用表AUTO_INCREMENT `admin_operation_log` +-- +ALTER TABLE `admin_operation_log` + MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=617; + +-- +-- 使用表AUTO_INCREMENT `admin_permissions` +-- +ALTER TABLE `admin_permissions` + MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7; + +-- +-- 使用表AUTO_INCREMENT `admin_roles` +-- +ALTER TABLE `admin_roles` + MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2; + +-- +-- 使用表AUTO_INCREMENT `admin_users` +-- +ALTER TABLE `admin_users` + MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2; + +-- +-- 使用表AUTO_INCREMENT `adverts` +-- +ALTER TABLE `adverts` + MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2; + +-- +-- 使用表AUTO_INCREMENT `articles` +-- +ALTER TABLE `articles` + MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=269; + +-- +-- 使用表AUTO_INCREMENT `categories` +-- +ALTER TABLE `categories` + MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=23; + +-- +-- 使用表AUTO_INCREMENT `dede_arctypes` +-- +ALTER TABLE `dede_arctypes` + MODIFY `id` smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=43; + +-- +-- 使用表AUTO_INCREMENT `failed_jobs` +-- +ALTER TABLE `failed_jobs` + MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT; + +-- +-- 使用表AUTO_INCREMENT `links` +-- +ALTER TABLE `links` + MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2; + +-- +-- 使用表AUTO_INCREMENT `migrations` +-- +ALTER TABLE `migrations` + MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9; + +-- +-- 使用表AUTO_INCREMENT `users` +-- +ALTER TABLE `users` + MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT; +COMMIT; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..b75525b --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,21 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Handle Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/public/assets/index/css/style.css b/public/assets/index/css/style.css new file mode 100644 index 0000000..0062399 --- /dev/null +++ b/public/assets/index/css/style.css @@ -0,0 +1,932 @@ +@charset "utf-8"; +/* CSS Document */ +*{ margin:0; padding:0} +ul li{ list-style:none} +img{ border:0; max-width:100%} +a{ text-decoration:none;} +body{ font-family:"微软雅黑"; width:100%; min-width:1200px;color: #333;font-size: 14px;} +p{text-align:justify} + +.idxTop-back { + background: url(../images/nys_bg01.jpg) #b2eaf9 no-repeat top center; + width: 100%; + background-size: 100% 100%; +} + +/* + 公告样式 +*/ +.ce-white { + background: #fff; +} +.contant { + width: 1200px; + margin: 0 auto; +} +.ce-morgin-tb { + margin: 30px 0; +} +.ce-img { + position: relative; +} +.ce-img>span { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-size: cover; + background-repeat: no-repeat; + background-position: center; +} +.ce-nowrap { + max-width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis +} +.ce-nowrap-multi { + display: -webkit-box; + overflow: hidden; + text-overflow: ellipsis; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2 +} + +/* + 首页头部 +*/ +.idxTop { + box-sizing: border-box; + position: relative; +} + +.idxLogo { + width: 100%; + cursor: pointer; +} + +.idxNav { + width: 100%; + display: flex; + background-color: #008dd0; +} + +.idxNav li { + padding: 0 50px 0; + color: #fff; + font-size: 15px; + cursor: pointer; + line-height: 50px; + height: 50px; + position: relative; + transition: .2s; +} + +.idxNav li:hover { + color: #fff; +} + +.idxNav li::after { + position: absolute; + content: ''; + left: 50%; + bottom: 0; + background: transparent; + width: 0; + height: 100%; + transition: .2s; +} + +.idxNav li.active::after, .idxNav li:hover::after { + background: #005c88; + width: 100%; + color: #fff; + left: 0%; +} + +.idxNav li span { + position: absolute; + z-index: 9; + width: 100%; + height: 100%; + display: inline-block; + text-align: center; + left: 0; + top: 0; +} + +/* + 首页banenr +*/ +.idxBanner { + width: 100%; + padding-top: 28%; +} + +.idxBanner .swiper-wrapper { + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; +} + +.idxBanner .swiper-slide { + background-size: cover; + background-position: center center; + background-repeat: no-repeat; +} + +.swiper-container-horizontal>.swiper-pagination-bullets, .swiper-pagination-custom, .swiper-pagination-fraction{ + bottom: 25px !important; +} + +.idxBanner .swiper-pagination-white .swiper-pagination-bullet { + opacity: 1; +} + +.idxBanner .swiper-pagination-white .swiper-pagination-bullet-active { + background-color: #06acf9; +} + +/* + 首页公告标题 +*/ +.idxTitle { + display: flex; + line-height: 50px; + margin-bottom: 10px; +} +.idxTitle-name { + font-size: 22px; + flex: 1; + position: relative; + padding-left: 20px; +} +.idxTitle-name::after { + position: absolute; + background: #06acf9; + content: ''; + left: 0; + top: calc(50% - 11px); + width: 6px; + height: 22px; +} +.idxTitle-name>span { + font-size: 12px; + padding-left: 6px; + color: #999999; + text-transform : uppercase; +} +.idxTitle-more{ + display: flex; + color: #999999; + cursor: pointer; +} +.idxTitle-more img { + width: 16px; + height: 16px; + margin: 16px 0 0 10px; +} + + +/* + 首页第一模块 +*/ +.idxOneCont { + display: flex; +} +.contant-left { + width: 700px; +} +.oneCont-top { + position: relative; +} +.oneCont-top-img { + width: 280px; + height: 170px; +} +.oneCont-top-cont { + position: absolute; + left: 300px; + top: 0; + width: calc(100% - 300px); +} + +.oneCont-top-title{ + color: #06acf9; + font-size: 18px; + margin-bottom: 10px; + text-align: center; +} +.oneCont-top-time { + display: flex; +} +.oneCont-top-text{ + color: #909090; + line-height: 24px; + -webkit-line-clamp: 4; + margin-bottom: 25px; +} +.oneCont-top-time>span { + flex: 1; + font-size: 13px; + color: #999999; +} + +.oneCont-top-more { + color: #06acf9; + display: flex; + cursor: pointer; +} + +.oneCont-top-more img { + width: 16px; + height: 16px; + margin: 2px 0 0 10px; +} +.oneCont-ul { + margin-top: 15px; +} + +.oneCont-ul li { + display: flex; + line-height: 36px; +} + +.oneCont-ul p { + flex: 1; + margin-right: 100px; +} + +.oneCont-ul span { + color: #999; +} + +.contant-right { + width: calc(500px - 30px); + margin-left: 30px; +} + +.contant-right-list { + background-color: #f0f0f0; + padding: 12px 20px; + box-sizing: border-box; +} + +.contant-right-list li { + line-height: 44px; + display: flex; +} + +.contant-right-list li:hover, .oneCont-ul li:hover { + color: #06acf9; +} + +.contant-right-list li>p { + flex: 1; + margin-right: 20px; +} + +.contant-right-list li>span { + color: #999; + font-size: 12px; +} + +.oneCont-ul li, .contant-right-list li { + cursor: pointer; + transition: .3s; +} + +/* + 首页第二模块 +*/ +.idxTwo { + background-color: #f0f0f0; + padding: 30px 0 60px; + overflow: hidden; +} + +.idxTwo-list { + overflow: hidden; +} + +.idxTwo-list li { + float: left; + width: 400px; + height: 200px; + text-align: center; + position: relative; + cursor: pointer; +} + +.idxTwo-list-img { + position: absolute; + top: 0; + width: 50%; + height: 200px; +} + +.idxTwo-list-img span { + width: 100%; + height: 100%; + background-size: cover; + display: block; + background-repeat: no-repeat; + background-position: center; +} + +.idxTwo-list-img::after { + border: 10px solid transparent; + width: 0; + height: 0; + position: absolute; + top: calc(50% - 5px); + content: ' ' +} + +.idxTwo-list-cont { + width: 50%; + height: 100%; + padding: 20px; + box-sizing: border-box; + position: absolute; + top: 0; + background-color: #06acf9; + color: #fff; +} + +.idxTwo-list-title { + font-size: 16px; +} + +.idxTwo-list-text { + font-size: 12px; + -webkit-line-clamp: 4; + line-height: 24px; + margin: 10px 0; +} + +.idxTwo-list-time img { + width: 16px; + height: 16px; + margin-left: 10px; + vertical-align: middle; +} + +.idxTwo-list li:nth-child(1) .idxTwo-list-img, .idxTwo-list li:nth-child(1) .idxTwo-list-title, .idxTwo-list li:nth-child(1) .idxTwo-list-time { + display: none; +} +.idxTwo-list li:nth-child(1) .idxTwo-list-cont { + background-color: #fff; + width: 100%; + color: #000; +} +.idxTwo-list li:nth-child(1) .idxTwo-list-text { + position: relative; + font-size: 16px; + -webkit-line-clamp: 5; + text-align: left; + padding-top: 15px; + line-height: 26px; +} +.idxTwo-list li:nth-child(1) .idxTwo-list-text::after { + position: absolute; + content: ''; + left: 0; + top: 0; + background-color: #06acf9; + width: 70px; + height: 4px; +} + +.idxTwo-list li:nth-child(2) .idxTwo-list-img, +.idxTwo-list li:nth-child(3) .idxTwo-list-img { + left: 0; +} + +.idxTwo-list li:nth-child(2) .idxTwo-list-cont, +.idxTwo-list li:nth-child(3) .idxTwo-list-cont { + left: 50%; +} + +.idxTwo-list li:nth-child(2) .idxTwo-list-img::after, +.idxTwo-list li:nth-child(3) .idxTwo-list-img::after { + right: 0; + border-right: 10px solid #06acf9; +} + +.idxTwo-list li:nth-child(4) .idxTwo-list-img, +.idxTwo-list li:nth-child(5) .idxTwo-list-img, +.idxTwo-list li:nth-child(6) .idxTwo-list-img { + right: 0; +} + +.idxTwo-list li:nth-child(4) .idxTwo-list-cont, +.idxTwo-list li:nth-child(5) .idxTwo-list-cont, +.idxTwo-list li:nth-child(6) .idxTwo-list-cont { + right: 50%; +} + +.idxTwo-list li:nth-child(4) .idxTwo-list-img::after, +.idxTwo-list li:nth-child(5) .idxTwo-list-img::after, +.idxTwo-list li:nth-child(6) .idxTwo-list-img::after { + left: 0; + border-left: 10px solid #06acf9; +} + +.newTwo-list {margin: 0 -.5rem;} +.newTwo-list li {width: calc(25% - 1rem); margin: 0 .5rem; float: left;} +.newTwo-list-img {width: 100%; padding-top: 65%;} +.newTwo-list-title{font-size: 1rem; margin: .7rem 0 .5rem;} +.newTwo-list-text {color: #999;} + +/* + 首页第三模块 +*/ +.idxThree .contant{ + overflow: hidden; + padding: 10px 0 20px; +} +.threeCont { + width: calc(50% - 10px); + float: left; + box-shadow: 0 2px 20px rgba(0,0,0,.1); + padding: 20px 20px 0; + box-sizing: border-box; +} +.threeCont:nth-child(1){ + margin-right: 10px; +} +.threeCont:nth-child(2){ + margin-left: 10px; +} +.threeCont-top { + position: relative; + margin-bottom: 15px; + cursor: pointer; +} +.threeCont-top-img { + width: 140px; + height: 90px; +} +.threeCont-top-cont { + position: absolute; + left: 150px; + top: 0; + width: calc(100% - 150px); +} +.threeCont-top:hover .threeCont-top-title{ + color: #06acf9; +} +.threeCont-top-title { + font-size: 15px; + margin-bottom: 6px; +} +.threeCont-top-text { + -webkit-line-clamp: 3; + font-size: 12px; + color: #999; + line-height: 19px; +} +.threeCont-list li { + display: flex; + position: relative; + padding: 15px 0 15px 14px; + transition: .3s; +} +.threeCont-list li::after { + position: absolute; + content: ''; + left: 10px; + right: 4px; + top: 0; + width: calc(100% - 14px); + height: 0; + border: 1px dashed #ededed; + transition: .3s; +} +.threeCont-list li::before { + position: absolute; + content: ''; + left: 0; + top: calc(50% - 3px); + background-color:#e0e0e0; + border-radius: 50%; + width: 6px; + height: 6px; +} +.threeCont-list li>p { + flex: 1; + margin-right: 60px; +} +.threeCont-list li>span { + color: #999; + font-size: 13px; +} +.threeCont-list li:hover { + color: #0599de; + cursor: pointer; +} +.threeCont-list li:hover::before { + background-color:#0599de; +} +.idxThree-title{ + position: relative; + display: flex; + margin-bottom: 20px; + height: 40px; +} +.idxThree-title::after { + position: absolute; + content: ''; + display: flex; + background-image: url(../images/title_line.png); + background-repeat: repeat; + background-position: center; + width: 100%; + height: 4px; + left: 0; + bottom: 0; +} +.idxThree-title-name { + flex: 1; + position: relative; +} +.idxThree-title-name::after { + position: absolute; + content: ''; + display: flex; + background-image: url(../images/title_back.png); + background-repeat: no-repeat; + background-position: left; + width: 120px; + height: 40px; + left: 0; + bottom: 0; +} +.idxThree-title-icon { + position: absolute; + width: 120px; + height: 40px; + line-height: 40px; + color: #fff; + padding-left: 6px; + box-sizing: border-box; + z-index: 9; + font-size: 17px; + display: flex; +} + +.idxThree-title-icon img { + width: 18px; + height: 18px; + margin: 12px 8px 0 0; +} +.idxThree-title-more { + color: #51c5fb; + font-size: 14px; + line-height: 40px; + cursor: pointer; +} + + +/* + 首页第四模块 +*/ +.idxFour { + width: 100%; + background-image: url(../images//idxFour_back.png); + height: 600px; + padding: 30px 0; + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} +.idxFour .idxTitle, .idxFour .idxTitle-name>span { + color: #fff; +} +.idxFour .idxTitle-name::after { + background: #fff; +} +.idxFourSwiper { + padding: 0 20px; + box-sizing: border-box; + position: relative; +} +.idxFour-slide { + background: #fff; +} +.idxFour-img { + width: 100%; + padding-top: 80% +} +.idxFour-cont { + padding: 0 20px 20px; + box-sizing: border-box; +} +.idxFour-title { + text-align: center; + line-height: 50px; + font-size: 17px; + position: relative; +} +.idxFour-title::before { + position: absolute; + content: ''; + left: 0; + bottom: 0; + background-color:#e0e0e0; + width: 100%; + height: 1px; +} +.idxFour-text { + -webkit-line-clamp: 4; + line-height: 24px; + padding-top: 10px; +} + +.idxFour-more { + width: 100px; + text-align: center; + border: 1px solid #000; + background: transparent; + line-height: 34px; + margin: 20px auto 0; +} +.idxFour-slide:hover{ + cursor: pointer; +} +.idxFour-slide:hover .idxFour-title { + color: #06acf9; +} +.idxFour-slide:hover .idxFour-more { + background: #06acf9; + border-color: transparent; + color: #fff; +} +.idxFour-Arrows { + position: absolute; + top: -50px; + right: 20px; + background: #fff; + width: 60px; + height: 30px; + line-height: 40px; + overflow: hidden; + border: 1px solid #fff; +} +.idxFour-Arrows .swiper-button-disabled{ + opacity: 1; +} +.idxFour-Arrows .swiper-button-next{ + right: 0; + background-image:none; + background: #2da9e2; + text-align: center; + width: 50%; + color: #fff; + font-size: 20px; +} +.idxFour-Arrows .swiper-button-prev{ + left: 0; + background-image:none; + text-align: center; + font-size: 20px; + color: #2da9e2; + opacity: 1; +} + +/* + 友情链接 +*/ +.idxLink-ul { + overflow: hidden; + padding: 0 20px; + box-sizing: border-box; +} +.idxLink-ul li { + float: left; + width: 16.66%; + font-size: 15px; + cursor: pointer; + line-height: 40px; +} +.idxLink-ul li:hover { + color: #06acf9; +} +.line { + background: #e6e6e6; + width: 100%; + height: 1px; + margin-top: -15px; + margin-bottom: 10px; + position: relative; +} +.line::before { + position: absolute; + content: ''; + left: 0; + bottom: 0; + background-color:#06acf9; + width: 12%; + height: 2px; +} + +/* + 尾部 +*/ +.idxFooter { + background: #585858; + color: #fff; + width: 100%; + padding: 40px 0; +} + +.idxFooter-text { + text-align: center; +} + +.idxFooter-text span { + display: block; + font-size: 18px; + line-height: 30px; +} + +.idxFooter-img { + text-align: center; + margin-top: 30px; +} + +.idxFooter-img img { + width: 86px; +} + + + + +/*详情*/ +.details { + overflow: hidden; +} +.page-left { + width: 280px; + float: left; + background: #fff; +} +.page-right { + width: 900px; + float: right; + margin-left: 20px; + margin-top: 20px; +} +.pagelist h1 { + color: #fff; + height: 45px; + line-height: 45px; + font-size: 18px; + font-weight: 600; + background: #028dcf; + padding-left: 20px; + margin-top: 20px; +} +.pagelist .listbox { + border: 1px solid #efefef; + margin: 20px 0; +} +.pagelist li { + border-top: 1px solid #efefef; + border-bottom: 1px solid #efefef; + margin-top: -1px; +} +.pagelist li a { + height: 35px; + line-height: 35px; + display: block; + background: url(../images/sanjiao2.png) 220px 14px no-repeat #fafafa; + font-size: 14px; + color: #333; + padding-left: 20px; +} +.pagelist li a:hover, +.pagelist li.active>a { + background: url(../images/sanjiao.png) 218px 14px no-repeat #fafafa; + font-weight: bold; +} +.pagelujing { + height: 40px; + border-bottom: 2px solid #efefef; + position: relative; + margin-bottom: 14px; +} +.pagelujing .name { + position: absolute; + left: 0; + top: 0; + height: 40px; + border-bottom: 2px solid #016bd2; + line-height: 40px; + font-size: 16px; + font-weight: bold; +} +.pagelujing span { + position: absolute; + right: 0; + line-height: 40px; + color: #888; +} +.pagelujing span a { + color: #313131; +} +.tcdPageCode { + padding: 15px 20px; + text-align: left; + color: #ccc; + text-align: center; + margin-top: 30px; +} +.tcdPageCode span.disabled { + display: inline-block; + height: 25px; + line-height: 25px; + padding: 0 10px; + margin: 0 2px; + color: #bfbfbf; + background: #f2f2f2; + border: 1px solid #bfbfbf; + border-radius: 4px; + vertical-align: middle; +} +.tcdPageCode span.current { + display: inline-block; + height: 25px; + line-height: 25px; + padding: 0 10px; + margin: 0 2px; + color: #fff; + background-color: #428bca; + border: 1px solid #428bca; + border-radius: 4px; + vertical-align: middle; +} +.tcdPageCode a { + display: inline-block; + color: #428bca; + display: inline-block; + height: 25px; + line-height: 25px; + padding: 0 10px; + border: 1px solid #ddd; + margin: 0 2px; + border-radius: 4px; + vertical-align: middle; +} +.newslist li { + border-bottom: 1px dotted #dedede; + position: relative; + padding: 0 80px 0 14px; + background: url(../images/jiantou.png) 2px 15px no-repeat; +} +.newslist li a { + display: block; + height: 36px; + width: 100%; + line-height: 36px; + font-size: 14px; + color: #666; + word-break: break-all; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + overflow: hidden; +} +.newslist li span { + position: absolute; + right: 0; + top: 0; + line-height: 36px; + color: #bbb; + text-align: center; +} +.biaoti { + font-size: 18px; + color: #333; + text-align: center; + margin: 0 20px; + font-weight: 600; + margin-top: 30px; +} +.sshuomign { + color: #888; + font-size: 12px; + line-height: 30px; + text-align: center; +} +.article_txt { + font-size: 14px; + line-height: 28px; + color: #454545; + margin: 20px 0; + overflow: hidden; +} diff --git a/public/assets/index/css/swiper.min.css b/public/assets/index/css/swiper.min.css new file mode 100644 index 0000000..b222bea --- /dev/null +++ b/public/assets/index/css/swiper.min.css @@ -0,0 +1,15 @@ +/** + * Swiper 3.4.2 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * + * http://www.idangero.us/swiper/ + * + * Copyright 2017, Vladimir Kharlampidi + * The iDangero.us + * http://www.idangero.us/ + * + * Licensed under MIT + * + * Released on: March 10, 2017 + */ +.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-moz-box-orient:vertical;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate(0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{-webkit-box-lines:multiple;-moz-box-lines:multiple;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex:0 0 auto;flex-shrink:0;width:100%;height:100%;position:relative}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start;-webkit-transition-property:-webkit-transform,height;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform,height}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;-moz-background-size:27px 44px;-webkit-background-size:27px 44px;background-size:27px 44px;background-position:center;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{opacity:1;background:#007aff}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);-moz-transform:translate3d(0,-50%,0);-o-transform:translate(0,-50%);-ms-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 5px}.swiper-pagination-progress{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progress .swiper-pagination-progressbar{background:#007aff;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar{-webkit-transform-origin:right top;-moz-transform-origin:right top;-ms-transform-origin:right top;-o-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progress{width:100%;height:4px;left:0;top:0}.swiper-container-vertical>.swiper-pagination-progress{width:4px;height:100%;left:0;top:0}.swiper-pagination-progress.swiper-pagination-white{background:rgba(255,255,255,.5)}.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar{background:#fff}.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar{background:#000}.swiper-container-3d{-webkit-perspective:1200px;-moz-perspective:1200px;-o-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-coverflow .swiper-wrapper,.swiper-container-flip .swiper-wrapper{-ms-perspective:1200px}.swiper-container-cube,.swiper-container-flip{overflow:visible}.swiper-container-cube .swiper-slide,.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-cube .swiper-slide .swiper-slide,.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active,.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top,.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-slide{visibility:hidden;-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-moz-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-pack:center;-moz-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-moz-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-moz-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12,end) infinite;-moz-animation:swiper-preloader-spin 1s steps(12,end) infinite;animation:swiper-preloader-spin 1s steps(12,end) infinite}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");background-position:50%;-webkit-background-size:100%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}@-webkit-keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg)}}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}} \ No newline at end of file diff --git a/public/assets/index/images/banner.png b/public/assets/index/images/banner.png new file mode 100644 index 0000000..1c020d2 Binary files /dev/null and b/public/assets/index/images/banner.png differ diff --git a/public/assets/index/images/idxFooter_img.png b/public/assets/index/images/idxFooter_img.png new file mode 100644 index 0000000..c9a2455 Binary files /dev/null and b/public/assets/index/images/idxFooter_img.png differ diff --git a/public/assets/index/images/idxFour_back.png b/public/assets/index/images/idxFour_back.png new file mode 100644 index 0000000..033b2b9 Binary files /dev/null and b/public/assets/index/images/idxFour_back.png differ diff --git a/public/assets/index/images/idxRow.png b/public/assets/index/images/idxRow.png new file mode 100644 index 0000000..ea6e1fc Binary files /dev/null and b/public/assets/index/images/idxRow.png differ diff --git a/public/assets/index/images/idxRow_color.png b/public/assets/index/images/idxRow_color.png new file mode 100644 index 0000000..d83bb3d Binary files /dev/null and b/public/assets/index/images/idxRow_color.png differ diff --git a/public/assets/index/images/idxRow_white.png b/public/assets/index/images/idxRow_white.png new file mode 100644 index 0000000..76825aa Binary files /dev/null and b/public/assets/index/images/idxRow_white.png differ diff --git a/public/assets/index/images/img.png b/public/assets/index/images/img.png new file mode 100644 index 0000000..ba842b9 Binary files /dev/null and b/public/assets/index/images/img.png differ diff --git a/public/assets/index/images/logo.png b/public/assets/index/images/logo.png new file mode 100644 index 0000000..25853b7 Binary files /dev/null and b/public/assets/index/images/logo.png differ diff --git a/public/assets/index/images/nys_banner.png b/public/assets/index/images/nys_banner.png new file mode 100644 index 0000000..cfe8b4b Binary files /dev/null and b/public/assets/index/images/nys_banner.png differ diff --git a/public/assets/index/images/nys_bg01.jpg b/public/assets/index/images/nys_bg01.jpg new file mode 100644 index 0000000..1a24467 Binary files /dev/null and b/public/assets/index/images/nys_bg01.jpg differ diff --git a/public/assets/index/images/title_back.png b/public/assets/index/images/title_back.png new file mode 100644 index 0000000..9f6c14b Binary files /dev/null and b/public/assets/index/images/title_back.png differ diff --git a/public/assets/index/images/title_icon_00.png b/public/assets/index/images/title_icon_00.png new file mode 100644 index 0000000..2e812ff Binary files /dev/null and b/public/assets/index/images/title_icon_00.png differ diff --git a/public/assets/index/images/title_icon_01.png b/public/assets/index/images/title_icon_01.png new file mode 100644 index 0000000..dde2f6e Binary files /dev/null and b/public/assets/index/images/title_icon_01.png differ diff --git a/public/assets/index/images/title_line.png b/public/assets/index/images/title_line.png new file mode 100644 index 0000000..1a8ce59 Binary files /dev/null and b/public/assets/index/images/title_line.png differ diff --git a/public/assets/index/images/首页.psd b/public/assets/index/images/首页.psd new file mode 100644 index 0000000..c34c154 Binary files /dev/null and b/public/assets/index/images/首页.psd differ diff --git a/public/assets/index/js/jquery-1.8.2.min.js b/public/assets/index/js/jquery-1.8.2.min.js new file mode 100644 index 0000000..44bd521 --- /dev/null +++ b/public/assets/index/js/jquery-1.8.2.min.js @@ -0,0 +1,2 @@ +/*! jQuery v1.8.2 jquery.com | jquery.org/license */ +(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write(""),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b
a",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="
t
",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="
",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;be.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="
",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="

",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b0)for(e=d;e=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/

","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X

","
"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1>");try{for(;d1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]===""&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("
").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); \ No newline at end of file diff --git a/public/assets/index/js/plugin.js b/public/assets/index/js/plugin.js new file mode 100644 index 0000000..48b0f09 --- /dev/null +++ b/public/assets/index/js/plugin.js @@ -0,0 +1,179 @@ +$('[data-href]').on('click', function(event) { + event.preventDefault(); + if ($(this).hasClass('ajax-get') || $(this).hasClass('ajax-post')) { + return; + } + location.href = $(this).data('href'); +}); + +// ajax GET 请求 +$('body').on('click', '.ajax-get', function(event) { + event.preventDefault(); + if ($(this).hasClass('disabled') || $(this).attr('disabled')) { + return false; + }; + var $this = $(this); + var $tips = $this.attr('tip') || '确认要执行该操作吗?'; + var $target = $this.data('href') || $this.attr('href') || $this.attr('url') || $this.data('url'); + + if ($this.hasClass('confirm')) { + if(!confirm($tips)){ + return false; + } + } + $.ajax({ + type: "GET", + url: $target, + success: function(data){ + if(data.code==1){ + updateAlert(data.msg, data.error, function() { + if ($this.hasClass('no-refresh')) { + } else if (data.url == null) { + location.reload(); + } else if (data.url) { + location.href = data.url + '?_=' + (new Date()).getTime(); + } else { + location.reload(); + } + }); + } else { + updateAlert(data.msg); + } + }, + error: function(error){ + if (error.responseJSON.message) { + updateAlert(error.responseJSON.message, 'warning'); + } else { + updateAlert('发生未知错误', 'warning'); + } + } + }); +}); + +// ajax POST 请求 +$('body').on('click', '.ajax-post', function(event) { + if ($(this).hasClass('disabled') || $(this).attr('disabled')) { + return false; + }; + + event.preventDefault(); + var $this = $(this); + var $form = $this.parents('form'); + var $tips = $this.attr('tip') || '确认要执行该操作吗?'; + var $action = $form.attr("action"); + if ($this.hasClass('confirm')) { + if(!confirm($tips)){ + return false; + } + } + $this.attr('disabled', 'disabled'); + var query = $form.serialize(); + + $.ajax({ + type: "POST", + url: $action, + data: query, + success: function(data) { + if (data.code == 0) { + updateAlert(data.msg); + $this.removeAttr('disabled'); + } else { + updateAlert(data.msg, data.error, function() { + if (data.url) { + location.href = data.url + '?_=' + (new Date()).getTime(); + } else if (data.url == null) { + location.reload(); + } else { + location.reload(); + } + }); + } + }, + error: function(error) { + $this.removeAttr('disabled'); + if (error.responseJSON.errors) { + var err = ''; + $.each(error.responseJSON.errors, function(i, n) { + // err += n + "\r\n"; + updateAlert(n[0], 'warning'); + return false; + }) + // updateAlert(err, 'warning'); + } else if (error.responseJSON.message) { + updateAlert(error.responseJSON.message, 'warning'); + } else { + updateAlert('发生未知错误', 'warning'); + } + } + }); +}); + +$('body').on('click', '.ajax-post-confirm', function(event) { + if ($(this).hasClass('disabled') || $(this).attr('disabled')) { + return false; + }; + + event.preventDefault(); + var $this = $(this); + var $form = $this.parents('form'); + var $action = $form.attr("action"); + var $tips = $this.attr('tip') || '确认要执行该操作吗?'; + var query = $form.serialize(); + $this.attr('disabled', 'disabled'); + layer.open({ + content: $tips + ,btn: ['确定', '取消'] + ,yes: function(index){ + $.ajax({ + type: "POST", + url: $action, + data: query, + success: function(data) { + if (data.code == 0) { + updateAlert(data.msg); + $this.removeAttr('disabled'); + } else { + updateAlert(data.msg, data.error, function() { + if (data.url) { + location.href = data.url + '?_=' + (new Date()).getTime(); + } else if (data.url == null) { + location.reload(); + } else { + location.reload(); + } + }); + } + }, + error: function(error) { + $this.removeAttr('disabled'); + if (error.responseJSON.errors) { + var err = ''; + $.each(error.responseJSON.errors, function(i, n) { + // err += n + "\r\n"; + updateAlert(n[0], 'warning'); + return false; + }) + // updateAlert(err, 'warning'); + } else if (error.responseJSON.message) { + updateAlert(error.responseJSON.message, 'warning'); + } else { + updateAlert('发生未知错误', 'warning'); + } + } + }); + layer.close(index); + } + }); +}); + +window.updateAlert = function(text, type, callback) { + layer.open({ + content: text + ,time: 1 + }); + if (typeof callback == "function") { + setTimeout(function() { + callback(); + }, 1500) + } +} diff --git a/public/assets/index/js/swiper.min.js b/public/assets/index/js/swiper.min.js new file mode 100644 index 0000000..03a652f --- /dev/null +++ b/public/assets/index/js/swiper.min.js @@ -0,0 +1,19 @@ +/** + * Swiper 3.4.2 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * + * http://www.idangero.us/swiper/ + * + * Copyright 2017, Vladimir Kharlampidi + * The iDangero.us + * http://www.idangero.us/ + * + * Licensed under MIT + * + * Released on: March 10, 2017 + */ +!function(){"use strict";var e,a=function(s,i){function r(e){return Math.floor(e)}function n(){var e=T.params.autoplay,a=T.slides.eq(T.activeIndex);a.attr("data-swiper-autoplay")&&(e=a.attr("data-swiper-autoplay")||T.params.autoplay),T.autoplayTimeoutId=setTimeout(function(){T.params.loop?(T.fixLoop(),T._slideNext(),T.emit("onAutoplay",T)):T.isEnd?i.autoplayStopOnLast?T.stopAutoplay():(T._slideTo(0),T.emit("onAutoplay",T)):(T._slideNext(),T.emit("onAutoplay",T))},e)}function o(a,t){var s=e(a.target);if(!s.is(t))if("string"==typeof t)s=s.parents(t);else if(t.nodeType){var i;return s.parents().each(function(e,a){a===t&&(i=t)}),i?t:void 0}if(0!==s.length)return s[0]}function l(e,a){a=a||{};var t=window.MutationObserver||window.WebkitMutationObserver,s=new t(function(e){e.forEach(function(e){T.onResize(!0),T.emit("onObserverUpdate",T,e)})});s.observe(e,{attributes:void 0===a.attributes||a.attributes,childList:void 0===a.childList||a.childList,characterData:void 0===a.characterData||a.characterData}),T.observers.push(s)}function p(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!T.params.allowSwipeToNext&&(T.isHorizontal()&&39===a||!T.isHorizontal()&&40===a))return!1;if(!T.params.allowSwipeToPrev&&(T.isHorizontal()&&37===a||!T.isHorizontal()&&38===a))return!1;if(!(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||document.activeElement&&document.activeElement.nodeName&&("input"===document.activeElement.nodeName.toLowerCase()||"textarea"===document.activeElement.nodeName.toLowerCase()))){if(37===a||39===a||38===a||40===a){var t=!1;if(T.container.parents("."+T.params.slideClass).length>0&&0===T.container.parents("."+T.params.slideActiveClass).length)return;var s={left:window.pageXOffset,top:window.pageYOffset},i=window.innerWidth,r=window.innerHeight,n=T.container.offset();T.rtl&&(n.left=n.left-T.container[0].scrollLeft);for(var o=[[n.left,n.top],[n.left+T.width,n.top],[n.left,n.top+T.height],[n.left+T.width,n.top+T.height]],l=0;l=s.left&&p[0]<=s.left+i&&p[1]>=s.top&&p[1]<=s.top+r&&(t=!0)}if(!t)return}T.isHorizontal()?(37!==a&&39!==a||(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!T.rtl||37===a&&T.rtl)&&T.slideNext(),(37===a&&!T.rtl||39===a&&T.rtl)&&T.slidePrev()):(38!==a&&40!==a||(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&T.slideNext(),38===a&&T.slidePrev()),T.emit("onKeyPress",T,a)}}function d(e){var a=0,t=0,s=0,i=0;return"detail"in e&&(t=e.detail),"wheelDelta"in e&&(t=-e.wheelDelta/120),"wheelDeltaY"in e&&(t=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(a=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(a=t,t=0),s=10*a,i=10*t,"deltaY"in e&&(i=e.deltaY),"deltaX"in e&&(s=e.deltaX),(s||i)&&e.deltaMode&&(1===e.deltaMode?(s*=40,i*=40):(s*=800,i*=800)),s&&!a&&(a=s<1?-1:1),i&&!t&&(t=i<1?-1:1),{spinX:a,spinY:t,pixelX:s,pixelY:i}}function u(e){e.originalEvent&&(e=e.originalEvent);var a=0,t=T.rtl?-1:1,s=d(e);if(T.params.mousewheelForceToAxis)if(T.isHorizontal()){if(!(Math.abs(s.pixelX)>Math.abs(s.pixelY)))return;a=s.pixelX*t}else{if(!(Math.abs(s.pixelY)>Math.abs(s.pixelX)))return;a=s.pixelY}else a=Math.abs(s.pixelX)>Math.abs(s.pixelY)?-s.pixelX*t:-s.pixelY;if(0!==a){if(T.params.mousewheelInvert&&(a=-a),T.params.freeMode){var i=T.getWrapperTranslate()+a*T.params.mousewheelSensitivity,r=T.isBeginning,n=T.isEnd;if(i>=T.minTranslate()&&(i=T.minTranslate()),i<=T.maxTranslate()&&(i=T.maxTranslate()),T.setWrapperTransition(0),T.setWrapperTranslate(i),T.updateProgress(),T.updateActiveIndex(),(!r&&T.isBeginning||!n&&T.isEnd)&&T.updateClasses(),T.params.freeModeSticky?(clearTimeout(T.mousewheel.timeout),T.mousewheel.timeout=setTimeout(function(){T.slideReset()},300)):T.params.lazyLoading&&T.lazy&&T.lazy.load(),T.emit("onScroll",T,e),T.params.autoplay&&T.params.autoplayDisableOnInteraction&&T.stopAutoplay(),0===i||i===T.maxTranslate())return}else{if((new window.Date).getTime()-T.mousewheel.lastScrollTime>60)if(a<0)if(T.isEnd&&!T.params.loop||T.animating){if(T.params.mousewheelReleaseOnEdges)return!0}else T.slideNext(),T.emit("onScroll",T,e);else if(T.isBeginning&&!T.params.loop||T.animating){if(T.params.mousewheelReleaseOnEdges)return!0}else T.slidePrev(),T.emit("onScroll",T,e);T.mousewheel.lastScrollTime=(new window.Date).getTime()}return e.preventDefault?e.preventDefault():e.returnValue=!1,!1}}function c(a,t){a=e(a);var s,i,r,n=T.rtl?-1:1;s=a.attr("data-swiper-parallax")||"0",i=a.attr("data-swiper-parallax-x"),r=a.attr("data-swiper-parallax-y"),i||r?(i=i||"0",r=r||"0"):T.isHorizontal()?(i=s,r="0"):(r=s,i="0"),i=i.indexOf("%")>=0?parseInt(i,10)*t*n+"%":i*t*n+"px",r=r.indexOf("%")>=0?parseInt(r,10)*t+"%":r*t+"px",a.transform("translate3d("+i+", "+r+",0px)")}function m(e){return 0!==e.indexOf("on")&&(e=e[0]!==e[0].toUpperCase()?"on"+e[0].toUpperCase()+e.substring(1):"on"+e),e}if(!(this instanceof a))return new a(s,i);var h={direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,autoplay:!1,autoplayDisableOnInteraction:!0,autoplayStopOnLast:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flip:{slideShadows:!0,limitRotation:!0},cube:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fade:{crossFade:!1},parallax:!1,zoom:!1,zoomMax:3,zoomMin:1,zoomToggle:!0,scrollbar:null,scrollbarHide:!0,scrollbarDraggable:!1,scrollbarSnapOnRelease:!1,keyboardControl:!1,mousewheelControl:!1,mousewheelReleaseOnEdges:!1,mousewheelInvert:!1,mousewheelForceToAxis:!1,mousewheelSensitivity:1,mousewheelEventsTarged:"container",hashnav:!1,hashnavWatchState:!1,history:!1,replaceState:!1,breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,onlyExternal:!1,threshold:0,touchMoveStopPropagation:!0,touchReleaseOnEdges:!1,uniqueNavElements:!0,pagination:null,paginationElement:"span",paginationClickable:!1,paginationHide:!1,paginationBulletRender:null,paginationProgressRender:null,paginationFractionRender:null,paginationCustomRender:null,paginationType:"bullets",resistance:!0,resistanceRatio:.85,nextButton:null,prevButton:null,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,lazyLoading:!1,lazyLoadingInPrevNext:!1,lazyLoadingInPrevNextAmount:1,lazyLoadingOnTransitionStart:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,control:void 0,controlInverse:!1,controlBy:"slide",normalizeSlideIndex:!0,allowSwipeToPrev:!0,allowSwipeToNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",buttonDisabledClass:"swiper-button-disabled",paginationCurrentClass:"swiper-pagination-current",paginationTotalClass:"swiper-pagination-total",paginationHiddenClass:"swiper-pagination-hidden",paginationProgressbarClass:"swiper-pagination-progressbar",paginationClickableClass:"swiper-pagination-clickable",paginationModifierClass:"swiper-pagination-",lazyLoadingClass:"swiper-lazy",lazyStatusLoadingClass:"swiper-lazy-loading",lazyStatusLoadedClass:"swiper-lazy-loaded",lazyPreloaderClass:"swiper-lazy-preloader",notificationClass:"swiper-notification",preloaderClass:"preloader",zoomContainerClass:"swiper-zoom-container",observer:!1,observeParents:!1,a11y:!1,prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",runCallbacksOnInit:!0},g=i&&i.virtualTranslate;i=i||{};var f={};for(var v in i)if("object"!=typeof i[v]||null===i[v]||(i[v].nodeType||i[v]===window||i[v]===document||void 0!==t&&i[v]instanceof t||"undefined"!=typeof jQuery&&i[v]instanceof jQuery))f[v]=i[v];else{f[v]={};for(var w in i[v])f[v][w]=i[v][w]}for(var y in h)if(void 0===i[y])i[y]=h[y];else if("object"==typeof i[y])for(var x in h[y])void 0===i[y][x]&&(i[y][x]=h[y][x]);var T=this;if(T.params=i,T.originalParams=f,T.classNames=[],void 0!==e&&void 0!==t&&(e=t),(void 0!==e||(e=void 0===t?window.Dom7||window.Zepto||window.jQuery:t))&&(T.$=e,T.currentBreakpoint=void 0,T.getActiveBreakpoint=function(){if(!T.params.breakpoints)return!1;var e,a=!1,t=[];for(e in T.params.breakpoints)T.params.breakpoints.hasOwnProperty(e)&&t.push(e);t.sort(function(e,a){return parseInt(e,10)>parseInt(a,10)});for(var s=0;s=window.innerWidth&&!a&&(a=e);return a||"max"},T.setBreakpoint=function(){var e=T.getActiveBreakpoint();if(e&&T.currentBreakpoint!==e){var a=e in T.params.breakpoints?T.params.breakpoints[e]:T.originalParams,t=T.params.loop&&a.slidesPerView!==T.params.slidesPerView;for(var s in a)T.params[s]=a[s];T.currentBreakpoint=e,t&&T.destroyLoop&&T.reLoop(!0)}},T.params.breakpoints&&T.setBreakpoint(),T.container=e(s),0!==T.container.length)){if(T.container.length>1){var b=[];return T.container.each(function(){b.push(new a(this,i))}),b}T.container[0].swiper=T,T.container.data("swiper",T),T.classNames.push(T.params.containerModifierClass+T.params.direction),T.params.freeMode&&T.classNames.push(T.params.containerModifierClass+"free-mode"),T.support.flexbox||(T.classNames.push(T.params.containerModifierClass+"no-flexbox"),T.params.slidesPerColumn=1),T.params.autoHeight&&T.classNames.push(T.params.containerModifierClass+"autoheight"),(T.params.parallax||T.params.watchSlidesVisibility)&&(T.params.watchSlidesProgress=!0),T.params.touchReleaseOnEdges&&(T.params.resistanceRatio=0),["cube","coverflow","flip"].indexOf(T.params.effect)>=0&&(T.support.transforms3d?(T.params.watchSlidesProgress=!0,T.classNames.push(T.params.containerModifierClass+"3d")):T.params.effect="slide"),"slide"!==T.params.effect&&T.classNames.push(T.params.containerModifierClass+T.params.effect),"cube"===T.params.effect&&(T.params.resistanceRatio=0,T.params.slidesPerView=1,T.params.slidesPerColumn=1,T.params.slidesPerGroup=1,T.params.centeredSlides=!1,T.params.spaceBetween=0,T.params.virtualTranslate=!0),"fade"!==T.params.effect&&"flip"!==T.params.effect||(T.params.slidesPerView=1,T.params.slidesPerColumn=1,T.params.slidesPerGroup=1,T.params.watchSlidesProgress=!0,T.params.spaceBetween=0,void 0===g&&(T.params.virtualTranslate=!0)),T.params.grabCursor&&T.support.touch&&(T.params.grabCursor=!1),T.wrapper=T.container.children("."+T.params.wrapperClass),T.params.pagination&&(T.paginationContainer=e(T.params.pagination),T.params.uniqueNavElements&&"string"==typeof T.params.pagination&&T.paginationContainer.length>1&&1===T.container.find(T.params.pagination).length&&(T.paginationContainer=T.container.find(T.params.pagination)),"bullets"===T.params.paginationType&&T.params.paginationClickable?T.paginationContainer.addClass(T.params.paginationModifierClass+"clickable"):T.params.paginationClickable=!1,T.paginationContainer.addClass(T.params.paginationModifierClass+T.params.paginationType)),(T.params.nextButton||T.params.prevButton)&&(T.params.nextButton&&(T.nextButton=e(T.params.nextButton),T.params.uniqueNavElements&&"string"==typeof T.params.nextButton&&T.nextButton.length>1&&1===T.container.find(T.params.nextButton).length&&(T.nextButton=T.container.find(T.params.nextButton))),T.params.prevButton&&(T.prevButton=e(T.params.prevButton),T.params.uniqueNavElements&&"string"==typeof T.params.prevButton&&T.prevButton.length>1&&1===T.container.find(T.params.prevButton).length&&(T.prevButton=T.container.find(T.params.prevButton)))),T.isHorizontal=function(){return"horizontal"===T.params.direction},T.rtl=T.isHorizontal()&&("rtl"===T.container[0].dir.toLowerCase()||"rtl"===T.container.css("direction")),T.rtl&&T.classNames.push(T.params.containerModifierClass+"rtl"),T.rtl&&(T.wrongRTL="-webkit-box"===T.wrapper.css("display")),T.params.slidesPerColumn>1&&T.classNames.push(T.params.containerModifierClass+"multirow"),T.device.android&&T.classNames.push(T.params.containerModifierClass+"android"),T.container.addClass(T.classNames.join(" ")),T.translate=0,T.progress=0,T.velocity=0,T.lockSwipeToNext=function(){T.params.allowSwipeToNext=!1,T.params.allowSwipeToPrev===!1&&T.params.grabCursor&&T.unsetGrabCursor()},T.lockSwipeToPrev=function(){T.params.allowSwipeToPrev=!1,T.params.allowSwipeToNext===!1&&T.params.grabCursor&&T.unsetGrabCursor()},T.lockSwipes=function(){T.params.allowSwipeToNext=T.params.allowSwipeToPrev=!1,T.params.grabCursor&&T.unsetGrabCursor()},T.unlockSwipeToNext=function(){T.params.allowSwipeToNext=!0,T.params.allowSwipeToPrev===!0&&T.params.grabCursor&&T.setGrabCursor()},T.unlockSwipeToPrev=function(){T.params.allowSwipeToPrev=!0,T.params.allowSwipeToNext===!0&&T.params.grabCursor&&T.setGrabCursor()},T.unlockSwipes=function(){T.params.allowSwipeToNext=T.params.allowSwipeToPrev=!0,T.params.grabCursor&&T.setGrabCursor()},T.setGrabCursor=function(e){T.container[0].style.cursor="move",T.container[0].style.cursor=e?"-webkit-grabbing":"-webkit-grab",T.container[0].style.cursor=e?"-moz-grabbin":"-moz-grab",T.container[0].style.cursor=e?"grabbing":"grab"},T.unsetGrabCursor=function(){T.container[0].style.cursor=""},T.params.grabCursor&&T.setGrabCursor(),T.imagesToLoad=[],T.imagesLoaded=0,T.loadImage=function(e,a,t,s,i,r){function n(){r&&r()}var o;e.complete&&i?n():a?(o=new window.Image,o.onload=n,o.onerror=n,s&&(o.sizes=s),t&&(o.srcset=t),a&&(o.src=a)):n()},T.preloadImages=function(){function e(){void 0!==T&&null!==T&&T&&(void 0!==T.imagesLoaded&&T.imagesLoaded++,T.imagesLoaded===T.imagesToLoad.length&&(T.params.updateOnImagesReady&&T.update(),T.emit("onImagesReady",T)))}T.imagesToLoad=T.container.find("img");for(var a=0;a1)for(e=0;eT.slides.length)break;a.push(T.slides.eq(s)[0])}else a.push(T.slides.eq(T.activeIndex)[0]);for(e=0;et?i:t}t&&T.wrapper.css("height",t+"px")},T.updateContainerSize=function(){var e,a;e=void 0!==T.params.width?T.params.width:T.container[0].clientWidth,a=void 0!==T.params.height?T.params.height:T.container[0].clientHeight,0===e&&T.isHorizontal()||0===a&&!T.isHorizontal()||(e=e-parseInt(T.container.css("padding-left"),10)-parseInt(T.container.css("padding-right"),10),a=a-parseInt(T.container.css("padding-top"),10)-parseInt(T.container.css("padding-bottom"),10),T.width=e,T.height=a,T.size=T.isHorizontal()?T.width:T.height)},T.updateSlidesSize=function(){T.slides=T.wrapper.children("."+T.params.slideClass),T.snapGrid=[],T.slidesGrid=[],T.slidesSizesGrid=[];var e,a=T.params.spaceBetween,t=-T.params.slidesOffsetBefore,s=0,i=0;if(void 0!==T.size){"string"==typeof a&&a.indexOf("%")>=0&&(a=parseFloat(a.replace("%",""))/100*T.size),T.virtualSize=-a,T.rtl?T.slides.css({marginLeft:"",marginTop:""}):T.slides.css({marginRight:"",marginBottom:""});var n;T.params.slidesPerColumn>1&&(n=Math.floor(T.slides.length/T.params.slidesPerColumn)===T.slides.length/T.params.slidesPerColumn?T.slides.length:Math.ceil(T.slides.length/T.params.slidesPerColumn)*T.params.slidesPerColumn,"auto"!==T.params.slidesPerView&&"row"===T.params.slidesPerColumnFill&&(n=Math.max(n,T.params.slidesPerView*T.params.slidesPerColumn)));var o,l=T.params.slidesPerColumn,p=n/l,d=p-(T.params.slidesPerColumn*p-T.slides.length);for(e=0;e1){var c,m,h;"column"===T.params.slidesPerColumnFill?(m=Math.floor(e/l),h=e-m*l,(m>d||m===d&&h===l-1)&&++h>=l&&(h=0,m++),c=m+h*n/l,u.css({"-webkit-box-ordinal-group":c,"-moz-box-ordinal-group":c,"-ms-flex-order":c,"-webkit-order":c,order:c})):(h=Math.floor(e/p),m=e-h*p),u.css("margin-"+(T.isHorizontal()?"top":"left"),0!==h&&T.params.spaceBetween&&T.params.spaceBetween+"px").attr("data-swiper-column",m).attr("data-swiper-row",h)}"none"!==u.css("display")&&("auto"===T.params.slidesPerView?(o=T.isHorizontal()?u.outerWidth(!0):u.outerHeight(!0),T.params.roundLengths&&(o=r(o))):(o=(T.size-(T.params.slidesPerView-1)*a)/T.params.slidesPerView,T.params.roundLengths&&(o=r(o)),T.isHorizontal()?T.slides[e].style.width=o+"px":T.slides[e].style.height=o+"px"),T.slides[e].swiperSlideSize=o,T.slidesSizesGrid.push(o),T.params.centeredSlides?(t=t+o/2+s/2+a,0===s&&0!==e&&(t=t-T.size/2-a),0===e&&(t=t-T.size/2-a),Math.abs(t)<.001&&(t=0),i%T.params.slidesPerGroup==0&&T.snapGrid.push(t),T.slidesGrid.push(t)):(i%T.params.slidesPerGroup==0&&T.snapGrid.push(t),T.slidesGrid.push(t),t=t+o+a),T.virtualSize+=o+a,s=o,i++)}T.virtualSize=Math.max(T.virtualSize,T.size)+T.params.slidesOffsetAfter;var g;if(T.rtl&&T.wrongRTL&&("slide"===T.params.effect||"coverflow"===T.params.effect)&&T.wrapper.css({width:T.virtualSize+T.params.spaceBetween+"px"}),T.support.flexbox&&!T.params.setWrapperSize||(T.isHorizontal()?T.wrapper.css({width:T.virtualSize+T.params.spaceBetween+"px"}):T.wrapper.css({height:T.virtualSize+T.params.spaceBetween+"px"})),T.params.slidesPerColumn>1&&(T.virtualSize=(o+T.params.spaceBetween)*n,T.virtualSize=Math.ceil(T.virtualSize/T.params.slidesPerColumn)-T.params.spaceBetween,T.isHorizontal()?T.wrapper.css({width:T.virtualSize+T.params.spaceBetween+"px"}):T.wrapper.css({height:T.virtualSize+T.params.spaceBetween+"px"}),T.params.centeredSlides)){for(g=[],e=0;e1&&T.snapGrid.push(T.virtualSize-T.size)}0===T.snapGrid.length&&(T.snapGrid=[0]),0!==T.params.spaceBetween&&(T.isHorizontal()?T.rtl?T.slides.css({marginLeft:a+"px"}):T.slides.css({marginRight:a+"px"}):T.slides.css({marginBottom:a+"px"})),T.params.watchSlidesProgress&&T.updateSlidesOffset()}},T.updateSlidesOffset=function(){for(var e=0;eT.size&&(s=!0));for(a=T.activeIndex-1;a>=0;a--)T.slides[a]&&!s&&(i+=T.slides[a].swiperSlideSize,t++,i>T.size&&(s=!0))}else for(e=T.activeIndex+1;e=0&&r0&&n<=T.size||r<=0&&n>=T.size)&&T.slides.eq(t).addClass(T.params.slideVisibleClass)}s.progress=T.rtl?-i:i}}},T.updateProgress=function(e){void 0===e&&(e=T.translate||0);var a=T.maxTranslate()-T.minTranslate(),t=T.isBeginning,s=T.isEnd;0===a?(T.progress=0,T.isBeginning=T.isEnd=!0):(T.progress=(e-T.minTranslate())/a,T.isBeginning=T.progress<=0,T.isEnd=T.progress>=1),T.isBeginning&&!t&&T.emit("onReachBeginning",T),T.isEnd&&!s&&T.emit("onReachEnd",T),T.params.watchSlidesProgress&&T.updateSlidesProgress(e),T.emit("onProgress",T,T.progress)},T.updateActiveIndex=function(){var e,a,t,s=T.rtl?T.translate:-T.translate;for(a=0;a=T.slidesGrid[a]&&s=T.slidesGrid[a]&&s=T.slidesGrid[a]&&(e=a);T.params.normalizeSlideIndex&&(e<0||void 0===e)&&(e=0),t=Math.floor(e/T.params.slidesPerGroup),t>=T.snapGrid.length&&(t=T.snapGrid.length-1),e!==T.activeIndex&&(T.snapIndex=t,T.previousIndex=T.activeIndex,T.activeIndex=e,T.updateClasses(),T.updateRealIndex())},T.updateRealIndex=function(){T.realIndex=parseInt(T.slides.eq(T.activeIndex).attr("data-swiper-slide-index")||T.activeIndex,10)},T.updateClasses=function(){T.slides.removeClass(T.params.slideActiveClass+" "+T.params.slideNextClass+" "+T.params.slidePrevClass+" "+T.params.slideDuplicateActiveClass+" "+T.params.slideDuplicateNextClass+" "+T.params.slideDuplicatePrevClass);var a=T.slides.eq(T.activeIndex);a.addClass(T.params.slideActiveClass),i.loop&&(a.hasClass(T.params.slideDuplicateClass)?T.wrapper.children("."+T.params.slideClass+":not(."+T.params.slideDuplicateClass+')[data-swiper-slide-index="'+T.realIndex+'"]').addClass(T.params.slideDuplicateActiveClass):T.wrapper.children("."+T.params.slideClass+"."+T.params.slideDuplicateClass+'[data-swiper-slide-index="'+T.realIndex+'"]').addClass(T.params.slideDuplicateActiveClass));var t=a.next("."+T.params.slideClass).addClass(T.params.slideNextClass);T.params.loop&&0===t.length&&(t=T.slides.eq(0),t.addClass(T.params.slideNextClass));var s=a.prev("."+T.params.slideClass).addClass(T.params.slidePrevClass);if(T.params.loop&&0===s.length&&(s=T.slides.eq(-1),s.addClass(T.params.slidePrevClass)),i.loop&&(t.hasClass(T.params.slideDuplicateClass)?T.wrapper.children("."+T.params.slideClass+":not(."+T.params.slideDuplicateClass+')[data-swiper-slide-index="'+t.attr("data-swiper-slide-index")+'"]').addClass(T.params.slideDuplicateNextClass):T.wrapper.children("."+T.params.slideClass+"."+T.params.slideDuplicateClass+'[data-swiper-slide-index="'+t.attr("data-swiper-slide-index")+'"]').addClass(T.params.slideDuplicateNextClass),s.hasClass(T.params.slideDuplicateClass)?T.wrapper.children("."+T.params.slideClass+":not(."+T.params.slideDuplicateClass+')[data-swiper-slide-index="'+s.attr("data-swiper-slide-index")+'"]').addClass(T.params.slideDuplicatePrevClass):T.wrapper.children("."+T.params.slideClass+"."+T.params.slideDuplicateClass+'[data-swiper-slide-index="'+s.attr("data-swiper-slide-index")+'"]').addClass(T.params.slideDuplicatePrevClass)),T.paginationContainer&&T.paginationContainer.length>0){var r,n=T.params.loop?Math.ceil((T.slides.length-2*T.loopedSlides)/T.params.slidesPerGroup):T.snapGrid.length;if(T.params.loop?(r=Math.ceil((T.activeIndex-T.loopedSlides)/T.params.slidesPerGroup),r>T.slides.length-1-2*T.loopedSlides&&(r-=T.slides.length-2*T.loopedSlides),r>n-1&&(r-=n),r<0&&"bullets"!==T.params.paginationType&&(r=n+r)):r=void 0!==T.snapIndex?T.snapIndex:T.activeIndex||0,"bullets"===T.params.paginationType&&T.bullets&&T.bullets.length>0&&(T.bullets.removeClass(T.params.bulletActiveClass),T.paginationContainer.length>1?T.bullets.each(function(){e(this).index()===r&&e(this).addClass(T.params.bulletActiveClass)}):T.bullets.eq(r).addClass(T.params.bulletActiveClass)),"fraction"===T.params.paginationType&&(T.paginationContainer.find("."+T.params.paginationCurrentClass).text(r+1),T.paginationContainer.find("."+T.params.paginationTotalClass).text(n)),"progress"===T.params.paginationType){var o=(r+1)/n,l=o,p=1;T.isHorizontal()||(p=o,l=1),T.paginationContainer.find("."+T.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+l+") scaleY("+p+")").transition(T.params.speed)}"custom"===T.params.paginationType&&T.params.paginationCustomRender&&(T.paginationContainer.html(T.params.paginationCustomRender(T,r+1,n)),T.emit("onPaginationRendered",T,T.paginationContainer[0]))}T.params.loop||(T.params.prevButton&&T.prevButton&&T.prevButton.length>0&&(T.isBeginning?(T.prevButton.addClass(T.params.buttonDisabledClass),T.params.a11y&&T.a11y&&T.a11y.disable(T.prevButton)):(T.prevButton.removeClass(T.params.buttonDisabledClass),T.params.a11y&&T.a11y&&T.a11y.enable(T.prevButton))),T.params.nextButton&&T.nextButton&&T.nextButton.length>0&&(T.isEnd?(T.nextButton.addClass(T.params.buttonDisabledClass),T.params.a11y&&T.a11y&&T.a11y.disable(T.nextButton)):(T.nextButton.removeClass(T.params.buttonDisabledClass),T.params.a11y&&T.a11y&&T.a11y.enable(T.nextButton))))},T.updatePagination=function(){if(T.params.pagination&&T.paginationContainer&&T.paginationContainer.length>0){var e="";if("bullets"===T.params.paginationType){for(var a=T.params.loop?Math.ceil((T.slides.length-2*T.loopedSlides)/T.params.slidesPerGroup):T.snapGrid.length,t=0;t";T.paginationContainer.html(e),T.bullets=T.paginationContainer.find("."+T.params.bulletClass),T.params.paginationClickable&&T.params.a11y&&T.a11y&&T.a11y.initPagination()}"fraction"===T.params.paginationType&&(e=T.params.paginationFractionRender?T.params.paginationFractionRender(T,T.params.paginationCurrentClass,T.params.paginationTotalClass):' / ',T.paginationContainer.html(e)),"progress"===T.params.paginationType&&(e=T.params.paginationProgressRender?T.params.paginationProgressRender(T,T.params.paginationProgressbarClass):'',T.paginationContainer.html(e)),"custom"!==T.params.paginationType&&T.emit("onPaginationRendered",T,T.paginationContainer[0])}},T.update=function(e){function a(){T.rtl,T.translate;t=Math.min(Math.max(T.translate,T.maxTranslate()),T.minTranslate()),T.setWrapperTranslate(t),T.updateActiveIndex(),T.updateClasses()}if(T){T.updateContainerSize(),T.updateSlidesSize(),T.updateProgress(),T.updatePagination(),T.updateClasses(),T.params.scrollbar&&T.scrollbar&&T.scrollbar.set();var t;if(e){T.controller&&T.controller.spline&&(T.controller.spline=void 0),T.params.freeMode?(a(),T.params.autoHeight&&T.updateAutoHeight()):(("auto"===T.params.slidesPerView||T.params.slidesPerView>1)&&T.isEnd&&!T.params.centeredSlides?T.slideTo(T.slides.length-1,0,!1,!0):T.slideTo(T.activeIndex,0,!1,!0))||a()}else T.params.autoHeight&&T.updateAutoHeight()}},T.onResize=function(e){T.params.onBeforeResize&&T.params.onBeforeResize(T),T.params.breakpoints&&T.setBreakpoint();var a=T.params.allowSwipeToPrev,t=T.params.allowSwipeToNext;T.params.allowSwipeToPrev=T.params.allowSwipeToNext=!0,T.updateContainerSize(),T.updateSlidesSize(),("auto"===T.params.slidesPerView||T.params.freeMode||e)&&T.updatePagination(),T.params.scrollbar&&T.scrollbar&&T.scrollbar.set(),T.controller&&T.controller.spline&&(T.controller.spline=void 0);var s=!1;if(T.params.freeMode){var i=Math.min(Math.max(T.translate,T.maxTranslate()),T.minTranslate());T.setWrapperTranslate(i),T.updateActiveIndex(),T.updateClasses(),T.params.autoHeight&&T.updateAutoHeight()}else T.updateClasses(),s=("auto"===T.params.slidesPerView||T.params.slidesPerView>1)&&T.isEnd&&!T.params.centeredSlides?T.slideTo(T.slides.length-1,0,!1,!0):T.slideTo(T.activeIndex,0,!1,!0);T.params.lazyLoading&&!s&&T.lazy&&T.lazy.load(),T.params.allowSwipeToPrev=a,T.params.allowSwipeToNext=t,T.params.onAfterResize&&T.params.onAfterResize(T)},T.touchEventsDesktop={start:"mousedown",move:"mousemove",end:"mouseup"},window.navigator.pointerEnabled?T.touchEventsDesktop={start:"pointerdown",move:"pointermove",end:"pointerup"}:window.navigator.msPointerEnabled&&(T.touchEventsDesktop={start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}),T.touchEvents={start:T.support.touch||!T.params.simulateTouch?"touchstart":T.touchEventsDesktop.start,move:T.support.touch||!T.params.simulateTouch?"touchmove":T.touchEventsDesktop.move,end:T.support.touch||!T.params.simulateTouch?"touchend":T.touchEventsDesktop.end},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===T.params.touchEventsTarget?T.container:T.wrapper).addClass("swiper-wp8-"+T.params.direction),T.initEvents=function(e){var a=e?"off":"on",t=e?"removeEventListener":"addEventListener",s="container"===T.params.touchEventsTarget?T.container[0]:T.wrapper[0],r=T.support.touch?s:document,n=!!T.params.nested;if(T.browser.ie)s[t](T.touchEvents.start,T.onTouchStart,!1),r[t](T.touchEvents.move,T.onTouchMove,n),r[t](T.touchEvents.end,T.onTouchEnd,!1);else{if(T.support.touch){var o=!("touchstart"!==T.touchEvents.start||!T.support.passiveListener||!T.params.passiveListeners)&&{passive:!0,capture:!1};s[t](T.touchEvents.start,T.onTouchStart,o),s[t](T.touchEvents.move,T.onTouchMove,n),s[t](T.touchEvents.end,T.onTouchEnd,o)}(i.simulateTouch&&!T.device.ios&&!T.device.android||i.simulateTouch&&!T.support.touch&&T.device.ios)&&(s[t]("mousedown",T.onTouchStart,!1),document[t]("mousemove",T.onTouchMove,n),document[t]("mouseup",T.onTouchEnd,!1))}window[t]("resize",T.onResize),T.params.nextButton&&T.nextButton&&T.nextButton.length>0&&(T.nextButton[a]("click",T.onClickNext),T.params.a11y&&T.a11y&&T.nextButton[a]("keydown",T.a11y.onEnterKey)),T.params.prevButton&&T.prevButton&&T.prevButton.length>0&&(T.prevButton[a]("click",T.onClickPrev),T.params.a11y&&T.a11y&&T.prevButton[a]("keydown",T.a11y.onEnterKey)),T.params.pagination&&T.params.paginationClickable&&(T.paginationContainer[a]("click","."+T.params.bulletClass,T.onClickIndex),T.params.a11y&&T.a11y&&T.paginationContainer[a]("keydown","."+T.params.bulletClass,T.a11y.onEnterKey)),(T.params.preventClicks||T.params.preventClicksPropagation)&&s[t]("click",T.preventClicks,!0)},T.attachEvents=function(){T.initEvents()},T.detachEvents=function(){T.initEvents(!0)},T.allowClick=!0,T.preventClicks=function(e){T.allowClick||(T.params.preventClicks&&e.preventDefault(),T.params.preventClicksPropagation&&T.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},T.onClickNext=function(e){e.preventDefault(),T.isEnd&&!T.params.loop||T.slideNext()},T.onClickPrev=function(e){e.preventDefault(),T.isBeginning&&!T.params.loop||T.slidePrev()},T.onClickIndex=function(a){a.preventDefault();var t=e(this).index()*T.params.slidesPerGroup;T.params.loop&&(t+=T.loopedSlides),T.slideTo(t)}, +T.updateClickedSlide=function(a){var t=o(a,"."+T.params.slideClass),s=!1;if(t)for(var i=0;iT.slides.length-T.loopedSlides+l/2?(T.fixLoop(),n=T.wrapper.children("."+T.params.slideClass+'[data-swiper-slide-index="'+r+'"]:not(.'+T.params.slideDuplicateClass+")").eq(0).index(),setTimeout(function(){T.slideTo(n)},0)):T.slideTo(n):n>T.slides.length-l?(T.fixLoop(),n=T.wrapper.children("."+T.params.slideClass+'[data-swiper-slide-index="'+r+'"]:not(.'+T.params.slideDuplicateClass+")").eq(0).index(),setTimeout(function(){T.slideTo(n)},0)):T.slideTo(n)}else T.slideTo(n)}};var S,C,z,M,E,P,I,k,L,D,B="input, select, textarea, button, video",H=Date.now(),G=[];T.animating=!1,T.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var X,A;T.onTouchStart=function(a){if(a.originalEvent&&(a=a.originalEvent),(X="touchstart"===a.type)||!("which"in a)||3!==a.which){if(T.params.noSwiping&&o(a,"."+T.params.noSwipingClass))return void(T.allowClick=!0);if(!T.params.swipeHandler||o(a,T.params.swipeHandler)){var t=T.touches.currentX="touchstart"===a.type?a.targetTouches[0].pageX:a.pageX,s=T.touches.currentY="touchstart"===a.type?a.targetTouches[0].pageY:a.pageY;if(!(T.device.ios&&T.params.iOSEdgeSwipeDetection&&t<=T.params.iOSEdgeSwipeThreshold)){if(S=!0,C=!1,z=!0,E=void 0,A=void 0,T.touches.startX=t,T.touches.startY=s,M=Date.now(),T.allowClick=!0,T.updateContainerSize(),T.swipeDirection=void 0,T.params.threshold>0&&(k=!1),"touchstart"!==a.type){var i=!0;e(a.target).is(B)&&(i=!1),document.activeElement&&e(document.activeElement).is(B)&&document.activeElement.blur(),i&&a.preventDefault()}T.emit("onTouchStart",T,a)}}}},T.onTouchMove=function(a){if(a.originalEvent&&(a=a.originalEvent),!X||"mousemove"!==a.type){if(a.preventedByNestedSwiper)return T.touches.startX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,void(T.touches.startY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY);if(T.params.onlyExternal)return T.allowClick=!1,void(S&&(T.touches.startX=T.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,T.touches.startY=T.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,M=Date.now()));if(X&&T.params.touchReleaseOnEdges&&!T.params.loop)if(T.isHorizontal()){if(T.touches.currentXT.touches.startX&&T.translate>=T.minTranslate())return}else if(T.touches.currentYT.touches.startY&&T.translate>=T.minTranslate())return;if(X&&document.activeElement&&a.target===document.activeElement&&e(a.target).is(B))return C=!0,void(T.allowClick=!1);if(z&&T.emit("onTouchMove",T,a),!(a.targetTouches&&a.targetTouches.length>1)){if(T.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,T.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,void 0===E){var t;T.isHorizontal()&&T.touches.currentY===T.touches.startY||!T.isHorizontal()&&T.touches.currentX===T.touches.startX?E=!1:(t=180*Math.atan2(Math.abs(T.touches.currentY-T.touches.startY),Math.abs(T.touches.currentX-T.touches.startX))/Math.PI,E=T.isHorizontal()?t>T.params.touchAngle:90-t>T.params.touchAngle)}if(E&&T.emit("onTouchMoveOpposite",T,a),void 0===A&&(T.touches.currentX===T.touches.startX&&T.touches.currentY===T.touches.startY||(A=!0)),S){if(E)return void(S=!1);if(A){T.allowClick=!1,T.emit("onSliderMove",T,a),a.preventDefault(),T.params.touchMoveStopPropagation&&!T.params.nested&&a.stopPropagation(),C||(i.loop&&T.fixLoop(),I=T.getWrapperTranslate(),T.setWrapperTransition(0),T.animating&&T.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),T.params.autoplay&&T.autoplaying&&(T.params.autoplayDisableOnInteraction?T.stopAutoplay():T.pauseAutoplay()),D=!1,!T.params.grabCursor||T.params.allowSwipeToNext!==!0&&T.params.allowSwipeToPrev!==!0||T.setGrabCursor(!0)),C=!0;var s=T.touches.diff=T.isHorizontal()?T.touches.currentX-T.touches.startX:T.touches.currentY-T.touches.startY;s*=T.params.touchRatio,T.rtl&&(s=-s),T.swipeDirection=s>0?"prev":"next",P=s+I;var r=!0;if(s>0&&P>T.minTranslate()?(r=!1,T.params.resistance&&(P=T.minTranslate()-1+Math.pow(-T.minTranslate()+I+s,T.params.resistanceRatio))):s<0&&PI&&(P=I),T.params.threshold>0){if(!(Math.abs(s)>T.params.threshold||k))return void(P=I);if(!k)return k=!0,T.touches.startX=T.touches.currentX,T.touches.startY=T.touches.currentY,P=I,void(T.touches.diff=T.isHorizontal()?T.touches.currentX-T.touches.startX:T.touches.currentY-T.touches.startY)}T.params.followFinger&&((T.params.freeMode||T.params.watchSlidesProgress)&&T.updateActiveIndex(),T.params.freeMode&&(0===G.length&&G.push({position:T.touches[T.isHorizontal()?"startX":"startY"],time:M}),G.push({position:T.touches[T.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),T.updateProgress(P),T.setWrapperTranslate(P))}}}}},T.onTouchEnd=function(a){if(a.originalEvent&&(a=a.originalEvent),z&&T.emit("onTouchEnd",T,a),z=!1,S){T.params.grabCursor&&C&&S&&(T.params.allowSwipeToNext===!0||T.params.allowSwipeToPrev===!0)&&T.setGrabCursor(!1);var t=Date.now(),s=t-M;if(T.allowClick&&(T.updateClickedSlide(a),T.emit("onTap",T,a),s<300&&t-H>300&&(L&&clearTimeout(L),L=setTimeout(function(){T&&(T.params.paginationHide&&T.paginationContainer.length>0&&!e(a.target).hasClass(T.params.bulletClass)&&T.paginationContainer.toggleClass(T.params.paginationHiddenClass),T.emit("onClick",T,a))},300)),s<300&&t-H<300&&(L&&clearTimeout(L),T.emit("onDoubleTap",T,a))),H=Date.now(),setTimeout(function(){T&&(T.allowClick=!0)},0),!S||!C||!T.swipeDirection||0===T.touches.diff||P===I)return void(S=C=!1);S=C=!1;var i;if(i=T.params.followFinger?T.rtl?T.translate:-T.translate:-P,T.params.freeMode){if(i<-T.minTranslate())return void T.slideTo(T.activeIndex);if(i>-T.maxTranslate())return void(T.slides.length1){var r=G.pop(),n=G.pop(),o=r.position-n.position,l=r.time-n.time;T.velocity=o/l,T.velocity=T.velocity/2,Math.abs(T.velocity)150||(new window.Date).getTime()-r.time>300)&&(T.velocity=0)}else T.velocity=0;T.velocity=T.velocity*T.params.freeModeMomentumVelocityRatio,G.length=0;var p=1e3*T.params.freeModeMomentumRatio,d=T.velocity*p,u=T.translate+d;T.rtl&&(u=-u);var c,m=!1,h=20*Math.abs(T.velocity)*T.params.freeModeMomentumBounceRatio;if(uT.minTranslate())T.params.freeModeMomentumBounce?(u-T.minTranslate()>h&&(u=T.minTranslate()+h),c=T.minTranslate(),m=!0,D=!0):u=T.minTranslate();else if(T.params.freeModeSticky){var g,f=0;for(f=0;f-u){g=f;break}u=Math.abs(T.snapGrid[g]-u)=T.params.longSwipesMs)&&(T.updateProgress(),T.updateActiveIndex()))}var v,w=0,y=T.slidesSizesGrid[0];for(v=0;v=T.slidesGrid[v]&&i=T.slidesGrid[v]&&(w=v,y=T.slidesGrid[T.slidesGrid.length-1]-T.slidesGrid[T.slidesGrid.length-2]);var x=(i-T.slidesGrid[w])/y;if(s>T.params.longSwipesMs){if(!T.params.longSwipes)return void T.slideTo(T.activeIndex);"next"===T.swipeDirection&&(x>=T.params.longSwipesRatio?T.slideTo(w+T.params.slidesPerGroup):T.slideTo(w)),"prev"===T.swipeDirection&&(x>1-T.params.longSwipesRatio?T.slideTo(w+T.params.slidesPerGroup):T.slideTo(w))}else{if(!T.params.shortSwipes)return void T.slideTo(T.activeIndex);"next"===T.swipeDirection&&T.slideTo(w+T.params.slidesPerGroup),"prev"===T.swipeDirection&&T.slideTo(w)}}},T._slideTo=function(e,a){return T.slideTo(e,a,!0,!0)},T.slideTo=function(e,a,t,s){void 0===t&&(t=!0),void 0===e&&(e=0),e<0&&(e=0),T.snapIndex=Math.floor(e/T.params.slidesPerGroup),T.snapIndex>=T.snapGrid.length&&(T.snapIndex=T.snapGrid.length-1);var i=-T.snapGrid[T.snapIndex];if(T.params.autoplay&&T.autoplaying&&(s||!T.params.autoplayDisableOnInteraction?T.pauseAutoplay(a):T.stopAutoplay()),T.updateProgress(i),T.params.normalizeSlideIndex)for(var r=0;r=Math.floor(100*T.slidesGrid[r])&&(e=r);return!(!T.params.allowSwipeToNext&&iT.translate&&i>T.maxTranslate()&&(T.activeIndex||0)!==e)&&(void 0===a&&(a=T.params.speed),T.previousIndex=T.activeIndex||0,T.activeIndex=e,T.updateRealIndex(),T.rtl&&-i===T.translate||!T.rtl&&i===T.translate?(T.params.autoHeight&&T.updateAutoHeight(),T.updateClasses(),"slide"!==T.params.effect&&T.setWrapperTranslate(i),!1):(T.updateClasses(),T.onTransitionStart(t),0===a||T.browser.lteIE9?(T.setWrapperTranslate(i),T.setWrapperTransition(0),T.onTransitionEnd(t)):(T.setWrapperTranslate(i),T.setWrapperTransition(a),T.animating||(T.animating=!0,T.wrapper.transitionEnd(function(){T&&T.onTransitionEnd(t)}))),!0)))},T.onTransitionStart=function(e){void 0===e&&(e=!0),T.params.autoHeight&&T.updateAutoHeight(),T.lazy&&T.lazy.onTransitionStart(),e&&(T.emit("onTransitionStart",T),T.activeIndex!==T.previousIndex&&(T.emit("onSlideChangeStart",T),T.activeIndex>T.previousIndex?T.emit("onSlideNextStart",T):T.emit("onSlidePrevStart",T)))},T.onTransitionEnd=function(e){T.animating=!1,T.setWrapperTransition(0),void 0===e&&(e=!0),T.lazy&&T.lazy.onTransitionEnd(),e&&(T.emit("onTransitionEnd",T),T.activeIndex!==T.previousIndex&&(T.emit("onSlideChangeEnd",T),T.activeIndex>T.previousIndex?T.emit("onSlideNextEnd",T):T.emit("onSlidePrevEnd",T))),T.params.history&&T.history&&T.history.setHistory(T.params.history,T.activeIndex),T.params.hashnav&&T.hashnav&&T.hashnav.setHash()},T.slideNext=function(e,a,t){if(T.params.loop){if(T.animating)return!1;T.fixLoop();T.container[0].clientLeft;return T.slideTo(T.activeIndex+T.params.slidesPerGroup,a,e,t)}return T.slideTo(T.activeIndex+T.params.slidesPerGroup,a,e,t)},T._slideNext=function(e){return T.slideNext(!0,e,!0)},T.slidePrev=function(e,a,t){if(T.params.loop){if(T.animating)return!1;T.fixLoop();T.container[0].clientLeft;return T.slideTo(T.activeIndex-1,a,e,t)}return T.slideTo(T.activeIndex-1,a,e,t)},T._slidePrev=function(e){return T.slidePrev(!0,e,!0)},T.slideReset=function(e,a,t){return T.slideTo(T.activeIndex,a,e)},T.disableTouchControl=function(){return T.params.onlyExternal=!0,!0},T.enableTouchControl=function(){return T.params.onlyExternal=!1,!0},T.setWrapperTransition=function(e,a){T.wrapper.transition(e),"slide"!==T.params.effect&&T.effects[T.params.effect]&&T.effects[T.params.effect].setTransition(e),T.params.parallax&&T.parallax&&T.parallax.setTransition(e),T.params.scrollbar&&T.scrollbar&&T.scrollbar.setTransition(e),T.params.control&&T.controller&&T.controller.setTransition(e,a),T.emit("onSetTransition",T,e)},T.setWrapperTranslate=function(e,a,t){var s=0,i=0;T.isHorizontal()?s=T.rtl?-e:e:i=e,T.params.roundLengths&&(s=r(s),i=r(i)),T.params.virtualTranslate||(T.support.transforms3d?T.wrapper.transform("translate3d("+s+"px, "+i+"px, 0px)"):T.wrapper.transform("translate("+s+"px, "+i+"px)")),T.translate=T.isHorizontal()?s:i;var n,o=T.maxTranslate()-T.minTranslate();n=0===o?0:(e-T.minTranslate())/o,n!==T.progress&&T.updateProgress(e),a&&T.updateActiveIndex(),"slide"!==T.params.effect&&T.effects[T.params.effect]&&T.effects[T.params.effect].setTranslate(T.translate),T.params.parallax&&T.parallax&&T.parallax.setTranslate(T.translate),T.params.scrollbar&&T.scrollbar&&T.scrollbar.setTranslate(T.translate),T.params.control&&T.controller&&T.controller.setTranslate(T.translate,t),T.emit("onSetTranslate",T,T.translate)},T.getTranslate=function(e,a){var t,s,i,r;return void 0===a&&(a="x"),T.params.virtualTranslate?T.rtl?-T.translate:T.translate:(i=window.getComputedStyle(e,null),window.WebKitCSSMatrix?(s=i.transform||i.webkitTransform,s.split(",").length>6&&(s=s.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),r=new window.WebKitCSSMatrix("none"===s?"":s)):(r=i.MozTransform||i.OTransform||i.MsTransform||i.msTransform||i.transform||i.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=r.toString().split(",")),"x"===a&&(s=window.WebKitCSSMatrix?r.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(s=window.WebKitCSSMatrix?r.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),T.rtl&&s&&(s=-s),s||0)},T.getWrapperTranslate=function(e){return void 0===e&&(e=T.isHorizontal()?"x":"y"),T.getTranslate(T.wrapper[0],e)},T.observers=[],T.initObservers=function(){if(T.params.observeParents)for(var e=T.container.parents(),a=0;aa.length&&(T.loopedSlides=a.length);var t,s=[],i=[];for(a.each(function(t,r){var n=e(this);t=a.length-T.loopedSlides&&s.push(r),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)T.wrapper.prepend(e(s[t].cloneNode(!0)).addClass(T.params.slideDuplicateClass))},T.destroyLoop=function(){T.wrapper.children("."+T.params.slideClass+"."+T.params.slideDuplicateClass).remove(),T.slides.removeAttr("data-swiper-slide-index")},T.reLoop=function(e){var a=T.activeIndex-T.loopedSlides;T.destroyLoop(),T.createLoop(),T.updateSlidesSize(),e&&T.slideTo(a+T.loopedSlides,0,!1)},T.fixLoop=function(){var e;T.activeIndex=2*T.loopedSlides||T.activeIndex>T.slides.length-2*T.params.slidesPerView)&&(e=-T.slides.length+T.activeIndex+T.loopedSlides,e+=T.loopedSlides,T.slideTo(e,0,!1,!0))},T.appendSlide=function(e){if(T.params.loop&&T.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;a
'),t.append(d)),0===u.length&&(u=e('
'),t.append(u)),d.length&&(d[0].style.opacity=Math.max(-s,0)),u.length&&(u[0].style.opacity=Math.max(s,0))}t.transform("translate3d("+l+"px, "+p+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(a){if(T.slides.transition(a).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(a),T.params.virtualTranslate&&0!==a){var t=!1;T.slides.eq(T.activeIndex).transitionEnd(function(){if(!t&&T&&e(this).hasClass(T.params.slideActiveClass)){t=!0,T.animating=!1;for(var a=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],s=0;s'),T.wrapper.append(a)),a.css({height:T.width+"px"})):(a=T.container.find(".swiper-cube-shadow"),0===a.length&&(a=e('
'),T.container.append(a))));for(var s=0;s-1&&(t=90*s+90*o,T.rtl&&(t=90*-s-90*o)),i.transform(u),T.params.cube.slideShadows){var c=T.isHorizontal()?i.find(".swiper-slide-shadow-left"):i.find(".swiper-slide-shadow-top"),m=T.isHorizontal()?i.find(".swiper-slide-shadow-right"):i.find(".swiper-slide-shadow-bottom");0===c.length&&(c=e('
'),i.append(c)),0===m.length&&(m=e('
'),i.append(m)),c.length&&(c[0].style.opacity=Math.max(-o,0)),m.length&&(m[0].style.opacity=Math.max(o,0))}}if(T.wrapper.css({"-webkit-transform-origin":"50% 50% -"+T.size/2+"px","-moz-transform-origin":"50% 50% -"+T.size/2+"px","-ms-transform-origin":"50% 50% -"+T.size/2+"px","transform-origin":"50% 50% -"+T.size/2+"px"}),T.params.cube.shadow)if(T.isHorizontal())a.transform("translate3d(0px, "+(T.width/2+T.params.cube.shadowOffset)+"px, "+-T.width/2+"px) rotateX(90deg) rotateZ(0deg) scale("+T.params.cube.shadowScale+")");else{var h=Math.abs(t)-90*Math.floor(Math.abs(t)/90),g=1.5-(Math.sin(2*h*Math.PI/360)/2+Math.cos(2*h*Math.PI/360)/2),f=T.params.cube.shadowScale,v=T.params.cube.shadowScale/g,w=T.params.cube.shadowOffset;a.transform("scale3d("+f+", 1, "+v+") translate3d(0px, "+(T.height/2+w)+"px, "+-T.height/2/v+"px) rotateX(-90deg)")}var y=T.isSafari||T.isUiWebView?-T.size/2:0;T.wrapper.transform("translate3d(0px,0,"+y+"px) rotateX("+(T.isHorizontal()?0:t)+"deg) rotateY("+(T.isHorizontal()?-t:0)+"deg)")},setTransition:function(e){T.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),T.params.cube.shadow&&!T.isHorizontal()&&T.container.find(".swiper-cube-shadow").transition(e)}},coverflow:{setTranslate:function(){for(var a=T.translate,t=T.isHorizontal()?-a+T.width/2:-a+T.height/2,s=T.isHorizontal()?T.params.coverflow.rotate:-T.params.coverflow.rotate,i=T.params.coverflow.depth,r=0,n=T.slides.length;r'),o.append(v)),0===w.length&&(w=e('
'),o.append(w)),v.length&&(v[0].style.opacity=d>0?d:0),w.length&&(w[0].style.opacity=-d>0?-d:0)}}if(T.browser.ie){T.wrapper[0].style.perspectiveOrigin=t+"px 50%"}},setTransition:function(e){T.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}}},T.lazy={initialImageLoaded:!1,loadImageInSlide:function(a,t){if(void 0!==a&&(void 0===t&&(t=!0),0!==T.slides.length)){var s=T.slides.eq(a),i=s.find("."+T.params.lazyLoadingClass+":not(."+T.params.lazyStatusLoadedClass+"):not(."+T.params.lazyStatusLoadingClass+")");!s.hasClass(T.params.lazyLoadingClass)||s.hasClass(T.params.lazyStatusLoadedClass)||s.hasClass(T.params.lazyStatusLoadingClass)||(i=i.add(s[0])),0!==i.length&&i.each(function(){var a=e(this);a.addClass(T.params.lazyStatusLoadingClass);var i=a.attr("data-background"),r=a.attr("data-src"),n=a.attr("data-srcset"),o=a.attr("data-sizes");T.loadImage(a[0],r||i,n,o,!1,function(){if(void 0!==T&&null!==T&&T){if(i?(a.css("background-image",'url("'+i+'")'),a.removeAttr("data-background")):(n&&(a.attr("srcset",n),a.removeAttr("data-srcset")),o&&(a.attr("sizes",o),a.removeAttr("data-sizes")),r&&(a.attr("src",r),a.removeAttr("data-src"))),a.addClass(T.params.lazyStatusLoadedClass).removeClass(T.params.lazyStatusLoadingClass),s.find("."+T.params.lazyPreloaderClass+", ."+T.params.preloaderClass).remove(),T.params.loop&&t){var e=s.attr("data-swiper-slide-index");if(s.hasClass(T.params.slideDuplicateClass)){var l=T.wrapper.children('[data-swiper-slide-index="'+e+'"]:not(.'+T.params.slideDuplicateClass+")");T.lazy.loadImageInSlide(l.index(),!1)}else{var p=T.wrapper.children("."+T.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');T.lazy.loadImageInSlide(p.index(),!1)}}T.emit("onLazyImageReady",T,s[0],a[0])}}),T.emit("onLazyImageLoad",T,s[0],a[0])})}},load:function(){var a,t=T.params.slidesPerView;if("auto"===t&&(t=0),T.lazy.initialImageLoaded||(T.lazy.initialImageLoaded=!0),T.params.watchSlidesVisibility)T.wrapper.children("."+T.params.slideVisibleClass).each(function(){T.lazy.loadImageInSlide(e(this).index())});else if(t>1)for(a=T.activeIndex;a1||T.params.lazyLoadingInPrevNextAmount&&T.params.lazyLoadingInPrevNextAmount>1){var s=T.params.lazyLoadingInPrevNextAmount,i=t,r=Math.min(T.activeIndex+i+Math.max(s,i),T.slides.length),n=Math.max(T.activeIndex-Math.max(i,s),0);for(a=T.activeIndex+t;a0&&T.lazy.loadImageInSlide(o.index());var l=T.wrapper.children("."+T.params.slidePrevClass);l.length>0&&T.lazy.loadImageInSlide(l.index())}},onTransitionStart:function(){T.params.lazyLoading&&(T.params.lazyLoadingOnTransitionStart||!T.params.lazyLoadingOnTransitionStart&&!T.lazy.initialImageLoaded)&&T.lazy.load()},onTransitionEnd:function(){T.params.lazyLoading&&!T.params.lazyLoadingOnTransitionStart&&T.lazy.load()}},T.scrollbar={isTouched:!1,setDragPosition:function(e){var a=T.scrollbar,t=T.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY,s=t-a.track.offset()[T.isHorizontal()?"left":"top"]-a.dragSize/2,i=-T.minTranslate()*a.moveDivider,r=-T.maxTranslate()*a.moveDivider;sr&&(s=r),s=-s/a.moveDivider,T.updateProgress(s),T.setWrapperTranslate(s,!0)},dragStart:function(e){var a=T.scrollbar;a.isTouched=!0,e.preventDefault(),e.stopPropagation(),a.setDragPosition(e),clearTimeout(a.dragTimeout),a.track.transition(0),T.params.scrollbarHide&&a.track.css("opacity",1),T.wrapper.transition(100),a.drag.transition(100),T.emit("onScrollbarDragStart",T)},dragMove:function(e){var a=T.scrollbar;a.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,a.setDragPosition(e),T.wrapper.transition(0),a.track.transition(0),a.drag.transition(0),T.emit("onScrollbarDragMove",T))},dragEnd:function(e){var a=T.scrollbar;a.isTouched&&(a.isTouched=!1,T.params.scrollbarHide&&(clearTimeout(a.dragTimeout),a.dragTimeout=setTimeout(function(){a.track.css("opacity",0),a.track.transition(400)},1e3)),T.emit("onScrollbarDragEnd",T),T.params.scrollbarSnapOnRelease&&T.slideReset())},draggableEvents:function(){return T.params.simulateTouch!==!1||T.support.touch?T.touchEvents:T.touchEventsDesktop}(),enableDraggable:function(){var a=T.scrollbar,t=T.support.touch?a.track:document;e(a.track).on(a.draggableEvents.start,a.dragStart),e(t).on(a.draggableEvents.move,a.dragMove),e(t).on(a.draggableEvents.end,a.dragEnd)},disableDraggable:function(){var a=T.scrollbar,t=T.support.touch?a.track:document;e(a.track).off(a.draggableEvents.start,a.dragStart),e(t).off(a.draggableEvents.move,a.dragMove),e(t).off(a.draggableEvents.end,a.dragEnd)},set:function(){if(T.params.scrollbar){var a=T.scrollbar;a.track=e(T.params.scrollbar),T.params.uniqueNavElements&&"string"==typeof T.params.scrollbar&&a.track.length>1&&1===T.container.find(T.params.scrollbar).length&&(a.track=T.container.find(T.params.scrollbar)),a.drag=a.track.find(".swiper-scrollbar-drag"),0===a.drag.length&&(a.drag=e('
'),a.track.append(a.drag)),a.drag[0].style.width="",a.drag[0].style.height="",a.trackSize=T.isHorizontal()?a.track[0].offsetWidth:a.track[0].offsetHeight,a.divider=T.size/T.virtualSize,a.moveDivider=a.divider*(a.trackSize/T.size),a.dragSize=a.trackSize*a.divider,T.isHorizontal()?a.drag[0].style.width=a.dragSize+"px":a.drag[0].style.height=a.dragSize+"px",a.divider>=1?a.track[0].style.display="none":a.track[0].style.display="",T.params.scrollbarHide&&(a.track[0].style.opacity=0)}},setTranslate:function(){if(T.params.scrollbar){var e,a=T.scrollbar,t=(T.translate,a.dragSize);e=(a.trackSize-a.dragSize)*T.progress,T.rtl&&T.isHorizontal()?(e=-e,e>0?(t=a.dragSize-e,e=0):-e+a.dragSize>a.trackSize&&(t=a.trackSize+e)):e<0?(t=a.dragSize+e,e=0):e+a.dragSize>a.trackSize&&(t=a.trackSize-e),T.isHorizontal()?(T.support.transforms3d?a.drag.transform("translate3d("+e+"px, 0, 0)"):a.drag.transform("translateX("+e+"px)"),a.drag[0].style.width=t+"px"):(T.support.transforms3d?a.drag.transform("translate3d(0px, "+e+"px, 0)"):a.drag.transform("translateY("+e+"px)"),a.drag[0].style.height=t+"px"),T.params.scrollbarHide&&(clearTimeout(a.timeout),a.track[0].style.opacity=1,a.timeout=setTimeout(function(){a.track[0].style.opacity=0,a.track.transition(400)},1e3))}},setTransition:function(e){T.params.scrollbar&&T.scrollbar.drag.transition(e)}},T.controller={LinearSpline:function(e,a){var t=function(){var e,a,t;return function(s,i){for(a=-1,e=s.length;e-a>1;)s[t=e+a>>1]<=i?a=t:e=t;return e}}();this.x=e,this.y=a,this.lastIndex=e.length-1;var s,i;this.x.length;this.interpolate=function(e){return e?(i=t(this.x,e),s=i-1,(e-this.x[s])*(this.y[i]-this.y[s])/(this.x[i]-this.x[s])+this.y[s]):0}},getInterpolateFunction:function(e){T.controller.spline||(T.controller.spline=T.params.loop?new T.controller.LinearSpline(T.slidesGrid,e.slidesGrid):new T.controller.LinearSpline(T.snapGrid,e.snapGrid))},setTranslate:function(e,t){function s(a){e=a.rtl&&"horizontal"===a.params.direction?-T.translate:T.translate,"slide"===T.params.controlBy&&(T.controller.getInterpolateFunction(a),r=-T.controller.spline.interpolate(-e)),r&&"container"!==T.params.controlBy||(i=(a.maxTranslate()-a.minTranslate())/(T.maxTranslate()-T.minTranslate()),r=(e-T.minTranslate())*i+a.minTranslate()),T.params.controlInverse&&(r=a.maxTranslate()-r),a.updateProgress(r),a.setWrapperTranslate(r,!1,T),a.updateActiveIndex()}var i,r,n=T.params.control;if(Array.isArray(n))for(var o=0;o-1?"DOMMouseScroll":function(){var e="onwheel"in document;if(!e){var a=document.createElement("div");a.setAttribute("onwheel","return;"),e="function"==typeof a.onwheel}return!e&&document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0&&(e=document.implementation.hasFeature("Events.wheel","3.0")),e}()?"wheel":"mousewheel"),T.disableMousewheelControl=function(){if(!T.mousewheel.event)return!1;var a=T.container;return"container"!==T.params.mousewheelEventsTarged&&(a=e(T.params.mousewheelEventsTarged)),a.off(T.mousewheel.event,u),T.params.mousewheelControl=!1,!0},T.enableMousewheelControl=function(){if(!T.mousewheel.event)return!1;var a=T.container;return"container"!==T.params.mousewheelEventsTarged&&(a=e(T.params.mousewheelEventsTarged)),a.on(T.mousewheel.event,u),T.params.mousewheelControl=!0,!0},T.parallax={setTranslate:function(){T.container.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){c(this,T.progress)}),T.slides.each(function(){var a=e(this);a.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){c(this,Math.min(Math.max(a[0].progress,-1),1))})})},setTransition:function(a){void 0===a&&(a=T.params.speed),T.container.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var t=e(this),s=parseInt(t.attr("data-swiper-parallax-duration"),10)||a;0===a&&(s=0),t.transition(s)})}},T.zoom={scale:1,currentScale:1,isScaling:!1,gesture:{slide:void 0,slideWidth:void 0,slideHeight:void 0,image:void 0,imageWrap:void 0,zoomMax:T.params.zoomMax},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0},getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var a=e.targetTouches[0].pageX,t=e.targetTouches[0].pageY,s=e.targetTouches[1].pageX,i=e.targetTouches[1].pageY;return Math.sqrt(Math.pow(s-a,2)+Math.pow(i-t,2))},onGestureStart:function(a){var t=T.zoom;if(!T.support.gestures){if("touchstart"!==a.type||"touchstart"===a.type&&a.targetTouches.length<2)return;t.gesture.scaleStart=t.getDistanceBetweenTouches(a)}if(!(t.gesture.slide&&t.gesture.slide.length||(t.gesture.slide=e(this),0===t.gesture.slide.length&&(t.gesture.slide=T.slides.eq(T.activeIndex)),t.gesture.image=t.gesture.slide.find("img, svg, canvas"),t.gesture.imageWrap=t.gesture.image.parent("."+T.params.zoomContainerClass),t.gesture.zoomMax=t.gesture.imageWrap.attr("data-swiper-zoom")||T.params.zoomMax,0!==t.gesture.imageWrap.length)))return void(t.gesture.image=void 0);t.gesture.image.transition(0),t.isScaling=!0},onGestureChange:function(e){var a=T.zoom;if(!T.support.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;a.gesture.scaleMove=a.getDistanceBetweenTouches(e)}a.gesture.image&&0!==a.gesture.image.length&&(T.support.gestures?a.scale=e.scale*a.currentScale:a.scale=a.gesture.scaleMove/a.gesture.scaleStart*a.currentScale,a.scale>a.gesture.zoomMax&&(a.scale=a.gesture.zoomMax-1+Math.pow(a.scale-a.gesture.zoomMax+1,.5)),a.scalea.image.touchesStart.x)return void(a.image.isTouched=!1);if(!T.isHorizontal()&&Math.floor(a.image.minY)===Math.floor(a.image.startY)&&a.image.touchesCurrent.ya.image.touchesStart.y)return void(a.image.isTouched=!1)}e.preventDefault(),e.stopPropagation(),a.image.isMoved=!0,a.image.currentX=a.image.touchesCurrent.x-a.image.touchesStart.x+a.image.startX,a.image.currentY=a.image.touchesCurrent.y-a.image.touchesStart.y+a.image.startY,a.image.currentXa.image.maxX&&(a.image.currentX=a.image.maxX-1+Math.pow(a.image.currentX-a.image.maxX+1,.8)),a.image.currentYa.image.maxY&&(a.image.currentY=a.image.maxY-1+Math.pow(a.image.currentY-a.image.maxY+1,.8)),a.velocity.prevPositionX||(a.velocity.prevPositionX=a.image.touchesCurrent.x),a.velocity.prevPositionY||(a.velocity.prevPositionY=a.image.touchesCurrent.y),a.velocity.prevTime||(a.velocity.prevTime=Date.now()),a.velocity.x=(a.image.touchesCurrent.x-a.velocity.prevPositionX)/(Date.now()-a.velocity.prevTime)/2,a.velocity.y=(a.image.touchesCurrent.y-a.velocity.prevPositionY)/(Date.now()-a.velocity.prevTime)/2,Math.abs(a.image.touchesCurrent.x-a.velocity.prevPositionX)<2&&(a.velocity.x=0),Math.abs(a.image.touchesCurrent.y-a.velocity.prevPositionY)<2&&(a.velocity.y=0),a.velocity.prevPositionX=a.image.touchesCurrent.x,a.velocity.prevPositionY=a.image.touchesCurrent.y,a.velocity.prevTime=Date.now(),a.gesture.imageWrap.transform("translate3d("+a.image.currentX+"px, "+a.image.currentY+"px,0)")}}},onTouchEnd:function(e,a){var t=e.zoom;if(t.gesture.image&&0!==t.gesture.image.length){if(!t.image.isTouched||!t.image.isMoved)return t.image.isTouched=!1,void(t.image.isMoved=!1);t.image.isTouched=!1,t.image.isMoved=!1;var s=300,i=300,r=t.velocity.x*s,n=t.image.currentX+r,o=t.velocity.y*i,l=t.image.currentY+o;0!==t.velocity.x&&(s=Math.abs((n-t.image.currentX)/t.velocity.x)),0!==t.velocity.y&&(i=Math.abs((l-t.image.currentY)/t.velocity.y));var p=Math.max(s,i);t.image.currentX=n,t.image.currentY=l;var d=t.image.width*t.scale,u=t.image.height*t.scale;t.image.minX=Math.min(t.gesture.slideWidth/2-d/2,0),t.image.maxX=-t.image.minX,t.image.minY=Math.min(t.gesture.slideHeight/2-u/2,0),t.image.maxY=-t.image.minY,t.image.currentX=Math.max(Math.min(t.image.currentX,t.image.maxX),t.image.minX),t.image.currentY=Math.max(Math.min(t.image.currentY,t.image.maxY),t.image.minY),t.gesture.imageWrap.transition(p).transform("translate3d("+t.image.currentX+"px, "+t.image.currentY+"px,0)")}},onTransitionEnd:function(e){var a=e.zoom;a.gesture.slide&&e.previousIndex!==e.activeIndex&&(a.gesture.image.transform("translate3d(0,0,0) scale(1)"),a.gesture.imageWrap.transform("translate3d(0,0,0)"),a.gesture.slide=a.gesture.image=a.gesture.imageWrap=void 0,a.scale=a.currentScale=1)},toggleZoom:function(a,t){var s=a.zoom;if(s.gesture.slide||(s.gesture.slide=a.clickedSlide?e(a.clickedSlide):a.slides.eq(a.activeIndex),s.gesture.image=s.gesture.slide.find("img, svg, canvas"),s.gesture.imageWrap=s.gesture.image.parent("."+a.params.zoomContainerClass)),s.gesture.image&&0!==s.gesture.image.length){var i,r,n,o,l,p,d,u,c,m,h,g,f,v,w,y,x,T;void 0===s.image.touchesStart.x&&t?(i="touchend"===t.type?t.changedTouches[0].pageX:t.pageX,r="touchend"===t.type?t.changedTouches[0].pageY:t.pageY):(i=s.image.touchesStart.x,r=s.image.touchesStart.y),s.scale&&1!==s.scale?(s.scale=s.currentScale=1,s.gesture.imageWrap.transition(300).transform("translate3d(0,0,0)"),s.gesture.image.transition(300).transform("translate3d(0,0,0) scale(1)"),s.gesture.slide=void 0):(s.scale=s.currentScale=s.gesture.imageWrap.attr("data-swiper-zoom")||a.params.zoomMax,t?(x=s.gesture.slide[0].offsetWidth,T=s.gesture.slide[0].offsetHeight,n=s.gesture.slide.offset().left,o=s.gesture.slide.offset().top,l=n+x/2-i,p=o+T/2-r,c=s.gesture.image[0].offsetWidth,m=s.gesture.image[0].offsetHeight,h=c*s.scale,g=m*s.scale,f=Math.min(x/2-h/2,0),v=Math.min(T/2-g/2,0),w=-f,y=-v,d=l*s.scale,u=p*s.scale,dw&&(d=w),uy&&(u=y)):(d=0,u=0),s.gesture.imageWrap.transition(300).transform("translate3d("+d+"px, "+u+"px,0)"),s.gesture.image.transition(300).transform("translate3d(0,0,0) scale("+s.scale+")"))}},attachEvents:function(a){var t=a?"off":"on";if(T.params.zoom){var s=(T.slides,!("touchstart"!==T.touchEvents.start||!T.support.passiveListener||!T.params.passiveListeners)&&{passive:!0,capture:!1});T.support.gestures?(T.slides[t]("gesturestart",T.zoom.onGestureStart,s),T.slides[t]("gesturechange",T.zoom.onGestureChange,s),T.slides[t]("gestureend",T.zoom.onGestureEnd,s)):"touchstart"===T.touchEvents.start&&(T.slides[t](T.touchEvents.start,T.zoom.onGestureStart,s),T.slides[t](T.touchEvents.move,T.zoom.onGestureChange,s),T.slides[t](T.touchEvents.end,T.zoom.onGestureEnd,s)),T[t]("touchStart",T.zoom.onTouchStart),T.slides.each(function(a,s){e(s).find("."+T.params.zoomContainerClass).length>0&&e(s)[t](T.touchEvents.move,T.zoom.onTouchMove)}),T[t]("touchEnd",T.zoom.onTouchEnd),T[t]("transitionEnd",T.zoom.onTransitionEnd),T.params.zoomToggle&&T.on("doubleTap",T.zoom.toggleZoom)}},init:function(){T.zoom.attachEvents()},destroy:function(){T.zoom.attachEvents(!0)}},T._plugins=[];for(var Y in T.plugins){var O=T.plugins[Y](T,T.params[Y]);O&&T._plugins.push(O)}return T.callPlugins=function(e){for(var a=0;a'),notify:function(e){var a=T.a11y.liveRegion;0!==a.length&&(a.html(""),a.html(e))},init:function(){T.params.nextButton&&T.nextButton&&T.nextButton.length>0&&(T.a11y.makeFocusable(T.nextButton),T.a11y.addRole(T.nextButton,"button"),T.a11y.addLabel(T.nextButton,T.params.nextSlideMessage)),T.params.prevButton&&T.prevButton&&T.prevButton.length>0&&(T.a11y.makeFocusable(T.prevButton),T.a11y.addRole(T.prevButton,"button"),T.a11y.addLabel(T.prevButton,T.params.prevSlideMessage)),e(T.container).append(T.a11y.liveRegion)},initPagination:function(){T.params.pagination&&T.params.paginationClickable&&T.bullets&&T.bullets.length&&T.bullets.each(function(){var a=e(this);T.a11y.makeFocusable(a),T.a11y.addRole(a,"button"),T.a11y.addLabel(a,T.params.paginationBulletMessage.replace(/{{index}}/,a.index()+1))})},destroy:function(){T.a11y.liveRegion&&T.a11y.liveRegion.length>0&&T.a11y.liveRegion.remove()}},T.init=function(){T.params.loop&&T.createLoop(),T.updateContainerSize(),T.updateSlidesSize(),T.updatePagination(),T.params.scrollbar&&T.scrollbar&&(T.scrollbar.set(),T.params.scrollbarDraggable&&T.scrollbar.enableDraggable()),"slide"!==T.params.effect&&T.effects[T.params.effect]&&(T.params.loop||T.updateProgress(),T.effects[T.params.effect].setTranslate()),T.params.loop?T.slideTo(T.params.initialSlide+T.loopedSlides,0,T.params.runCallbacksOnInit):(T.slideTo(T.params.initialSlide,0,T.params.runCallbacksOnInit),0===T.params.initialSlide&&(T.parallax&&T.params.parallax&&T.parallax.setTranslate(),T.lazy&&T.params.lazyLoading&&(T.lazy.load(),T.lazy.initialImageLoaded=!0))),T.attachEvents(),T.params.observer&&T.support.observer&&T.initObservers(),T.params.preloadImages&&!T.params.lazyLoading&&T.preloadImages(),T.params.zoom&&T.zoom&&T.zoom.init(),T.params.autoplay&&T.startAutoplay(),T.params.keyboardControl&&T.enableKeyboardControl&&T.enableKeyboardControl(),T.params.mousewheelControl&&T.enableMousewheelControl&&T.enableMousewheelControl(),T.params.hashnavReplaceState&&(T.params.replaceState=T.params.hashnavReplaceState),T.params.history&&T.history&&T.history.init(),T.params.hashnav&&T.hashnav&&T.hashnav.init(),T.params.a11y&&T.a11y&&T.a11y.init(),T.emit("onInit",T)},T.cleanupStyles=function(){T.container.removeClass(T.classNames.join(" ")).removeAttr("style"),T.wrapper.removeAttr("style"),T.slides&&T.slides.length&&T.slides.removeClass([T.params.slideVisibleClass,T.params.slideActiveClass,T.params.slideNextClass,T.params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-column").removeAttr("data-swiper-row"),T.paginationContainer&&T.paginationContainer.length&&T.paginationContainer.removeClass(T.params.paginationHiddenClass),T.bullets&&T.bullets.length&&T.bullets.removeClass(T.params.bulletActiveClass),T.params.prevButton&&e(T.params.prevButton).removeClass(T.params.buttonDisabledClass),T.params.nextButton&&e(T.params.nextButton).removeClass(T.params.buttonDisabledClass),T.params.scrollbar&&T.scrollbar&&(T.scrollbar.track&&T.scrollbar.track.length&&T.scrollbar.track.removeAttr("style"),T.scrollbar.drag&&T.scrollbar.drag.length&&T.scrollbar.drag.removeAttr("style"))},T.destroy=function(e,a){T.detachEvents(),T.stopAutoplay(),T.params.scrollbar&&T.scrollbar&&T.params.scrollbarDraggable&&T.scrollbar.disableDraggable(),T.params.loop&&T.destroyLoop(),a&&T.cleanupStyles(),T.disconnectObservers(),T.params.zoom&&T.zoom&&T.zoom.destroy(),T.params.keyboardControl&&T.disableKeyboardControl&&T.disableKeyboardControl(),T.params.mousewheelControl&&T.disableMousewheelControl&&T.disableMousewheelControl(),T.params.a11y&&T.a11y&&T.a11y.destroy(),T.params.history&&!T.params.replaceState&&window.removeEventListener("popstate",T.history.setHistoryPopState),T.params.hashnav&&T.hashnav&&T.hashnav.destroy(),T.emit("onDestroy"),e!==!1&&(T=null)},T.init(),T}};a.prototype={isSafari:function(){var e=window.navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},browser:{ie:window.navigator.pointerEnabled||window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled&&window.navigator.msMaxTouchPoints>1||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>1,lteIE9:function(){var e=document.createElement("div");return e.innerHTML="",1===e.getElementsByTagName("i").length}()},device:function(){var e=window.navigator.userAgent,a=e.match(/(Android);?[\s\/]+([\d.]+)?/),t=e.match(/(iPad).*OS\s([\d_]+)/),s=e.match(/(iPod)(.*OS\s([\d_]+))?/),i=!t&&e.match(/(iPhone\sOS|iOS)\s([\d_]+)/);return{ios:t||i||s,android:a}}(),support:{touch:window.Modernizr&&Modernizr.touch===!0||function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}(),transforms3d:window.Modernizr&&Modernizr.csstransforms3d===!0||function(){var e=document.createElement("div").style;return"webkitPerspective"in e||"MozPerspective"in e||"OPerspective"in e||"MsPerspective"in e||"perspective"in e}(),flexbox:function(){for(var e=document.createElement("div").style,a="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),t=0;t=0&&o.indexOf(">")>=0){var l="div";for(0===o.indexOf(":~]/)?(t||document).querySelectorAll(a):[document.getElementById(a.split("#")[1])],i=0;i0&&a[0].nodeType)for(i=0;i0?parseFloat(this.css("width")):null},outerWidth:function(e){return this.length>0?e?this[0].offsetWidth+parseFloat(this.css("margin-right"))+parseFloat(this.css("margin-left")):this[0].offsetWidth:null},height:function(){return this[0]===window?window.innerHeight:this.length>0?parseFloat(this.css("height")):null},outerHeight:function(e){return this.length>0?e?this[0].offsetHeight+parseFloat(this.css("margin-top"))+parseFloat(this.css("margin-bottom")):this[0].offsetHeight:null},offset:function(){if(this.length>0){var e=this[0],a=e.getBoundingClientRect(),t=document.body,s=e.clientTop||t.clientTop||0,i=e.clientLeft||t.clientLeft||0,r=window.pageYOffset||e.scrollTop,n=window.pageXOffset||e.scrollLeft;return{top:a.top+r-s,left:a.left+n-i}}return null},css:function(e,a){var t;if(1===arguments.length){if("string"!=typeof e){for(t=0;ts-1?new e([]):a<0?(t=s+a,new e(t<0?[]:[this[t]])):new e([this[a]])},append:function(a){var t,s;for(t=0;t=0;s--)this[t].insertBefore(i.childNodes[s],this[t].childNodes[0])}else if(a instanceof e)for(s=0;s1)for(var i=0;i1)for(var i=0;i0?t?this[0].nextElementSibling&&a(this[0].nextElementSibling).is(t)?[this[0].nextElementSibling]:[]:this[0].nextElementSibling?[this[0].nextElementSibling]:[]:[])},nextAll:function(t){var s=[],i=this[0];if(!i)return new e([]);for(;i.nextElementSibling;){var r=i.nextElementSibling;t?a(r).is(t)&&s.push(r):s.push(r),i=r}return new e(s)},prev:function(t){return new e(this.length>0?t?this[0].previousElementSibling&&a(this[0].previousElementSibling).is(t)?[this[0].previousElementSibling]:[]:this[0].previousElementSibling?[this[0].previousElementSibling]:[]:[])},prevAll:function(t){var s=[],i=this[0];if(!i)return new e([]);for(;i.previousElementSibling;){var r=i.previousElementSibling;t?a(r).is(t)&&s.push(r):s.push(r),i=r}return new e(s)},parent:function(e){for(var t=[],s=0;s0?e?this[0].offsetWidth+parseFloat(this.css("margin-right"))+parseFloat(this.css("margin-left")):this[0].offsetWidth:null})),window.Swiper=a}(),"undefined"!=typeof module?module.exports=window.Swiper:"function"==typeof define&&define.amd&&define([],function(){"use strict";return window.Swiper}); +//# sourceMappingURL=maps/swiper.min.js.map diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..1ec9398 --- /dev/null +++ b/public/index.php @@ -0,0 +1,60 @@ + + */ + +define('LARAVEL_START', microtime(true)); + +/* +|-------------------------------------------------------------------------- +| Register The Auto Loader +|-------------------------------------------------------------------------- +| +| Composer provides a convenient, automatically generated class loader for +| our application. We just need to utilize it! We'll simply require it +| into the script here so that we don't have to worry about manual +| loading any of our classes later on. It feels great to relax. +| + */ + +require __DIR__ . '/../vendor/autoload.php'; + +/* +|-------------------------------------------------------------------------- +| Turn On The Lights +|-------------------------------------------------------------------------- +| +| We need to illuminate PHP development, so let us turn on the lights. +| This bootstraps the framework and gets it ready for use, then it +| will load up this application so that we can run it and send +| the responses back to the browser and delight our users. +| + */ + +$app = require_once __DIR__ . '/../bootstrap/app.php'; + +/* +|-------------------------------------------------------------------------- +| Run The Application +|-------------------------------------------------------------------------- +| +| Once we have the application, we can handle the incoming request +| through the kernel, and send the associated response back to +| the client's browser allowing them to enjoy the creative +| and wonderful application we have prepared for them. +| + */ + +$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class); + +$response = $kernel->handle( + $request = Illuminate\Http\Request::capture() +); + +$response->send(); + +$kernel->terminate($request, $response); diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/public/vendor/laravel-admin/AdminLTE/bootstrap/css/bootstrap.min.css b/public/vendor/laravel-admin/AdminLTE/bootstrap/css/bootstrap.min.css new file mode 100644 index 0000000..a58698c --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/bootstrap/css/bootstrap.min.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')} .glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale} .glyphicon-asterisk:before{content:"\2a"} .glyphicon-plus:before{content:"\2b"} .glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"} .glyphicon-minus:before{content:"\2212"} .glyphicon-cloud:before{content:"\2601"} .glyphicon-envelope:before{content:"\2709"} .glyphicon-pencil:before{content:"\270f"} .glyphicon-glass:before{content:"\e001"} .glyphicon-music:before{content:"\e002"} .glyphicon-search:before{content:"\e003"} .glyphicon-heart:before{content:"\e005"} .glyphicon-star:before{content:"\e006"} .glyphicon-star-empty:before{content:"\e007"} .glyphicon-user:before{content:"\e008"} .glyphicon-film:before{content:"\e009"} .glyphicon-th-large:before{content:"\e010"} .glyphicon-th:before{content:"\e011"} .glyphicon-th-list:before{content:"\e012"} .glyphicon-ok:before{content:"\e013"} .glyphicon-remove:before{content:"\e014"} .glyphicon-zoom-in:before{content:"\e015"} .glyphicon-zoom-out:before{content:"\e016"} .glyphicon-off:before{content:"\e017"} .glyphicon-signal:before{content:"\e018"} .glyphicon-cog:before{content:"\e019"} .glyphicon-trash:before{content:"\e020"} .glyphicon-home:before{content:"\e021"} .glyphicon-file:before{content:"\e022"} .glyphicon-time:before{content:"\e023"} .glyphicon-road:before{content:"\e024"} .glyphicon-download-alt:before{content:"\e025"} .glyphicon-download:before{content:"\e026"} .glyphicon-upload:before{content:"\e027"} .glyphicon-inbox:before{content:"\e028"} .glyphicon-play-circle:before{content:"\e029"} .glyphicon-repeat:before{content:"\e030"} .glyphicon-refresh:before{content:"\e031"} .glyphicon-list-alt:before{content:"\e032"} .glyphicon-lock:before{content:"\e033"} .glyphicon-flag:before{content:"\e034"} .glyphicon-headphones:before{content:"\e035"} .glyphicon-volume-off:before{content:"\e036"} .glyphicon-volume-down:before{content:"\e037"} .glyphicon-volume-up:before{content:"\e038"} .glyphicon-qrcode:before{content:"\e039"} .glyphicon-barcode:before{content:"\e040"} .glyphicon-tag:before{content:"\e041"} .glyphicon-tags:before{content:"\e042"} .glyphicon-book:before{content:"\e043"} .glyphicon-bookmark:before{content:"\e044"} .glyphicon-print:before{content:"\e045"} .glyphicon-camera:before{content:"\e046"} .glyphicon-font:before{content:"\e047"} .glyphicon-bold:before{content:"\e048"} .glyphicon-italic:before{content:"\e049"} .glyphicon-text-height:before{content:"\e050"} .glyphicon-text-width:before{content:"\e051"} .glyphicon-align-left:before{content:"\e052"} .glyphicon-align-center:before{content:"\e053"} .glyphicon-align-right:before{content:"\e054"} .glyphicon-align-justify:before{content:"\e055"} .glyphicon-list:before{content:"\e056"} .glyphicon-indent-left:before{content:"\e057"} .glyphicon-indent-right:before{content:"\e058"} .glyphicon-facetime-video:before{content:"\e059"} .glyphicon-picture:before{content:"\e060"} .glyphicon-map-marker:before{content:"\e062"} .glyphicon-adjust:before{content:"\e063"} .glyphicon-tint:before{content:"\e064"} .glyphicon-edit:before{content:"\e065"} .glyphicon-share:before{content:"\e066"} .glyphicon-check:before{content:"\e067"} .glyphicon-move:before{content:"\e068"} .glyphicon-step-backward:before{content:"\e069"} .glyphicon-fast-backward:before{content:"\e070"} .glyphicon-backward:before{content:"\e071"} .glyphicon-play:before{content:"\e072"} .glyphicon-pause:before{content:"\e073"} .glyphicon-stop:before{content:"\e074"} .glyphicon-forward:before{content:"\e075"} .glyphicon-fast-forward:before{content:"\e076"} .glyphicon-step-forward:before{content:"\e077"} .glyphicon-eject:before{content:"\e078"} .glyphicon-chevron-left:before{content:"\e079"} .glyphicon-chevron-right:before{content:"\e080"} .glyphicon-plus-sign:before{content:"\e081"} .glyphicon-minus-sign:before{content:"\e082"} .glyphicon-remove-sign:before{content:"\e083"} .glyphicon-ok-sign:before{content:"\e084"} .glyphicon-question-sign:before{content:"\e085"} .glyphicon-info-sign:before{content:"\e086"} .glyphicon-screenshot:before{content:"\e087"} .glyphicon-remove-circle:before{content:"\e088"} .glyphicon-ok-circle:before{content:"\e089"} .glyphicon-ban-circle:before{content:"\e090"} .glyphicon-arrow-left:before{content:"\e091"} .glyphicon-arrow-right:before{content:"\e092"} .glyphicon-arrow-up:before{content:"\e093"} .glyphicon-arrow-down:before{content:"\e094"} .glyphicon-share-alt:before{content:"\e095"} .glyphicon-resize-full:before{content:"\e096"} .glyphicon-resize-small:before{content:"\e097"} .glyphicon-exclamation-sign:before{content:"\e101"} .glyphicon-gift:before{content:"\e102"} .glyphicon-leaf:before{content:"\e103"} .glyphicon-fire:before{content:"\e104"} .glyphicon-eye-open:before{content:"\e105"} .glyphicon-eye-close:before{content:"\e106"} .glyphicon-warning-sign:before{content:"\e107"} .glyphicon-plane:before{content:"\e108"} .glyphicon-calendar:before{content:"\e109"} .glyphicon-random:before{content:"\e110"} .glyphicon-comment:before{content:"\e111"} .glyphicon-magnet:before{content:"\e112"} .glyphicon-chevron-up:before{content:"\e113"} .glyphicon-chevron-down:before{content:"\e114"} .glyphicon-retweet:before{content:"\e115"} .glyphicon-shopping-cart:before{content:"\e116"} .glyphicon-folder-close:before{content:"\e117"} .glyphicon-folder-open:before{content:"\e118"} .glyphicon-resize-vertical:before{content:"\e119"} .glyphicon-resize-horizontal:before{content:"\e120"} .glyphicon-hdd:before{content:"\e121"} .glyphicon-bullhorn:before{content:"\e122"} .glyphicon-bell:before{content:"\e123"} .glyphicon-certificate:before{content:"\e124"} .glyphicon-thumbs-up:before{content:"\e125"} .glyphicon-thumbs-down:before{content:"\e126"} .glyphicon-hand-right:before{content:"\e127"} .glyphicon-hand-left:before{content:"\e128"} .glyphicon-hand-up:before{content:"\e129"} .glyphicon-hand-down:before{content:"\e130"} .glyphicon-circle-arrow-right:before{content:"\e131"} .glyphicon-circle-arrow-left:before{content:"\e132"} .glyphicon-circle-arrow-up:before{content:"\e133"} .glyphicon-circle-arrow-down:before{content:"\e134"} .glyphicon-globe:before{content:"\e135"} .glyphicon-wrench:before{content:"\e136"} .glyphicon-tasks:before{content:"\e137"} .glyphicon-filter:before{content:"\e138"} .glyphicon-briefcase:before{content:"\e139"} .glyphicon-fullscreen:before{content:"\e140"} .glyphicon-dashboard:before{content:"\e141"} .glyphicon-paperclip:before{content:"\e142"} .glyphicon-heart-empty:before{content:"\e143"} .glyphicon-link:before{content:"\e144"} .glyphicon-phone:before{content:"\e145"} .glyphicon-pushpin:before{content:"\e146"} .glyphicon-usd:before{content:"\e148"} .glyphicon-gbp:before{content:"\e149"} .glyphicon-sort:before{content:"\e150"} .glyphicon-sort-by-alphabet:before{content:"\e151"} .glyphicon-sort-by-alphabet-alt:before{content:"\e152"} .glyphicon-sort-by-order:before{content:"\e153"} .glyphicon-sort-by-order-alt:before{content:"\e154"} .glyphicon-sort-by-attributes:before{content:"\e155"} .glyphicon-sort-by-attributes-alt:before{content:"\e156"} .glyphicon-unchecked:before{content:"\e157"} .glyphicon-expand:before{content:"\e158"} .glyphicon-collapse-down:before{content:"\e159"} .glyphicon-collapse-up:before{content:"\e160"} .glyphicon-log-in:before{content:"\e161"} .glyphicon-flash:before{content:"\e162"} .glyphicon-log-out:before{content:"\e163"} .glyphicon-new-window:before{content:"\e164"} .glyphicon-record:before{content:"\e165"} .glyphicon-save:before{content:"\e166"} .glyphicon-open:before{content:"\e167"} .glyphicon-saved:before{content:"\e168"} .glyphicon-import:before{content:"\e169"} .glyphicon-export:before{content:"\e170"} .glyphicon-send:before{content:"\e171"} .glyphicon-floppy-disk:before{content:"\e172"} .glyphicon-floppy-saved:before{content:"\e173"} .glyphicon-floppy-remove:before{content:"\e174"} .glyphicon-floppy-save:before{content:"\e175"} .glyphicon-floppy-open:before{content:"\e176"} .glyphicon-credit-card:before{content:"\e177"} .glyphicon-transfer:before{content:"\e178"} .glyphicon-cutlery:before{content:"\e179"} .glyphicon-header:before{content:"\e180"} .glyphicon-compressed:before{content:"\e181"} .glyphicon-earphone:before{content:"\e182"} .glyphicon-phone-alt:before{content:"\e183"} .glyphicon-tower:before{content:"\e184"} .glyphicon-stats:before{content:"\e185"} .glyphicon-sd-video:before{content:"\e186"} .glyphicon-hd-video:before{content:"\e187"} .glyphicon-subtitles:before{content:"\e188"} .glyphicon-sound-stereo:before{content:"\e189"} .glyphicon-sound-dolby:before{content:"\e190"} .glyphicon-sound-5-1:before{content:"\e191"} .glyphicon-sound-6-1:before{content:"\e192"} .glyphicon-sound-7-1:before{content:"\e193"} .glyphicon-copyright-mark:before{content:"\e194"} .glyphicon-registration-mark:before{content:"\e195"} .glyphicon-cloud-download:before{content:"\e197"} .glyphicon-cloud-upload:before{content:"\e198"} .glyphicon-tree-conifer:before{content:"\e199"} .glyphicon-tree-deciduous:before{content:"\e200"} .glyphicon-cd:before{content:"\e201"} .glyphicon-save-file:before{content:"\e202"} .glyphicon-open-file:before{content:"\e203"} .glyphicon-level-up:before{content:"\e204"} .glyphicon-copy:before{content:"\e205"} .glyphicon-paste:before{content:"\e206"} .glyphicon-alert:before{content:"\e209"} .glyphicon-equalizer:before{content:"\e210"} .glyphicon-king:before{content:"\e211"} .glyphicon-queen:before{content:"\e212"} .glyphicon-pawn:before{content:"\e213"} .glyphicon-bishop:before{content:"\e214"} .glyphicon-knight:before{content:"\e215"} .glyphicon-baby-formula:before{content:"\e216"} .glyphicon-tent:before{content:"\26fa"} .glyphicon-blackboard:before{content:"\e218"} .glyphicon-bed:before{content:"\e219"} .glyphicon-apple:before{content:"\f8ff"} .glyphicon-erase:before{content:"\e221"} .glyphicon-hourglass:before{content:"\231b"} .glyphicon-lamp:before{content:"\e223"} .glyphicon-duplicate:before{content:"\e224"} .glyphicon-piggy-bank:before{content:"\e225"} .glyphicon-scissors:before{content:"\e226"} .glyphicon-bitcoin:before{content:"\e227"} .glyphicon-btc:before{content:"\e227"} .glyphicon-xbt:before{content:"\e227"} .glyphicon-yen:before{content:"\00a5"} .glyphicon-jpy:before{content:"\00a5"} .glyphicon-ruble:before{content:"\20bd"} .glyphicon-rub:before{content:"\20bd"} .glyphicon-scale:before{content:"\e230"} .glyphicon-ice-lolly:before{content:"\e231"} .glyphicon-ice-lolly-tasted:before{content:"\e232"} .glyphicon-education:before{content:"\e233"} .glyphicon-option-horizontal:before{content:"\e234"} .glyphicon-option-vertical:before{content:"\e235"} .glyphicon-menu-hamburger:before{content:"\e236"} .glyphicon-modal-window:before{content:"\e237"} .glyphicon-oil:before{content:"\e238"} .glyphicon-grain:before{content:"\e239"} .glyphicon-sunglasses:before{content:"\e240"} .glyphicon-text-size:before{content:"\e241"} .glyphicon-text-color:before{content:"\e242"} .glyphicon-text-background:before{content:"\e243"} .glyphicon-object-align-top:before{content:"\e244"} .glyphicon-object-align-bottom:before{content:"\e245"} .glyphicon-object-align-horizontal:before{content:"\e246"} .glyphicon-object-align-left:before{content:"\e247"} .glyphicon-object-align-vertical:before{content:"\e248"} .glyphicon-object-align-right:before{content:"\e249"} .glyphicon-triangle-right:before{content:"\e250"} .glyphicon-triangle-left:before{content:"\e251"} .glyphicon-triangle-bottom:before{content:"\e252"} .glyphicon-triangle-top:before{content:"\e253"} .glyphicon-console:before{content:"\e254"} .glyphicon-superscript:before{content:"\e255"} .glyphicon-subscript:before{content:"\e256"} .glyphicon-menu-left:before{content:"\e257"} .glyphicon-menu-right:before{content:"\e258"} .glyphicon-menu-down:before{content:"\e259"} .glyphicon-menu-up:before{content:"\e260"} *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} :after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)} body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff} button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit} a{color:#337ab7;text-decoration:none} a:focus,a:hover{color:#23527c;text-decoration:underline} a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px} figure{margin:0} img{vertical-align:middle} .carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto} .img-rounded{border-radius:6px} .img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out} .img-circle{border-radius:50%} hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee} .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0} .sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} [role=button]{cursor:pointer} .h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit} .h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777} .h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px} .h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%} .h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px} .h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%} .h1,h1{font-size:36px} .h2,h2{font-size:30px} .h3,h3{font-size:24px} .h4,h4{font-size:18px} .h5,h5{font-size:14px} .h6,h6{font-size:12px} p{margin:0 0 10px} .lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}} .small,small{font-size:85%} .mark,mark{padding:.2em;background-color:#fcf8e3} .text-left{text-align:left} .text-right{text-align:right} .text-center{text-align:center} .text-justify{text-align:justify} .text-nowrap{white-space:nowrap} .text-lowercase{text-transform:lowercase} .text-uppercase{text-transform:uppercase} .text-capitalize{text-transform:capitalize} .text-muted{color:#777} .text-primary{color:#337ab7} a.text-primary:focus,a.text-primary:hover{color:#286090} .text-success{color:#3c763d} a.text-success:focus,a.text-success:hover{color:#2b542c} .text-info{color:#31708f} a.text-info:focus,a.text-info:hover{color:#245269} .text-warning{color:#8a6d3b} a.text-warning:focus,a.text-warning:hover{color:#66512c} .text-danger{color:#a94442} a.text-danger:focus,a.text-danger:hover{color:#843534} .bg-primary{color:#fff;background-color:#337ab7} a.bg-primary:focus,a.bg-primary:hover{background-color:#286090} .bg-success{background-color:#dff0d8} a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3} .bg-info{background-color:#d9edf7} a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee} .bg-warning{background-color:#fcf8e3} a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5} .bg-danger{background-color:#f2dede} a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9} .page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee} ol,ul{margin-top:0;margin-bottom:10px} ol ol,ol ul,ul ol,ul ul{margin-bottom:0} .list-unstyled{padding-left:0;list-style:none} .list-inline{padding-left:0;margin-left:-5px;list-style:none} .list-inline>li{display:inline-block;padding-right:5px;padding-left:5px} dl{margin-top:0;margin-bottom:20px} dd,dt{line-height:1.42857143} dt{font-weight:700} dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}} abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777} .initialism{font-size:90%;text-transform:uppercase} blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee} blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0} blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777} blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'} .blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0} .blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''} .blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'} address{margin-bottom:20px;font-style:normal;line-height:1.42857143} code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace} code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px} kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)} kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none} pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px} pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0} .pre-scrollable{max-height:340px;overflow-y:scroll} .container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}} .container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto} .row{margin-right:-15px;margin-left:-15px} .col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px} .col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left} .col-xs-12{width:100%} .col-xs-11{width:91.66666667%} .col-xs-10{width:83.33333333%} .col-xs-9{width:75%} .col-xs-8{width:66.66666667%} .col-xs-7{width:58.33333333%} .col-xs-6{width:50%} .col-xs-5{width:41.66666667%} .col-xs-4{width:33.33333333%} .col-xs-3{width:25%} .col-xs-2{width:16.66666667%} .col-xs-1{width:8.33333333%} .col-xs-pull-12{right:100%} .col-xs-pull-11{right:91.66666667%} .col-xs-pull-10{right:83.33333333%} .col-xs-pull-9{right:75%} .col-xs-pull-8{right:66.66666667%} .col-xs-pull-7{right:58.33333333%} .col-xs-pull-6{right:50%} .col-xs-pull-5{right:41.66666667%} .col-xs-pull-4{right:33.33333333%} .col-xs-pull-3{right:25%} .col-xs-pull-2{right:16.66666667%} .col-xs-pull-1{right:8.33333333%} .col-xs-pull-0{right:auto} .col-xs-push-12{left:100%} .col-xs-push-11{left:91.66666667%} .col-xs-push-10{left:83.33333333%} .col-xs-push-9{left:75%} .col-xs-push-8{left:66.66666667%} .col-xs-push-7{left:58.33333333%} .col-xs-push-6{left:50%} .col-xs-push-5{left:41.66666667%} .col-xs-push-4{left:33.33333333%} .col-xs-push-3{left:25%} .col-xs-push-2{left:16.66666667%} .col-xs-push-1{left:8.33333333%} .col-xs-push-0{left:auto} .col-xs-offset-12{margin-left:100%} .col-xs-offset-11{margin-left:91.66666667%} .col-xs-offset-10{margin-left:83.33333333%} .col-xs-offset-9{margin-left:75%} .col-xs-offset-8{margin-left:66.66666667%} .col-xs-offset-7{margin-left:58.33333333%} .col-xs-offset-6{margin-left:50%} .col-xs-offset-5{margin-left:41.66666667%} .col-xs-offset-4{margin-left:33.33333333%} .col-xs-offset-3{margin-left:25%} .col-xs-offset-2{margin-left:16.66666667%} .col-xs-offset-1{margin-left:8.33333333%} .col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}} table{background-color:transparent} caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left} th{text-align:left} .table{width:100%;max-width:100%;margin-bottom:20px} .table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd} .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd} .table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0} .table>tbody+tbody{border-top:2px solid #ddd} .table .table{background-color:#fff} .table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px} .table-bordered{border:1px solid #ddd} .table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd} .table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px} .table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9} .table-hover>tbody>tr:hover{background-color:#f5f5f5} table col[class*=col-]{position:static;display:table-column;float:none} table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none} .table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5} .table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8} .table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8} .table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6} .table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7} .table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3} .table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3} .table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc} .table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede} .table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc} .table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}} fieldset{min-width:0;padding:0;margin:0;border:0} legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5} label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700} input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal} input[type=file]{display:block} input[type=range]{display:block;width:100%} select[multiple],select[size]{height:auto} input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px} output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555} .form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s} .form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)} .form-control::-moz-placeholder{color:#999;opacity:1} .form-control:-ms-input-placeholder{color:#999} .form-control::-webkit-input-placeholder{color:#999} .form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1} .form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed} textarea.form-control{height:auto} input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}} .form-group{margin-bottom:15px} .checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px} .checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer} .checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px} .checkbox+.checkbox,.radio+.radio{margin-top:-5px} .checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer} .checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px} fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed} .checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed} .checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed} .form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0} .form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0} .input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px} select.input-sm{height:30px;line-height:30px} select[multiple].input-sm,textarea.input-sm{height:auto} .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px} .form-group-sm select.form-control{height:30px;line-height:30px} .form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto} .form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5} .input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px} select.input-lg{height:46px;line-height:46px} select[multiple].input-lg,textarea.input-lg{height:auto} .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px} .form-group-lg select.form-control{height:46px;line-height:46px} .form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto} .form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333} .has-feedback{position:relative} .has-feedback .form-control{padding-right:42.5px} .form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none} .form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px} .form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px} .has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d} .has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)} .has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168} .has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d} .has-success .form-control-feedback{color:#3c763d} .has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b} .has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)} .has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b} .has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b} .has-warning .form-control-feedback{color:#8a6d3b} .has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442} .has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)} .has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483} .has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442} .has-error .form-control-feedback{color:#a94442} .has-feedback label~.form-control-feedback{top:25px} .has-feedback label.sr-only~.form-control-feedback{top:0} .help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}} .form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0} .form-horizontal .checkbox,.form-horizontal .radio{min-height:27px} .form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}} .form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}} .btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px} .btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px} .btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none} .btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)} .btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65} a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none} .btn-default{color:#333;background-color:#fff;border-color:#ccc} .btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c} .btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad} .btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad} .btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c} .btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none} .btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc} .btn-default .badge{color:#fff;background-color:#333} .btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4} .btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40} .btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74} .btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74} .btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40} .btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none} .btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4} .btn-primary .badge{color:#337ab7;background-color:#fff} .btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c} .btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625} .btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439} .btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439} .btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625} .btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none} .btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c} .btn-success .badge{color:#5cb85c;background-color:#fff} .btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da} .btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85} .btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc} .btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc} .btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85} .btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none} .btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da} .btn-info .badge{color:#5bc0de;background-color:#fff} .btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236} .btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d} .btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512} .btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512} .btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d} .btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none} .btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236} .btn-warning .badge{color:#f0ad4e;background-color:#fff} .btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a} .btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19} .btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925} .btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925} .btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19} .btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none} .btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a} .btn-danger .badge{color:#d9534f;background-color:#fff} .btn-link{font-weight:400;color:#337ab7;border-radius:0} .btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none} .btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent} .btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent} .btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none} .btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px} .btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px} .btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px} .btn-block{display:block;width:100%} .btn-block+.btn-block{margin-top:5px} input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%} .fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear} .fade.in{opacity:1} .collapse{display:none} .collapse.in{display:block} tr.collapse.in{display:table-row} tbody.collapse.in{display:table-row-group} .collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility} .caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent} .dropdown,.dropup{position:relative} .dropdown-toggle:focus{outline:0} .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)} .dropdown-menu.pull-right{right:0;left:auto} .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5} .dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap} .dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5} .dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0} .dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777} .dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)} .open>.dropdown-menu{display:block} .open>a{outline:0} .dropdown-menu-right{right:0;left:auto} .dropdown-menu-left{right:auto;left:0} .dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap} .dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990} .pull-right>.dropdown-menu{right:0;left:auto} .dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9} .dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}} .btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle} .btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left} .btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2} .btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px} .btn-toolbar{margin-left:-5px} .btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left} .btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px} .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0} .btn-group>.btn:first-child{margin-left:0} .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0} .btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0} .btn-group>.btn-group{float:left} .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0} .btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0} .btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0} .btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0} .btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px} .btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px} .btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)} .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none} .btn .caret{margin-left:0} .btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0} .dropup .btn-lg .caret{border-width:0 5px 5px} .btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%} .btn-group-vertical>.btn-group>.btn{float:none} .btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0} .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0} .btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0} .btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px} .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0} .btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0} .btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0} .btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate} .btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%} .btn-group-justified>.btn-group .btn{width:100%} .btn-group-justified>.btn-group .dropdown-menu{left:auto} [data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none} .input-group{position:relative;display:table;border-collapse:separate} .input-group[class*=col-]{float:none;padding-right:0;padding-left:0} .input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0} .input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px} select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px} select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto} .input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px} select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px} select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto} .input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell} .input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0} .input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle} .input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px} .input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px} .input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px} .input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0} .input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0} .input-group-addon:first-child{border-right:0} .input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0} .input-group-addon:last-child{border-left:0} .input-group-btn{position:relative;font-size:0;white-space:nowrap} .input-group-btn>.btn{position:relative} .input-group-btn>.btn+.btn{margin-left:-1px} .input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2} .input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px} .input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px} .nav{padding-left:0;margin-bottom:0;list-style:none} .nav>li{position:relative;display:block} .nav>li>a{position:relative;display:block;padding:10px 15px} .nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee} .nav>li.disabled>a{color:#777} .nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent} .nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7} .nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5} .nav>li>a>img{max-width:none} .nav-tabs{border-bottom:1px solid #ddd} .nav-tabs>li{float:left;margin-bottom:-1px} .nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0} .nav-tabs>li>a:hover{border-color:#eee #eee #ddd} .nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent} .nav-tabs.nav-justified{width:100%;border-bottom:0} .nav-tabs.nav-justified>li{float:none} .nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center} .nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}} .nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px} .nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}} .nav-pills>li{float:left} .nav-pills>li>a{border-radius:4px} .nav-pills>li+li{margin-left:2px} .nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7} .nav-stacked>li{float:none} .nav-stacked>li+li{margin-top:2px;margin-left:0} .nav-justified{width:100%} .nav-justified>li{float:none} .nav-justified>li>a{margin-bottom:5px;text-align:center} .nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}} .nav-tabs-justified{border-bottom:0} .nav-tabs-justified>li>a{margin-right:0;border-radius:4px} .nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}} .tab-content>.tab-pane{display:none} .tab-content>.active{display:block} .nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0} .navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}} .navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)} .navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}} .navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}} .container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}} .navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}} .navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}} .navbar-fixed-top{top:0;border-width:0 0 1px} .navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0} .navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px} .navbar-brand:focus,.navbar-brand:hover{text-decoration:none} .navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}} .navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px} .navbar-toggle:focus{outline:0} .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px} .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}} .navbar-nav{margin:7.5px -15px} .navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}} .navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}} .navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0} .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0} .navbar-btn{margin-top:8px;margin-bottom:8px} .navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px} .navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px} .navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}} .navbar-default{background-color:#f8f8f8;border-color:#e7e7e7} .navbar-default .navbar-brand{color:#777} .navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent} .navbar-default .navbar-text{color:#777} .navbar-default .navbar-nav>li>a{color:#777} .navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent} .navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7} .navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent} .navbar-default .navbar-toggle{border-color:#ddd} .navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd} .navbar-default .navbar-toggle .icon-bar{background-color:#888} .navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7} .navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}} .navbar-default .navbar-link{color:#777} .navbar-default .navbar-link:hover{color:#333} .navbar-default .btn-link{color:#777} .navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333} .navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc} .navbar-inverse{background-color:#222;border-color:#080808} .navbar-inverse .navbar-brand{color:#9d9d9d} .navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent} .navbar-inverse .navbar-text{color:#9d9d9d} .navbar-inverse .navbar-nav>li>a{color:#9d9d9d} .navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent} .navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808} .navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent} .navbar-inverse .navbar-toggle{border-color:#333} .navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333} .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff} .navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010} .navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}} .navbar-inverse .navbar-link{color:#9d9d9d} .navbar-inverse .navbar-link:hover{color:#fff} .navbar-inverse .btn-link{color:#9d9d9d} .navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff} .navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444} .breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px} .breadcrumb>li{display:inline-block} .breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"} .breadcrumb>.active{color:#777} .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px} .pagination>li{display:inline} .pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd} .pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px} .pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px} .pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd} .pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7} .pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd} .pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333} .pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px} .pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px} .pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5} .pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px} .pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px} .pager{padding-left:0;margin:20px 0;text-align:center;list-style:none} .pager li{display:inline} .pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px} .pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee} .pager .next>a,.pager .next>span{float:right} .pager .previous>a,.pager .previous>span{float:left} .pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff} .label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em} a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer} .label:empty{display:none} .btn .label{position:relative;top:-1px} .label-default{background-color:#777} .label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e} .label-primary{background-color:#337ab7} .label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090} .label-success{background-color:#5cb85c} .label-success[href]:focus,.label-success[href]:hover{background-color:#449d44} .label-info{background-color:#5bc0de} .label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5} .label-warning{background-color:#f0ad4e} .label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f} .label-danger{background-color:#d9534f} .label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c} .badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px} .badge:empty{display:none} .btn .badge{position:relative;top:-1px} .btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px} a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer} .list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff} .list-group-item>.badge{float:right} .list-group-item>.badge+.badge{margin-right:5px} .nav-pills>li>a>.badge{margin-left:3px} .jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee} .jumbotron .h1,.jumbotron h1{color:inherit} .jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200} .jumbotron>hr{border-top-color:#d5d5d5} .container .jumbotron,.container-fluid .jumbotron{border-radius:6px} .jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}} .thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out} .thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto} a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7} .thumbnail .caption{padding:9px;color:#333} .alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px} .alert h4{margin-top:0;color:inherit} .alert .alert-link{font-weight:700} .alert>p,.alert>ul{margin-bottom:0} .alert>p+p{margin-top:5px} .alert-dismissable,.alert-dismissible{padding-right:35px} .alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit} .alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6} .alert-success hr{border-top-color:#c9e2b3} .alert-success .alert-link{color:#2b542c} .alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1} .alert-info hr{border-top-color:#a6e1ec} .alert-info .alert-link{color:#245269} .alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc} .alert-warning hr{border-top-color:#f7e1b5} .alert-warning .alert-link{color:#66512c} .alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1} .alert-danger hr{border-top-color:#e4b9c0} .alert-danger .alert-link{color:#843534} @-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}} @-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}} @keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}} .progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)} .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease} .progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px} .progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite} .progress-bar-success{background-color:#5cb85c} .progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} .progress-bar-info{background-color:#5bc0de} .progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} .progress-bar-warning{background-color:#f0ad4e} .progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} .progress-bar-danger{background-color:#d9534f} .progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} .media{margin-top:15px} .media:first-child{margin-top:0} .media,.media-body{overflow:hidden;zoom:1} .media-body{width:10000px} .media-object{display:block} .media-object.img-thumbnail{max-width:none} .media-right,.media>.pull-right{padding-left:10px} .media-left,.media>.pull-left{padding-right:10px} .media-body,.media-left,.media-right{display:table-cell;vertical-align:top} .media-middle{vertical-align:middle} .media-bottom{vertical-align:bottom} .media-heading{margin-top:0;margin-bottom:5px} .media-list{padding-left:0;list-style:none} .list-group{padding-left:0;margin-bottom:20px} .list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd} .list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px} .list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px} a.list-group-item,button.list-group-item{color:#555} a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333} a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5} button.list-group-item{width:100%;text-align:left} .list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee} .list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit} .list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777} .list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7} .list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit} .list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef} .list-group-item-success{color:#3c763d;background-color:#dff0d8} a.list-group-item-success,button.list-group-item-success{color:#3c763d} a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit} a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6} a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d} .list-group-item-info{color:#31708f;background-color:#d9edf7} a.list-group-item-info,button.list-group-item-info{color:#31708f} a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit} a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3} a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f} .list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3} a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b} a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit} a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc} a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b} .list-group-item-danger{color:#a94442;background-color:#f2dede} a.list-group-item-danger,button.list-group-item-danger{color:#a94442} a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit} a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc} a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442} .list-group-item-heading{margin-top:0;margin-bottom:5px} .list-group-item-text{margin-bottom:0;line-height:1.3} .panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)} .panel-body{padding:15px} .panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px} .panel-heading>.dropdown .dropdown-toggle{color:inherit} .panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit} .panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit} .panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px} .panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0} .panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0} .panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px} .panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px} .panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0} .panel-heading+.list-group .list-group-item:first-child{border-top-width:0} .list-group+.panel-footer{border-top-width:0} .panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0} .panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px} .panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px} .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px} .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px} .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px} .panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px} .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px} .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px} .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px} .panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd} .panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0} .panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0} .panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0} .panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0} .panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0} .panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0} .panel>.table-responsive{margin-bottom:0;border:0} .panel-group{margin-bottom:20px} .panel-group .panel{margin-bottom:0;border-radius:4px} .panel-group .panel+.panel{margin-top:5px} .panel-group .panel-heading{border-bottom:0} .panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd} .panel-group .panel-footer{border-top:0} .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd} .panel-default{border-color:#ddd} .panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd} .panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd} .panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333} .panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd} .panel-primary{border-color:#337ab7} .panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7} .panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7} .panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff} .panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7} .panel-success{border-color:#d6e9c6} .panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6} .panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6} .panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d} .panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6} .panel-info{border-color:#bce8f1} .panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1} .panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1} .panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f} .panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1} .panel-warning{border-color:#faebcc} .panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc} .panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc} .panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b} .panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc} .panel-danger{border-color:#ebccd1} .panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1} .panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1} .panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442} .panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1} .embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden} .embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0} .embed-responsive-16by9{padding-bottom:56.25%} .embed-responsive-4by3{padding-bottom:75%} .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)} .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)} .well-lg{padding:24px;border-radius:6px} .well-sm{padding:9px;border-radius:3px} .close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2} .close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5} button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0} .modal-open{overflow:hidden} .modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0} .modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)} .modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)} .modal-open .modal{overflow-x:hidden;overflow-y:auto} .modal-dialog{position:relative;width:auto;margin:10px} .modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)} .modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000} .modal-backdrop.fade{filter:alpha(opacity=0);opacity:0} .modal-backdrop.in{filter:alpha(opacity=50);opacity:.5} .modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5} .modal-header .close{margin-top:-2px} .modal-title{margin:0;line-height:1.42857143} .modal-body{position:relative;padding:15px} .modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5} .modal-footer .btn+.btn{margin-bottom:0;margin-left:5px} .modal-footer .btn-group .btn+.btn{margin-left:-1px} .modal-footer .btn-block+.btn-block{margin-left:0} .modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}} .tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto} .tooltip.in{filter:alpha(opacity=90);opacity:.9} .tooltip.top{padding:5px 0;margin-top:-3px} .tooltip.right{padding:0 5px;margin-left:3px} .tooltip.bottom{padding:5px 0;margin-top:3px} .tooltip.left{padding:0 5px;margin-left:-3px} .tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px} .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid} .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000} .tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000} .tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000} .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000} .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000} .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000} .tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000} .tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000} .popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto} .popover.top{margin-top:-10px} .popover.right{margin-left:10px} .popover.bottom{margin-top:10px} .popover.left{margin-left:-10px} .popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0} .popover-content{padding:9px 14px} .popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid} .popover>.arrow{border-width:11px} .popover>.arrow:after{content:"";border-width:10px} .popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0} .popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0} .popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0} .popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0} .popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)} .popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff} .popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)} .popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff} .carousel{position:relative} .carousel-inner{position:relative;width:100%;overflow:hidden} .carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left} .carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}} .carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block} .carousel-inner>.active{left:0} .carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%} .carousel-inner>.next{left:100%} .carousel-inner>.prev{left:-100%} .carousel-inner>.next.left,.carousel-inner>.prev.right{left:0} .carousel-inner>.active.left{left:-100%} .carousel-inner>.active.right{left:100%} .carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5} .carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x} .carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x} .carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9} .carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px} .carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px} .carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px} .carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1} .carousel-control .icon-prev:before{content:'\2039'} .carousel-control .icon-next:before{content:'\203a'} .carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none} .carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px} .carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff} .carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)} .carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}} .btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "} .btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both} .center-block{display:block;margin-right:auto;margin-left:auto} .pull-right{float:right!important} .pull-left{float:left!important} .hide{display:none!important} .show{display:block!important} .invisible{visibility:hidden} .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0} .hidden{display:none!important} .affix{position:fixed}@-ms-viewport{width:device-width} .visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important} .visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}} .visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}} .visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}} .visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}} .visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.eot b/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..b93a495 Binary files /dev/null and b/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.eot differ diff --git a/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.svg b/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..94fb549 --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.ttf b/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..1413fc6 Binary files /dev/null and b/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.ttf differ diff --git a/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.woff b/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..9e61285 Binary files /dev/null and b/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.woff differ diff --git a/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.woff2 b/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000..64539b5 Binary files /dev/null and b/public/vendor/laravel-admin/AdminLTE/bootstrap/fonts/glyphicons-halflings-regular.woff2 differ diff --git a/public/vendor/laravel-admin/AdminLTE/bootstrap/js/bootstrap.min.js b/public/vendor/laravel-admin/AdminLTE/bootstrap/js/bootstrap.min.js new file mode 100644 index 0000000..c8f1c68 --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/bootstrap/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.4 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.4",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.4",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.4",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.4",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-mp.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.4",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.4",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.4",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a(document.body).height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/dist/css/AdminLTE.min.css b/public/vendor/laravel-admin/AdminLTE/dist/css/AdminLTE.min.css new file mode 100644 index 0000000..c5daa2e --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/dist/css/AdminLTE.min.css @@ -0,0 +1,7 @@ +/*! + * AdminLTE v2.3.2 + * Author: Almsaeed Studio + * Website: Almsaeed Studio + * License: Open source - MIT + * Please visit http://opensource.org/licenses/MIT for more information +!*/html,body{min-height:100%}.layout-boxed html,.layout-boxed body{height:100%}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:'Source Sans Pro','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:400;overflow-x:hidden;overflow-y:auto}.wrapper{min-height:100%;position:relative;overflow:hidden}.wrapper:before,.wrapper:after{content:" ";display:table}.wrapper:after{clear:both}.layout-boxed .wrapper{max-width:1250px;margin:0 auto;min-height:100%;box-shadow:0 0 8px rgba(0,0,0,0.5);position:relative}.layout-boxed{background:url('../img/boxed-bg.jpg') repeat fixed} .content-wrapper,.right-side,.main-footer{-webkit-transition:-webkit-transform .3s ease-in-out,margin .3s ease-in-out;-moz-transition:-moz-transform .3s ease-in-out,margin .3s ease-in-out;-o-transition:-o-transform .3s ease-in-out,margin .3s ease-in-out;transition:transform .3s ease-in-out,margin .3s ease-in-out;margin-left:230px;z-index:820} .layout-top-nav .content-wrapper,.layout-top-nav .right-side,.layout-top-nav .main-footer{margin-left:0}@media (max-width:767px){.content-wrapper,.right-side,.main-footer{margin-left:0}}@media (min-width:768px){.sidebar-collapse .content-wrapper,.sidebar-collapse .right-side,.sidebar-collapse .main-footer{margin-left:0}}@media (max-width:767px){.sidebar-open .content-wrapper,.sidebar-open .right-side,.sidebar-open .main-footer{-webkit-transform:translate(230px, 0);-ms-transform:translate(230px, 0);-o-transform:translate(230px, 0);transform:translate(230px, 0)}} .content-wrapper,.right-side{min-height:100%;background-color:#ecf0f5;z-index:800} .main-footer{background:#fff;padding:15px;color:#444;border-top:1px solid #d2d6de} .fixed .main-header,.fixed .main-sidebar,.fixed .left-side{position:fixed} .fixed .main-header{top:0;right:0;left:0} .fixed .content-wrapper,.fixed .right-side{padding-top:50px}@media (max-width:767px){.fixed .content-wrapper,.fixed .right-side{padding-top:100px}} .fixed.layout-boxed .wrapper{max-width:100%} body.hold-transition .content-wrapper,body.hold-transition .right-side,body.hold-transition .main-footer,body.hold-transition .main-sidebar,body.hold-transition .left-side,body.hold-transition .main-header>.navbar,body.hold-transition .main-header .logo{-webkit-transition:none;-o-transition:none;transition:none} .content{min-height:250px;padding:15px;margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px} h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:'Source Sans Pro',sans-serif} a{color:#3c8dbc} a:hover,a:active,a:focus{outline:none;text-decoration:none;color:#72afd2} .page-header{margin:10px 0 20px 0;font-size:22px} .page-header>small{color:#666;display:block;margin-top:5px} .main-header{position:relative;max-height:100px;z-index:1030} .main-header>.navbar{-webkit-transition:margin-left .3s ease-in-out;-o-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out;margin-bottom:0;margin-left:230px;border:none;min-height:50px;border-radius:0} .layout-top-nav .main-header>.navbar{margin-left:0} .main-header #navbar-search-input.form-control{background:rgba(255,255,255,0.2);border-color:transparent} .main-header #navbar-search-input.form-control:focus,.main-header #navbar-search-input.form-control:active{border-color:rgba(0,0,0,0.1);background:rgba(255,255,255,0.9)} .main-header #navbar-search-input.form-control::-moz-placeholder{color:#ccc;opacity:1} .main-header #navbar-search-input.form-control:-ms-input-placeholder{color:#ccc} .main-header #navbar-search-input.form-control::-webkit-input-placeholder{color:#ccc} .main-header .navbar-custom-menu,.main-header .navbar-right{float:right}@media (max-width:991px){.main-header .navbar-custom-menu a,.main-header .navbar-right a{color:inherit;background:transparent}}@media (max-width:767px){.main-header .navbar-right{float:none}.navbar-collapse .main-header .navbar-right{margin:7.5px -15px}.main-header .navbar-right>li{color:inherit;border:0}} .main-header .sidebar-toggle{float:left;background-color:transparent;background-image:none;padding:15px 15px;font-family:fontAwesome} .main-header .sidebar-toggle:before{content:"\f0c9"} .main-header .sidebar-toggle:hover{color:#fff} .main-header .sidebar-toggle:focus,.main-header .sidebar-toggle:active{background:transparent} .main-header .sidebar-toggle .icon-bar{display:none} .main-header .navbar .nav>li.user>a>.fa,.main-header .navbar .nav>li.user>a>.glyphicon,.main-header .navbar .nav>li.user>a>.ion{margin-right:5px} .main-header .navbar .nav>li>a>.label{position:absolute;top:9px;right:7px;text-align:center;font-size:9px;padding:2px 3px;line-height:.9} .main-header .logo{-webkit-transition:width .3s ease-in-out;-o-transition:width .3s ease-in-out;transition:width .3s ease-in-out;display:block;float:left;height:50px;font-size:20px;line-height:50px;text-align:center;width:230px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;padding:0 15px;font-weight:300;overflow:hidden} .main-header .logo .logo-lg{display:block} .main-header .logo .logo-mini{display:none} .main-header .navbar-brand{color:#fff} .content-header{position:relative;padding:15px 15px 0 15px} .content-header>h1{margin:0;font-size:24px} .content-header>h1>small{font-size:15px;display:inline-block;padding-left:4px;font-weight:300} .content-header>.breadcrumb{float:right;background:transparent;margin-top:0;margin-bottom:0;font-size:12px;padding:7px 5px;position:absolute;top:15px;right:10px;border-radius:2px} .content-header>.breadcrumb>li>a{color:#444;text-decoration:none;display:inline-block} .content-header>.breadcrumb>li>a>.fa,.content-header>.breadcrumb>li>a>.glyphicon,.content-header>.breadcrumb>li>a>.ion{margin-right:5px} .content-header>.breadcrumb>li+li:before{content:'>\00a0'}@media (max-width:991px){.content-header>.breadcrumb{position:relative;margin-top:5px;top:0;right:0;float:none;background:#d2d6de;padding-left:10px}.content-header>.breadcrumb li:before{color:#97a0b3}} .navbar-toggle{color:#fff;border:0;margin:0;padding:15px 15px}@media (max-width:991px){.navbar-custom-menu .navbar-nav>li{float:left}.navbar-custom-menu .navbar-nav{margin:0;float:left}.navbar-custom-menu .navbar-nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px}}@media (max-width:767px){.main-header{position:relative}.main-header .logo,.main-header .navbar{width:100%;float:none}.main-header .navbar{margin:0}.main-header .navbar-custom-menu{float:right}}@media (max-width:991px){.navbar-collapse.pull-left{float:none !important}.navbar-collapse.pull-left+.navbar-custom-menu{display:block;position:absolute;top:0;right:40px}} .main-sidebar,.left-side{position:absolute;top:0;left:0;padding-top:50px;min-height:100%;width:230px;z-index:810;-webkit-transition:-webkit-transform .3s ease-in-out,width .3s ease-in-out;-moz-transition:-moz-transform .3s ease-in-out,width .3s ease-in-out;-o-transition:-o-transform .3s ease-in-out,width .3s ease-in-out;transition:transform .3s ease-in-out,width .3s ease-in-out}@media (max-width:767px){.main-sidebar,.left-side{padding-top:100px}}@media (max-width:767px){.main-sidebar,.left-side{-webkit-transform:translate(-230px, 0);-ms-transform:translate(-230px, 0);-o-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (min-width:768px){.sidebar-collapse .main-sidebar,.sidebar-collapse .left-side{-webkit-transform:translate(-230px, 0);-ms-transform:translate(-230px, 0);-o-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (max-width:767px){.sidebar-open .main-sidebar,.sidebar-open .left-side{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}} .sidebar{padding-bottom:10px} .sidebar-form input:focus{border-color:transparent} .user-panel{position:relative;width:100%;padding:10px;overflow:hidden} .user-panel:before,.user-panel:after{content:" ";display:table} .user-panel:after{clear:both} .user-panel>.image>img{width:100%;max-width:45px;height:auto} .user-panel>.info{padding:5px 5px 5px 15px;line-height:1;position:absolute;left:55px} .user-panel>.info>p{font-weight:600;margin-bottom:9px} .user-panel>.info>a{text-decoration:none;padding-right:5px;margin-top:3px;font-size:11px} .user-panel>.info>a>.fa,.user-panel>.info>a>.ion,.user-panel>.info>a>.glyphicon{margin-right:3px} .sidebar-menu{list-style:none;margin:0;padding:0} .sidebar-menu>li{position:relative;margin:0;padding:0} .sidebar-menu>li>a{padding:12px 5px 12px 15px;display:block} .sidebar-menu>li>a>.fa,.sidebar-menu>li>a>.glyphicon,.sidebar-menu>li>a>.ion{width:20px} .sidebar-menu>li .label,.sidebar-menu>li .badge{margin-top:3px;margin-right:5px} .sidebar-menu li.header{padding:10px 25px 10px 15px;font-size:12px} .sidebar-menu li>a>.fa-angle-left{width:auto;height:auto;padding:0;margin-right:10px;margin-top:3px} .sidebar-menu li.active>a>.fa-angle-left{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)} .sidebar-menu li.active>.treeview-menu{display:block} .sidebar-menu .treeview-menu{display:none;list-style:none;padding:0;margin:0;padding-left:5px} .sidebar-menu .treeview-menu .treeview-menu{padding-left:20px} .sidebar-menu .treeview-menu>li{margin:0} .sidebar-menu .treeview-menu>li>a{padding:5px 5px 5px 15px;display:block;font-size:14px} .sidebar-menu .treeview-menu>li>a>.fa,.sidebar-menu .treeview-menu>li>a>.glyphicon,.sidebar-menu .treeview-menu>li>a>.ion{width:20px} .sidebar-menu .treeview-menu>li>a>.fa-angle-left,.sidebar-menu .treeview-menu>li>a>.fa-angle-down{width:auto}@media (min-width:768px){.sidebar-mini.sidebar-collapse .content-wrapper,.sidebar-mini.sidebar-collapse .right-side,.sidebar-mini.sidebar-collapse .main-footer{margin-left:50px !important;z-index:840}.sidebar-mini.sidebar-collapse .main-sidebar{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0);width:50px !important;z-index:850}.sidebar-mini.sidebar-collapse .sidebar-menu>li{position:relative}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a{margin-right:0}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span{border-top-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li:not(.treeview)>a>span{border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{padding-top:5px;padding-bottom:5px;border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li:hover>a>span:not(.pull-right),.sidebar-mini.sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{display:block !important;position:absolute;width:180px;left:50px}.sidebar-mini.sidebar-collapse .sidebar-menu>li:hover>a>span{top:0;margin-left:-3px;padding:12px 5px 12px 20px;background-color:inherit}.sidebar-mini.sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{top:44px;margin-left:0}.sidebar-mini.sidebar-collapse .main-sidebar .user-panel>.info,.sidebar-mini.sidebar-collapse .sidebar-form,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span,.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>.pull-right,.sidebar-mini.sidebar-collapse .sidebar-menu li.header{display:none !important;-webkit-transform:translateZ(0)}.sidebar-mini.sidebar-collapse .main-header .logo{width:50px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-mini{display:block;margin-left:-15px;margin-right:-15px;font-size:18px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-lg{display:none}.sidebar-mini.sidebar-collapse .main-header .navbar{margin-left:50px}} .sidebar-menu,.main-sidebar .user-panel,.sidebar-menu>li.header{white-space:nowrap;overflow:hidden} .sidebar-menu:hover{overflow:visible} .sidebar-form,.sidebar-menu>li.header{overflow:hidden;text-overflow:clip} .sidebar-menu li>a{position:relative} .sidebar-menu li>a>.pull-right{position:absolute;right:10px;top:50%;margin-top:-7px} .control-sidebar-bg{position:fixed;z-index:1000;bottom:0} .control-sidebar-bg,.control-sidebar{top:0;right:-230px;width:230px;-webkit-transition:right .3s ease-in-out;-o-transition:right .3s ease-in-out;transition:right .3s ease-in-out} .control-sidebar{position:absolute;padding-top:50px;z-index:1010}@media (max-width:768px){.control-sidebar{padding-top:100px}} .control-sidebar>.tab-content{padding:10px 15px} .control-sidebar.control-sidebar-open,.control-sidebar.control-sidebar-open+.control-sidebar-bg{right:0} .control-sidebar-open .control-sidebar-bg,.control-sidebar-open .control-sidebar{right:0}@media (min-width:768px){.control-sidebar-open .content-wrapper,.control-sidebar-open .right-side,.control-sidebar-open .main-footer{margin-right:230px}} .nav-tabs.control-sidebar-tabs>li:first-of-type>a,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:hover,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:focus{border-left-width:0} .nav-tabs.control-sidebar-tabs>li>a{border-radius:0} .nav-tabs.control-sidebar-tabs>li>a,.nav-tabs.control-sidebar-tabs>li>a:hover{border-top:none;border-right:none;border-left:1px solid transparent;border-bottom:1px solid transparent} .nav-tabs.control-sidebar-tabs>li>a .icon{font-size:16px} .nav-tabs.control-sidebar-tabs>li.active>a,.nav-tabs.control-sidebar-tabs>li.active>a:hover,.nav-tabs.control-sidebar-tabs>li.active>a:focus,.nav-tabs.control-sidebar-tabs>li.active>a:active{border-top:none;border-right:none;border-bottom:none}@media (max-width:768px){.nav-tabs.control-sidebar-tabs{display:table}.nav-tabs.control-sidebar-tabs>li{display:table-cell}} .control-sidebar-heading{font-weight:400;font-size:16px;padding:10px 0;margin-bottom:10px} .control-sidebar-subheading{display:block;font-weight:400;font-size:14px} .control-sidebar-menu{list-style:none;padding:0;margin:0 -15px} .control-sidebar-menu>li>a{display:block;padding:10px 15px} .control-sidebar-menu>li>a:before,.control-sidebar-menu>li>a:after{content:" ";display:table} .control-sidebar-menu>li>a:after{clear:both} .control-sidebar-menu>li>a>.control-sidebar-subheading{margin-top:0} .control-sidebar-menu .menu-icon{float:left;width:35px;height:35px;border-radius:50%;text-align:center;line-height:35px} .control-sidebar-menu .menu-info{margin-left:45px;margin-top:3px} .control-sidebar-menu .menu-info>.control-sidebar-subheading{margin:0} .control-sidebar-menu .menu-info>p{margin:0;font-size:11px} .control-sidebar-menu .progress{margin:0} .control-sidebar-dark{color:#b8c7ce} .control-sidebar-dark,.control-sidebar-dark+.control-sidebar-bg{background:#222d32} .control-sidebar-dark .nav-tabs.control-sidebar-tabs{border-bottom:#1c2529} .control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a{background:#181f23;color:#b8c7ce} .control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#141a1d;border-bottom-color:#141a1d} .control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:active{background:#1c2529} .control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover{color:#fff} .control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#222d32;color:#fff} .control-sidebar-dark .control-sidebar-heading,.control-sidebar-dark .control-sidebar-subheading{color:#fff} .control-sidebar-dark .control-sidebar-menu>li>a:hover{background:#1e282c} .control-sidebar-dark .control-sidebar-menu>li>a .menu-info>p{color:#b8c7ce} .control-sidebar-light{color:#5e5e5e} .control-sidebar-light,.control-sidebar-light+.control-sidebar-bg{background:#f9fafc;border-left:1px solid #d2d6de} .control-sidebar-light .nav-tabs.control-sidebar-tabs{border-bottom:#d2d6de} .control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a{background:#e8ecf4;color:#444} .control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#d2d6de;border-bottom-color:#d2d6de} .control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:active{background:#eff1f7} .control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#f9fafc;color:#111} .control-sidebar-light .control-sidebar-heading,.control-sidebar-light .control-sidebar-subheading{color:#111} .control-sidebar-light .control-sidebar-menu{margin-left:-14px} .control-sidebar-light .control-sidebar-menu>li>a:hover{background:#f4f4f5} .control-sidebar-light .control-sidebar-menu>li>a .menu-info>p{color:#5e5e5e} .dropdown-menu{box-shadow:none;border-color:#eee} .dropdown-menu>li>a{color:#777} .dropdown-menu>li>a>.glyphicon,.dropdown-menu>li>a>.fa,.dropdown-menu>li>a>.ion{margin-right:10px} .dropdown-menu>li>a:hover{background-color:#e1e3e9;color:#333} .dropdown-menu>.divider{background-color:#eee} .navbar-nav>.notifications-menu>.dropdown-menu,.navbar-nav>.messages-menu>.dropdown-menu,.navbar-nav>.tasks-menu>.dropdown-menu{width:280px;padding:0 0 0 0;margin:0;top:100%} .navbar-nav>.notifications-menu>.dropdown-menu>li,.navbar-nav>.messages-menu>.dropdown-menu>li,.navbar-nav>.tasks-menu>.dropdown-menu>li{position:relative} .navbar-nav>.notifications-menu>.dropdown-menu>li.header,.navbar-nav>.messages-menu>.dropdown-menu>li.header,.navbar-nav>.tasks-menu>.dropdown-menu>li.header{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:#ffffff;padding:7px 10px;border-bottom:1px solid #f4f4f4;color:#444444;font-size:14px} .navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px;font-size:12px;background-color:#fff;padding:7px 10px;border-bottom:1px solid #eeeeee;color:#444 !important;text-align:center}@media (max-width:991px){.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{background:#fff !important;color:#444 !important}} .navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a:hover{text-decoration:none;font-weight:normal} .navbar-nav>.notifications-menu>.dropdown-menu>li .menu,.navbar-nav>.messages-menu>.dropdown-menu>li .menu,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu{max-height:200px;margin:0;padding:0;list-style:none;overflow-x:hidden} .navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{display:block;white-space:nowrap;border-bottom:1px solid #f4f4f4} .navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a:hover{background:#f4f4f4;text-decoration:none} .navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a{color:#444444;overflow:hidden;text-overflow:ellipsis;padding:10px} .navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.glyphicon,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.fa,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.ion{width:20px} .navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a{margin:0;padding:10px 10px} .navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>div>img{margin:auto 10px auto auto;width:40px;height:40px} .navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4{padding:0;margin:0 0 0 45px;color:#444444;font-size:15px;position:relative} .navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4>small{color:#999999;font-size:10px;position:absolute;top:0;right:0} .navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>p{margin:0 0 0 45px;font-size:12px;color:#888888} .navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:before,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{content:" ";display:table} .navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{clear:both} .navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{padding:10px} .navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>h3{font-size:14px;padding:0;margin:0 0 10px 0;color:#666666} .navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>.progress{padding:0;margin:0} .navbar-nav>.user-menu>.dropdown-menu{border-top-right-radius:0;border-top-left-radius:0;padding:1px 0 0 0;border-top-width:0;width:280px} .navbar-nav>.user-menu>.dropdown-menu,.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom-right-radius:4px;border-bottom-left-radius:4px} .navbar-nav>.user-menu>.dropdown-menu>li.user-header{height:175px;padding:10px;text-align:center} .navbar-nav>.user-menu>.dropdown-menu>li.user-header>img{z-index:5;height:90px;width:90px;border:3px solid;border-color:transparent;border-color:rgba(255,255,255,0.2)} .navbar-nav>.user-menu>.dropdown-menu>li.user-header>p{z-index:5;color:#fff;color:rgba(255,255,255,0.8);font-size:17px;margin-top:10px} .navbar-nav>.user-menu>.dropdown-menu>li.user-header>p>small{display:block;font-size:12px} .navbar-nav>.user-menu>.dropdown-menu>.user-body{padding:15px;border-bottom:1px solid #f4f4f4;border-top:1px solid #dddddd} .navbar-nav>.user-menu>.dropdown-menu>.user-body:before,.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{content:" ";display:table} .navbar-nav>.user-menu>.dropdown-menu>.user-body:after{clear:both} .navbar-nav>.user-menu>.dropdown-menu>.user-body a{color:#444 !important}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-body a{background:#fff !important;color:#444 !important}} .navbar-nav>.user-menu>.dropdown-menu>.user-footer{background-color:#f9f9f9;padding:10px} .navbar-nav>.user-menu>.dropdown-menu>.user-footer:before,.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{content:" ";display:table} .navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{clear:both} .navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default{color:#666666}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default:hover{background-color:#f9f9f9}} .navbar-nav>.user-menu .user-image{float:left;width:25px;height:25px;border-radius:50%;margin-right:10px;margin-top:-2px}@media (max-width:767px){.navbar-nav>.user-menu .user-image{float:none;margin-right:0;margin-top:-8px;line-height:10px}} .open:not(.dropup)>.animated-dropdown-menu{backface-visibility:visible !important;-webkit-animation:flipInX .7s both;-o-animation:flipInX .7s both;animation:flipInX .7s both} @keyframes flipInX{0%{transform:perspective(400px) rotate3d(1, 0, 0, 90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotate3d(1, 0, 0, -20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{transform:perspective(400px)}} @-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 90deg);-webkit-transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -20deg);-webkit-transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{-webkit-transform:perspective(400px)}} .navbar-custom-menu>.navbar-nav>li{position:relative} .navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:0;left:auto}@media (max-width:991px){.navbar-custom-menu>.navbar-nav{float:right}.navbar-custom-menu>.navbar-nav>li{position:static}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:5%;left:auto;border:1px solid #ddd;background:#fff}} .form-control{border-radius:0;box-shadow:none;border-color:#d2d6de} .form-control:focus{border-color:#3c8dbc;box-shadow:none} .form-control::-moz-placeholder,.form-control:-ms-input-placeholder,.form-control::-webkit-input-placeholder{color:#bbb;opacity:1} .form-control:not(select){-webkit-appearance:none;-moz-appearance:none;appearance:none} .form-group.has-success label{color:#00a65a} .form-group.has-success .form-control{border-color:#00a65a;box-shadow:none} .form-group.has-warning label{color:#f39c12} .form-group.has-warning .form-control{border-color:#f39c12;box-shadow:none} .form-group.has-error label{color:#dd4b39} .form-group.has-error .form-control{border-color:#dd4b39;box-shadow:none} .input-group .input-group-addon{border-radius:0;border-color:#d2d6de;background-color:#fff} .btn-group-vertical .btn.btn-flat:first-of-type,.btn-group-vertical .btn.btn-flat:last-of-type{border-radius:0} .icheck>label{padding-left:0} .form-control-feedback.fa{line-height:34px} .input-lg+.form-control-feedback.fa,.input-group-lg+.form-control-feedback.fa,.form-group-lg .form-control+.form-control-feedback.fa{line-height:46px} .input-sm+.form-control-feedback.fa,.input-group-sm+.form-control-feedback.fa,.form-group-sm .form-control+.form-control-feedback.fa{line-height:30px} .progress,.progress>.progress-bar{-webkit-box-shadow:none;box-shadow:none} .progress,.progress>.progress-bar,.progress .progress-bar,.progress>.progress-bar .progress-bar{border-radius:1px} .progress.sm,.progress-sm{height:10px} .progress.sm,.progress-sm,.progress.sm .progress-bar,.progress-sm .progress-bar{border-radius:1px} .progress.xs,.progress-xs{height:7px} .progress.xs,.progress-xs,.progress.xs .progress-bar,.progress-xs .progress-bar{border-radius:1px} .progress.xxs,.progress-xxs{height:3px} .progress.xxs,.progress-xxs,.progress.xxs .progress-bar,.progress-xxs .progress-bar{border-radius:1px} .progress.vertical{position:relative;width:30px;height:200px;display:inline-block;margin-right:10px} .progress.vertical>.progress-bar{width:100%;position:absolute;bottom:0} .progress.vertical.sm,.progress.vertical.progress-sm{width:20px} .progress.vertical.xs,.progress.vertical.progress-xs{width:10px} .progress.vertical.xxs,.progress.vertical.progress-xxs{width:3px} .progress-group .progress-text{font-weight:600} .progress-group .progress-number{float:right} .table tr>td .progress{margin:0} .progress-bar-light-blue,.progress-bar-primary{background-color:#3c8dbc} .progress-striped .progress-bar-light-blue,.progress-striped .progress-bar-primary{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)} .progress-bar-green,.progress-bar-success{background-color:#00a65a} .progress-striped .progress-bar-green,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)} .progress-bar-aqua,.progress-bar-info{background-color:#00c0ef} .progress-striped .progress-bar-aqua,.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)} .progress-bar-yellow,.progress-bar-warning{background-color:#f39c12} .progress-striped .progress-bar-yellow,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)} .progress-bar-red,.progress-bar-danger{background-color:#dd4b39} .progress-striped .progress-bar-red,.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)} .small-box{border-radius:2px;position:relative;display:block;margin-bottom:20px;box-shadow:0 1px 1px rgba(0,0,0,0.1)} .small-box>.inner{padding:10px} .small-box>.small-box-footer{position:relative;text-align:center;padding:3px 0;color:#fff;color:rgba(255,255,255,0.8);display:block;z-index:10;background:rgba(0,0,0,0.1);text-decoration:none} .small-box>.small-box-footer:hover{color:#fff;background:rgba(0,0,0,0.15)} .small-box h3{font-size:38px;font-weight:bold;margin:0 0 10px 0;white-space:nowrap;padding:0} .small-box p{font-size:15px} .small-box p>small{display:block;color:#f9f9f9;font-size:13px;margin-top:5px} .small-box h3,.small-box p{z-index:5px} .small-box .icon{-webkit-transition:all .3s linear;-o-transition:all .3s linear;transition:all .3s linear;position:absolute;top:-10px;right:10px;z-index:0;font-size:90px;color:rgba(0,0,0,0.15)} .small-box:hover{text-decoration:none;color:#f9f9f9} .small-box:hover .icon{font-size:95px}@media (max-width:767px){.small-box{text-align:center}.small-box .icon{display:none}.small-box p{font-size:12px}} .box{position:relative;border-radius:3px;background:#ffffff;border-top:3px solid #d2d6de;margin-bottom:20px;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1)} .box.box-primary{border-top-color:#3c8dbc} .box.box-info{border-top-color:#00c0ef} .box.box-danger{border-top-color:#dd4b39} .box.box-warning{border-top-color:#f39c12} .box.box-success{border-top-color:#00a65a} .box.box-default{border-top-color:#d2d6de} .box.collapsed-box .box-body,.box.collapsed-box .box-footer{display:none} .box .nav-stacked>li{border-bottom:1px solid #f4f4f4;margin:0} .box .nav-stacked>li:last-of-type{border-bottom:none} .box.height-control .box-body{max-height:300px;overflow:auto} .box .border-right{border-right:1px solid #f4f4f4} .box .border-left{border-left:1px solid #f4f4f4} .box.box-solid{border-top:0} .box.box-solid>.box-header .btn.btn-default{background:transparent} .box.box-solid>.box-header .btn:hover,.box.box-solid>.box-header a:hover{background:rgba(0,0,0,0.1)} .box.box-solid.box-default{border:1px solid #d2d6de} .box.box-solid.box-default>.box-header{color:#444;background:#d2d6de;background-color:#d2d6de} .box.box-solid.box-default>.box-header a,.box.box-solid.box-default>.box-header .btn{color:#444} .box.box-solid.box-primary{border:1px solid #3c8dbc} .box.box-solid.box-primary>.box-header{color:#fff;background:#3c8dbc;background-color:#3c8dbc} .box.box-solid.box-primary>.box-header a,.box.box-solid.box-primary>.box-header .btn{color:#fff} .box.box-solid.box-info{border:1px solid #00c0ef} .box.box-solid.box-info>.box-header{color:#fff;background:#00c0ef;background-color:#00c0ef} .box.box-solid.box-info>.box-header a,.box.box-solid.box-info>.box-header .btn{color:#fff} .box.box-solid.box-danger{border:1px solid #dd4b39} .box.box-solid.box-danger>.box-header{color:#fff;background:#dd4b39;background-color:#dd4b39} .box.box-solid.box-danger>.box-header a,.box.box-solid.box-danger>.box-header .btn{color:#fff} .box.box-solid.box-warning{border:1px solid #f39c12} .box.box-solid.box-warning>.box-header{color:#fff;background:#f39c12;background-color:#f39c12} .box.box-solid.box-warning>.box-header a,.box.box-solid.box-warning>.box-header .btn{color:#fff} .box.box-solid.box-success{border:1px solid #00a65a} .box.box-solid.box-success>.box-header{color:#fff;background:#00a65a;background-color:#00a65a} .box.box-solid.box-success>.box-header a,.box.box-solid.box-success>.box-header .btn{color:#fff} .box.box-solid>.box-header>.box-tools .btn{border:0;box-shadow:none} .box.box-solid[class*='bg']>.box-header{color:#fff} .box .box-group>.box{margin-bottom:5px} .box .knob-label{text-align:center;color:#333;font-weight:100;font-size:12px;margin-bottom:0.3em} .box>.overlay,.overlay-wrapper>.overlay,.box>.loading-img,.overlay-wrapper>.loading-img{position:absolute;top:0;left:0;width:100%;height:100%} .box .overlay,.overlay-wrapper .overlay{z-index:50;background:rgba(255,255,255,0.7);border-radius:3px} .box .overlay>.fa,.overlay-wrapper .overlay>.fa{position:absolute;top:50%;left:50%;margin-left:-15px;margin-top:-15px;color:#000;font-size:30px} .box .overlay.dark,.overlay-wrapper .overlay.dark{background:rgba(0,0,0,0.5)} .box-header:before,.box-body:before,.box-footer:before,.box-header:after,.box-body:after,.box-footer:after{content:" ";display:table} .box-header:after,.box-body:after,.box-footer:after{clear:both} .box-header{color:#444;display:block;padding:10px;position:relative} .box-header.with-border{border-bottom:1px solid #f4f4f4} .collapsed-box .box-header.with-border{border-bottom:none} .box-header>.fa,.box-header>.glyphicon,.box-header>.ion,.box-header .box-title{display:inline-block;font-size:18px;margin:0;line-height:1} .box-header>.fa,.box-header>.glyphicon,.box-header>.ion{margin-right:5px} .box-header>.box-tools{position:absolute;right:10px;top:5px} .box-header>.box-tools [data-toggle="tooltip"]{position:relative} .box-header>.box-tools.pull-right .dropdown-menu{right:0;left:auto} .btn-box-tool{padding:5px;font-size:12px;background:transparent;color:#97a0b3} .open .btn-box-tool,.btn-box-tool:hover{color:#606c84} .btn-box-tool.btn:active{box-shadow:none} .box-body{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;padding:10px} .no-header .box-body{border-top-right-radius:3px;border-top-left-radius:3px} .box-body>.table{margin-bottom:0} .box-body .fc{margin-top:5px} .box-body .full-width-chart{margin:-19px} .box-body.no-padding .full-width-chart{margin:-9px} .box-body .box-pane{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:3px} .box-body .box-pane-right{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:0} .box-footer{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-top:1px solid #f4f4f4;padding:10px;background-color:#fff} .chart-legend{margin:10px 0}@media (max-width:991px){.chart-legend>li{float:left;margin-right:10px}} .box-comments{background:#f7f7f7} .box-comments .box-comment{padding:8px 0;border-bottom:1px solid #eee} .box-comments .box-comment:before,.box-comments .box-comment:after{content:" ";display:table} .box-comments .box-comment:after{clear:both} .box-comments .box-comment:last-of-type{border-bottom:0} .box-comments .box-comment:first-of-type{padding-top:0} .box-comments .box-comment img{float:left} .box-comments .comment-text{margin-left:40px;color:#555} .box-comments .username{color:#444;display:block;font-weight:600} .box-comments .text-muted{font-weight:400;font-size:12px} .todo-list{margin:0;padding:0;list-style:none;overflow:auto} .todo-list>li{border-radius:2px;padding:10px;background:#f4f4f4;margin-bottom:2px;border-left:2px solid #e6e7e8;color:#444} .todo-list>li:last-of-type{margin-bottom:0} .todo-list>li>input[type='checkbox']{margin:0 10px 0 5px} .todo-list>li .text{display:inline-block;margin-left:5px;font-weight:600} .todo-list>li .label{margin-left:10px;font-size:9px} .todo-list>li .tools{display:none;float:right;color:#dd4b39} .todo-list>li .tools>.fa,.todo-list>li .tools>.glyphicon,.todo-list>li .tools>.ion{margin-right:5px;cursor:pointer} .todo-list>li:hover .tools{display:inline-block} .todo-list>li.done{color:#999} .todo-list>li.done .text{text-decoration:line-through;font-weight:500} .todo-list>li.done .label{background:#d2d6de !important} .todo-list .danger{border-left-color:#dd4b39} .todo-list .warning{border-left-color:#f39c12} .todo-list .info{border-left-color:#00c0ef} .todo-list .success{border-left-color:#00a65a} .todo-list .primary{border-left-color:#3c8dbc} .todo-list .handle{display:inline-block;cursor:move;margin:0 5px} .chat{padding:5px 20px 5px 10px} .chat .item{margin-bottom:10px} .chat .item:before,.chat .item:after{content:" ";display:table} .chat .item:after{clear:both} .chat .item>img{width:40px;height:40px;border:2px solid transparent;border-radius:50%} .chat .item>.online{border:2px solid #00a65a} .chat .item>.offline{border:2px solid #dd4b39} .chat .item>.message{margin-left:55px;margin-top:-40px} .chat .item>.message>.name{display:block;font-weight:600} .chat .item>.attachment{border-radius:3px;background:#f4f4f4;margin-left:65px;margin-right:15px;padding:10px} .chat .item>.attachment>h4{margin:0 0 5px 0;font-weight:600;font-size:14px} .chat .item>.attachment>p,.chat .item>.attachment>.filename{font-weight:600;font-size:13px;font-style:italic;margin:0} .chat .item>.attachment:before,.chat .item>.attachment:after{content:" ";display:table} .chat .item>.attachment:after{clear:both} .box-input{max-width:200px} .modal .panel-body{color:#444} .info-box{display:block;min-height:90px;background:#fff;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:2px;margin-bottom:15px} .info-box small{font-size:14px} .info-box .progress{background:rgba(0,0,0,0.2);margin:5px -10px 5px -10px;height:2px} .info-box .progress,.info-box .progress .progress-bar{border-radius:0} .info-box .progress .progress-bar{background:#fff} .info-box-icon{border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px;display:block;float:left;height:90px;width:90px;text-align:center;font-size:45px;line-height:90px;background:rgba(0,0,0,0.2)} .info-box-icon>img{max-width:100%} .info-box-content{padding:5px 10px;margin-left:90px} .info-box-number{display:block;font-weight:bold;font-size:18px} .progress-description,.info-box-text{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .info-box-text{text-transform:uppercase} .info-box-more{display:block} .progress-description{margin:0} .timeline{position:relative;margin:0 0 30px 0;padding:0;list-style:none} .timeline:before{content:'';position:absolute;top:0;bottom:0;width:4px;background:#ddd;left:31px;margin:0;border-radius:2px} .timeline>li{position:relative;margin-right:10px;margin-bottom:15px} .timeline>li:before,.timeline>li:after{content:" ";display:table} .timeline>li:after{clear:both} .timeline>li>.timeline-item{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;margin-top:0;background:#fff;color:#444;margin-left:60px;margin-right:15px;padding:0;position:relative} .timeline>li>.timeline-item>.time{color:#999;float:right;padding:10px;font-size:12px} .timeline>li>.timeline-item>.timeline-header{margin:0;color:#555;border-bottom:1px solid #f4f4f4;padding:10px;font-size:16px;line-height:1.1} .timeline>li>.timeline-item>.timeline-header>a{font-weight:600} .timeline>li>.timeline-item>.timeline-body,.timeline>li>.timeline-item>.timeline-footer{padding:10px} .timeline>li>.fa,.timeline>li>.glyphicon,.timeline>li>.ion{width:30px;height:30px;font-size:15px;line-height:30px;position:absolute;color:#666;background:#d2d6de;border-radius:50%;text-align:center;left:18px;top:0} .timeline>.time-label>span{font-weight:600;padding:5px;display:inline-block;background-color:#fff;border-radius:4px} .timeline-inverse>li>.timeline-item{background:#f0f0f0;border:1px solid #ddd;-webkit-box-shadow:none;box-shadow:none} .timeline-inverse>li>.timeline-item>.timeline-header{border-bottom-color:#ddd} .btn{border-radius:3px;-webkit-box-shadow:none;box-shadow:none;border:1px solid transparent} .btn.uppercase{text-transform:uppercase} .btn.btn-flat{border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border-width:1px} .btn:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)} .btn:focus{outline:none} .btn.btn-file{position:relative;overflow:hidden} .btn.btn-file>input[type='file']{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:100px;text-align:right;opacity:0;filter:alpha(opacity=0);outline:none;background:white;cursor:inherit;display:block} .btn-default{background-color:#f4f4f4;color:#444;border-color:#ddd} .btn-default:hover,.btn-default:active,.btn-default.hover{background-color:#e7e7e7} .btn-primary{background-color:#3c8dbc;border-color:#367fa9} .btn-primary:hover,.btn-primary:active,.btn-primary.hover{background-color:#367fa9} .btn-success{background-color:#00a65a;border-color:#008d4c} .btn-success:hover,.btn-success:active,.btn-success.hover{background-color:#008d4c} .btn-info{background-color:#00c0ef;border-color:#00acd6} .btn-info:hover,.btn-info:active,.btn-info.hover{background-color:#00acd6} .btn-danger{background-color:#dd4b39;border-color:#d73925} .btn-danger:hover,.btn-danger:active,.btn-danger.hover{background-color:#d73925} .btn-warning{background-color:#f39c12;border-color:#e08e0b} .btn-warning:hover,.btn-warning:active,.btn-warning.hover{background-color:#e08e0b} .btn-outline{border:1px solid #fff;background:transparent;color:#fff} .btn-outline:hover,.btn-outline:focus,.btn-outline:active{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7)} .btn-link{-webkit-box-shadow:none;box-shadow:none} .btn[class*='bg-']:hover{-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,0.2);box-shadow:inset 0 0 100px rgba(0,0,0,0.2)} .btn-app{border-radius:3px;position:relative;padding:15px 5px;margin:0 0 10px 10px;min-width:80px;height:60px;text-align:center;color:#666;border:1px solid #ddd;background-color:#f4f4f4;font-size:12px} .btn-app>.fa,.btn-app>.glyphicon,.btn-app>.ion{font-size:20px;display:block} .btn-app:hover{background:#f4f4f4;color:#444;border-color:#aaa} .btn-app:active,.btn-app:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)} .btn-app>.badge{position:absolute;top:-3px;right:-10px;font-size:10px;font-weight:400} .callout{border-radius:3px;margin:0 0 20px 0;padding:15px 30px 15px 15px;border-left:5px solid #eee} .callout a{color:#fff;text-decoration:underline} .callout a:hover{color:#eee} .callout h4{margin-top:0;font-weight:600} .callout p:last-child{margin-bottom:0} .callout code,.callout .highlight{background-color:#fff} .callout.callout-danger{border-color:#c23321} .callout.callout-warning{border-color:#c87f0a} .callout.callout-info{border-color:#0097bc} .callout.callout-success{border-color:#00733e} .alert{border-radius:3px} .alert h4{font-weight:600} .alert .icon{margin-right:10px} .alert .close{color:#000;opacity:.2;filter:alpha(opacity=20)} .alert .close:hover{opacity:.5;filter:alpha(opacity=50)} .alert a{color:#fff;text-decoration:underline} .alert-success{border-color:#008d4c} .alert-danger,.alert-error{border-color:#d73925} .alert-warning{border-color:#e08e0b} .alert-info{border-color:#00acd6} .nav>li>a:hover,.nav>li>a:active,.nav>li>a:focus{color:#444;background:#f7f7f7} .nav-pills>li>a{border-radius:0;border-top:3px solid transparent;color:#444} .nav-pills>li>a>.fa,.nav-pills>li>a>.glyphicon,.nav-pills>li>a>.ion{margin-right:5px} .nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{border-top-color:#3c8dbc} .nav-pills>li.active>a{font-weight:600} .nav-stacked>li>a{border-radius:0;border-top:0;border-left:3px solid transparent;color:#444} .nav-stacked>li.active>a,.nav-stacked>li.active>a:hover{background:transparent;color:#444;border-top:0;border-left-color:#3c8dbc} .nav-stacked>li.header{border-bottom:1px solid #ddd;color:#777;margin-bottom:10px;padding:5px 10px;text-transform:uppercase} .nav-tabs-custom{margin-bottom:20px;background:#fff;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px} .nav-tabs-custom>.nav-tabs{margin:0;border-bottom-color:#f4f4f4;border-top-right-radius:3px;border-top-left-radius:3px} .nav-tabs-custom>.nav-tabs>li{border-top:3px solid transparent;margin-bottom:-2px;margin-right:5px} .nav-tabs-custom>.nav-tabs>li>a{color:#444;border-radius:0} .nav-tabs-custom>.nav-tabs>li>a.text-muted{color:#999} .nav-tabs-custom>.nav-tabs>li>a,.nav-tabs-custom>.nav-tabs>li>a:hover{background:transparent;margin:0} .nav-tabs-custom>.nav-tabs>li>a:hover{color:#999} .nav-tabs-custom>.nav-tabs>li:not(.active)>a:hover,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:focus,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:active{border-color:transparent} .nav-tabs-custom>.nav-tabs>li.active{border-top-color:#3c8dbc} .nav-tabs-custom>.nav-tabs>li.active>a,.nav-tabs-custom>.nav-tabs>li.active:hover>a{background-color:#fff;color:#444} .nav-tabs-custom>.nav-tabs>li.active>a{border-top-color:transparent;border-left-color:#f4f4f4;border-right-color:#f4f4f4} .nav-tabs-custom>.nav-tabs>li:first-of-type{margin-left:0} .nav-tabs-custom>.nav-tabs>li:first-of-type.active>a{border-left-color:transparent} .nav-tabs-custom>.nav-tabs.pull-right{float:none !important} .nav-tabs-custom>.nav-tabs.pull-right>li{float:right} .nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type{margin-right:0} .nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type>a{border-left-width:1px} .nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type.active>a{border-left-color:#f4f4f4;border-right-color:transparent} .nav-tabs-custom>.nav-tabs>li.header{line-height:35px;padding:0 10px;font-size:20px;color:#444} .nav-tabs-custom>.nav-tabs>li.header>.fa,.nav-tabs-custom>.nav-tabs>li.header>.glyphicon,.nav-tabs-custom>.nav-tabs>li.header>.ion{margin-right:5px} .nav-tabs-custom>.tab-content{background:#fff;padding:10px;border-bottom-right-radius:3px;border-bottom-left-radius:3px} .nav-tabs-custom .dropdown.open>a:active,.nav-tabs-custom .dropdown.open>a:focus{background:transparent;color:#999} .nav-tabs-custom.tab-primary>.nav-tabs>li.active{border-top-color:#3c8dbc} .nav-tabs-custom.tab-info>.nav-tabs>li.active{border-top-color:#00c0ef} .nav-tabs-custom.tab-danger>.nav-tabs>li.active{border-top-color:#dd4b39} .nav-tabs-custom.tab-warning>.nav-tabs>li.active{border-top-color:#f39c12} .nav-tabs-custom.tab-success>.nav-tabs>li.active{border-top-color:#00a65a} .nav-tabs-custom.tab-default>.nav-tabs>li.active{border-top-color:#d2d6de} .pagination>li>a{background:#fafafa;color:#666} .pagination.pagination-flat>li>a{border-radius:0 !important} .products-list{list-style:none;margin:0;padding:0} .products-list>.item{border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);padding:10px 0;background:#fff} .products-list>.item:before,.products-list>.item:after{content:" ";display:table} .products-list>.item:after{clear:both} .products-list .product-img{float:left} .products-list .product-img img{width:50px;height:50px} .products-list .product-info{margin-left:60px} .products-list .product-title{font-weight:600} .products-list .product-description{display:block;color:#999;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} .product-list-in-box>.item{-webkit-box-shadow:none;box-shadow:none;border-radius:0;border-bottom:1px solid #f4f4f4} .product-list-in-box>.item:last-of-type{border-bottom-width:0} .table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{border-top:1px solid #f4f4f4} .table>thead>tr>th{border-bottom:2px solid #f4f4f4} .table tr td .progress{margin-top:5px} .table-bordered{border:1px solid #f4f4f4} .table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #f4f4f4} .table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px} .table.no-border,.table.no-border td,.table.no-border th{border:0} table.text-center,table.text-center td,table.text-center th{text-align:center} .table.align th{text-align:left} .table.align td{text-align:right} .label-default{background-color:#d2d6de;color:#444} .direct-chat .box-body{border-bottom-right-radius:0;border-bottom-left-radius:0;position:relative;overflow-x:hidden;padding:0} .direct-chat.chat-pane-open .direct-chat-contacts{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)} .direct-chat-messages{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0);padding:10px;height:250px;overflow:auto} .direct-chat-msg,.direct-chat-text{display:block} .direct-chat-msg{margin-bottom:10px} .direct-chat-msg:before,.direct-chat-msg:after{content:" ";display:table} .direct-chat-msg:after{clear:both} .direct-chat-messages,.direct-chat-contacts{-webkit-transition:-webkit-transform .5s ease-in-out;-moz-transition:-moz-transform .5s ease-in-out;-o-transition:-o-transform .5s ease-in-out;transition:transform .5s ease-in-out} .direct-chat-text{border-radius:5px;position:relative;padding:5px 10px;background:#d2d6de;border:1px solid #d2d6de;margin:5px 0 0 50px;color:#444} .direct-chat-text:after,.direct-chat-text:before{position:absolute;right:100%;top:15px;border:solid transparent;border-right-color:#d2d6de;content:' ';height:0;width:0;pointer-events:none} .direct-chat-text:after{border-width:5px;margin-top:-5px} .direct-chat-text:before{border-width:6px;margin-top:-6px} .right .direct-chat-text{margin-right:50px;margin-left:0} .right .direct-chat-text:after,.right .direct-chat-text:before{right:auto;left:100%;border-right-color:transparent;border-left-color:#d2d6de} .direct-chat-img{border-radius:50%;float:left;width:40px;height:40px} .right .direct-chat-img{float:right} .direct-chat-info{display:block;margin-bottom:2px;font-size:12px} .direct-chat-name{font-weight:600} .direct-chat-timestamp{color:#999} .direct-chat-contacts-open .direct-chat-contacts{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)} .direct-chat-contacts{-webkit-transform:translate(101%, 0);-ms-transform:translate(101%, 0);-o-transform:translate(101%, 0);transform:translate(101%, 0);position:absolute;top:0;bottom:0;height:250px;width:100%;background:#222d32;color:#fff;overflow:auto} .contacts-list>li{border-bottom:1px solid rgba(0,0,0,0.2);padding:10px;margin:0} .contacts-list>li:before,.contacts-list>li:after{content:" ";display:table} .contacts-list>li:after{clear:both} .contacts-list>li:last-of-type{border-bottom:none} .contacts-list-img{border-radius:50%;width:40px;float:left} .contacts-list-info{margin-left:45px;color:#fff} .contacts-list-name,.contacts-list-status{display:block} .contacts-list-name{font-weight:600} .contacts-list-status{font-size:12px} .contacts-list-date{color:#aaa;font-weight:normal} .contacts-list-msg{color:#999} .direct-chat-danger .right>.direct-chat-text{background:#dd4b39;border-color:#dd4b39;color:#fff} .direct-chat-danger .right>.direct-chat-text:after,.direct-chat-danger .right>.direct-chat-text:before{border-left-color:#dd4b39} .direct-chat-primary .right>.direct-chat-text{background:#3c8dbc;border-color:#3c8dbc;color:#fff} .direct-chat-primary .right>.direct-chat-text:after,.direct-chat-primary .right>.direct-chat-text:before{border-left-color:#3c8dbc} .direct-chat-warning .right>.direct-chat-text{background:#f39c12;border-color:#f39c12;color:#fff} .direct-chat-warning .right>.direct-chat-text:after,.direct-chat-warning .right>.direct-chat-text:before{border-left-color:#f39c12} .direct-chat-info .right>.direct-chat-text{background:#00c0ef;border-color:#00c0ef;color:#fff} .direct-chat-info .right>.direct-chat-text:after,.direct-chat-info .right>.direct-chat-text:before{border-left-color:#00c0ef} .direct-chat-success .right>.direct-chat-text{background:#00a65a;border-color:#00a65a;color:#fff} .direct-chat-success .right>.direct-chat-text:after,.direct-chat-success .right>.direct-chat-text:before{border-left-color:#00a65a} .users-list>li{width:25%;float:left;padding:10px;text-align:center} .users-list>li img{border-radius:50%;max-width:100%;height:auto} .users-list>li>a:hover,.users-list>li>a:hover .users-list-name{color:#999} .users-list-name,.users-list-date{display:block} .users-list-name{font-weight:600;color:#444;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} .users-list-date{color:#999;font-size:12px} .carousel-control.left,.carousel-control.right{background-image:none} .carousel-control>.fa{font-size:40px;position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-20px} .modal{background:rgba(0,0,0,0.3)} .modal-content{border-radius:0;-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125);border:0}@media (min-width:768px){.modal-content{-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125)}} .modal-header{border-bottom-color:#f4f4f4} .modal-footer{border-top-color:#f4f4f4} .modal-primary .modal-header,.modal-primary .modal-footer{border-color:#307095} .modal-warning .modal-header,.modal-warning .modal-footer{border-color:#c87f0a} .modal-info .modal-header,.modal-info .modal-footer{border-color:#0097bc} .modal-success .modal-header,.modal-success .modal-footer{border-color:#00733e} .modal-danger .modal-header,.modal-danger .modal-footer{border-color:#c23321} .box-widget{border:none;position:relative} .widget-user .widget-user-header{padding:20px;height:120px;border-top-right-radius:3px;border-top-left-radius:3px} .widget-user .widget-user-username{margin-top:0;margin-bottom:5px;font-size:25px;font-weight:300;text-shadow:0 1px 1px rgba(0,0,0,0.2)} .widget-user .widget-user-desc{margin-top:0} .widget-user .widget-user-image{position:absolute;top:65px;left:50%;margin-left:-45px} .widget-user .widget-user-image>img{width:90px;height:auto;border:3px solid #fff} .widget-user .box-footer{padding-top:30px} .widget-user-2 .widget-user-header{padding:20px;border-top-right-radius:3px;border-top-left-radius:3px} .widget-user-2 .widget-user-username{margin-top:5px;margin-bottom:5px;font-size:25px;font-weight:300} .widget-user-2 .widget-user-desc{margin-top:0} .widget-user-2 .widget-user-username,.widget-user-2 .widget-user-desc{margin-left:75px} .widget-user-2 .widget-user-image>img{width:65px;height:auto;float:left} .mailbox-messages>.table{margin:0} .mailbox-controls{padding:5px} .mailbox-controls.with-border{border-bottom:1px solid #f4f4f4} .mailbox-read-info{border-bottom:1px solid #f4f4f4;padding:10px} .mailbox-read-info h3{font-size:20px;margin:0} .mailbox-read-info h5{margin:0;padding:5px 0 0 0} .mailbox-read-time{color:#999;font-size:13px} .mailbox-read-message{padding:10px} .mailbox-attachments li{float:left;width:200px;border:1px solid #eee;margin-bottom:10px;margin-right:10px} .mailbox-attachment-name{font-weight:bold;color:#666} .mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block} .mailbox-attachment-info{padding:10px;background:#f4f4f4} .mailbox-attachment-size{color:#999;font-size:12px} .mailbox-attachment-icon{text-align:center;font-size:65px;color:#666;padding:20px 10px} .mailbox-attachment-icon.has-img{padding:0} .mailbox-attachment-icon.has-img>img{max-width:100%;height:auto} .lockscreen{background:#d2d6de} .lockscreen-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300} .lockscreen-logo a{color:#444} .lockscreen-wrapper{max-width:400px;margin:0 auto;margin-top:10%} .lockscreen .lockscreen-name{text-align:center;font-weight:600} .lockscreen-item{border-radius:4px;padding:0;background:#fff;position:relative;margin:10px auto 30px auto;width:290px} .lockscreen-image{border-radius:50%;position:absolute;left:-10px;top:-25px;background:#fff;padding:5px;z-index:10} .lockscreen-image>img{border-radius:50%;width:70px;height:70px} .lockscreen-credentials{margin-left:70px} .lockscreen-credentials .form-control{border:0} .lockscreen-credentials .btn{background-color:#fff;border:0;padding:0 10px} .lockscreen-footer{margin-top:10px} .login-logo,.register-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300} .login-logo a,.register-logo a{color:#444} .login-page,.register-page{background:#d2d6de} .login-box,.register-box{width:360px;margin:7% auto}@media (max-width:768px){.login-box,.register-box{width:90%;margin-top:20px}} .login-box-body,.register-box-body{background:#fff;padding:20px;border-top:0;color:#666} .login-box-body .form-control-feedback,.register-box-body .form-control-feedback{color:#777} .login-box-msg,.register-box-msg{margin:0;text-align:center;padding:0 20px 20px 20px} .social-auth-links{margin:10px 0} .error-page{width:600px;margin:20px auto 0 auto}@media (max-width:991px){.error-page{width:100%}} .error-page>.headline{float:left;font-size:100px;font-weight:300}@media (max-width:991px){.error-page>.headline{float:none;text-align:center}} .error-page>.error-content{margin-left:190px;display:block}@media (max-width:991px){.error-page>.error-content{margin-left:0}} .error-page>.error-content>h3{font-weight:300;font-size:25px}@media (max-width:991px){.error-page>.error-content>h3{text-align:center}} .invoice{position:relative;background:#fff;border:1px solid #f4f4f4;padding:20px;margin:10px 25px} .invoice-title{margin-top:0} .profile-user-img{margin:0 auto;width:100px;padding:3px;border:3px solid #d2d6de} .profile-username{font-size:21px;margin-top:5px} .post{border-bottom:1px solid #d2d6de;margin-bottom:15px;padding-bottom:15px;color:#666} .post:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0} .post .user-block{margin-bottom:15px} .btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)} .btn-social.btn-lg{padding-left:61px} .btn-social.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em} .btn-social.btn-sm{padding-left:38px} .btn-social.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em} .btn-social.btn-xs{padding-left:30px} .btn-social.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em} .btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0} .btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)} .btn-social-icon.btn-lg{padding-left:61px} .btn-social-icon.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em} .btn-social-icon.btn-sm{padding-left:38px} .btn-social-icon.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em} .btn-social-icon.btn-xs{padding-left:30px} .btn-social-icon.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em} .btn-social-icon>:first-child{border:none;text-align:center;width:100%} .btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0} .btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0} .btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0} .btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)} .btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)} .btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)} .btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)} .btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none} .btn-adn .badge{color:#d87a68;background-color:#fff} .btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)} .btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)} .btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)} .btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)} .btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none} .btn-bitbucket .badge{color:#205081;background-color:#fff} .btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)} .btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)} .btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)} .btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)} .btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none} .btn-dropbox .badge{color:#1087dd;background-color:#fff} .btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)} .btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)} .btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)} .btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)} .btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none} .btn-facebook .badge{color:#3b5998;background-color:#fff} .btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)} .btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)} .btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)} .btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)} .btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none} .btn-flickr .badge{color:#ff0084;background-color:#fff} .btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)} .btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)} .btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)} .btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)} .btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none} .btn-foursquare .badge{color:#f94877;background-color:#fff} .btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)} .btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)} .btn-github:hover{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)} .btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)} .btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none} .btn-github .badge{color:#444;background-color:#fff} .btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)} .btn-google:focus,.btn-google.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)} .btn-google:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)} .btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)} .btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{background-image:none} .btn-google .badge{color:#dd4b39;background-color:#fff} .btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)} .btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)} .btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)} .btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)} .btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none} .btn-instagram .badge{color:#3f729b;background-color:#fff} .btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)} .btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)} .btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)} .btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)} .btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none} .btn-linkedin .badge{color:#007bb6;background-color:#fff} .btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)} .btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)} .btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)} .btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)} .btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none} .btn-microsoft .badge{color:#2672ec;background-color:#fff} .btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)} .btn-openid:focus,.btn-openid.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)} .btn-openid:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)} .btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)} .btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none} .btn-openid .badge{color:#f7931e;background-color:#fff} .btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)} .btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)} .btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)} .btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)} .btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{background-image:none} .btn-pinterest .badge{color:#cb2027;background-color:#fff} .btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)} .btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)} .btn-reddit:hover{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)} .btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)} .btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none} .btn-reddit .badge{color:#eff7ff;background-color:#000} .btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)} .btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)} .btn-soundcloud:hover{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)} .btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)} .btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none} .btn-soundcloud .badge{color:#f50;background-color:#fff} .btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)} .btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)} .btn-tumblr:hover{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)} .btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)} .btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none} .btn-tumblr .badge{color:#2c4762;background-color:#fff} .btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)} .btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)} .btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)} .btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)} .btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none} .btn-twitter .badge{color:#55acee;background-color:#fff} .btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)} .btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)} .btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)} .btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)} .btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none} .btn-vimeo .badge{color:#1ab7ea;background-color:#fff} .btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)} .btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)} .btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)} .btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)} .btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none} .btn-vk .badge{color:#587ea3;background-color:#fff} .btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)} .btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)} .btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)} .btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)} .btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none} .btn-yahoo .badge{color:#720e9e;background-color:#fff} .fc-button{background:#f4f4f4;background-image:none;color:#444;border-color:#ddd;border-bottom-color:#ddd} .fc-button:hover,.fc-button:active,.fc-button.hover{background-color:#e9e9e9} .fc-header-title h2{font-size:15px;line-height:1.6em;color:#666;margin-left:10px} .fc-header-right{padding-right:10px} .fc-header-left{padding-left:10px} .fc-widget-header{background:#fafafa} .fc-grid{width:100%;border:0} .fc-widget-header:first-of-type,.fc-widget-content:first-of-type{border-left:0;border-right:0} .fc-widget-header:last-of-type,.fc-widget-content:last-of-type{border-right:0} .fc-toolbar{padding:10px;margin:0} .fc-day-number{font-size:20px;font-weight:300;padding-right:10px} .fc-color-picker{list-style:none;margin:0;padding:0} .fc-color-picker>li{float:left;font-size:30px;margin-right:5px;line-height:30px} .fc-color-picker>li .fa{-webkit-transition:-webkit-transform linear .3s;-moz-transition:-moz-transform linear .3s;-o-transition:-o-transform linear .3s;transition:transform linear .3s} .fc-color-picker>li .fa:hover{-webkit-transform:rotate(30deg);-ms-transform:rotate(30deg);-o-transform:rotate(30deg);transform:rotate(30deg)} #add-new-event{-webkit-transition:all linear .3s;-o-transition:all linear .3s;transition:all linear .3s} .external-event{padding:5px 10px;font-weight:bold;margin-bottom:4px;box-shadow:0 1px 1px rgba(0,0,0,0.1);text-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;cursor:move} .external-event:hover{box-shadow:inset 0 0 90px rgba(0,0,0,0.2)} .select2-container--default.select2-container--focus,.select2-selection.select2-container--focus,.select2-container--default:focus,.select2-selection:focus,.select2-container--default:active,.select2-selection:active{outline:none} .select2-container--default .select2-selection--single,.select2-selection .select2-selection--single{border:1px solid #d2d6de;border-radius:0;padding:6px 12px;height:34px} .select2-container--default.select2-container--open{border-color:#3c8dbc} .select2-dropdown{border:1px solid #d2d6de;border-radius:0} .select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#3c8dbc;color:white} .select2-results__option{padding:6px 12px;user-select:none;-webkit-user-select:none} .select2-container .select2-selection--single .select2-selection__rendered{padding-left:0;padding-right:0;height:auto;margin-top:-4px} .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px} .select2-container--default .select2-selection--single .select2-selection__arrow{height:28px;right:3px} .select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0} .select2-dropdown .select2-search__field,.select2-search--inline .select2-search__field{border:1px solid #d2d6de} .select2-dropdown .select2-search__field:focus,.select2-search--inline .select2-search__field:focus{outline:none;border:1px solid #3c8dbc} .select2-container--default .select2-results__option[aria-disabled=true]{color:#999} .select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd} .select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#444} .select2-container--default .select2-selection--multiple{border:1px solid #d2d6de;border-radius:0} .select2-container--default .select2-selection--multiple:focus{border-color:#3c8dbc} .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#d2d6de} .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;padding:1px 10px;color:#fff} .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{margin-right:5px;color:rgba(255,255,255,0.7)} .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff} .select2-container .select2-selection--single .select2-selection__rendered{padding-right:10px} .pad{padding:10px} .margin{margin:10px} .margin-bottom{margin-bottom:20px} .margin-bottom-none{margin-bottom:0} .margin-r-5{margin-right:5px} .inline{display:inline} .description-block{display:block;margin:10px 0;text-align:center} .description-block.margin-bottom{margin-bottom:25px} .description-block>.description-header{margin:0;padding:0;font-weight:600;font-size:16px} .description-block>.description-text{text-transform:uppercase} .bg-red,.bg-yellow,.bg-aqua,.bg-blue,.bg-light-blue,.bg-green,.bg-navy,.bg-teal,.bg-olive,.bg-lime,.bg-orange,.bg-fuchsia,.bg-purple,.bg-maroon,.bg-black,.bg-red-active,.bg-yellow-active,.bg-aqua-active,.bg-blue-active,.bg-light-blue-active,.bg-green-active,.bg-navy-active,.bg-teal-active,.bg-olive-active,.bg-lime-active,.bg-orange-active,.bg-fuchsia-active,.bg-purple-active,.bg-maroon-active,.bg-black-active,.callout.callout-danger,.callout.callout-warning,.callout.callout-info,.callout.callout-success,.alert-success,.alert-danger,.alert-error,.alert-warning,.alert-info,.label-danger,.label-info,.label-warning,.label-primary,.label-success,.modal-primary .modal-body,.modal-primary .modal-header,.modal-primary .modal-footer,.modal-warning .modal-body,.modal-warning .modal-header,.modal-warning .modal-footer,.modal-info .modal-body,.modal-info .modal-header,.modal-info .modal-footer,.modal-success .modal-body,.modal-success .modal-header,.modal-success .modal-footer,.modal-danger .modal-body,.modal-danger .modal-header,.modal-danger .modal-footer{color:#fff !important} .bg-gray{color:#000;background-color:#d2d6de !important} .bg-gray-light{background-color:#f7f7f7} .bg-black{background-color:#111 !important} .bg-red,.callout.callout-danger,.alert-danger,.alert-error,.label-danger,.modal-danger .modal-body{background-color:#dd4b39 !important} .bg-yellow,.callout.callout-warning,.alert-warning,.label-warning,.modal-warning .modal-body{background-color:#f39c12 !important} .bg-aqua,.callout.callout-info,.alert-info,.label-info,.modal-info .modal-body{background-color:#00c0ef !important} .bg-blue{background-color:#0073b7 !important} .bg-light-blue,.label-primary,.modal-primary .modal-body{background-color:#3c8dbc !important} .bg-green,.callout.callout-success,.alert-success,.label-success,.modal-success .modal-body{background-color:#00a65a !important} .bg-navy{background-color:#001f3f !important} .bg-teal{background-color:#39cccc !important} .bg-olive{background-color:#3d9970 !important} .bg-lime{background-color:#01ff70 !important} .bg-orange{background-color:#ff851b !important} .bg-fuchsia{background-color:#f012be !important} .bg-purple{background-color:#605ca8 !important} .bg-maroon{background-color:#d81b60 !important} .bg-gray-active{color:#000;background-color:#b5bbc8 !important} .bg-black-active{background-color:#000 !important} .bg-red-active,.modal-danger .modal-header,.modal-danger .modal-footer{background-color:#d33724 !important} .bg-yellow-active,.modal-warning .modal-header,.modal-warning .modal-footer{background-color:#db8b0b !important} .bg-aqua-active,.modal-info .modal-header,.modal-info .modal-footer{background-color:#00a7d0 !important} .bg-blue-active{background-color:#005384 !important} .bg-light-blue-active,.modal-primary .modal-header,.modal-primary .modal-footer{background-color:#357ca5 !important} .bg-green-active,.modal-success .modal-header,.modal-success .modal-footer{background-color:#008d4c !important} .bg-navy-active{background-color:#001a35 !important} .bg-teal-active{background-color:#30bbbb !important} .bg-olive-active{background-color:#368763 !important} .bg-lime-active{background-color:#00e765 !important} .bg-orange-active{background-color:#ff7701 !important} .bg-fuchsia-active{background-color:#db0ead !important} .bg-purple-active{background-color:#555299 !important} .bg-maroon-active{background-color:#ca195a !important} [class^="bg-"].disabled{opacity:.65;filter:alpha(opacity=65)} .text-red{color:#dd4b39 !important} .text-yellow{color:#f39c12 !important} .text-aqua{color:#00c0ef !important} .text-blue{color:#0073b7 !important} .text-black{color:#111 !important} .text-light-blue{color:#3c8dbc !important} .text-green{color:#00a65a !important} .text-gray{color:#d2d6de !important} .text-navy{color:#001f3f !important} .text-teal{color:#39cccc !important} .text-olive{color:#3d9970 !important} .text-lime{color:#01ff70 !important} .text-orange{color:#ff851b !important} .text-fuchsia{color:#f012be !important} .text-purple{color:#605ca8 !important} .text-maroon{color:#d81b60 !important} .link-muted{color:#7a869d} .link-muted:hover,.link-muted:focus{color:#606c84} .link-black{color:#666} .link-black:hover,.link-black:focus{color:#999} .hide{display:none !important} .no-border{border:0 !important} .no-padding{padding:0 !important} .no-margin{margin:0 !important} .no-shadow{box-shadow:none !important} .list-unstyled,.chart-legend,.contacts-list,.users-list,.mailbox-attachments{list-style:none;margin:0;padding:0} .list-group-unbordered>.list-group-item{border-left:0;border-right:0;border-radius:0;padding-left:0;padding-right:0} .flat{border-radius:0 !important} .text-bold,.text-bold.table td,.text-bold.table th{font-weight:700} .text-sm{font-size:12px} .jqstooltip{padding:5px !important;width:auto !important;height:auto !important} .bg-teal-gradient{background:#39cccc !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #39cccc), color-stop(1, #7adddd)) !important;background:-ms-linear-gradient(bottom, #39cccc, #7adddd) !important;background:-moz-linear-gradient(center bottom, #39cccc 0, #7adddd 100%) !important;background:-o-linear-gradient(#7adddd, #39cccc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important;color:#fff} .bg-light-blue-gradient{background:#3c8dbc !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #3c8dbc), color-stop(1, #67a8ce)) !important;background:-ms-linear-gradient(bottom, #3c8dbc, #67a8ce) !important;background:-moz-linear-gradient(center bottom, #3c8dbc 0, #67a8ce 100%) !important;background:-o-linear-gradient(#67a8ce, #3c8dbc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important;color:#fff} .bg-blue-gradient{background:#0073b7 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #0073b7), color-stop(1, #0089db)) !important;background:-ms-linear-gradient(bottom, #0073b7, #0089db) !important;background:-moz-linear-gradient(center bottom, #0073b7 0, #0089db 100%) !important;background:-o-linear-gradient(#0089db, #0073b7) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important;color:#fff} .bg-aqua-gradient{background:#00c0ef !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #00c0ef), color-stop(1, #14d1ff)) !important;background:-ms-linear-gradient(bottom, #00c0ef, #14d1ff) !important;background:-moz-linear-gradient(center bottom, #00c0ef 0, #14d1ff 100%) !important;background:-o-linear-gradient(#14d1ff, #00c0ef) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important;color:#fff} .bg-yellow-gradient{background:#f39c12 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #f39c12), color-stop(1, #f7bc60)) !important;background:-ms-linear-gradient(bottom, #f39c12, #f7bc60) !important;background:-moz-linear-gradient(center bottom, #f39c12 0, #f7bc60 100%) !important;background:-o-linear-gradient(#f7bc60, #f39c12) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important;color:#fff} .bg-purple-gradient{background:#605ca8 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #605ca8), color-stop(1, #9491c4)) !important;background:-ms-linear-gradient(bottom, #605ca8, #9491c4) !important;background:-moz-linear-gradient(center bottom, #605ca8 0, #9491c4 100%) !important;background:-o-linear-gradient(#9491c4, #605ca8) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important;color:#fff} .bg-green-gradient{background:#00a65a !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #00a65a), color-stop(1, #00ca6d)) !important;background:-ms-linear-gradient(bottom, #00a65a, #00ca6d) !important;background:-moz-linear-gradient(center bottom, #00a65a 0, #00ca6d 100%) !important;background:-o-linear-gradient(#00ca6d, #00a65a) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important;color:#fff} .bg-red-gradient{background:#dd4b39 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #dd4b39), color-stop(1, #e47365)) !important;background:-ms-linear-gradient(bottom, #dd4b39, #e47365) !important;background:-moz-linear-gradient(center bottom, #dd4b39 0, #e47365 100%) !important;background:-o-linear-gradient(#e47365, #dd4b39) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important;color:#fff} .bg-black-gradient{background:#111 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #111), color-stop(1, #2b2b2b)) !important;background:-ms-linear-gradient(bottom, #111, #2b2b2b) !important;background:-moz-linear-gradient(center bottom, #111 0, #2b2b2b 100%) !important;background:-o-linear-gradient(#2b2b2b, #111) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important;color:#fff} .bg-maroon-gradient{background:#d81b60 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #d81b60), color-stop(1, #e73f7c)) !important;background:-ms-linear-gradient(bottom, #d81b60, #e73f7c) !important;background:-moz-linear-gradient(center bottom, #d81b60 0, #e73f7c 100%) !important;background:-o-linear-gradient(#e73f7c, #d81b60) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important;color:#fff} .description-block .description-icon{font-size:16px} .no-pad-top{padding-top:0} .position-static{position:static !important} .list-header{font-size:15px;padding:10px 4px;font-weight:bold;color:#666} .list-seperator{height:1px;background:#f4f4f4;margin:15px 0 9px 0} .list-link>a{padding:4px;color:#777} .list-link>a:hover{color:#222} .font-light{font-weight:300} .user-block:before,.user-block:after{content:" ";display:table} .user-block:after{clear:both} .user-block img{width:40px;height:40px;float:left} .user-block .username,.user-block .description,.user-block .comment{display:block;margin-left:50px} .user-block .username{font-size:16px;font-weight:600} .user-block .description{color:#999;font-size:13px} .user-block.user-block-sm .username,.user-block.user-block-sm .description,.user-block.user-block-sm .comment{margin-left:40px} .user-block.user-block-sm .username{font-size:14px} .img-sm,.img-md,.img-lg,.box-comments .box-comment img,.user-block.user-block-sm img{float:left} .img-sm,.box-comments .box-comment img,.user-block.user-block-sm img{width:30px !important;height:30px !important} .img-sm+.img-push{margin-left:40px} .img-md{width:60px;height:60px} .img-md+.img-push{margin-left:70px} .img-lg{width:100px;height:100px} .img-lg+.img-push{margin-left:110px} .img-bordered{border:3px solid #d2d6de;padding:3px} .img-bordered-sm{border:2px solid #d2d6de;padding:2px} .attachment-block{border:1px solid #f4f4f4;padding:5px;margin-bottom:10px;background:#f7f7f7} .attachment-block .attachment-img{max-width:100px;max-height:100px;height:auto;float:left} .attachment-block .attachment-pushed{margin-left:110px} .attachment-block .attachment-heading{margin:0} .attachment-block .attachment-text{color:#555} .connectedSortable{min-height:100px} .ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px} .sort-highlight{background:#f4f4f4;border:1px dashed #ddd;margin-bottom:10px} .full-opacity-hover{opacity:.65;filter:alpha(opacity=65)} .full-opacity-hover:hover{opacity:1;filter:alpha(opacity=100)} .chart{position:relative;overflow:hidden;width:100%} .chart svg,.chart canvas{width:100% !important}@media print{.no-print,.main-sidebar,.left-side,.main-header,.content-header{display:none !important}.content-wrapper,.right-side,.main-footer{margin-left:0 !important;min-height:0 !important;-webkit-transform:translate(0, 0) !important;-ms-transform:translate(0, 0) !important;-o-transform:translate(0, 0) !important;transform:translate(0, 0) !important}.fixed .content-wrapper,.fixed .right-side{padding-top:0 !important}.invoice{width:100%;border:0;margin:0;padding:0}.invoice-col{float:left;width:33.3333333%}.table-responsive{overflow:auto}.table-responsive>.table tr th,.table-responsive>.table tr td{white-space:normal !important}} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/dist/css/skins/_all-skins.min.css b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/_all-skins.min.css new file mode 100644 index 0000000..1710db5 --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/_all-skins.min.css @@ -0,0 +1 @@ +.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .treeview-menu>li>a{color:#8aa4af}.skin-blue .treeview-menu>li.active>a,.skin-blue .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header .navbar{background-color:#3c8dbc}.skin-blue-light .main-header .navbar .nav>li>a{color:#fff}.skin-blue-light .main-header .navbar .nav>li>a:hover,.skin-blue-light .main-header .navbar .nav>li>a:active,.skin-blue-light .main-header .navbar .nav>li>a:focus,.skin-blue-light .main-header .navbar .nav .open>a,.skin-blue-light .main-header .navbar .nav .open>a:hover,.skin-blue-light .main-header .navbar .nav .open>a:focus,.skin-blue-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue-light .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue-light .main-header .logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue-light .main-header .logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header li.user-header{background-color:#3c8dbc}.skin-blue-light .content-header{background:transparent}.skin-blue-light .wrapper,.skin-blue-light .main-sidebar,.skin-blue-light .left-side{background-color:#f9fafc}.skin-blue-light .content-wrapper,.skin-blue-light .main-footer{border-left:1px solid #d2d6de}.skin-blue-light .user-panel>.info,.skin-blue-light .user-panel>.info>a{color:#444}.skin-blue-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-blue-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-blue-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-blue-light .sidebar-menu>li:hover>a,.skin-blue-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-blue-light .sidebar-menu>li.active{border-left-color:#3c8dbc}.skin-blue-light .sidebar-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-blue-light .sidebar a{color:#444}.skin-blue-light .sidebar a:hover{text-decoration:none}.skin-blue-light .treeview-menu>li>a{color:#777}.skin-blue-light .treeview-menu>li.active>a,.skin-blue-light .treeview-menu>li>a:hover{color:#000}.skin-blue-light .treeview-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-blue-light .sidebar-form input[type="text"],.skin-blue-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-blue-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue-light .sidebar-form input[type="text"]:focus,.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-blue-light .main-footer{border-top-color:#d2d6de}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-black .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black .main-header .navbar-toggle{color:#333}.skin-black .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black .main-header>.navbar{background-color:#fff}.skin-black .main-header>.navbar .nav>li>a{color:#333}.skin-black .main-header>.navbar .nav>li>a:hover,.skin-black .main-header>.navbar .nav>li>a:active,.skin-black .main-header>.navbar .nav>li>a:focus,.skin-black .main-header>.navbar .nav .open>a,.skin-black .main-header>.navbar .nav .open>a:hover,.skin-black .main-header>.navbar .nav .open>a:focus,.skin-black .main-header>.navbar .nav>.active>a{background:#fff;color:#999}.skin-black .main-header>.navbar .sidebar-toggle{color:#333}.skin-black .main-header>.navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black .main-header>.navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black .main-header>.navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black .main-header>.navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black .main-header>.navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black .main-header li.user-header{background-color:#222}.skin-black .content-header{background:transparent;box-shadow:none}.skin-black .wrapper,.skin-black .main-sidebar,.skin-black .left-side{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li:hover>a,.skin-black .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .treeview-menu>li>a{color:#8aa4af}.skin-black .treeview-menu>li.active>a,.skin-black .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-black .sidebar-form input[type="text"],.skin-black .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-black .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black .sidebar-form input[type="text"]:focus,.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-black-light .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black-light .main-header .navbar-toggle{color:#333}.skin-black-light .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black-light .main-header>.navbar{background-color:#fff}.skin-black-light .main-header>.navbar .nav>li>a{color:#333}.skin-black-light .main-header>.navbar .nav>li>a:hover,.skin-black-light .main-header>.navbar .nav>li>a:active,.skin-black-light .main-header>.navbar .nav>li>a:focus,.skin-black-light .main-header>.navbar .nav .open>a,.skin-black-light .main-header>.navbar .nav .open>a:hover,.skin-black-light .main-header>.navbar .nav .open>a:focus,.skin-black-light .main-header>.navbar .nav>.active>a{background:#fff;color:#999}.skin-black-light .main-header>.navbar .sidebar-toggle{color:#333}.skin-black-light .main-header>.navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black-light .main-header>.navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black-light .main-header>.navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black-light .main-header>.navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black-light .main-header>.navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black-light .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black-light .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black-light .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black-light .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black-light .main-header li.user-header{background-color:#222}.skin-black-light .content-header{background:transparent;box-shadow:none}.skin-black-light .wrapper,.skin-black-light .main-sidebar,.skin-black-light .left-side{background-color:#f9fafc}.skin-black-light .content-wrapper,.skin-black-light .main-footer{border-left:1px solid #d2d6de}.skin-black-light .user-panel>.info,.skin-black-light .user-panel>.info>a{color:#444}.skin-black-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-black-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-black-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-black-light .sidebar-menu>li:hover>a,.skin-black-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-black-light .sidebar-menu>li.active{border-left-color:#fff}.skin-black-light .sidebar-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-black-light .sidebar a{color:#444}.skin-black-light .sidebar a:hover{text-decoration:none}.skin-black-light .treeview-menu>li>a{color:#777}.skin-black-light .treeview-menu>li.active>a,.skin-black-light .treeview-menu>li>a:hover{color:#000}.skin-black-light .treeview-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-black-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black-light .sidebar-form input[type="text"]:focus,.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header .logo{background-color:#008d4c;color:#fff;border-bottom:0 solid transparent}.skin-green .main-header .logo:hover{background-color:#008749}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .wrapper,.skin-green .main-sidebar,.skin-green .left-side{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li:hover>a,.skin-green .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#00a65a}.skin-green .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .treeview-menu>li>a{color:#8aa4af}.skin-green .treeview-menu>li.active>a,.skin-green .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-green .sidebar-form input[type="text"],.skin-green .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-green .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green .sidebar-form input[type="text"]:focus,.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-green-light .main-header .navbar{background-color:#00a65a}.skin-green-light .main-header .navbar .nav>li>a{color:#fff}.skin-green-light .main-header .navbar .nav>li>a:hover,.skin-green-light .main-header .navbar .nav>li>a:active,.skin-green-light .main-header .navbar .nav>li>a:focus,.skin-green-light .main-header .navbar .nav .open>a,.skin-green-light .main-header .navbar .nav .open>a:hover,.skin-green-light .main-header .navbar .nav .open>a:focus,.skin-green-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green-light .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green-light .main-header .logo{background-color:#00a65a;color:#fff;border-bottom:0 solid transparent}.skin-green-light .main-header .logo:hover{background-color:#00a157}.skin-green-light .main-header li.user-header{background-color:#00a65a}.skin-green-light .content-header{background:transparent}.skin-green-light .wrapper,.skin-green-light .main-sidebar,.skin-green-light .left-side{background-color:#f9fafc}.skin-green-light .content-wrapper,.skin-green-light .main-footer{border-left:1px solid #d2d6de}.skin-green-light .user-panel>.info,.skin-green-light .user-panel>.info>a{color:#444}.skin-green-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-green-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-green-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-green-light .sidebar-menu>li:hover>a,.skin-green-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-green-light .sidebar-menu>li.active{border-left-color:#00a65a}.skin-green-light .sidebar-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-green-light .sidebar a{color:#444}.skin-green-light .sidebar a:hover{text-decoration:none}.skin-green-light .treeview-menu>li>a{color:#777}.skin-green-light .treeview-menu>li.active>a,.skin-green-light .treeview-menu>li>a:hover{color:#000}.skin-green-light .treeview-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-green-light .sidebar-form input[type="text"],.skin-green-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-green-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green-light .sidebar-form input[type="text"]:focus,.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header .logo{background-color:#d73925;color:#fff;border-bottom:0 solid transparent}.skin-red .main-header .logo:hover{background-color:#d33724}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .wrapper,.skin-red .main-sidebar,.skin-red .left-side{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li:hover>a,.skin-red .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#dd4b39}.skin-red .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .treeview-menu>li>a{color:#8aa4af}.skin-red .treeview-menu>li.active>a,.skin-red .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-red .sidebar-form input[type="text"],.skin-red .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-red .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red .sidebar-form input[type="text"]:focus,.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-red-light .main-header .navbar{background-color:#dd4b39}.skin-red-light .main-header .navbar .nav>li>a{color:#fff}.skin-red-light .main-header .navbar .nav>li>a:hover,.skin-red-light .main-header .navbar .nav>li>a:active,.skin-red-light .main-header .navbar .nav>li>a:focus,.skin-red-light .main-header .navbar .nav .open>a,.skin-red-light .main-header .navbar .nav .open>a:hover,.skin-red-light .main-header .navbar .nav .open>a:focus,.skin-red-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red-light .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red-light .main-header .logo{background-color:#dd4b39;color:#fff;border-bottom:0 solid transparent}.skin-red-light .main-header .logo:hover{background-color:#dc4735}.skin-red-light .main-header li.user-header{background-color:#dd4b39}.skin-red-light .content-header{background:transparent}.skin-red-light .wrapper,.skin-red-light .main-sidebar,.skin-red-light .left-side{background-color:#f9fafc}.skin-red-light .content-wrapper,.skin-red-light .main-footer{border-left:1px solid #d2d6de}.skin-red-light .user-panel>.info,.skin-red-light .user-panel>.info>a{color:#444}.skin-red-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-red-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-red-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-red-light .sidebar-menu>li:hover>a,.skin-red-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-red-light .sidebar-menu>li.active{border-left-color:#dd4b39}.skin-red-light .sidebar-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-red-light .sidebar a{color:#444}.skin-red-light .sidebar a:hover{text-decoration:none}.skin-red-light .treeview-menu>li>a{color:#777}.skin-red-light .treeview-menu>li.active>a,.skin-red-light .treeview-menu>li>a:hover{color:#000}.skin-red-light .treeview-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-red-light .sidebar-form input[type="text"],.skin-red-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-red-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red-light .sidebar-form input[type="text"]:focus,.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-yellow .main-header .navbar{background-color:#f39c12}.skin-yellow .main-header .navbar .nav>li>a{color:#fff}.skin-yellow .main-header .navbar .nav>li>a:hover,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow .main-header .logo{background-color:#e08e0b;color:#fff;border-bottom:0 solid transparent}.skin-yellow .main-header .logo:hover{background-color:#db8b0b}.skin-yellow .main-header li.user-header{background-color:#f39c12}.skin-yellow .content-header{background:transparent}.skin-yellow .wrapper,.skin-yellow .main-sidebar,.skin-yellow .left-side{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li:hover>a,.skin-yellow .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#f39c12}.skin-yellow .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .treeview-menu>li>a{color:#8aa4af}.skin-yellow .treeview-menu>li.active>a,.skin-yellow .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-yellow .sidebar-form input[type="text"],.skin-yellow .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-yellow .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow .sidebar-form input[type="text"]:focus,.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-yellow-light .main-header .navbar{background-color:#f39c12}.skin-yellow-light .main-header .navbar .nav>li>a{color:#fff}.skin-yellow-light .main-header .navbar .nav>li>a:hover,.skin-yellow-light .main-header .navbar .nav>li>a:active,.skin-yellow-light .main-header .navbar .nav>li>a:focus,.skin-yellow-light .main-header .navbar .nav .open>a,.skin-yellow-light .main-header .navbar .nav .open>a:hover,.skin-yellow-light .main-header .navbar .nav .open>a:focus,.skin-yellow-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow-light .main-header .logo{background-color:#f39c12;color:#fff;border-bottom:0 solid transparent}.skin-yellow-light .main-header .logo:hover{background-color:#f39a0d}.skin-yellow-light .main-header li.user-header{background-color:#f39c12}.skin-yellow-light .content-header{background:transparent}.skin-yellow-light .wrapper,.skin-yellow-light .main-sidebar,.skin-yellow-light .left-side{background-color:#f9fafc}.skin-yellow-light .content-wrapper,.skin-yellow-light .main-footer{border-left:1px solid #d2d6de}.skin-yellow-light .user-panel>.info,.skin-yellow-light .user-panel>.info>a{color:#444}.skin-yellow-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-yellow-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-yellow-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-yellow-light .sidebar-menu>li:hover>a,.skin-yellow-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-yellow-light .sidebar-menu>li.active{border-left-color:#f39c12}.skin-yellow-light .sidebar-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-yellow-light .sidebar a{color:#444}.skin-yellow-light .sidebar a:hover{text-decoration:none}.skin-yellow-light .treeview-menu>li>a{color:#777}.skin-yellow-light .treeview-menu>li.active>a,.skin-yellow-light .treeview-menu>li>a:hover{color:#000}.skin-yellow-light .treeview-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-yellow-light .sidebar-form input[type="text"],.skin-yellow-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-yellow-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow-light .sidebar-form input[type="text"]:focus,.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header .logo{background-color:#555299;color:#fff;border-bottom:0 solid transparent}.skin-purple .main-header .logo:hover{background-color:#545096}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .wrapper,.skin-purple .main-sidebar,.skin-purple .left-side{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li:hover>a,.skin-purple .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#605ca8}.skin-purple .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .treeview-menu>li>a{color:#8aa4af}.skin-purple .treeview-menu>li.active>a,.skin-purple .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-purple .sidebar-form input[type="text"],.skin-purple .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-purple .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple .sidebar-form input[type="text"]:focus,.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-purple-light .main-header .navbar{background-color:#605ca8}.skin-purple-light .main-header .navbar .nav>li>a{color:#fff}.skin-purple-light .main-header .navbar .nav>li>a:hover,.skin-purple-light .main-header .navbar .nav>li>a:active,.skin-purple-light .main-header .navbar .nav>li>a:focus,.skin-purple-light .main-header .navbar .nav .open>a,.skin-purple-light .main-header .navbar .nav .open>a:hover,.skin-purple-light .main-header .navbar .nav .open>a:focus,.skin-purple-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple-light .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple-light .main-header .logo{background-color:#605ca8;color:#fff;border-bottom:0 solid transparent}.skin-purple-light .main-header .logo:hover{background-color:#5d59a6}.skin-purple-light .main-header li.user-header{background-color:#605ca8}.skin-purple-light .content-header{background:transparent}.skin-purple-light .wrapper,.skin-purple-light .main-sidebar,.skin-purple-light .left-side{background-color:#f9fafc}.skin-purple-light .content-wrapper,.skin-purple-light .main-footer{border-left:1px solid #d2d6de}.skin-purple-light .user-panel>.info,.skin-purple-light .user-panel>.info>a{color:#444}.skin-purple-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-purple-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-purple-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-purple-light .sidebar-menu>li:hover>a,.skin-purple-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-purple-light .sidebar-menu>li.active{border-left-color:#605ca8}.skin-purple-light .sidebar-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-purple-light .sidebar a{color:#444}.skin-purple-light .sidebar a:hover{text-decoration:none}.skin-purple-light .treeview-menu>li>a{color:#777}.skin-purple-light .treeview-menu>li.active>a,.skin-purple-light .treeview-menu>li>a:hover{color:#000}.skin-purple-light .treeview-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-purple-light .sidebar-form input[type="text"],.skin-purple-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-purple-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple-light .sidebar-form input[type="text"]:focus,.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-black-light.min.css b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-black-light.min.css new file mode 100644 index 0000000..c631ec5 --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-black-light.min.css @@ -0,0 +1 @@ +.skin-black-light .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black-light .main-header .navbar-toggle{color:#333}.skin-black-light .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black-light .main-header>.navbar{background-color:#fff}.skin-black-light .main-header>.navbar .nav>li>a{color:#333}.skin-black-light .main-header>.navbar .nav>li>a:hover,.skin-black-light .main-header>.navbar .nav>li>a:active,.skin-black-light .main-header>.navbar .nav>li>a:focus,.skin-black-light .main-header>.navbar .nav .open>a,.skin-black-light .main-header>.navbar .nav .open>a:hover,.skin-black-light .main-header>.navbar .nav .open>a:focus,.skin-black-light .main-header>.navbar .nav>.active>a{background:#fff;color:#999}.skin-black-light .main-header>.navbar .sidebar-toggle{color:#333}.skin-black-light .main-header>.navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black-light .main-header>.navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black-light .main-header>.navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black-light .main-header>.navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black-light .main-header>.navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black-light .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black-light .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black-light .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black-light .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black-light .main-header li.user-header{background-color:#222}.skin-black-light .content-header{background:transparent;box-shadow:none}.skin-black-light .wrapper,.skin-black-light .main-sidebar,.skin-black-light .left-side{background-color:#f9fafc}.skin-black-light .content-wrapper,.skin-black-light .main-footer{border-left:1px solid #d2d6de}.skin-black-light .user-panel>.info,.skin-black-light .user-panel>.info>a{color:#444}.skin-black-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-black-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-black-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-black-light .sidebar-menu>li:hover>a,.skin-black-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-black-light .sidebar-menu>li.active{border-left-color:#fff}.skin-black-light .sidebar-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-black-light .sidebar a{color:#444}.skin-black-light .sidebar a:hover{text-decoration:none}.skin-black-light .treeview-menu>li>a{color:#777}.skin-black-light .treeview-menu>li.active>a,.skin-black-light .treeview-menu>li>a:hover{color:#000}.skin-black-light .treeview-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-black-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black-light .sidebar-form input[type="text"]:focus,.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-black.min.css b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-black.min.css new file mode 100644 index 0000000..a7d1888 --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-black.min.css @@ -0,0 +1 @@ +.skin-black .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black .main-header .navbar-toggle{color:#333}.skin-black .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black .main-header>.navbar{background-color:#fff}.skin-black .main-header>.navbar .nav>li>a{color:#333}.skin-black .main-header>.navbar .nav>li>a:hover,.skin-black .main-header>.navbar .nav>li>a:active,.skin-black .main-header>.navbar .nav>li>a:focus,.skin-black .main-header>.navbar .nav .open>a,.skin-black .main-header>.navbar .nav .open>a:hover,.skin-black .main-header>.navbar .nav .open>a:focus,.skin-black .main-header>.navbar .nav>.active>a{background:#fff;color:#999}.skin-black .main-header>.navbar .sidebar-toggle{color:#333}.skin-black .main-header>.navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black .main-header>.navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black .main-header>.navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black .main-header>.navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black .main-header>.navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black .main-header li.user-header{background-color:#222}.skin-black .content-header{background:transparent;box-shadow:none}.skin-black .wrapper,.skin-black .main-sidebar,.skin-black .left-side{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li:hover>a,.skin-black .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .treeview-menu>li>a{color:#8aa4af}.skin-black .treeview-menu>li.active>a,.skin-black .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-black .sidebar-form input[type="text"],.skin-black .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-black .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black .sidebar-form input[type="text"]:focus,.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-blue-light.min.css b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-blue-light.min.css new file mode 100644 index 0000000..4fab22a --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-blue-light.min.css @@ -0,0 +1 @@ +.skin-blue-light .main-header .navbar{background-color:#3c8dbc}.skin-blue-light .main-header .navbar .nav>li>a{color:#fff}.skin-blue-light .main-header .navbar .nav>li>a:hover,.skin-blue-light .main-header .navbar .nav>li>a:active,.skin-blue-light .main-header .navbar .nav>li>a:focus,.skin-blue-light .main-header .navbar .nav .open>a,.skin-blue-light .main-header .navbar .nav .open>a:hover,.skin-blue-light .main-header .navbar .nav .open>a:focus,.skin-blue-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue-light .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue-light .main-header .logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue-light .main-header .logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header li.user-header{background-color:#3c8dbc}.skin-blue-light .content-header{background:transparent}.skin-blue-light .wrapper,.skin-blue-light .main-sidebar,.skin-blue-light .left-side{background-color:#f9fafc}.skin-blue-light .content-wrapper,.skin-blue-light .main-footer{border-left:1px solid #d2d6de}.skin-blue-light .user-panel>.info,.skin-blue-light .user-panel>.info>a{color:#444}.skin-blue-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-blue-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-blue-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-blue-light .sidebar-menu>li:hover>a,.skin-blue-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-blue-light .sidebar-menu>li.active{border-left-color:#3c8dbc}.skin-blue-light .sidebar-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-blue-light .sidebar a{color:#444}.skin-blue-light .sidebar a:hover{text-decoration:none}.skin-blue-light .treeview-menu>li>a{color:#777}.skin-blue-light .treeview-menu>li.active>a,.skin-blue-light .treeview-menu>li>a:hover{color:#000}.skin-blue-light .treeview-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-blue-light .sidebar-form input[type="text"],.skin-blue-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-blue-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue-light .sidebar-form input[type="text"]:focus,.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-blue-light .main-footer{border-top-color:#d2d6de}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-blue.min.css b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-blue.min.css new file mode 100644 index 0000000..123c04f --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-blue.min.css @@ -0,0 +1 @@ +.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .treeview-menu>li>a{color:#8aa4af}.skin-blue .treeview-menu>li.active>a,.skin-blue .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-green-light.min.css b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-green-light.min.css new file mode 100644 index 0000000..43ceea4 --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-green-light.min.css @@ -0,0 +1 @@ +.skin-green-light .main-header .navbar{background-color:#00a65a}.skin-green-light .main-header .navbar .nav>li>a{color:#fff}.skin-green-light .main-header .navbar .nav>li>a:hover,.skin-green-light .main-header .navbar .nav>li>a:active,.skin-green-light .main-header .navbar .nav>li>a:focus,.skin-green-light .main-header .navbar .nav .open>a,.skin-green-light .main-header .navbar .nav .open>a:hover,.skin-green-light .main-header .navbar .nav .open>a:focus,.skin-green-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green-light .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green-light .main-header .logo{background-color:#00a65a;color:#fff;border-bottom:0 solid transparent}.skin-green-light .main-header .logo:hover{background-color:#00a157}.skin-green-light .main-header li.user-header{background-color:#00a65a}.skin-green-light .content-header{background:transparent}.skin-green-light .wrapper,.skin-green-light .main-sidebar,.skin-green-light .left-side{background-color:#f9fafc}.skin-green-light .content-wrapper,.skin-green-light .main-footer{border-left:1px solid #d2d6de}.skin-green-light .user-panel>.info,.skin-green-light .user-panel>.info>a{color:#444}.skin-green-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-green-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-green-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-green-light .sidebar-menu>li:hover>a,.skin-green-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-green-light .sidebar-menu>li.active{border-left-color:#00a65a}.skin-green-light .sidebar-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-green-light .sidebar a{color:#444}.skin-green-light .sidebar a:hover{text-decoration:none}.skin-green-light .treeview-menu>li>a{color:#777}.skin-green-light .treeview-menu>li.active>a,.skin-green-light .treeview-menu>li>a:hover{color:#000}.skin-green-light .treeview-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-green-light .sidebar-form input[type="text"],.skin-green-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-green-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green-light .sidebar-form input[type="text"]:focus,.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-green.min.css b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-green.min.css new file mode 100644 index 0000000..8f885ed --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-green.min.css @@ -0,0 +1 @@ +.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header .logo{background-color:#008d4c;color:#fff;border-bottom:0 solid transparent}.skin-green .main-header .logo:hover{background-color:#008749}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .wrapper,.skin-green .main-sidebar,.skin-green .left-side{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li:hover>a,.skin-green .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#00a65a}.skin-green .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .treeview-menu>li>a{color:#8aa4af}.skin-green .treeview-menu>li.active>a,.skin-green .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-green .sidebar-form input[type="text"],.skin-green .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-green .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green .sidebar-form input[type="text"]:focus,.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-purple-light.min.css b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-purple-light.min.css new file mode 100644 index 0000000..53333c4 --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-purple-light.min.css @@ -0,0 +1 @@ +.skin-purple-light .main-header .navbar{background-color:#605ca8}.skin-purple-light .main-header .navbar .nav>li>a{color:#fff}.skin-purple-light .main-header .navbar .nav>li>a:hover,.skin-purple-light .main-header .navbar .nav>li>a:active,.skin-purple-light .main-header .navbar .nav>li>a:focus,.skin-purple-light .main-header .navbar .nav .open>a,.skin-purple-light .main-header .navbar .nav .open>a:hover,.skin-purple-light .main-header .navbar .nav .open>a:focus,.skin-purple-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple-light .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple-light .main-header .logo{background-color:#605ca8;color:#fff;border-bottom:0 solid transparent}.skin-purple-light .main-header .logo:hover{background-color:#5d59a6}.skin-purple-light .main-header li.user-header{background-color:#605ca8}.skin-purple-light .content-header{background:transparent}.skin-purple-light .wrapper,.skin-purple-light .main-sidebar,.skin-purple-light .left-side{background-color:#f9fafc}.skin-purple-light .content-wrapper,.skin-purple-light .main-footer{border-left:1px solid #d2d6de}.skin-purple-light .user-panel>.info,.skin-purple-light .user-panel>.info>a{color:#444}.skin-purple-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-purple-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-purple-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-purple-light .sidebar-menu>li:hover>a,.skin-purple-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-purple-light .sidebar-menu>li.active{border-left-color:#605ca8}.skin-purple-light .sidebar-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-purple-light .sidebar a{color:#444}.skin-purple-light .sidebar a:hover{text-decoration:none}.skin-purple-light .treeview-menu>li>a{color:#777}.skin-purple-light .treeview-menu>li.active>a,.skin-purple-light .treeview-menu>li>a:hover{color:#000}.skin-purple-light .treeview-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-purple-light .sidebar-form input[type="text"],.skin-purple-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-purple-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple-light .sidebar-form input[type="text"]:focus,.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-purple.min.css b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-purple.min.css new file mode 100644 index 0000000..1eff3d9 --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-purple.min.css @@ -0,0 +1 @@ +.skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header .logo{background-color:#555299;color:#fff;border-bottom:0 solid transparent}.skin-purple .main-header .logo:hover{background-color:#545096}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .wrapper,.skin-purple .main-sidebar,.skin-purple .left-side{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li:hover>a,.skin-purple .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#605ca8}.skin-purple .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .treeview-menu>li>a{color:#8aa4af}.skin-purple .treeview-menu>li.active>a,.skin-purple .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-purple .sidebar-form input[type="text"],.skin-purple .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-purple .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple .sidebar-form input[type="text"]:focus,.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-red-light.min.css b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-red-light.min.css new file mode 100644 index 0000000..7ab4c1f --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-red-light.min.css @@ -0,0 +1 @@ +.skin-red-light .main-header .navbar{background-color:#dd4b39}.skin-red-light .main-header .navbar .nav>li>a{color:#fff}.skin-red-light .main-header .navbar .nav>li>a:hover,.skin-red-light .main-header .navbar .nav>li>a:active,.skin-red-light .main-header .navbar .nav>li>a:focus,.skin-red-light .main-header .navbar .nav .open>a,.skin-red-light .main-header .navbar .nav .open>a:hover,.skin-red-light .main-header .navbar .nav .open>a:focus,.skin-red-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red-light .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red-light .main-header .logo{background-color:#dd4b39;color:#fff;border-bottom:0 solid transparent}.skin-red-light .main-header .logo:hover{background-color:#dc4735}.skin-red-light .main-header li.user-header{background-color:#dd4b39}.skin-red-light .content-header{background:transparent}.skin-red-light .wrapper,.skin-red-light .main-sidebar,.skin-red-light .left-side{background-color:#f9fafc}.skin-red-light .content-wrapper,.skin-red-light .main-footer{border-left:1px solid #d2d6de}.skin-red-light .user-panel>.info,.skin-red-light .user-panel>.info>a{color:#444}.skin-red-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-red-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-red-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-red-light .sidebar-menu>li:hover>a,.skin-red-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-red-light .sidebar-menu>li.active{border-left-color:#dd4b39}.skin-red-light .sidebar-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-red-light .sidebar a{color:#444}.skin-red-light .sidebar a:hover{text-decoration:none}.skin-red-light .treeview-menu>li>a{color:#777}.skin-red-light .treeview-menu>li.active>a,.skin-red-light .treeview-menu>li>a:hover{color:#000}.skin-red-light .treeview-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-red-light .sidebar-form input[type="text"],.skin-red-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-red-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red-light .sidebar-form input[type="text"]:focus,.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-red.min.css b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-red.min.css new file mode 100644 index 0000000..3252b27 --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-red.min.css @@ -0,0 +1 @@ +.skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header .logo{background-color:#d73925;color:#fff;border-bottom:0 solid transparent}.skin-red .main-header .logo:hover{background-color:#d33724}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .wrapper,.skin-red .main-sidebar,.skin-red .left-side{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li:hover>a,.skin-red .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#dd4b39}.skin-red .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .treeview-menu>li>a{color:#8aa4af}.skin-red .treeview-menu>li.active>a,.skin-red .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-red .sidebar-form input[type="text"],.skin-red .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-red .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red .sidebar-form input[type="text"]:focus,.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-yellow-light.min.css b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-yellow-light.min.css new file mode 100644 index 0000000..773b254 --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-yellow-light.min.css @@ -0,0 +1 @@ +.skin-yellow-light .main-header .navbar{background-color:#f39c12}.skin-yellow-light .main-header .navbar .nav>li>a{color:#fff}.skin-yellow-light .main-header .navbar .nav>li>a:hover,.skin-yellow-light .main-header .navbar .nav>li>a:active,.skin-yellow-light .main-header .navbar .nav>li>a:focus,.skin-yellow-light .main-header .navbar .nav .open>a,.skin-yellow-light .main-header .navbar .nav .open>a:hover,.skin-yellow-light .main-header .navbar .nav .open>a:focus,.skin-yellow-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow-light .main-header .logo{background-color:#f39c12;color:#fff;border-bottom:0 solid transparent}.skin-yellow-light .main-header .logo:hover{background-color:#f39a0d}.skin-yellow-light .main-header li.user-header{background-color:#f39c12}.skin-yellow-light .content-header{background:transparent}.skin-yellow-light .wrapper,.skin-yellow-light .main-sidebar,.skin-yellow-light .left-side{background-color:#f9fafc}.skin-yellow-light .content-wrapper,.skin-yellow-light .main-footer{border-left:1px solid #d2d6de}.skin-yellow-light .user-panel>.info,.skin-yellow-light .user-panel>.info>a{color:#444}.skin-yellow-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-yellow-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-yellow-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-yellow-light .sidebar-menu>li:hover>a,.skin-yellow-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-yellow-light .sidebar-menu>li.active{border-left-color:#f39c12}.skin-yellow-light .sidebar-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-yellow-light .sidebar a{color:#444}.skin-yellow-light .sidebar a:hover{text-decoration:none}.skin-yellow-light .treeview-menu>li>a{color:#777}.skin-yellow-light .treeview-menu>li.active>a,.skin-yellow-light .treeview-menu>li>a:hover{color:#000}.skin-yellow-light .treeview-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-yellow-light .sidebar-form input[type="text"],.skin-yellow-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-yellow-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow-light .sidebar-form input[type="text"]:focus,.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-yellow.min.css b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-yellow.min.css new file mode 100644 index 0000000..67fc2e2 --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/dist/css/skins/skin-yellow.min.css @@ -0,0 +1 @@ +.skin-yellow .main-header .navbar{background-color:#f39c12}.skin-yellow .main-header .navbar .nav>li>a{color:#fff}.skin-yellow .main-header .navbar .nav>li>a:hover,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow .main-header .logo{background-color:#e08e0b;color:#fff;border-bottom:0 solid transparent}.skin-yellow .main-header .logo:hover{background-color:#db8b0b}.skin-yellow .main-header li.user-header{background-color:#f39c12}.skin-yellow .content-header{background:transparent}.skin-yellow .wrapper,.skin-yellow .main-sidebar,.skin-yellow .left-side{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li:hover>a,.skin-yellow .sidebar-menu>li.active>a{color:#fff;background:#1e282c;border-left-color:#f39c12}.skin-yellow .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .treeview-menu>li>a{color:#8aa4af}.skin-yellow .treeview-menu>li.active>a,.skin-yellow .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-yellow .sidebar-form input[type="text"],.skin-yellow .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.skin-yellow .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow .sidebar-form input[type="text"]:focus,.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/dist/img/boxed-bg.jpg b/public/vendor/laravel-admin/AdminLTE/dist/img/boxed-bg.jpg new file mode 100644 index 0000000..e47586a Binary files /dev/null and b/public/vendor/laravel-admin/AdminLTE/dist/img/boxed-bg.jpg differ diff --git a/public/vendor/laravel-admin/AdminLTE/dist/img/boxed-bg.png b/public/vendor/laravel-admin/AdminLTE/dist/img/boxed-bg.png new file mode 100644 index 0000000..2f9f1ad Binary files /dev/null and b/public/vendor/laravel-admin/AdminLTE/dist/img/boxed-bg.png differ diff --git a/public/vendor/laravel-admin/AdminLTE/dist/img/default-50x50.gif b/public/vendor/laravel-admin/AdminLTE/dist/img/default-50x50.gif new file mode 100644 index 0000000..2f5a14a Binary files /dev/null and b/public/vendor/laravel-admin/AdminLTE/dist/img/default-50x50.gif differ diff --git a/public/vendor/laravel-admin/AdminLTE/dist/img/icons.png b/public/vendor/laravel-admin/AdminLTE/dist/img/icons.png new file mode 100644 index 0000000..048c8d2 Binary files /dev/null and b/public/vendor/laravel-admin/AdminLTE/dist/img/icons.png differ diff --git a/public/vendor/laravel-admin/AdminLTE/dist/img/user2-160x160.jpg b/public/vendor/laravel-admin/AdminLTE/dist/img/user2-160x160.jpg new file mode 100644 index 0000000..aec74cb Binary files /dev/null and b/public/vendor/laravel-admin/AdminLTE/dist/img/user2-160x160.jpg differ diff --git a/public/vendor/laravel-admin/AdminLTE/dist/js/app.min.js b/public/vendor/laravel-admin/AdminLTE/dist/js/app.min.js new file mode 100644 index 0000000..8ec5fe1 --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/dist/js/app.min.js @@ -0,0 +1,13 @@ +/*! AdminLTE app.js + * ================ + * Main JS application file for AdminLTE v2. This file + * should be included in all pages. It controls some layout + * options and implements exclusive AdminLTE plugins. + * + * @Author Almsaeed Studio + * @Support + * @Email + * @version 2.3.2 + * @license MIT + */ +function _init(){"use strict";$.AdminLTE.layout={activate:function(){var a=this;a.fix(),a.fixSidebar(),$(window,".wrapper").resize(function(){a.fix(),a.fixSidebar()})},fix:function(){var a=$(".main-header").outerHeight()+$(".main-footer").outerHeight(),b=$(window).height(),c=$(".sidebar").height();if($("body").hasClass("fixed"))$(".content-wrapper, .right-side").css("min-height",b-$(".main-footer").outerHeight());else{var d;b>=c?($(".content-wrapper, .right-side").css("min-height",b-a),d=b-a):($(".content-wrapper, .right-side").css("min-height",c),d=c);var e=$($.AdminLTE.options.controlSidebarOptions.selector);"undefined"!=typeof e&&e.height()>d&&$(".content-wrapper, .right-side").css("min-height",e.height())}},fixSidebar:function(){return $("body").hasClass("fixed")?("undefined"==typeof $.fn.slimScroll&&window.console&&window.console.error("Error: the fixed layout requires the slimscroll plugin!"),void($.AdminLTE.options.sidebarSlimScroll&&"undefined"!=typeof $.fn.slimScroll&&($(".sidebar").slimScroll({destroy:!0}).height("auto"),$(".sidebar").slimscroll({height:$(window).height()-$(".main-header").height()+"px",color:"rgba(0,0,0,0.2)",size:"3px"})))):void("undefined"!=typeof $.fn.slimScroll&&$(".sidebar").slimScroll({destroy:!0}).height("auto"))}},$.AdminLTE.pushMenu={activate:function(a){var b=$.AdminLTE.options.screenSizes;$(document).on("click",a,function(a){a.preventDefault(),$(window).width()>b.sm-1?$("body").hasClass("sidebar-collapse")?$("body").removeClass("sidebar-collapse").trigger("expanded.pushMenu"):$("body").addClass("sidebar-collapse").trigger("collapsed.pushMenu"):$("body").hasClass("sidebar-open")?$("body").removeClass("sidebar-open").removeClass("sidebar-collapse").trigger("collapsed.pushMenu"):$("body").addClass("sidebar-open").trigger("expanded.pushMenu")}),$(".content-wrapper").click(function(){$(window).width()<=b.sm-1&&$("body").hasClass("sidebar-open")&&$("body").removeClass("sidebar-open")}),($.AdminLTE.options.sidebarExpandOnHover||$("body").hasClass("fixed")&&$("body").hasClass("sidebar-mini"))&&this.expandOnHover()},expandOnHover:function(){var a=this,b=$.AdminLTE.options.screenSizes.sm-1;$(".main-sidebar").hover(function(){$("body").hasClass("sidebar-mini")&&$("body").hasClass("sidebar-collapse")&&$(window).width()>b&&a.expand()},function(){$("body").hasClass("sidebar-mini")&&$("body").hasClass("sidebar-expanded-on-hover")&&$(window).width()>b&&a.collapse()})},expand:function(){$("body").removeClass("sidebar-collapse").addClass("sidebar-expanded-on-hover")},collapse:function(){$("body").hasClass("sidebar-expanded-on-hover")&&$("body").removeClass("sidebar-expanded-on-hover").addClass("sidebar-collapse")}},$.AdminLTE.tree=function(a){var b=this,c=$.AdminLTE.options.animationSpeed;$(a).on("click","li a",function(a){var d=$(this),e=d.next();if(e.is(".treeview-menu")&&e.is(":visible")&&!$("body").hasClass("sidebar-collapse"))e.slideUp(c,function(){e.removeClass("menu-open")}),e.parent("li").removeClass("active");else if(e.is(".treeview-menu")&&!e.is(":visible")){var f=d.parents("ul").first(),g=f.find("ul:visible").slideUp(c);g.removeClass("menu-open");var h=d.parent("li");e.slideDown(c,function(){e.addClass("menu-open"),f.find("li.active").removeClass("active"),h.addClass("active"),b.layout.fix()})}e.is(".treeview-menu")&&a.preventDefault()})},$.AdminLTE.controlSidebar={activate:function(){var a=this,b=$.AdminLTE.options.controlSidebarOptions,c=$(b.selector),d=$(b.toggleBtnSelector);d.on("click",function(d){d.preventDefault(),c.hasClass("control-sidebar-open")||$("body").hasClass("control-sidebar-open")?a.close(c,b.slide):a.open(c,b.slide)});var e=$(".control-sidebar-bg");a._fix(e),$("body").hasClass("fixed")?a._fixForFixed(c):$(".content-wrapper, .right-side").height() .box-body, > .box-footer, > form >.box-body, > form > .box-footer");c.hasClass("collapsed-box")?(a.children(":first").removeClass(b.icons.open).addClass(b.icons.collapse),d.slideDown(b.animationSpeed,function(){c.removeClass("collapsed-box")})):(a.children(":first").removeClass(b.icons.collapse).addClass(b.icons.open),d.slideUp(b.animationSpeed,function(){c.addClass("collapsed-box")}))},remove:function(a){var b=a.parents(".box").first();b.slideUp(this.animationSpeed)}}}if("undefined"==typeof jQuery)throw new Error("AdminLTE requires jQuery");$.AdminLTE={},$.AdminLTE.options={navbarMenuSlimscroll:!0,navbarMenuSlimscrollWidth:"3px",navbarMenuHeight:"200px",animationSpeed:500,sidebarToggleSelector:"[data-toggle='offcanvas']",sidebarPushMenu:!0,sidebarSlimScroll:!0,sidebarExpandOnHover:!1,enableBoxRefresh:!0,enableBSToppltip:!0,BSTooltipSelector:"[data-toggle='tooltip']",enableFastclick:!0,enableControlSidebar:!0,controlSidebarOptions:{toggleBtnSelector:"[data-toggle='control-sidebar']",selector:".control-sidebar",slide:!0},enableBoxWidget:!0,boxWidgetOptions:{boxWidgetIcons:{collapse:"fa-minus",open:"fa-plus",remove:"fa-times"},boxWidgetSelectors:{remove:'[data-widget="remove"]',collapse:'[data-widget="collapse"]'}},directChat:{enable:!0,contactToggleSelector:'[data-widget="chat-pane-toggle"]'},colors:{lightBlue:"#3c8dbc",red:"#f56954",green:"#00a65a",aqua:"#00c0ef",yellow:"#f39c12",blue:"#0073b7",navy:"#001F3F",teal:"#39CCCC",olive:"#3D9970",lime:"#01FF70",orange:"#FF851B",fuchsia:"#F012BE",purple:"#8E24AA",maroon:"#D81B60",black:"#222222",gray:"#d2d6de"},screenSizes:{xs:480,sm:768,md:992,lg:1200}},$(function(){"use strict";$("body").removeClass("hold-transition"),"undefined"!=typeof AdminLTEOptions&&$.extend(!0,$.AdminLTE.options,AdminLTEOptions);var a=$.AdminLTE.options;_init(),$.AdminLTE.layout.activate(),$.AdminLTE.tree(".sidebar"),a.enableControlSidebar&&$.AdminLTE.controlSidebar.activate(),a.navbarMenuSlimscroll&&"undefined"!=typeof $.fn.slimscroll&&$(".navbar .menu").slimscroll({height:a.navbarMenuHeight,alwaysVisible:!1,size:a.navbarMenuSlimscrollWidth}).css("width","100%"),a.sidebarPushMenu&&$.AdminLTE.pushMenu.activate(a.sidebarToggleSelector),a.enableBSToppltip&&$("body").tooltip({selector:a.BSTooltipSelector}),a.enableBoxWidget&&$.AdminLTE.boxWidget.activate(),a.enableFastclick&&"undefined"!=typeof FastClick&&FastClick.attach(document.body),a.directChat.enable&&$(document).on("click",a.directChat.contactToggleSelector,function(){var a=$(this).parents(".direct-chat").first();a.toggleClass("direct-chat-contacts-open")}),$('.btn-group[data-toggle="btn-toggle"]').each(function(){var a=$(this);$(this).find(".btn").on("click",function(b){a.find(".btn.active").removeClass("active"),$(this).addClass("active"),b.preventDefault()})})}),function(a){"use strict";a.fn.boxRefresh=function(b){function c(a){a.append(f),e.onLoadStart.call(a)}function d(a){a.find(f).remove(),e.onLoadDone.call(a)}var e=a.extend({trigger:".refresh-btn",source:"",onLoadStart:function(a){return a},onLoadDone:function(a){return a}},b),f=a('
');return this.each(function(){if(""===e.source)return void(window.console&&window.console.log("Please specify a source first - boxRefresh()"));var b=a(this),f=b.find(e.trigger).first();f.on("click",function(a){a.preventDefault(),c(b),b.find(".box-body").load(e.source,function(){d(b)})})})}}(jQuery),function(a){"use strict";a.fn.activateBox=function(){a.AdminLTE.boxWidget.activate(this)},a.fn.toggleBox=function(){var b=a(a.AdminLTE.boxWidget.selectors.collapse,this);a.AdminLTE.boxWidget.collapse(b)},a.fn.removeBox=function(){var b=a(a.AdminLTE.boxWidget.selectors.remove,this);a.AdminLTE.boxWidget.remove(b)}}(jQuery),function(a){"use strict";a.fn.todolist=function(b){var c=a.extend({onCheck:function(a){return a},onUncheck:function(a){return a}},b);return this.each(function(){"undefined"!=typeof a.fn.iCheck?(a("input",this).on("ifChecked",function(){var b=a(this).parents("li").first();b.toggleClass("done"),c.onCheck.call(b)}),a("input",this).on("ifUnchecked",function(){var b=a(this).parents("li").first();b.toggleClass("done"),c.onUncheck.call(b)})):a("input",this).on("change",function(){var b=a(this).parents("li").first();b.toggleClass("done"),a("input",b).is(":checked")?c.onCheck.call(b):c.onUncheck.call(b)})})}}(jQuery); \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/plugins/bootstrap-slider/bootstrap-slider.js b/public/vendor/laravel-admin/AdminLTE/plugins/bootstrap-slider/bootstrap-slider.js new file mode 100644 index 0000000..2e072fe --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/plugins/bootstrap-slider/bootstrap-slider.js @@ -0,0 +1,1167 @@ +/*! ========================================================= + * bootstrap-slider.js + * + * Maintainers: + * Kyle Kemp + * - Twitter: @seiyria + * - Github: seiyria + * Rohit Kalkur + * - Twitter: @Rovolutionary + * - Github: rovolution + * + * ========================================================= + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================= */ + + +/** + * Bridget makes jQuery widgets + * v1.0.1 + * MIT license + */ +( function( $ ) { + + ( function( $ ) { + + 'use strict'; + + // -------------------------- utils -------------------------- // + + var slice = Array.prototype.slice; + + function noop() {} + + // -------------------------- definition -------------------------- // + + function defineBridget( $ ) { + + // bail if no jQuery + if ( !$ ) { + return; + } + + // -------------------------- addOptionMethod -------------------------- // + + /** + * adds option method -> $().plugin('option', {...}) + * @param {Function} PluginClass - constructor class + */ + function addOptionMethod( PluginClass ) { + // don't overwrite original option method + if ( PluginClass.prototype.option ) { + return; + } + + // option setter + PluginClass.prototype.option = function( opts ) { + // bail out if not an object + if ( !$.isPlainObject( opts ) ){ + return; + } + this.options = $.extend( true, this.options, opts ); + }; + } + + + // -------------------------- plugin bridge -------------------------- // + + // helper function for logging errors + // $.error breaks jQuery chaining + var logError = typeof console === 'undefined' ? noop : + function( message ) { + console.error( message ); + }; + + /** + * jQuery plugin bridge, access methods like $elem.plugin('method') + * @param {String} namespace - plugin name + * @param {Function} PluginClass - constructor class + */ + function bridge( namespace, PluginClass ) { + // add to jQuery fn namespace + $.fn[ namespace ] = function( options ) { + if ( typeof options === 'string' ) { + // call plugin method when first argument is a string + // get arguments for method + var args = slice.call( arguments, 1 ); + + for ( var i=0, len = this.length; i < len; i++ ) { + var elem = this[i]; + var instance = $.data( elem, namespace ); + if ( !instance ) { + logError( "cannot call methods on " + namespace + " prior to initialization; " + + "attempted to call '" + options + "'" ); + continue; + } + if ( !$.isFunction( instance[options] ) || options.charAt(0) === '_' ) { + logError( "no such method '" + options + "' for " + namespace + " instance" ); + continue; + } + + // trigger method with arguments + var returnValue = instance[ options ].apply( instance, args); + + // break look and return first value if provided + if ( returnValue !== undefined && returnValue !== instance) { + return returnValue; + } + } + // return this if no return value + return this; + } else { + var objects = this.map( function() { + var instance = $.data( this, namespace ); + if ( instance ) { + // apply options & init + instance.option( options ); + instance._init(); + } else { + // initialize new instance + instance = new PluginClass( this, options ); + $.data( this, namespace, instance ); + } + return $(this); + }); + + if(!objects || objects.length > 1) { + return objects; + } else { + return objects[0]; + } + } + }; + + } + + // -------------------------- bridget -------------------------- // + + /** + * converts a Prototypical class into a proper jQuery plugin + * the class must have a ._init method + * @param {String} namespace - plugin name, used in $().pluginName + * @param {Function} PluginClass - constructor class + */ + $.bridget = function( namespace, PluginClass ) { + addOptionMethod( PluginClass ); + bridge( namespace, PluginClass ); + }; + + return $.bridget; + + } + + // get jquery from browser global + defineBridget( $ ); + + })( $ ); + + + /************************************************* + + BOOTSTRAP-SLIDER SOURCE CODE + + **************************************************/ + + (function( $ ) { + + var ErrorMsgs = { + formatInvalidInputErrorMsg : function(input) { + return "Invalid input value '" + input + "' passed in"; + }, + callingContextNotSliderInstance : "Calling context element does not have instance of Slider bound to it. Check your code to make sure the JQuery object returned from the call to the slider() initializer is calling the method" + }; + + + + /************************************************* + + CONSTRUCTOR + + **************************************************/ + var Slider = function(element, options) { + createNewSlider.call(this, element, options); + return this; + }; + + function createNewSlider(element, options) { + /************************************************* + + Create Markup + + **************************************************/ + if(typeof element === "string") { + this.element = document.querySelector(element); + } else if(element instanceof HTMLElement) { + this.element = element; + } + + var origWidth = this.element.style.width; + var updateSlider = false; + var parent = this.element.parentNode; + var sliderTrackSelection; + var sliderMinHandle; + var sliderMaxHandle; + + if (this.sliderElem) { + updateSlider = true; + } else { + /* Create elements needed for slider */ + this.sliderElem = document.createElement("div"); + this.sliderElem.className = "slider"; + + /* Create slider track elements */ + var sliderTrack = document.createElement("div"); + sliderTrack.className = "slider-track"; + + sliderTrackSelection = document.createElement("div"); + sliderTrackSelection.className = "slider-selection"; + + sliderMinHandle = document.createElement("div"); + sliderMinHandle.className = "slider-handle min-slider-handle"; + + sliderMaxHandle = document.createElement("div"); + sliderMaxHandle.className = "slider-handle max-slider-handle"; + + sliderTrack.appendChild(sliderTrackSelection); + sliderTrack.appendChild(sliderMinHandle); + sliderTrack.appendChild(sliderMaxHandle); + + var createAndAppendTooltipSubElements = function(tooltipElem) { + var arrow = document.createElement("div"); + arrow.className = "tooltip-arrow"; + + var inner = document.createElement("div"); + inner.className = "tooltip-inner"; + + tooltipElem.appendChild(arrow); + tooltipElem.appendChild(inner); + }; + + /* Create tooltip elements */ + var sliderTooltip = document.createElement("div"); + sliderTooltip.className = "tooltip tooltip-main"; + createAndAppendTooltipSubElements(sliderTooltip); + + var sliderTooltipMin = document.createElement("div"); + sliderTooltipMin.className = "tooltip tooltip-min"; + createAndAppendTooltipSubElements(sliderTooltipMin); + + var sliderTooltipMax = document.createElement("div"); + sliderTooltipMax.className = "tooltip tooltip-max"; + createAndAppendTooltipSubElements(sliderTooltipMax); + + + /* Append components to sliderElem */ + this.sliderElem.appendChild(sliderTrack); + this.sliderElem.appendChild(sliderTooltip); + this.sliderElem.appendChild(sliderTooltipMin); + this.sliderElem.appendChild(sliderTooltipMax); + + /* Append slider element to parent container, right before the original element */ + parent.insertBefore(this.sliderElem, this.element); + + /* Hide original element */ + this.element.style.display = "none"; + } + /* If JQuery exists, cache JQ references */ + if($) { + this.$element = $(this.element); + this.$sliderElem = $(this.sliderElem); + } + + /************************************************* + + Process Options + + **************************************************/ + options = options ? options : {}; + var optionTypes = Object.keys(this.defaultOptions); + + for(var i = 0; i < optionTypes.length; i++) { + var optName = optionTypes[i]; + + // First check if an option was passed in via the constructor + var val = options[optName]; + // If no data attrib, then check data atrributes + val = (typeof val !== 'undefined') ? val : getDataAttrib(this.element, optName); + // Finally, if nothing was specified, use the defaults + val = (val !== null) ? val : this.defaultOptions[optName]; + + // Set all options on the instance of the Slider + if(!this.options) { + this.options = {}; + } + this.options[optName] = val; + } + + function getDataAttrib(element, optName) { + var dataName = "data-slider-" + optName; + var dataValString = element.getAttribute(dataName); + + try { + return JSON.parse(dataValString); + } + catch(err) { + return dataValString; + } + } + + /************************************************* + + Setup + + **************************************************/ + this.eventToCallbackMap = {}; + this.sliderElem.id = this.options.id; + + this.touchCapable = 'ontouchstart' in window || (window.DocumentTouch && document instanceof window.DocumentTouch); + + this.tooltip = this.sliderElem.querySelector('.tooltip-main'); + this.tooltipInner = this.tooltip.querySelector('.tooltip-inner'); + + this.tooltip_min = this.sliderElem.querySelector('.tooltip-min'); + this.tooltipInner_min = this.tooltip_min.querySelector('.tooltip-inner'); + + this.tooltip_max = this.sliderElem.querySelector('.tooltip-max'); + this.tooltipInner_max= this.tooltip_max.querySelector('.tooltip-inner'); + + if (updateSlider === true) { + // Reset classes + this._removeClass(this.sliderElem, 'slider-horizontal'); + this._removeClass(this.sliderElem, 'slider-vertical'); + this._removeClass(this.tooltip, 'hide'); + this._removeClass(this.tooltip_min, 'hide'); + this._removeClass(this.tooltip_max, 'hide'); + + // Undo existing inline styles for track + ["left", "top", "width", "height"].forEach(function(prop) { + this._removeProperty(this.trackSelection, prop); + }, this); + + // Undo inline styles on handles + [this.handle1, this.handle2].forEach(function(handle) { + this._removeProperty(handle, 'left'); + this._removeProperty(handle, 'top'); + }, this); + + // Undo inline styles and classes on tooltips + [this.tooltip, this.tooltip_min, this.tooltip_max].forEach(function(tooltip) { + this._removeProperty(tooltip, 'left'); + this._removeProperty(tooltip, 'top'); + this._removeProperty(tooltip, 'margin-left'); + this._removeProperty(tooltip, 'margin-top'); + + this._removeClass(tooltip, 'right'); + this._removeClass(tooltip, 'top'); + }, this); + } + + if(this.options.orientation === 'vertical') { + this._addClass(this.sliderElem,'slider-vertical'); + + this.stylePos = 'top'; + this.mousePos = 'pageY'; + this.sizePos = 'offsetHeight'; + + this._addClass(this.tooltip, 'right'); + this.tooltip.style.left = '100%'; + + this._addClass(this.tooltip_min, 'right'); + this.tooltip_min.style.left = '100%'; + + this._addClass(this.tooltip_max, 'right'); + this.tooltip_max.style.left = '100%'; + } else { + this._addClass(this.sliderElem, 'slider-horizontal'); + this.sliderElem.style.width = origWidth; + + this.options.orientation = 'horizontal'; + this.stylePos = 'left'; + this.mousePos = 'pageX'; + this.sizePos = 'offsetWidth'; + + this._addClass(this.tooltip, 'top'); + this.tooltip.style.top = -this.tooltip.outerHeight - 14 + 'px'; + + this._addClass(this.tooltip_min, 'top'); + this.tooltip_min.style.top = -this.tooltip_min.outerHeight - 14 + 'px'; + + this._addClass(this.tooltip_max, 'top'); + this.tooltip_max.style.top = -this.tooltip_max.outerHeight - 14 + 'px'; + } + + if (this.options.value instanceof Array) { + this.options.range = true; + } else if (this.options.range) { + // User wants a range, but value is not an array + this.options.value = [this.options.value, this.options.max]; + } + + this.trackSelection = sliderTrackSelection || this.trackSelection; + if (this.options.selection === 'none') { + this._addClass(this.trackSelection, 'hide'); + } + + this.handle1 = sliderMinHandle || this.handle1; + this.handle2 = sliderMaxHandle || this.handle2; + + if (updateSlider === true) { + // Reset classes + this._removeClass(this.handle1, 'round triangle'); + this._removeClass(this.handle2, 'round triangle hide'); + } + + var availableHandleModifiers = ['round', 'triangle', 'custom']; + var isValidHandleType = availableHandleModifiers.indexOf(this.options.handle) !== -1; + if (isValidHandleType) { + this._addClass(this.handle1, this.options.handle); + this._addClass(this.handle2, this.options.handle); + } + + this.offset = this._offset(this.sliderElem); + this.size = this.sliderElem[this.sizePos]; + this.setValue(this.options.value); + + /****************************************** + + Bind Event Listeners + + ******************************************/ + + // Bind keyboard handlers + this.handle1Keydown = this._keydown.bind(this, 0); + this.handle1.addEventListener("keydown", this.handle1Keydown, false); + + this.handle2Keydown = this._keydown.bind(this, 0); + this.handle2.addEventListener("keydown", this.handle2Keydown, false); + + if (this.touchCapable) { + // Bind touch handlers + this.mousedown = this._mousedown.bind(this); + this.sliderElem.addEventListener("touchstart", this.mousedown, false); + } else { + // Bind mouse handlers + this.mousedown = this._mousedown.bind(this); + this.sliderElem.addEventListener("mousedown", this.mousedown, false); + } + + // Bind tooltip-related handlers + if(this.options.tooltip === 'hide') { + this._addClass(this.tooltip, 'hide'); + this._addClass(this.tooltip_min, 'hide'); + this._addClass(this.tooltip_max, 'hide'); + } else if(this.options.tooltip === 'always') { + this._showTooltip(); + this._alwaysShowTooltip = true; + } else { + this.showTooltip = this._showTooltip.bind(this); + this.hideTooltip = this._hideTooltip.bind(this); + + this.sliderElem.addEventListener("mouseenter", this.showTooltip, false); + this.sliderElem.addEventListener("mouseleave", this.hideTooltip, false); + + this.handle1.addEventListener("focus", this.showTooltip, false); + this.handle1.addEventListener("blur", this.hideTooltip, false); + + this.handle2.addEventListener("focus", this.showTooltip, false); + this.handle2.addEventListener("blur", this.hideTooltip, false); + } + + if(this.options.enabled) { + this.enable(); + } else { + this.disable(); + } + } + + /************************************************* + + INSTANCE PROPERTIES/METHODS + + - Any methods bound to the prototype are considered + part of the plugin's `public` interface + + **************************************************/ + Slider.prototype = { + _init: function() {}, // NOTE: Must exist to support bridget + + constructor: Slider, + + defaultOptions: { + id: "", + min: 0, + max: 10, + step: 1, + precision: 0, + orientation: 'horizontal', + value: 5, + range: false, + selection: 'before', + tooltip: 'show', + tooltip_split: false, + handle: 'round', + reversed: false, + enabled: true, + formatter: function(val) { + if(val instanceof Array) { + return val[0] + " : " + val[1]; + } else { + return val; + } + }, + natural_arrow_keys: false + }, + + over: false, + + inDrag: false, + + getValue: function() { + if (this.options.range) { + return this.options.value; + } + return this.options.value[0]; + }, + + setValue: function(val, triggerSlideEvent) { + if (!val) { + val = 0; + } + this.options.value = this._validateInputValue(val); + var applyPrecision = this._applyPrecision.bind(this); + + if (this.options.range) { + this.options.value[0] = applyPrecision(this.options.value[0]); + this.options.value[1] = applyPrecision(this.options.value[1]); + + this.options.value[0] = Math.max(this.options.min, Math.min(this.options.max, this.options.value[0])); + this.options.value[1] = Math.max(this.options.min, Math.min(this.options.max, this.options.value[1])); + } else { + this.options.value = applyPrecision(this.options.value); + this.options.value = [ Math.max(this.options.min, Math.min(this.options.max, this.options.value))]; + this._addClass(this.handle2, 'hide'); + if (this.options.selection === 'after') { + this.options.value[1] = this.options.max; + } else { + this.options.value[1] = this.options.min; + } + } + + this.diff = this.options.max - this.options.min; + if (this.diff > 0) { + this.percentage = [ + (this.options.value[0] - this.options.min) * 100 / this.diff, + (this.options.value[1] - this.options.min) * 100 / this.diff, + this.options.step * 100 / this.diff + ]; + } else { + this.percentage = [0, 0, 100]; + } + + this._layout(); + + var sliderValue = this.options.range ? this.options.value : this.options.value[0]; + this._setDataVal(sliderValue); + + if(triggerSlideEvent === true) { + this._trigger('slide', sliderValue); + } + + return this; + }, + + destroy: function(){ + // Remove event handlers on slider elements + this._removeSliderEventHandlers(); + + // Remove the slider from the DOM + this.sliderElem.parentNode.removeChild(this.sliderElem); + /* Show original element */ + this.element.style.display = ""; + + // Clear out custom event bindings + this._cleanUpEventCallbacksMap(); + + // Remove data values + this.element.removeAttribute("data"); + + // Remove JQuery handlers/data + if($) { + this._unbindJQueryEventHandlers(); + this.$element.removeData('slider'); + } + }, + + disable: function() { + this.options.enabled = false; + this.handle1.removeAttribute("tabindex"); + this.handle2.removeAttribute("tabindex"); + this._addClass(this.sliderElem, 'slider-disabled'); + this._trigger('slideDisabled'); + + return this; + }, + + enable: function() { + this.options.enabled = true; + this.handle1.setAttribute("tabindex", 0); + this.handle2.setAttribute("tabindex", 0); + this._removeClass(this.sliderElem, 'slider-disabled'); + this._trigger('slideEnabled'); + + return this; + }, + + toggle: function() { + if(this.options.enabled) { + this.disable(); + } else { + this.enable(); + } + + return this; + }, + + isEnabled: function() { + return this.options.enabled; + }, + + on: function(evt, callback) { + if($) { + this.$element.on(evt, callback); + this.$sliderElem.on(evt, callback); + } else { + this._bindNonQueryEventHandler(evt, callback); + } + return this; + }, + + getAttribute: function(attribute) { + if(attribute) { + return this.options[attribute]; + } else { + return this.options; + } + }, + + setAttribute: function(attribute, value) { + this.options[attribute] = value; + return this; + }, + + refresh: function() { + this._removeSliderEventHandlers(); + createNewSlider.call(this, this.element, this.options); + if($) { + // Bind new instance of slider to the element + $.data(this.element, 'slider', this); + } + return this; + }, + + /******************************+ + + HELPERS + + - Any method that is not part of the public interface. + - Place it underneath this comment block and write its signature like so: + + _fnName : function() {...} + + ********************************/ + _removeSliderEventHandlers: function() { + // Remove event listeners from handle1 + this.handle1.removeEventListener("keydown", this.handle1Keydown, false); + this.handle1.removeEventListener("focus", this.showTooltip, false); + this.handle1.removeEventListener("blur", this.hideTooltip, false); + + // Remove event listeners from handle2 + this.handle2.removeEventListener("keydown", this.handle2Keydown, false); + this.handle2.removeEventListener("focus", this.handle2Keydown, false); + this.handle2.removeEventListener("blur", this.handle2Keydown, false); + + // Remove event listeners from sliderElem + this.sliderElem.removeEventListener("mouseenter", this.showTooltip, false); + this.sliderElem.removeEventListener("mouseleave", this.hideTooltip, false); + this.sliderElem.removeEventListener("touchstart", this.mousedown, false); + this.sliderElem.removeEventListener("mousedown", this.mousedown, false); + }, + _bindNonQueryEventHandler: function(evt, callback) { + if(this.eventToCallbackMap[evt]===undefined) { + this.eventToCallbackMap[evt] = []; + } + this.eventToCallbackMap[evt].push(callback); + }, + _cleanUpEventCallbacksMap: function() { + var eventNames = Object.keys(this.eventToCallbackMap); + for(var i = 0; i < eventNames.length; i++) { + var eventName = eventNames[i]; + this.eventToCallbackMap[eventName] = null; + } + }, + _showTooltip: function() { + if (this.options.tooltip_split === false ){ + this._addClass(this.tooltip, 'in'); + } else { + this._addClass(this.tooltip_min, 'in'); + this._addClass(this.tooltip_max, 'in'); + } + this.over = true; + }, + _hideTooltip: function() { + if (this.inDrag === false && this.alwaysShowTooltip !== true) { + this._removeClass(this.tooltip, 'in'); + this._removeClass(this.tooltip_min, 'in'); + this._removeClass(this.tooltip_max, 'in'); + } + this.over = false; + }, + _layout: function() { + var positionPercentages; + + if(this.options.reversed) { + positionPercentages = [ 100 - this.percentage[0], this.percentage[1] ]; + } else { + positionPercentages = [ this.percentage[0], this.percentage[1] ]; + } + + this.handle1.style[this.stylePos] = positionPercentages[0]+'%'; + this.handle2.style[this.stylePos] = positionPercentages[1]+'%'; + + if (this.options.orientation === 'vertical') { + this.trackSelection.style.top = Math.min(positionPercentages[0], positionPercentages[1]) +'%'; + this.trackSelection.style.height = Math.abs(positionPercentages[0] - positionPercentages[1]) +'%'; + } else { + this.trackSelection.style.left = Math.min(positionPercentages[0], positionPercentages[1]) +'%'; + this.trackSelection.style.width = Math.abs(positionPercentages[0] - positionPercentages[1]) +'%'; + + var offset_min = this.tooltip_min.getBoundingClientRect(); + var offset_max = this.tooltip_max.getBoundingClientRect(); + + if (offset_min.right > offset_max.left) { + this._removeClass(this.tooltip_max, 'top'); + this._addClass(this.tooltip_max, 'bottom'); + this.tooltip_max.style.top = 18 + 'px'; + } else { + this._removeClass(this.tooltip_max, 'bottom'); + this._addClass(this.tooltip_max, 'top'); + this.tooltip_max.style.top = -30 + 'px'; + } + } + + + var formattedTooltipVal; + + if (this.options.range) { + formattedTooltipVal = this.options.formatter(this.options.value); + this._setText(this.tooltipInner, formattedTooltipVal); + this.tooltip.style[this.stylePos] = (positionPercentages[1] + positionPercentages[0])/2 + '%'; + + if (this.options.orientation === 'vertical') { + this._css(this.tooltip, 'margin-top', -this.tooltip.offsetHeight / 2 + 'px'); + } else { + this._css(this.tooltip, 'margin-left', -this.tooltip.offsetWidth / 2 + 'px'); + } + + if (this.options.orientation === 'vertical') { + this._css(this.tooltip, 'margin-top', -this.tooltip.offsetHeight / 2 + 'px'); + } else { + this._css(this.tooltip, 'margin-left', -this.tooltip.offsetWidth / 2 + 'px'); + } + + var innerTooltipMinText = this.options.formatter(this.options.value[0]); + this._setText(this.tooltipInner_min, innerTooltipMinText); + + var innerTooltipMaxText = this.options.formatter(this.options.value[1]); + this._setText(this.tooltipInner_max, innerTooltipMaxText); + + this.tooltip_min.style[this.stylePos] = positionPercentages[0] + '%'; + + if (this.options.orientation === 'vertical') { + this._css(this.tooltip_min, 'margin-top', -this.tooltip_min.offsetHeight / 2 + 'px'); + } else { + this._css(this.tooltip_min, 'margin-left', -this.tooltip_min.offsetWidth / 2 + 'px'); + } + + this.tooltip_max.style[this.stylePos] = positionPercentages[1] + '%'; + + if (this.options.orientation === 'vertical') { + this._css(this.tooltip_max, 'margin-top', -this.tooltip_max.offsetHeight / 2 + 'px'); + } else { + this._css(this.tooltip_max, 'margin-left', -this.tooltip_max.offsetWidth / 2 + 'px'); + } + } else { + formattedTooltipVal = this.options.formatter(this.options.value[0]); + this._setText(this.tooltipInner, formattedTooltipVal); + + this.tooltip.style[this.stylePos] = positionPercentages[0] + '%'; + if (this.options.orientation === 'vertical') { + this._css(this.tooltip, 'margin-top', -this.tooltip.offsetHeight / 2 + 'px'); + } else { + this._css(this.tooltip, 'margin-left', -this.tooltip.offsetWidth / 2 + 'px'); + } + } + }, + _removeProperty: function(element, prop) { + if (element.style.removeProperty) { + element.style.removeProperty(prop); + } else { + element.style.removeAttribute(prop); + } + }, + _mousedown: function(ev) { + if(!this.options.enabled) { + return false; + } + + this._triggerFocusOnHandle(); + + this.offset = this._offset(this.sliderElem); + this.size = this.sliderElem[this.sizePos]; + + var percentage = this._getPercentage(ev); + + if (this.options.range) { + var diff1 = Math.abs(this.percentage[0] - percentage); + var diff2 = Math.abs(this.percentage[1] - percentage); + this.dragged = (diff1 < diff2) ? 0 : 1; + } else { + this.dragged = 0; + } + + this.percentage[this.dragged] = this.options.reversed ? 100 - percentage : percentage; + this._layout(); + + this.mousemove = this._mousemove.bind(this); + this.mouseup = this._mouseup.bind(this); + + if (this.touchCapable) { + // Touch: Bind touch events: + document.addEventListener("touchmove", this.mousemove, false); + document.addEventListener("touchend", this.mouseup, false); + } else { + // Bind mouse events: + document.addEventListener("mousemove", this.mousemove, false); + document.addEventListener("mouseup", this.mouseup, false); + } + + this.inDrag = true; + + var val = this._calculateValue(); + this._trigger('slideStart', val); + this._setDataVal(val); + this.setValue(val); + + this._pauseEvent(ev); + + return true; + }, + _triggerFocusOnHandle: function(handleIdx) { + if(handleIdx === 0) { + this.handle1.focus(); + } + if(handleIdx === 1) { + this.handle2.focus(); + } + }, + _keydown: function(handleIdx, ev) { + if(!this.options.enabled) { + return false; + } + + var dir; + switch (ev.keyCode) { + case 37: // left + case 40: // down + dir = -1; + break; + case 39: // right + case 38: // up + dir = 1; + break; + } + if (!dir) { + return; + } + + // use natural arrow keys instead of from min to max + if (this.options.natural_arrow_keys) { + var ifVerticalAndNotReversed = (this.options.orientation === 'vertical' && !this.options.reversed); + var ifHorizontalAndReversed = (this.options.orientation === 'horizontal' && this.options.reversed); + + if (ifVerticalAndNotReversed || ifHorizontalAndReversed) { + dir = dir * -1; + } + } + + var oneStepValuePercentageChange = dir * this.percentage[2]; + var percentage = this.percentage[handleIdx] + oneStepValuePercentageChange; + + if (percentage > 100) { + percentage = 100; + } else if (percentage < 0) { + percentage = 0; + } + + this.dragged = handleIdx; + this._adjustPercentageForRangeSliders(percentage); + this.percentage[this.dragged] = percentage; + this._layout(); + + var val = this._calculateValue(); + + this._trigger('slideStart', val); + this._setDataVal(val); + this.setValue(val, true); + + this._trigger('slideStop', val); + this._setDataVal(val); + + this._pauseEvent(ev); + + return false; + }, + _pauseEvent: function(ev) { + if(ev.stopPropagation) { + ev.stopPropagation(); + } + if(ev.preventDefault) { + ev.preventDefault(); + } + ev.cancelBubble=true; + ev.returnValue=false; + }, + _mousemove: function(ev) { + if(!this.options.enabled) { + return false; + } + + var percentage = this._getPercentage(ev); + this._adjustPercentageForRangeSliders(percentage); + this.percentage[this.dragged] = this.options.reversed ? 100 - percentage : percentage; + this._layout(); + + var val = this._calculateValue(); + this.setValue(val, true); + + return false; + }, + _adjustPercentageForRangeSliders: function(percentage) { + if (this.options.range) { + if (this.dragged === 0 && this.percentage[1] < percentage) { + this.percentage[0] = this.percentage[1]; + this.dragged = 1; + } else if (this.dragged === 1 && this.percentage[0] > percentage) { + this.percentage[1] = this.percentage[0]; + this.dragged = 0; + } + } + }, + _mouseup: function() { + if(!this.options.enabled) { + return false; + } + if (this.touchCapable) { + // Touch: Unbind touch event handlers: + document.removeEventListener("touchmove", this.mousemove, false); + document.removeEventListener("touchend", this.mouseup, false); + } else { + // Unbind mouse event handlers: + document.removeEventListener("mousemove", this.mousemove, false); + document.removeEventListener("mouseup", this.mouseup, false); + } + + this.inDrag = false; + if (this.over === false) { + this._hideTooltip(); + } + var val = this._calculateValue(); + + this._layout(); + this._setDataVal(val); + this._trigger('slideStop', val); + + return false; + }, + _calculateValue: function() { + var val; + if (this.options.range) { + val = [this.options.min,this.options.max]; + if (this.percentage[0] !== 0){ + val[0] = (Math.max(this.options.min, this.options.min + Math.round((this.diff * this.percentage[0]/100)/this.options.step)*this.options.step)); + val[0] = this._applyPrecision(val[0]); + } + if (this.percentage[1] !== 100){ + val[1] = (Math.min(this.options.max, this.options.min + Math.round((this.diff * this.percentage[1]/100)/this.options.step)*this.options.step)); + val[1] = this._applyPrecision(val[1]); + } + this.options.value = val; + } else { + val = (this.options.min + Math.round((this.diff * this.percentage[0]/100)/this.options.step)*this.options.step); + if (val < this.options.min) { + val = this.options.min; + } + else if (val > this.options.max) { + val = this.options.max; + } + val = parseFloat(val); + val = this._applyPrecision(val); + this.options.value = [val, this.options.value[1]]; + } + return val; + }, + _applyPrecision: function(val) { + var precision = this.options.precision || this._getNumDigitsAfterDecimalPlace(this.step); + return this._applyToFixedAndParseFloat(val, precision); + }, + _getNumDigitsAfterDecimalPlace: function(num) { + var match = (''+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/); + if (!match) { return 0; } + return Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0)); + }, + _applyToFixedAndParseFloat: function(num, toFixedInput) { + var truncatedNum = num.toFixed(toFixedInput); + return parseFloat(truncatedNum); + }, + /* + Credits to Mike Samuel for the following method! + Source: http://stackoverflow.com/questions/10454518/javascript-how-to-retrieve-the-number-of-decimals-of-a-string-number + */ + _getPercentage: function(ev) { + if (this.touchCapable && (ev.type === 'touchstart' || ev.type === 'touchmove')) { + ev = ev.touches[0]; + } + var percentage = (ev[this.mousePos] - this.offset[this.stylePos])*100/this.size; + percentage = Math.round(percentage/this.percentage[2])*this.percentage[2]; + return Math.max(0, Math.min(100, percentage)); + }, + _validateInputValue: function(val) { + if(typeof val === 'number') { + return val; + } else if(val instanceof Array) { + this._validateArray(val); + return val; + } else { + throw new Error( ErrorMsgs.formatInvalidInputErrorMsg(val) ); + } + }, + _validateArray: function(val) { + for(var i = 0; i < val.length; i++) { + var input = val[i]; + if (typeof input !== 'number') { throw new Error( ErrorMsgs.formatInvalidInputErrorMsg(input) ); } + } + }, + _setDataVal: function(val) { + var value = "value: '" + val + "'"; + this.element.setAttribute('data', value); + this.element.setAttribute('value', val); + }, + _trigger: function(evt, val) { + val = val || undefined; + + var callbackFnArray = this.eventToCallbackMap[evt]; + if(callbackFnArray && callbackFnArray.length) { + for(var i = 0; i < callbackFnArray.length; i++) { + var callbackFn = callbackFnArray[i]; + callbackFn(val); + } + } + + /* If JQuery exists, trigger JQuery events */ + if($) { + this._triggerJQueryEvent(evt, val); + } + }, + _triggerJQueryEvent: function(evt, val) { + var eventData = { + type: evt, + value: val + }; + this.$element.trigger(eventData); + this.$sliderElem.trigger(eventData); + }, + _unbindJQueryEventHandlers: function() { + this.$element.off(); + this.$sliderElem.off(); + }, + _setText: function(element, text) { + if(typeof element.innerText !== "undefined") { + element.innerText = text; + } else if(typeof element.textContent !== "undefined") { + element.textContent = text; + } + }, + _removeClass: function(element, classString) { + var classes = classString.split(" "); + var newClasses = element.className; + + for(var i = 0; i < classes.length; i++) { + var classTag = classes[i]; + var regex = new RegExp("(?:\\s|^)" + classTag + "(?:\\s|$)"); + newClasses = newClasses.replace(regex, " "); + } + + element.className = newClasses.trim(); + }, + _addClass: function(element, classString) { + var classes = classString.split(" "); + var newClasses = element.className; + + for(var i = 0; i < classes.length; i++) { + var classTag = classes[i]; + var regex = new RegExp("(?:\\s|^)" + classTag + "(?:\\s|$)"); + var ifClassExists = regex.test(newClasses); + + if(!ifClassExists) { + newClasses += " " + classTag; + } + } + + element.className = newClasses.trim(); + }, + _offset: function (obj) { + var ol = 0; + var ot = 0; + if (obj.offsetParent) { + do { + ol += obj.offsetLeft; + ot += obj.offsetTop; + } while (obj = obj.offsetParent); + } + return { + left: ol, + top: ot + }; + }, + _css: function(elementRef, styleName, value) { + elementRef.style[styleName] = value; + } + }; + + /********************************* + + Attach to global namespace + + *********************************/ + if($) { + var namespace = $.fn.slider ? 'bootstrapSlider' : 'slider'; + $.bridget(namespace, Slider); + } else { + window.Slider = Slider; + } + + + })( $ ); + +})( window.jQuery ); \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/plugins/bootstrap-slider/slider.css b/public/vendor/laravel-admin/AdminLTE/plugins/bootstrap-slider/slider.css new file mode 100644 index 0000000..a96db7f --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/plugins/bootstrap-slider/slider.css @@ -0,0 +1,169 @@ +/*! + * Slider for Bootstrap + * + * Copyright 2012 Stefan Petre + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */ +.slider { + display: block; + vertical-align: middle; + position: relative; + +} +.slider.slider-horizontal { + width: 100%; + height: 20px; + margin-bottom: 20px; +} +.slider.slider-horizontal:last-of-type { + margin-bottom: 0; +} +.slider.slider-horizontal .slider-track { + height: 10px; + width: 100%; + margin-top: -5px; + top: 50%; + left: 0; +} +.slider.slider-horizontal .slider-selection { + height: 100%; + top: 0; + bottom: 0; +} +.slider.slider-horizontal .slider-handle { + margin-left: -10px; + margin-top: -5px; +} +.slider.slider-horizontal .slider-handle.triangle { + border-width: 0 10px 10px 10px; + width: 0; + height: 0; + border-bottom-color: #0480be; + margin-top: 0; +} +.slider.slider-vertical { + height: 230px; + width: 20px; + margin-right: 20px; + display: inline-block; +} +.slider.slider-vertical:last-of-type { + margin-right: 0; +} +.slider.slider-vertical .slider-track { + width: 10px; + height: 100%; + margin-left: -5px; + left: 50%; + top: 0; +} +.slider.slider-vertical .slider-selection { + width: 100%; + left: 0; + top: 0; + bottom: 0; +} +.slider.slider-vertical .slider-handle { + margin-left: -5px; + margin-top: -10px; +} +.slider.slider-vertical .slider-handle.triangle { + border-width: 10px 0 10px 10px; + width: 1px; + height: 1px; + border-left-color: #0480be; + margin-left: 0; +} +.slider input { + display: none; +} +.slider .tooltip-inner { + white-space: nowrap; +} +.slider-track { + position: absolute; + cursor: pointer; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f0f0f0, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f0f0f0), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f0f0f0, #f9f9f9); + background-image: -o-linear-gradient(top, #f0f0f0, #f9f9f9); + background-image: linear-gradient(to bottom, #f0f0f0, #f9f9f9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0f0f0', endColorstr='#fff9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.slider-selection { + position: absolute; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f9f9f9, #f5f5f5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f9f9f9), to(#f5f5f5)); + background-image: -webkit-linear-gradient(top, #f9f9f9, #f5f5f5); + background-image: -o-linear-gradient(top, #f9f9f9, #f5f5f5); + background-image: linear-gradient(to bottom, #f9f9f9, #f5f5f5); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f9f9', endColorstr='#fff5f5f5', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.slider-handle { + position: absolute; + width: 20px; + height: 20px; + background-color: #444; + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + opacity: 1; + border: 0px solid transparent; +} +.slider-handle.round { + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; +} +.slider-handle.triangle { + background: transparent none; +} + +.slider-disabled .slider-selection { + opacity: 0.5; +} + +#red .slider-selection { + background: #f56954; +} + +#blue .slider-selection { + background: #3c8dbc; +} + +#green .slider-selection { + background: #00a65a; +} + +#yellow .slider-selection { + background: #f39c12; +} + +#aqua .slider-selection { + background: #00c0ef; +} + +#purple .slider-selection { + background: #932ab6; +} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/plugins/colorpicker/bootstrap-colorpicker.min.css b/public/vendor/laravel-admin/AdminLTE/plugins/colorpicker/bootstrap-colorpicker.min.css new file mode 100644 index 0000000..01894d5 --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/plugins/colorpicker/bootstrap-colorpicker.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap Colorpicker + * http://mjolnic.github.io/bootstrap-colorpicker/ + * + * Originally written by (c) 2012 Stefan Petre + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0.txt + * + */.colorpicker-saturation{float:left;width:100px;height:100px;cursor:crosshair;background-image:url("img/saturation.png")} .colorpicker-saturation i{position:absolute;top:0;left:0;display:block;width:5px;height:5px;margin:-4px 0 0 -4px;border:1px solid #000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px} .colorpicker-saturation i b{display:block;width:5px;height:5px;border:1px solid #fff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px} .colorpicker-hue,.colorpicker-alpha{float:left;width:15px;height:100px;margin-bottom:4px;margin-left:4px;cursor:row-resize} .colorpicker-hue i,.colorpicker-alpha i{position:absolute;top:0;left:0;display:block;width:100%;height:1px;margin-top:-1px;background:#000;border-top:1px solid #fff} .colorpicker-hue{background-image:url("img/hue.png")} .colorpicker-alpha{display:none;background-image:url("img/alpha.png")} .colorpicker{top:0;left:0;z-index:2500;min-width:130px;padding:4px;margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1} .colorpicker:before,.colorpicker:after{display:table;line-height:0;content:""} .colorpicker:after{clear:both} .colorpicker:before{position:absolute;top:-7px;left:6px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''} .colorpicker:after{position:absolute;top:-6px;left:7px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''} .colorpicker div{position:relative} .colorpicker.colorpicker-with-alpha{min-width:140px} .colorpicker.colorpicker-with-alpha .colorpicker-alpha{display:block} .colorpicker-color{height:10px;margin-top:5px;clear:both;background-image:url("img/alpha.png");background-position:0 100%} .colorpicker-color div{height:10px} .colorpicker-element .input-group-addon i{display:block;width:16px;height:16px;cursor:pointer} .colorpicker.colorpicker-inline{position:relative;display:inline-block;float:none} .colorpicker.colorpicker-horizontal{width:110px;height:auto;min-width:110px} .colorpicker.colorpicker-horizontal .colorpicker-saturation{margin-bottom:4px} .colorpicker.colorpicker-horizontal .colorpicker-color{width:100px} .colorpicker.colorpicker-horizontal .colorpicker-hue,.colorpicker.colorpicker-horizontal .colorpicker-alpha{float:left;width:100px;height:15px;margin-bottom:4px;margin-left:0;cursor:col-resize} .colorpicker.colorpicker-horizontal .colorpicker-hue i,.colorpicker.colorpicker-horizontal .colorpicker-alpha i{position:absolute;top:0;left:0;display:block;width:1px;height:15px;margin-top:0;background:#fff;border:0} .colorpicker.colorpicker-horizontal .colorpicker-hue{background-image:url("img/hue-horizontal.png")} .colorpicker.colorpicker-horizontal .colorpicker-alpha{background-image:url("img/alpha-horizontal.png")} .colorpicker.colorpicker-hidden{display:none} .colorpicker.colorpicker-visible{display:block} .colorpicker-inline.colorpicker-visible{display:inline-block} \ No newline at end of file diff --git a/public/vendor/laravel-admin/AdminLTE/plugins/colorpicker/bootstrap-colorpicker.min.js b/public/vendor/laravel-admin/AdminLTE/plugins/colorpicker/bootstrap-colorpicker.min.js new file mode 100644 index 0000000..bc4fba9 --- /dev/null +++ b/public/vendor/laravel-admin/AdminLTE/plugins/colorpicker/bootstrap-colorpicker.min.js @@ -0,0 +1 @@ +!function(a){"use strict";var b=function(a){this.value={h:0,s:0,b:0,a:1},this.origFormat=null,a&&(void 0!==a.toLowerCase?this.setColor(a):void 0!==a.h&&(this.value=a))};b.prototype={constructor:b,_sanitizeNumber:function(a){return"number"==typeof a?a:isNaN(a)||null===a||""===a||void 0===a?1:void 0!==a.toLowerCase?parseFloat(a):1},setColor:function(a){a=a.toLowerCase(),this.value=this.stringToHSB(a)||{h:0,s:0,b:0,a:1}},stringToHSB:function(b){b=b.toLowerCase();var c=this,d=!1;return a.each(this.stringParsers,function(a,e){var f=e.re.exec(b),g=f&&e.parse.apply(c,[f]),h=e.format||"rgba";return g?(d=h.match(/hsla?/)?c.RGBtoHSB.apply(c,c.HSLtoRGB.apply(c,g)):c.RGBtoHSB.apply(c,g),c.origFormat=h,!1):!0}),d},setHue:function(a){this.value.h=1-a},setSaturation:function(a){this.value.s=a},setBrightness:function(a){this.value.b=1-a},setAlpha:function(a){this.value.a=parseInt(100*(1-a),10)/100},toRGB:function(a,b,c,d){a=a||this.value.h,b=b||this.value.s,c=c||this.value.b,d=d||this.value.a;var e,f,g,h,i,j,k,l;switch(a&&void 0===b&&void 0===c&&(b=a.s,c=a.v,a=a.h),h=Math.floor(6*a),i=6*a-h,j=c*(1-b),k=c*(1-i*b),l=c*(1-(1-i)*b),h%6){case 0:e=c,f=l,g=j;break;case 1:e=k,f=c,g=j;break;case 2:e=j,f=c,g=l;break;case 3:e=j,f=k,g=c;break;case 4:e=l,f=j,g=c;break;case 5:e=c,f=j,g=k}return{r:Math.floor(255*e),g:Math.floor(255*f),b:Math.floor(255*g),a:d}},toHex:function(a,b,c,d){var e=this.toRGB(a,b,c,d);return"#"+(1<<24|parseInt(e.r)<<16|parseInt(e.g)<<8|parseInt(e.b)).toString(16).substr(1)},toHSL:function(a,b,c,d){a=a||this.value.h,b=b||this.value.s,c=c||this.value.b,d=d||this.value.a;var e=a,f=(2-b)*c,g=b*c;return g/=f>0&&1>=f?f:2-f,f/=2,g>1&&(g=1),{h:e,s:g,l:f,a:d}},RGBtoHSB:function(a,b,c,d){a/=255,b/=255,c/=255;var e,f,g,h;return g=Math.max(a,b,c),h=g-Math.min(a,b,c),e=0===h?null:g===a?(b-c)/h:g===b?(c-a)/h+2:(a-b)/h+4,e=(e+360)%6*60/360,f=0===h?0:h/g,{h:this._sanitizeNumber(e),s:f,b:g,a:this._sanitizeNumber(d)}},HueToRGB:function(a,b,c){return 0>c?c+=1:c>1&&(c-=1),1>6*c?a+(b-a)*c*6:1>2*c?b:2>3*c?a+(b-a)*(2/3-c)*6:a},HSLtoRGB:function(a,b,c,d){0>b&&(b=0);var e;e=.5>=c?c*(1+b):c+b-c*b;var f=2*c-e,g=a+1/3,h=a,i=a-1/3,j=Math.round(255*this.HueToRGB(f,e,g)),k=Math.round(255*this.HueToRGB(f,e,h)),l=Math.round(255*this.HueToRGB(f,e,i));return[j,k,l,this._sanitizeNumber(d)]},toString:function(a){switch(a=a||"rgba"){case"rgb":var b=this.toRGB();return"rgb("+b.r+","+b.g+","+b.b+")";case"rgba":var b=this.toRGB();return"rgba("+b.r+","+b.g+","+b.b+","+b.a+")";case"hsl":var c=this.toHSL();return"hsl("+Math.round(360*c.h)+","+Math.round(100*c.s)+"%,"+Math.round(100*c.l)+"%)";case"hsla":var c=this.toHSL();return"hsla("+Math.round(360*c.h)+","+Math.round(100*c.s)+"%,"+Math.round(100*c.l)+"%,"+c.a+")";case"hex":return this.toHex();default:return!1}},stringParsers:[{re:/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,format:"hex",parse:function(a){return[parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16),1]}},{re:/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/,format:"hex",parse:function(a){return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16),1]}},{re:/rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*?\)/,format:"rgb",parse:function(a){return[a[1],a[2],a[3],1]}},{re:/rgb\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*?\)/,format:"rgb",parse:function(a){return[2.55*a[1],2.55*a[2],2.55*a[3],1]}},{re:/rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,format:"rgba",parse:function(a){return[a[1],a[2],a[3],a[4]]}},{re:/rgba\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,format:"rgba",parse:function(a){return[2.55*a[1],2.55*a[2],2.55*a[3],a[4]]}},{re:/hsl\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*?\)/,format:"hsl",parse:function(a){return[a[1]/360,a[2]/100,a[3]/100,a[4]]}},{re:/hsla\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,format:"hsla",parse:function(a){return[a[1]/360,a[2]/100,a[3]/100,a[4]]}},{re:/^([a-z]{3,})$/,format:"alias",parse:function(a){var b=this.colorNameToHex(a[0])||"#000000",c=this.stringParsers[0].re.exec(b),d=c&&this.stringParsers[0].parse.apply(this,[c]);return d}}],colorNameToHex:function(a){var b={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4","indianred ":"#cd5c5c","indigo ":"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};return"undefined"!=typeof b[a.toLowerCase()]?b[a.toLowerCase()]:!1}};var c={horizontal:!1,inline:!1,color:!1,format:!1,input:"input",container:!1,component:".add-on, .input-group-addon",sliders:{saturation:{maxLeft:100,maxTop:100,callLeft:"setSaturation",callTop:"setBrightness"},hue:{maxLeft:0,maxTop:100,callLeft:!1,callTop:"setHue"},alpha:{maxLeft:0,maxTop:100,callLeft:!1,callTop:"setAlpha"}},slidersHorz:{saturation:{maxLeft:100,maxTop:100,callLeft:"setSaturation",callTop:"setBrightness"},hue:{maxLeft:100,maxTop:0,callLeft:"setHue",callTop:!1},alpha:{maxLeft:100,maxTop:0,callLeft:"setAlpha",callTop:!1}},template:'
","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ia.optgroup=ia.option,ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead,ia.th=ia.td;function ja(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function ka(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function la(a){var b=ga.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function ma(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function na(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function oa(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pa(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=oa(h),f=oa(a),d=0,e=f.length;e>d;d++)pa(f[d],g[d]);if(b)if(c)for(f=f||oa(a),g=g||oa(h),d=0,e=f.length;e>d;d++)na(f[d],g[d]);else na(a,h);return g=oa(h,"script"),g.length>0&&ma(g,!i&&oa(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(ca.test(e)){f=f||k.appendChild(b.createElement("div")),g=(ba.exec(e)||["",""])[1].toLowerCase(),h=ia[g]||ia._default,f.innerHTML=h[1]+e.replace(aa,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=oa(k.appendChild(e),"script"),i&&ma(f),c)){j=0;while(e=f[j++])fa.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(oa(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&ma(oa(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(oa(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!da.test(a)&&!ia[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(aa,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(oa(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(oa(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&ea.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(oa(c,"script"),ka),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,oa(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,la),j=0;g>j;j++)h=f[j],fa.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(ha,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qa,ra={};function sa(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function ta(a){var b=l,c=ra[a];return c||(c=sa(a,b),"none"!==c&&c||(qa=(qa||n("",D='",z='\n",$='\n",j='\n",R='\n",U='\n\n'+t.OBJECT_PARAMS+" "+t.DEFAULT_PREVIEW+"\n\n",B='
\n"+t.DEFAULT_PREVIEW+"\n
\n",M='',L={width:"100%",height:"100%","min-height":"480px"},Z._isPdfRendered()&&(R=Z.pdfRendererTemplate.replace("{renderer}",Z._encodeURI(Z.pdfRendererUrl))),Z.defaults={layoutTemplates:{main1:i,main2:a,preview:r,close:o,fileIcon:n,caption:l,modalMain:p,modal:u,progress:f,size:m,footer:v,indicator:y,actions:g,actionDelete:h,actionUpload:w,actionDownload:_,actionZoom:b,actionDrag:C,btnDefault:s,btnLink:d,btnBrowse:c,zoomCache:M},previewMarkupTags:{tagBefore1:T,tagBefore2:E,tagAfter:S},previewContentTemplates:{generic:k,html:F,image:P,text:I,office:A,gdocs:D,video:z,audio:$,flash:j,object:U,pdf:R,other:B},allowedPreviewTypes:["image","html","text","video","audio","flash","pdf","object"],previewTemplates:{},previewSettings:{image:{width:"auto",height:"auto","max-width":"100%","max-height":"100%"},html:{width:"213px",height:"160px"},text:{width:"213px",height:"160px"},office:{width:"213px",height:"160px"},gdocs:{width:"213px",height:"160px"},video:{width:"213px",height:"160px"},audio:{width:"100%",height:"30px"},flash:{width:"213px",height:"160px"},object:{width:"213px",height:"160px"},pdf:{width:"100%",height:"160px"},other:{width:"213px",height:"160px"}},previewSettingsSmall:{image:{width:"auto",height:"auto","max-width":"100%","max-height":"100%"},html:{width:"100%",height:"160px"},text:{width:"100%",height:"160px"},office:{width:"100%",height:"160px"},gdocs:{width:"100%",height:"160px"},video:{width:"100%",height:"auto"},audio:{width:"100%",height:"30px"},flash:{width:"100%",height:"auto"},object:{width:"100%",height:"auto"},pdf:{width:"100%",height:"160px"},other:{width:"100%",height:"160px"}},previewZoomSettings:{image:{width:"auto",height:"auto","max-width":"100%","max-height":"100%"},html:L,text:L,office:{width:"100%",height:"100%","max-width":"100%","min-height":"480px"},gdocs:{width:"100%",height:"100%","max-width":"100%","min-height":"480px"},video:{width:"auto",height:"100%","max-width":"100%"},audio:{width:"100%",height:"30px"},flash:{width:"auto",height:"480px"},object:{width:"auto",height:"100%","max-width":"100%","min-height":"480px"},pdf:L,other:{width:"auto",height:"100%","min-height":"480px"}},mimeTypeAliases:{"video/quicktime":"video/mp4"},fileTypeSettings:{image:function(e,i){return t.compare(e,"image.*")&&!t.compare(e,/(tiff?|wmf)$/i)||t.compare(i,/\.(gif|png|jpe?g)$/i)},html:function(e,i){return t.compare(e,"text/html")||t.compare(i,/\.(htm|html)$/i)},office:function(e,i){return t.compare(e,/(word|excel|powerpoint|office)$/i)||t.compare(i,/\.(docx?|xlsx?|pptx?|pps|potx?)$/i)},gdocs:function(e,i){return t.compare(e,/(word|excel|powerpoint|office|iwork-pages|tiff?)$/i)||t.compare(i,/\.(docx?|xlsx?|pptx?|pps|potx?|rtf|ods|odt|pages|ai|dxf|ttf|tiff?|wmf|e?ps)$/i)},text:function(e,i){return t.compare(e,"text.*")||t.compare(i,/\.(xml|javascript)$/i)||t.compare(i,/\.(txt|md|csv|nfo|ini|json|php|js|css)$/i)},video:function(e,i){return t.compare(e,"video.*")&&(t.compare(e,/(ogg|mp4|mp?g|mov|webm|3gp)$/i)||t.compare(i,/\.(og?|mp4|webm|mp?g|mov|3gp)$/i))},audio:function(e,i){return t.compare(e,"audio.*")&&(t.compare(i,/(ogg|mp3|mp?g|wav)$/i)||t.compare(i,/\.(og?|mp3|mp?g|wav)$/i))},flash:function(e,i){return t.compare(e,"application/x-shockwave-flash",!0)||t.compare(i,/\.(swf)$/i)},pdf:function(e,i){return t.compare(e,"application/pdf",!0)||t.compare(i,/\.(pdf)$/i)},object:function(){return!0},other:function(){return!0}},fileActionSettings:{showRemove:!0,showUpload:!0,showDownload:!0,showZoom:!0,showDrag:!0,removeIcon:'',removeClass:"btn btn-sm btn-kv btn-default btn-outline-secondary",removeErrorClass:"btn btn-sm btn-kv btn-danger",removeTitle:"Remove file",uploadIcon:'',uploadClass:"btn btn-sm btn-kv btn-default btn-outline-secondary",uploadTitle:"Upload file",uploadRetryIcon:'',uploadRetryTitle:"Retry upload",downloadIcon:'',downloadClass:"btn btn-sm btn-kv btn-default btn-outline-secondary",downloadTitle:"Download file",zoomIcon:'',zoomClass:"btn btn-sm btn-kv btn-default btn-outline-secondary",zoomTitle:"View Details",dragIcon:'',dragClass:"text-info",dragTitle:"Move / Rearrange",dragSettings:{},indicatorNew:'',indicatorSuccess:'',indicatorError:'',indicatorLoading:'',indicatorNewTitle:"Not uploaded yet",indicatorSuccessTitle:"Uploaded",indicatorErrorTitle:"Upload Error",indicatorLoadingTitle:"Uploading ..."}},e.each(Z.defaults,function(t,i){return"allowedPreviewTypes"===t?void(void 0===Z.allowedPreviewTypes&&(Z.allowedPreviewTypes=i)):void(Z[t]=e.extend(!0,{},i,Z[t]))}),Z._initPreviewTemplates()},_initPreviewTemplates:function(){var i,a=this,r=a.previewMarkupTags,n=r.tagAfter;e.each(a.previewContentTemplates,function(e,o){t.isEmpty(a.previewTemplates[e])&&(i=r.tagBefore2,"generic"!==e&&"image"!==e&&"html"!==e&&"text"!==e||(i=r.tagBefore1),a._isPdfRendered()&&"pdf"===e&&(i=i.replace("kv-file-content","kv-file-content kv-pdf-rendered")),a.previewTemplates[e]=i+o+n)})},_initPreviewCache:function(){var i=this;i.previewCache={data:{},init:function(){var e=i.initialPreview;e.length>0&&!t.isArray(e)&&(e=e.split(i.initialPreviewDelimiter)),i.previewCache.data={content:e,config:i.initialPreviewConfig,tags:i.initialPreviewThumbTags}},count:function(){return i.previewCache.data&&i.previewCache.data.content?i.previewCache.data.content.length:0},get:function(a,r){var n,o,l,s,d,c,p,u="init_"+a,f=i.previewCache.data,m=f.config[a],v=f.content[a],g=i.previewInitId+"-"+u,h=t.ifSet("previewAsData",m,i.initialPreviewAsData),w=function(e,a,r,n,o,l,s,d,c){return d=" file-preview-initial "+t.SORT_CSS+(d?" "+d:""),i._generatePreviewTemplate(e,a,r,n,o,!1,null,d,l,s,c)};return v?(r=void 0===r?!0:r,l=t.ifSet("type",m,i.initialPreviewFileType||"generic"),d=t.ifSet("filename",m,t.ifSet("caption",m)),c=t.ifSet("filetype",m,l),s=i.previewCache.footer(a,r,m&&m.size||null),p=t.ifSet("frameClass",m),n=h?w(l,v,d,c,g,s,u,p):w("generic",v,d,c,g,s,u,p,l).setTokens({content:f.content[a]}),f.tags.length&&f.tags[a]&&(n=t.replaceTags(n,f.tags[a])),t.isEmpty(m)||t.isEmpty(m.frameAttr)||(o=e(document.createElement("div")).html(n),o.find(".file-preview-initial").attr(m.frameAttr),n=o.html(),o.remove()),n):""},add:function(e,a,r,n){var o,l=i.previewCache.data;return t.isArray(e)||(e=e.split(i.initialPreviewDelimiter)),n?(o=l.content.push(e)-1,l.config[o]=a,l.tags[o]=r):(o=e.length-1,l.content=e,l.config=a,l.tags=r),i.previewCache.data=l,o},set:function(e,a,r,n){var o,l,s=i.previewCache.data;if(e&&e.length&&(t.isArray(e)||(e=e.split(i.initialPreviewDelimiter)),l=e.filter(function(e){return null!==e}),l.length)){if(void 0===s.content&&(s.content=[]),void 0===s.config&&(s.config=[]),void 0===s.tags&&(s.tags=[]),n){for(o=0;ot;t++)a=i.previewCache.get(t),r=i.reversePreviewOrder?a+r:r+a;return e=i._getMsgSelected(n),{content:r,caption:e}},footer:function(e,a,r){var n=i.previewCache.data||{};if(t.isEmpty(n.content))return"";(t.isEmpty(n.config)||t.isEmpty(n.config[e]))&&(n.config[e]={}),a=void 0===a?!0:a;var o,l=n.config[e],s=t.ifSet("caption",l),d=t.ifSet("width",l,"auto"),c=t.ifSet("url",l,!1),p=t.ifSet("key",l,null),u=i.fileActionSettings,f=i.initialPreviewShowDelete||!1,m=l.downloadUrl||i.initialPreviewDownloadUrl||"",v=l.filename||l.caption||"",g=!!m,h=t.ifSet("showRemove",l,t.ifSet("showRemove",u,f)),w=t.ifSet("showDownload",l,t.ifSet("showDownload",u,g)),_=t.ifSet("showZoom",l,t.ifSet("showZoom",u,!0)),b=t.ifSet("showDrag",l,t.ifSet("showDrag",u,!0)),C=c===!1&&a;return w=w&&l.downloadUrl!==!1&&!!m,o=i._renderFileActions(!1,w,h,_,b,C,c,p,!0,m,v),i._getLayoutTemplate("footer").setTokens({progress:i._renderThumbProgress(),actions:o,caption:s,size:i._getSize(r),width:d,indicator:""})}},i.previewCache.init()},_isPdfRendered:function(){var e=this,t=e.usePdfRenderer,i="function"==typeof t?t():!!t;return i&&e.pdfRendererUrl},_handler:function(e,t,i){var a=this,r=a.namespace,n=t.split(" ").join(r+" ")+r;e&&e.length&&e.off(n).on(n,i)},_encodeURI:function(e){var t=this;return t.encodeUrl?encodeURI(e):e},_log:function(e){var t=this,i=t.$element.attr("id");i&&(e='"'+i+'": '+e),e="bootstrap-fileinput: "+e,"undefined"!=typeof window.console.log?window.console.log(e):window.alert(e)},_validate:function(){var e=this,t="file"===e.$element.attr("type");return t||e._log('The input "type" must be set to "file" for initializing the "bootstrap-fileinput" plugin.'),t},_errorsExist:function(){var t,i=this,a=i.$errorContainer.find("li");return a.length?!0:(t=e(document.createElement("div")).html(i.$errorContainer.html()),t.find(".kv-error-close").remove(),t.find("ul").remove(),!!e.trim(t.text()).length)},_errorHandler:function(e,t){var i=this,a=e.target.error,r=function(e){i._showError(e.replace("{name}",t))};r(a.code===a.NOT_FOUND_ERR?i.msgFileNotFound:a.code===a.SECURITY_ERR?i.msgFileSecured:a.code===a.NOT_READABLE_ERR?i.msgFileNotReadable:a.code===a.ABORT_ERR?i.msgFilePreviewAborted:i.msgFilePreviewError)},_addError:function(e){var t=this,i=t.$errorContainer;e&&i.length&&(i.html(t.errorCloseButton+e),t._handler(i.find(".kv-error-close"),"click",function(){setTimeout(function(){t.showPreview&&!t.getFrames().length&&t.clear(),i.fadeOut("slow")},10)}))},_setValidationError:function(e){var i=this;e=(e?e+" ":"")+"has-error",i.$container.removeClass(e).addClass("has-error"),t.addCss(i.$captionContainer,"is-invalid")},_resetErrors:function(e){var t=this,i=t.$errorContainer;t.isError=!1,t.$container.removeClass("has-error"),t.$captionContainer.removeClass("is-invalid"),i.html(""),e?i.fadeOut("slow"):i.hide()},_showFolderError:function(e){var t,i=this,a=i.$errorContainer;e&&(i.isAjaxUpload||i._clearFileInput(),t=i.msgFoldersNotAllowed.replace("{n}",e),i._addError(t),i._setValidationError(),a.fadeIn(800),i._raise("filefoldererror",[e,t]))},_showUploadError:function(e,t,i){var a=this,r=a.$errorContainer,n=i||"fileuploaderror",o=t&&t.id?'
  • '+e+"
  • ":"
  • "+e+"
  • ";return 0===r.find("ul").length?a._addError("
      "+o+"
    "):r.find("ul").append(o),r.fadeIn(800),a._raise(n,[t,e]),a._setValidationError("file-input-new"),!0},_showError:function(e,t,i){var a=this,r=a.$errorContainer,n=i||"fileerror";return t=t||{},t.reader=a.reader,a._addError(e),r.fadeIn(800),a._raise(n,[t,e]),a.isAjaxUpload||a._clearFileInput(),a._setValidationError("file-input-new"),a.$btnUpload.attr("disabled",!0),!0},_noFilesError:function(e){var t=this,i=t.minFileCount>1?t.filePlural:t.fileSingle,a=t.msgFilesTooLess.replace("{n}",t.minFileCount).replace("{files}",i),r=t.$errorContainer;t._addError(a),t.isError=!0,t._updateFileDetails(0),r.fadeIn(800),t._raise("fileerror",[e,a]),t._clearFileInput(),t._setValidationError()},_parseError:function(t,i,a,r){var n,o=this,l=e.trim(a+""),s=void 0!==i.responseJSON&&void 0!==i.responseJSON.error?i.responseJSON.error:i.responseText;return o.cancelling&&o.msgUploadAborted&&(l=o.msgUploadAborted),o.showAjaxErrorDetails&&s&&(s=e.trim(s.replace(/\n\s*\n/g,"\n")),n=s.length?"
    "+s+"
    ":"",l+=l?n:s),l||(l=o.msgAjaxError.replace("{operation}",t)),o.cancelling=!1,r?""+r+": "+l:l},_parseFileType:function(e,i){var a,r,n,o,l=this,s=l.allowedPreviewTypes||[];if("application/text-plain"===e)return"text";for(o=0;o-1&&(i=t.split(".").pop(),a.previewFileIconSettings&&(r=a.previewFileIconSettings[i]||a.previewFileIconSettings[i.toLowerCase()]||null),a.previewFileExtSettings&&e.each(a.previewFileExtSettings,function(e,t){return a.previewFileIconSettings[e]&&t(i)?void(r=a.previewFileIconSettings[e]):void 0})),r},_parseFilePreviewIcon:function(e,t){var i=this,a=i._getPreviewIcon(t)||i.previewFileIcon,r=e;return r.indexOf("{previewFileIcon}")>-1&&(r=r.setTokens({previewFileIconClass:i.previewFileIconClass,previewFileIcon:a})),r},_raise:function(t,i){var a=this,r=e.Event(t);if(void 0!==i?a.$element.trigger(r,i):a.$element.trigger(r),r.isDefaultPrevented()||r.result===!1)return!1;switch(t){case"filebatchuploadcomplete":case"filebatchuploadsuccess":case"fileuploaded":case"fileclear":case"filecleared":case"filereset":case"fileerror":case"filefoldererror":case"fileuploaderror":case"filebatchuploaderror":case"filedeleteerror":case"filecustomerror":case"filesuccessremove":break;default:a.ajaxAborted||(a.ajaxAborted=r.result)}return!0},_listenFullScreen:function(e){var t,i,a=this,r=a.$modal;r&&r.length&&(t=r&&r.find(".btn-fullscreen"),i=r&&r.find(".btn-borderless"),t.length&&i.length&&(t.removeClass("active").attr("aria-pressed","false"),i.removeClass("active").attr("aria-pressed","false"),e?t.addClass("active").attr("aria-pressed","true"):i.addClass("active").attr("aria-pressed","true"),r.hasClass("file-zoom-fullscreen")?a._maximizeZoomDialog():e?a._maximizeZoomDialog():i.removeClass("active").attr("aria-pressed","false")))},_listen:function(){var i,a=this,r=a.$element,n=a.$form,o=a.$container;a._handler(r,"click",function(e){r.hasClass("file-no-browse")&&(r.data("zoneClicked")?r.data("zoneClicked",!1):e.preventDefault())}),a._handler(r,"change",e.proxy(a._change,a)),a.showBrowse&&a._handler(a.$btnFile,"click",e.proxy(a._browse,a)),a._handler(o.find(".fileinput-remove:not([disabled])"),"click",e.proxy(a.clear,a)),a._handler(o.find(".fileinput-cancel"),"click",e.proxy(a.cancel,a)),a._initDragDrop(),a._handler(n,"reset",e.proxy(a.clear,a)),a.isAjaxUpload||a._handler(n,"submit",e.proxy(a._submitForm,a)),a._handler(a.$container.find(".fileinput-upload"),"click",e.proxy(a._uploadClick,a)),a._handler(e(window),"resize",function(){a._listenFullScreen(screen.width===window.innerWidth&&screen.height===window.innerHeight)}),i="webkitfullscreenchange mozfullscreenchange fullscreenchange MSFullscreenChange", + a._handler(e(document),i,function(){a._listenFullScreen(t.checkFullScreen())}),a._autoFitContent(),a._initClickable(),a._refreshPreview()},_autoFitContent:function(){var t,i=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,a=this,r=400>i?a.previewSettingsSmall||a.defaults.previewSettingsSmall:a.previewSettings||a.defaults.previewSettings;e.each(r,function(e,i){t=".file-preview-frame .file-preview-"+e,a.$preview.find(t+".kv-preview-data,"+t+" .kv-preview-data").css(i)})},_scanDroppedItems:function(e,t,i){i=i||"";var a,r,n,o=this,l=function(e){o._log("Error scanning dropped files!"),o._log(e)};e.isFile?e.file(function(e){t.push(e)},l):e.isDirectory&&(r=e.createReader(),(n=function(){r.readEntries(function(r){if(r&&r.length>0){for(a=0;a-1;return a._zoneDragDropInit(i),a.isDisabled||!n?(i.originalEvent.dataTransfer.effectAllowed="none",void(i.originalEvent.dataTransfer.dropEffect="none")):void(a._raise("fileDragEnter",{sourceEvent:i,files:r.types.Files})&&t.addCss(a.$dropZone,"file-highlighted"))},_zoneDragLeave:function(e){var t=this;t._zoneDragDropInit(e),t.isDisabled||t._raise("fileDragLeave",{sourceEvent:e})&&t.$dropZone.removeClass("file-highlighted")},_zoneDrop:function(e){var i,a=this,r=a.$element,n=e.originalEvent.dataTransfer,o=n.files,l=n.items,s=t.getDragDropFolders(l),d=function(){a.isAjaxUpload?a._change(e,o):(a.changeTriggered=!0,r.get(0).files=o,setTimeout(function(){a.changeTriggered=!1,r.trigger("change"+a.namespace)},10)),a.$dropZone.removeClass("file-highlighted")};if(e.preventDefault(),!a.isDisabled&&!t.isEmpty(o)&&a._raise("fileDragDrop",{sourceEvent:e,files:o}))if(s>0){if(!a.isAjaxUpload)return void a._showFolderError(s);for(o=[],i=0;i
    '+ value +'
    '+ tableHtml.join( "" ) +'
    ' ); + +} + +/* + * 根据表格已有的图表属性初始化当前图表属性 + */ +function initUserConfig ( config ) { + + var parsedConfig = {}; + + if ( !config ) { + return; + } + + config = config.split( ";" ); + + $.each( config, function ( index, item ) { + + item = item.split( ":" ); + parsedConfig[ item[ 0 ] ] = item[ 1 ]; + + } ); + + setUserConfig( parsedConfig ); + +} + +function initEvent () { + + var cacheValue = null, + //图表类型数 + typeViewCount = chartsConfig.length- 1, + $chartsTypeViewBox = $( '#scrollBed .view-box' ); + + $( ".charts-format" ).delegate( ".format-ctrl", "change", function () { + + renderCharts(); + + } ) + + $( ".table-view" ).delegate( ".data-item", "focus", function () { + + cacheValue = this.value; + + } ).delegate( ".data-item", "blur", function () { + + if ( this.value !== cacheValue ) { + renderCharts(); + } + + cacheValue = null; + + } ); + + $( "#buttonContainer" ).delegate( "a", "click", function (e) { + + e.preventDefault(); + + if ( this.getAttribute( "data-title" ) === 'prev' ) { + + if ( currentChartType > 0 ) { + currentChartType--; + updateViewType( currentChartType ); + } + + } else { + + if ( currentChartType < typeViewCount ) { + currentChartType++; + updateViewType( currentChartType ); + } + + } + + } ); + + //图表类型变化 + $( '#scrollBed' ).delegate( ".view-box", "click", function (e) { + + var index = $( this ).attr( "data-chart-type" ); + $chartsTypeViewBox.removeClass( "selected" ); + $( $chartsTypeViewBox[ index ] ).addClass( "selected" ); + + currentChartType = index | 0; + + //饼图, 禁用部分配置 + if ( currentChartType === chartsConfig.length - 1 ) { + + disableNotPieConfig(); + + //启用完整配置 + } else { + + enableNotPieConfig(); + + } + + renderCharts(); + + } ); + +} + +function renderCharts () { + + var data = collectData(); + + $('#chartsContainer').highcharts( $.extend( {}, chartsConfig[ currentChartType ], { + + credits: { + enabled: false + }, + exporting: { + enabled: false + }, + title: { + text: data.title, + x: -20 //center + }, + subtitle: { + text: data.subTitle, + x: -20 + }, + xAxis: { + title: { + text: data.xTitle + }, + categories: data.categories + }, + yAxis: { + title: { + text: data.yTitle + }, + plotLines: [{ + value: 0, + width: 1, + color: '#808080' + }] + }, + tooltip: { + enabled: true, + valueSuffix: data.suffix + }, + legend: { + layout: 'vertical', + align: 'right', + verticalAlign: 'middle', + borderWidth: 1 + }, + series: data.series + + } )); + +} + +function updateViewType ( index ) { + + $( "#scrollBed" ).css( 'marginLeft', -index*324+'px' ); + +} + +function collectData () { + + var form = document.forms[ 'data-form' ], + data = null; + + if ( currentChartType !== chartsConfig.length - 1 ) { + + data = getSeriesAndCategories(); + $.extend( data, getUserConfig() ); + + //饼图数据格式 + } else { + data = getSeriesForPieChart(); + data.title = form[ 'title' ].value; + data.suffix = form[ 'unit' ].value; + } + + return data; + +} + +/** + * 获取用户配置信息 + */ +function getUserConfig () { + + var form = document.forms[ 'data-form' ], + info = { + title: form[ 'title' ].value, + subTitle: form[ 'sub-title' ].value, + xTitle: form[ 'x-title' ].value, + yTitle: form[ 'y-title' ].value, + suffix: form[ 'unit' ].value, + //数据对齐方式 + tableDataFormat: getTableDataFormat (), + //饼图提示文字 + tip: $( "#tipInput" ).val() + }; + + return info; + +} + +function setUserConfig ( config ) { + + var form = document.forms[ 'data-form' ]; + + config.title && ( form[ 'title' ].value = config.title ); + config.subTitle && ( form[ 'sub-title' ].value = config.subTitle ); + config.xTitle && ( form[ 'x-title' ].value = config.xTitle ); + config.yTitle && ( form[ 'y-title' ].value = config.yTitle ); + config.suffix && ( form[ 'unit' ].value = config.suffix ); + config.dataFormat == "-1" && ( form[ 'charts-format' ][ 1 ].checked = true ); + config.tip && ( form[ 'tip' ].value = config.tip ); + currentChartType = config.chartType || 0; + +} + +function getSeriesAndCategories () { + + var form = document.forms[ 'data-form' ], + series = [], + categories = [], + tmp = [], + tableData = getTableData(); + + //反转数据 + if ( getTableDataFormat() === "-1" ) { + + for ( var i = 0, len = tableData.length; i < len; i++ ) { + + for ( var j = 0, jlen = tableData[ i ].length; j < jlen; j++ ) { + + if ( !tmp[ j ] ) { + tmp[ j ] = []; + } + + tmp[ j ][ i ] = tableData[ i ][ j ]; + + } + + } + + tableData = tmp; + + } + + categories = tableData[0].slice( 1 ); + + for ( var i = 1, data; data = tableData[ i ]; i++ ) { + + series.push( { + name: data[ 0 ], + data: data.slice( 1 ) + } ); + + } + + return { + series: series, + categories: categories + }; + +} + +/* + * 获取数据源数据对齐方式 + */ +function getTableDataFormat () { + + var form = document.forms[ 'data-form' ], + items = form['charts-format']; + + return items[ 0 ].checked ? items[ 0 ].value : items[ 1 ].value; + +} + +/* + * 禁用非饼图类型的配置项 + */ +function disableNotPieConfig() { + + updateConfigItem( 'disable' ); + +} + +/* + * 启用非饼图类型的配置项 + */ +function enableNotPieConfig() { + + updateConfigItem( 'enable' ); + +} + +function updateConfigItem ( value ) { + + var table = $( "#showTable" )[ 0 ], + isDisable = value === 'disable' ? true : false; + + //table中的input处理 + for ( var i = 2 , row; row = table.rows[ i ]; i++ ) { + + for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) { + + $( "input", cell ).attr( "disabled", isDisable ); + + } + + } + + //其他项处理 + $( "input.not-pie-item" ).attr( "disabled", isDisable ); + $( "#tipInput" ).attr( "disabled", !isDisable ) + +} + +/* + * 获取饼图数据 + * 饼图的数据只取第一行的 + **/ +function getSeriesForPieChart () { + + var series = { + type: 'pie', + name: $("#tipInput").val(), + data: [] + }, + tableData = getTableData(); + + + for ( var j = 1, jlen = tableData[ 0 ].length; j < jlen; j++ ) { + + var title = tableData[ 0 ][ j ], + val = tableData[ 1 ][ j ]; + + series.data.push( [ title, val ] ); + + } + + return { + series: [ series ] + }; + +} + +function getTableData () { + + var table = document.getElementById( "showTable" ), + xCount = table.rows[0].cells.length - 1, + values = getTableInputValue(); + + for ( var i = 0, value; value = values[ i ]; i++ ) { + + tableData[ Math.floor( i / xCount ) + 1 ][ i % xCount + 1 ] = values[ i ]; + + } + + return tableData; + +} + +function getTableInputValue () { + + var table = document.getElementById( "showTable" ), + inputs = table.getElementsByTagName( "input" ), + values = []; + + for ( var i = 0, input; input = inputs[ i ]; i++ ) { + values.push( input.value | 0 ); + } + + return values; + +} + +function getCellValue ( cell ) { + + var value = utils.trim( ( cell.innerText || cell.textContent || '' ) ); + + return value.replace( new RegExp( UE.dom.domUtils.fillChar, 'g' ), '' ).replace( /^\s+|\s+$/g, '' ); + +} + + +//dialog确认事件 +dialog.onok = function () { + + //收集信息 + var form = document.forms[ 'data-form' ], + info = getUserConfig(); + + //添加图表类型 + info.chartType = currentChartType; + + //同步表格数据到编辑器 + syncTableData(); + + //执行图表命令 + editor.execCommand( 'charts', info ); + +}; + +/* + * 同步图表编辑视图的表格数据到编辑器里的原始表格 + */ +function syncTableData () { + + var tableData = getTableData(); + + for ( var i = 1, row; row = editorTable.rows[ i ]; i++ ) { + + for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) { + + cell.innerHTML = tableData[ i ] [ j ]; + + } + + } + +} \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/charts/images/charts0.png b/public/vendor/ueditor/dialogs/charts/images/charts0.png new file mode 100644 index 0000000..9485e5e Binary files /dev/null and b/public/vendor/ueditor/dialogs/charts/images/charts0.png differ diff --git a/public/vendor/ueditor/dialogs/charts/images/charts1.png b/public/vendor/ueditor/dialogs/charts/images/charts1.png new file mode 100644 index 0000000..b5a0039 Binary files /dev/null and b/public/vendor/ueditor/dialogs/charts/images/charts1.png differ diff --git a/public/vendor/ueditor/dialogs/charts/images/charts2.png b/public/vendor/ueditor/dialogs/charts/images/charts2.png new file mode 100644 index 0000000..7c91a39 Binary files /dev/null and b/public/vendor/ueditor/dialogs/charts/images/charts2.png differ diff --git a/public/vendor/ueditor/dialogs/charts/images/charts3.png b/public/vendor/ueditor/dialogs/charts/images/charts3.png new file mode 100644 index 0000000..a6bc29b Binary files /dev/null and b/public/vendor/ueditor/dialogs/charts/images/charts3.png differ diff --git a/public/vendor/ueditor/dialogs/charts/images/charts4.png b/public/vendor/ueditor/dialogs/charts/images/charts4.png new file mode 100644 index 0000000..742006a Binary files /dev/null and b/public/vendor/ueditor/dialogs/charts/images/charts4.png differ diff --git a/public/vendor/ueditor/dialogs/charts/images/charts5.png b/public/vendor/ueditor/dialogs/charts/images/charts5.png new file mode 100644 index 0000000..c49a296 Binary files /dev/null and b/public/vendor/ueditor/dialogs/charts/images/charts5.png differ diff --git a/public/vendor/ueditor/dialogs/emotion/emotion.css b/public/vendor/ueditor/dialogs/emotion/emotion.css new file mode 100644 index 0000000..f801105 --- /dev/null +++ b/public/vendor/ueditor/dialogs/emotion/emotion.css @@ -0,0 +1,43 @@ +.jd img{ + background:transparent url(images/jxface2.gif?v=1.1) no-repeat scroll left top; + cursor:pointer;width:35px;height:35px;display:block; +} +.pp img{ + background:transparent url(images/fface.gif?v=1.1) no-repeat scroll left top; + cursor:pointer;width:25px;height:25px;display:block; +} +.ldw img{ + background:transparent url(images/wface.gif?v=1.1) no-repeat scroll left top; + cursor:pointer;width:35px;height:35px;display:block; +} +.tsj img{ + background:transparent url(images/tface.gif?v=1.1) no-repeat scroll left top; + cursor:pointer;width:35px;height:35px;display:block; +} +.cat img{ + background:transparent url(images/cface.gif?v=1.1) no-repeat scroll left top; + cursor:pointer;width:35px;height:35px;display:block; +} +.bb img{ + background:transparent url(images/bface.gif?v=1.1) no-repeat scroll left top; + cursor:pointer;width:35px;height:35px;display:block; +} +.youa img{ + background:transparent url(images/yface.gif?v=1.1) no-repeat scroll left top; + cursor:pointer;width:35px;height:35px;display:block; +} + +.smileytable td {height: 37px;} +#tabPanel{margin-left:5px;overflow: hidden;} +#tabContent {float:left;background:#FFFFFF;} +#tabContent div{display: none;width:480px;overflow:hidden;} +#tabIconReview.show{left:17px;display:block;} +.menuFocus{background:#ACCD3C;} +.menuDefault{background:#FFFFFF;} +#tabIconReview{position:absolute;left:406px;left:398px \9;top:41px;z-index:65533;width:90px;height:76px;} +img.review{width:90px;height:76px;border:2px solid #9cb945;background:#FFFFFF;background-position:center;background-repeat:no-repeat;} + +.wrapper .tabbody{position:relative;float:left;clear:both;padding:10px;width: 95%;} +.tabbody table{width: 100%;} +.tabbody td{border:1px solid #BAC498;} +.tabbody td span{display: block;zoom:1;padding:0 4px;} \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/emotion/emotion.html b/public/vendor/ueditor/dialogs/emotion/emotion.html new file mode 100644 index 0000000..fca0850 --- /dev/null +++ b/public/vendor/ueditor/dialogs/emotion/emotion.html @@ -0,0 +1,54 @@ + + + + + + + + + + +

    +
    + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/emotion/emotion.js b/public/vendor/ueditor/dialogs/emotion/emotion.js new file mode 100644 index 0000000..6e158a9 --- /dev/null +++ b/public/vendor/ueditor/dialogs/emotion/emotion.js @@ -0,0 +1,186 @@ +window.onload = function () { + editor.setOpt({ + emotionLocalization:false + }); + + emotion.SmileyPath = editor.options.emotionLocalization === true ? 'images/' : "http://img.baidu.com/hi/"; + emotion.SmileyBox = createTabList( emotion.tabNum ); + emotion.tabExist = createArr( emotion.tabNum ); + + initImgName(); + initEvtHandler( "tabHeads" ); +}; + +function initImgName() { + for ( var pro in emotion.SmilmgName ) { + var tempName = emotion.SmilmgName[pro], + tempBox = emotion.SmileyBox[pro], + tempStr = ""; + + if ( tempBox.length ) return; + for ( var i = 1; i <= tempName[1]; i++ ) { + tempStr = tempName[0]; + if ( i < 10 ) tempStr = tempStr + '0'; + tempStr = tempStr + i + '.gif'; + tempBox.push( tempStr ); + } + } +} + +function initEvtHandler( conId ) { + var tabHeads = $G( conId ); + for ( var i = 0, j = 0; i < tabHeads.childNodes.length; i++ ) { + var tabObj = tabHeads.childNodes[i]; + if ( tabObj.nodeType == 1 ) { + domUtils.on( tabObj, "click", (function ( index ) { + return function () { + switchTab( index ); + }; + })( j ) ); + j++; + } + } + switchTab( 0 ); + $G( "tabIconReview" ).style.display = 'none'; +} + +function InsertSmiley( url, evt ) { + var obj = { + src:editor.options.emotionLocalization ? editor.options.UEDITOR_HOME_URL + "dialogs/emotion/" + url : url + }; + obj._src = obj.src; + editor.execCommand( 'insertimage', obj ); + if ( !evt.ctrlKey ) { + dialog.popup.hide(); + } +} + +function switchTab( index ) { + + autoHeight( index ); + if ( emotion.tabExist[index] == 0 ) { + emotion.tabExist[index] = 1; + createTab( 'tab' + index ); + } + //获取呈现元素句柄数组 + var tabHeads = $G( "tabHeads" ).getElementsByTagName( "span" ), + tabBodys = $G( "tabBodys" ).getElementsByTagName( "div" ), + i = 0, L = tabHeads.length; + //隐藏所有呈现元素 + for ( ; i < L; i++ ) { + tabHeads[i].className = ""; + tabBodys[i].style.display = "none"; + } + //显示对应呈现元素 + tabHeads[index].className = "focus"; + tabBodys[index].style.display = "block"; +} + +function autoHeight( index ) { + var iframe = dialog.getDom( "iframe" ), + parent = iframe.parentNode.parentNode; + switch ( index ) { + case 0: + iframe.style.height = "380px"; + parent.style.height = "392px"; + break; + case 1: + iframe.style.height = "220px"; + parent.style.height = "232px"; + break; + case 2: + iframe.style.height = "260px"; + parent.style.height = "272px"; + break; + case 3: + iframe.style.height = "300px"; + parent.style.height = "312px"; + break; + case 4: + iframe.style.height = "140px"; + parent.style.height = "152px"; + break; + case 5: + iframe.style.height = "260px"; + parent.style.height = "272px"; + break; + case 6: + iframe.style.height = "230px"; + parent.style.height = "242px"; + break; + default: + + } +} + + +function createTab( tabName ) { + var faceVersion = "?v=1.1", //版本号 + tab = $G( tabName ), //获取将要生成的Div句柄 + imagePath = emotion.SmileyPath + emotion.imageFolders[tabName], //获取显示表情和预览表情的路径 + positionLine = 11 / 2, //中间数 + iWidth = iHeight = 35, //图片长宽 + iColWidth = 3, //表格剩余空间的显示比例 + tableCss = emotion.imageCss[tabName], + cssOffset = emotion.imageCssOffset[tabName], + textHTML = [''], + i = 0, imgNum = emotion.SmileyBox[tabName].length, imgColNum = 11, faceImage, + sUrl, realUrl, posflag, offset, infor; + + for ( ; i < imgNum; ) { + textHTML.push( '' ); + for ( var j = 0; j < imgColNum; j++, i++ ) { + faceImage = emotion.SmileyBox[tabName][i]; + if ( faceImage ) { + sUrl = imagePath + faceImage + faceVersion; + realUrl = imagePath + faceImage; + posflag = j < positionLine ? 0 : 1; + offset = cssOffset * i * (-1) - 1; + infor = emotion.SmileyInfor[tabName][i]; + + textHTML.push( '' ); + } + textHTML.push( '' ); + } + textHTML.push( '
    ' ); + textHTML.push( '' ); + textHTML.push( '' ); + textHTML.push( '' ); + } else { + textHTML.push( '' ); + } + textHTML.push( '
    ' ); + textHTML = textHTML.join( "" ); + tab.innerHTML = textHTML; +} + +function over( td, srcPath, posFlag ) { + td.style.backgroundColor = "#ACCD3C"; + $G( 'faceReview' ).style.backgroundImage = "url(" + srcPath + ")"; + if ( posFlag == 1 ) $G( "tabIconReview" ).className = "show"; + $G( "tabIconReview" ).style.display = 'block'; +} + +function out( td ) { + td.style.backgroundColor = "transparent"; + var tabIconRevew = $G( "tabIconReview" ); + tabIconRevew.className = ""; + tabIconRevew.style.display = 'none'; +} + +function createTabList( tabNum ) { + var obj = {}; + for ( var i = 0; i < tabNum; i++ ) { + obj["tab" + i] = []; + } + return obj; +} + +function createArr( tabNum ) { + var arr = []; + for ( var i = 0; i < tabNum; i++ ) { + arr[i] = 0; + } + return arr; +} + diff --git a/public/vendor/ueditor/dialogs/emotion/images/0.gif b/public/vendor/ueditor/dialogs/emotion/images/0.gif new file mode 100644 index 0000000..6964168 Binary files /dev/null and b/public/vendor/ueditor/dialogs/emotion/images/0.gif differ diff --git a/public/vendor/ueditor/dialogs/emotion/images/bface.gif b/public/vendor/ueditor/dialogs/emotion/images/bface.gif new file mode 100644 index 0000000..14fe618 Binary files /dev/null and b/public/vendor/ueditor/dialogs/emotion/images/bface.gif differ diff --git a/public/vendor/ueditor/dialogs/emotion/images/cface.gif b/public/vendor/ueditor/dialogs/emotion/images/cface.gif new file mode 100644 index 0000000..bff947f Binary files /dev/null and b/public/vendor/ueditor/dialogs/emotion/images/cface.gif differ diff --git a/public/vendor/ueditor/dialogs/emotion/images/fface.gif b/public/vendor/ueditor/dialogs/emotion/images/fface.gif new file mode 100644 index 0000000..0d8a6af Binary files /dev/null and b/public/vendor/ueditor/dialogs/emotion/images/fface.gif differ diff --git a/public/vendor/ueditor/dialogs/emotion/images/jxface2.gif b/public/vendor/ueditor/dialogs/emotion/images/jxface2.gif new file mode 100644 index 0000000..a959c90 Binary files /dev/null and b/public/vendor/ueditor/dialogs/emotion/images/jxface2.gif differ diff --git a/public/vendor/ueditor/dialogs/emotion/images/neweditor-tab-bg.png b/public/vendor/ueditor/dialogs/emotion/images/neweditor-tab-bg.png new file mode 100644 index 0000000..8f398b0 Binary files /dev/null and b/public/vendor/ueditor/dialogs/emotion/images/neweditor-tab-bg.png differ diff --git a/public/vendor/ueditor/dialogs/emotion/images/tface.gif b/public/vendor/ueditor/dialogs/emotion/images/tface.gif new file mode 100644 index 0000000..1354f54 Binary files /dev/null and b/public/vendor/ueditor/dialogs/emotion/images/tface.gif differ diff --git a/public/vendor/ueditor/dialogs/emotion/images/wface.gif b/public/vendor/ueditor/dialogs/emotion/images/wface.gif new file mode 100644 index 0000000..5667160 Binary files /dev/null and b/public/vendor/ueditor/dialogs/emotion/images/wface.gif differ diff --git a/public/vendor/ueditor/dialogs/emotion/images/yface.gif b/public/vendor/ueditor/dialogs/emotion/images/yface.gif new file mode 100644 index 0000000..51608be Binary files /dev/null and b/public/vendor/ueditor/dialogs/emotion/images/yface.gif differ diff --git a/public/vendor/ueditor/dialogs/gmap/gmap.html b/public/vendor/ueditor/dialogs/gmap/gmap.html new file mode 100644 index 0000000..c4cbfe6 --- /dev/null +++ b/public/vendor/ueditor/dialogs/gmap/gmap.html @@ -0,0 +1,89 @@ + + + + + + + + + + +
    + + + + + + +
    +
    +
    + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/help/help.css b/public/vendor/ueditor/dialogs/help/help.css new file mode 100644 index 0000000..4478475 --- /dev/null +++ b/public/vendor/ueditor/dialogs/help/help.css @@ -0,0 +1,7 @@ +.wrapper{width: 370px;margin: 10px auto;zoom: 1;} +.tabbody{height: 360px;} +.tabbody .panel{width:100%;height: 360px;position: absolute;background: #fff;} +.tabbody .panel h1{font-size:26px;margin: 5px 0 0 5px;} +.tabbody .panel p{font-size:12px;margin: 5px 0 0 5px;} +.tabbody table{width:90%;line-height: 20px;margin: 5px 0 0 5px;;} +.tabbody table thead{font-weight: bold;line-height: 25px;} \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/help/help.html b/public/vendor/ueditor/dialogs/help/help.html new file mode 100644 index 0000000..9e50060 --- /dev/null +++ b/public/vendor/ueditor/dialogs/help/help.html @@ -0,0 +1,82 @@ + + + + 帮助 + + + + + +
    +
    + + +
    +
    +
    +

    UEditor

    +

    +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ctrl+b
    ctrl+c
    ctrl+x
    ctrl+v
    ctrl+y
    ctrl+z
    ctrl+i
    ctrl+u
    ctrl+a
    shift+enter
    alt+z
    +
    +
    +
    + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/help/help.js b/public/vendor/ueditor/dialogs/help/help.js new file mode 100644 index 0000000..9a2272e --- /dev/null +++ b/public/vendor/ueditor/dialogs/help/help.js @@ -0,0 +1,56 @@ +/** + * Created with JetBrains PhpStorm. + * User: xuheng + * Date: 12-9-26 + * Time: 下午1:06 + * To change this template use File | Settings | File Templates. + */ +/** + * tab点击处理事件 + * @param tabHeads + * @param tabBodys + * @param obj + */ +function clickHandler( tabHeads,tabBodys,obj ) { + //head样式更改 + for ( var k = 0, len = tabHeads.length; k < len; k++ ) { + tabHeads[k].className = ""; + } + obj.className = "focus"; + //body显隐 + var tabSrc = obj.getAttribute( "tabSrc" ); + for ( var j = 0, length = tabBodys.length; j < length; j++ ) { + var body = tabBodys[j], + id = body.getAttribute( "id" ); + body.onclick = function(){ + this.style.zoom = 1; + }; + if ( id != tabSrc ) { + body.style.zIndex = 1; + } else { + body.style.zIndex = 200; + } + } + +} + +/** + * TAB切换 + * @param tabParentId tab的父节点ID或者对象本身 + */ +function switchTab( tabParentId ) { + var tabElements = $G( tabParentId ).children, + tabHeads = tabElements[0].children, + tabBodys = tabElements[1].children; + + for ( var i = 0, length = tabHeads.length; i < length; i++ ) { + var head = tabHeads[i]; + if ( head.className === "focus" )clickHandler(tabHeads,tabBodys, head ); + head.onclick = function () { + clickHandler(tabHeads,tabBodys,this); + } + } +} +switchTab("helptab"); + +document.getElementById('version').innerHTML = parent.UE.version; \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/image/image.css b/public/vendor/ueditor/dialogs/image/image.css new file mode 100644 index 0000000..52c2295 --- /dev/null +++ b/public/vendor/ueditor/dialogs/image/image.css @@ -0,0 +1,894 @@ +@charset "utf-8"; +/* dialog样式 */ +.wrapper { + zoom: 1; + width: 630px; + *width: 626px; + height: 380px; + margin: 0 auto; + padding: 10px; + position: relative; + font-family: sans-serif; +} + +/*tab样式框大小*/ +.tabhead { + float:left; +} +.tabbody { + width: 100%; + height: 346px; + position: relative; + clear: both; +} + +.tabbody .panel { + position: absolute; + width: 0; + height: 0; + background: #fff; + overflow: hidden; + display: none; +} + +.tabbody .panel.focus { + width: 100%; + height: 346px; + display: block; +} + +/* 图片对齐方式 */ +.alignBar{ + float:right; + margin-top: 5px; + position: relative; +} + +.alignBar .algnLabel{ + float:left; + height: 20px; + line-height: 20px; +} + +.alignBar #alignIcon{ + zoom:1; + _display: inline; + display: inline-block; + position: relative; +} +.alignBar #alignIcon span{ + float: left; + cursor: pointer; + display: block; + width: 19px; + height: 17px; + margin-right: 3px; + margin-left: 3px; + background-image: url(./images/alignicon.jpg); +} +.alignBar #alignIcon .none-align{ + background-position: 0 -18px; +} +.alignBar #alignIcon .left-align{ + background-position: -20px -18px; +} +.alignBar #alignIcon .right-align{ + background-position: -40px -18px; +} +.alignBar #alignIcon .center-align{ + background-position: -60px -18px; +} +.alignBar #alignIcon .none-align.focus{ + background-position: 0 0; +} +.alignBar #alignIcon .left-align.focus{ + background-position: -20px 0; +} +.alignBar #alignIcon .right-align.focus{ + background-position: -40px 0; +} +.alignBar #alignIcon .center-align.focus{ + background-position: -60px 0; +} + + + + +/* 远程图片样式 */ +#remote { + z-index: 200; +} + +#remote .top{ + width: 100%; + margin-top: 25px; +} +#remote .left{ + display: block; + float: left; + width: 300px; + height:10px; +} +#remote .right{ + display: block; + float: right; + width: 300px; + height:10px; +} +#remote .row{ + margin-left: 20px; + clear: both; + height: 40px; +} + +#remote .row label{ + text-align: center; + width: 50px; + zoom:1; + _display: inline; + display:inline-block; + vertical-align: middle; +} +#remote .row label.algnLabel{ + float: left; + +} + +#remote input.text{ + width: 150px; + padding: 3px 6px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +#remote input.text:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); +} +#remote #url{ + width: 500px; + margin-bottom: 2px; +} +#remote #width, +#remote #height{ + width: 20px; + margin-left: 2px; + margin-right: 2px; +} +#remote #border, +#remote #vhSpace, +#remote #title{ + width: 180px; + margin-right: 5px; +} +#remote #lock{ +} +#remote #lockicon{ + zoom: 1; + _display:inline; + display: inline-block; + width: 20px; + height: 20px; + background: url("../../themes/default/images/lock.gif") -13px -13px no-repeat; + vertical-align: middle; +} +#remote #preview{ + clear: both; + width: 260px; + height: 240px; + z-index: 9999; + margin-top: 10px; + background-color: #eee; + overflow: hidden; +} + +/* 上传图片 */ +.tabbody #upload.panel { + width: 0; + height: 0; + overflow: hidden; + position: absolute !important; + clip: rect(1px, 1px, 1px, 1px); + background: #fff; + display: block; +} + +.tabbody #upload.panel.focus { + width: 100%; + height: 346px; + display: block; + clip: auto; +} + +#upload .queueList { + margin: 0; + width: 100%; + height: 100%; + position: absolute; + overflow: hidden; +} + +#upload p { + margin: 0; +} + +.element-invisible { + width: 0 !important; + height: 0 !important; + border: 0; + padding: 0; + margin: 0; + overflow: hidden; + position: absolute !important; + clip: rect(1px, 1px, 1px, 1px); +} + +#upload .placeholder { + margin: 10px; + border: 2px dashed #e6e6e6; + *border: 0px dashed #e6e6e6; + height: 172px; + padding-top: 150px; + text-align: center; + background: url(./images/image.png) center 70px no-repeat; + color: #cccccc; + font-size: 18px; + position: relative; + top:0; + *top: 10px; +} + +#upload .placeholder .webuploader-pick { + font-size: 18px; + background: #00b7ee; + border-radius: 3px; + line-height: 44px; + padding: 0 30px; + *width: 120px; + color: #fff; + display: inline-block; + margin: 0 auto 20px auto; + cursor: pointer; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); +} + +#upload .placeholder .webuploader-pick-hover { + background: #00a2d4; +} + + +#filePickerContainer { + text-align: center; +} + +#upload .placeholder .flashTip { + color: #666666; + font-size: 12px; + position: absolute; + width: 100%; + text-align: center; + bottom: 20px; +} + +#upload .placeholder .flashTip a { + color: #0785d1; + text-decoration: none; +} + +#upload .placeholder .flashTip a:hover { + text-decoration: underline; +} + +#upload .placeholder.webuploader-dnd-over { + border-color: #999999; +} + +#upload .filelist { + list-style: none; + margin: 0; + padding: 0; + overflow-x: hidden; + overflow-y: auto; + position: relative; + height: 300px; +} + +#upload .filelist:after { + content: ''; + display: block; + width: 0; + height: 0; + overflow: hidden; + clear: both; + position: relative; +} + +#upload .filelist li { + width: 113px; + height: 113px; + background: url(./images/bg.png); + text-align: center; + margin: 9px 0 0 9px; + *margin: 6px 0 0 6px; + position: relative; + display: block; + float: left; + overflow: hidden; + font-size: 12px; +} + +#upload .filelist li p.log { + position: relative; + top: -45px; +} + +#upload .filelist li p.title { + position: absolute; + top: 0; + left: 0; + width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + top: 5px; + text-indent: 5px; + text-align: left; +} + +#upload .filelist li p.progress { + position: absolute; + width: 100%; + bottom: 0; + left: 0; + height: 8px; + overflow: hidden; + z-index: 50; + margin: 0; + border-radius: 0; + background: none; + -webkit-box-shadow: 0 0 0; +} + +#upload .filelist li p.progress span { + display: none; + overflow: hidden; + width: 0; + height: 100%; + background: #1483d8 url(./images/progress.png) repeat-x; + + -webit-transition: width 200ms linear; + -moz-transition: width 200ms linear; + -o-transition: width 200ms linear; + -ms-transition: width 200ms linear; + transition: width 200ms linear; + + -webkit-animation: progressmove 2s linear infinite; + -moz-animation: progressmove 2s linear infinite; + -o-animation: progressmove 2s linear infinite; + -ms-animation: progressmove 2s linear infinite; + animation: progressmove 2s linear infinite; + + -webkit-transform: translateZ(0); +} + +@-webkit-keyframes progressmove { + 0% { + background-position: 0 0; + } + 100% { + background-position: 17px 0; + } +} + +@-moz-keyframes progressmove { + 0% { + background-position: 0 0; + } + 100% { + background-position: 17px 0; + } +} + +@keyframes progressmove { + 0% { + background-position: 0 0; + } + 100% { + background-position: 17px 0; + } +} + +#upload .filelist li p.imgWrap { + position: relative; + z-index: 2; + line-height: 113px; + vertical-align: middle; + overflow: hidden; + width: 113px; + height: 113px; + + -webkit-transform-origin: 50% 50%; + -moz-transform-origin: 50% 50%; + -o-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + transform-origin: 50% 50%; + + -webit-transition: 200ms ease-out; + -moz-transition: 200ms ease-out; + -o-transition: 200ms ease-out; + -ms-transition: 200ms ease-out; + transition: 200ms ease-out; +} + +#upload .filelist li img { + width: 100%; +} + +#upload .filelist li p.error { + background: #f43838; + color: #fff; + position: absolute; + bottom: 0; + left: 0; + height: 28px; + line-height: 28px; + width: 100%; + z-index: 100; + display:none; +} + +#upload .filelist li .success { + display: block; + position: absolute; + left: 0; + bottom: 0; + height: 40px; + width: 100%; + z-index: 200; + background: url(./images/success.png) no-repeat right bottom; + background: url(./images/success.gif) no-repeat right bottom \9; +} + +#upload .filelist li.filePickerBlock { + width: 113px; + height: 113px; + background: url(./images/image.png) no-repeat center 12px; + border: 1px solid #eeeeee; + border-radius: 0; +} +#upload .filelist li.filePickerBlock div.webuploader-pick { + width: 100%; + height: 100%; + margin: 0; + padding: 0; + opacity: 0; + background: none; + font-size: 0; +} + +#upload .filelist div.file-panel { + position: absolute; + height: 0; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \0; + background: rgba(0, 0, 0, 0.5); + width: 100%; + top: 0; + left: 0; + overflow: hidden; + z-index: 300; +} + +#upload .filelist div.file-panel span { + width: 24px; + height: 24px; + display: inline; + float: right; + text-indent: -9999px; + overflow: hidden; + background: url(./images/icons.png) no-repeat; + background: url(./images/icons.gif) no-repeat \9; + margin: 5px 1px 1px; + cursor: pointer; + -webkit-tap-highlight-color: rgba(0,0,0,0); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +#upload .filelist div.file-panel span.rotateLeft { + display:none; + background-position: 0 -24px; +} + +#upload .filelist div.file-panel span.rotateLeft:hover { + background-position: 0 0; +} + +#upload .filelist div.file-panel span.rotateRight { + display:none; + background-position: -24px -24px; +} + +#upload .filelist div.file-panel span.rotateRight:hover { + background-position: -24px 0; +} + +#upload .filelist div.file-panel span.cancel { + background-position: -48px -24px; +} + +#upload .filelist div.file-panel span.cancel:hover { + background-position: -48px 0; +} + +#upload .statusBar { + height: 45px; + border-bottom: 1px solid #dadada; + margin: 0 10px; + padding: 0; + line-height: 45px; + vertical-align: middle; + position: relative; +} + +#upload .statusBar .progress { + border: 1px solid #1483d8; + width: 198px; + background: #fff; + height: 18px; + position: absolute; + top: 12px; + display: none; + text-align: center; + line-height: 18px; + color: #6dbfff; + margin: 0 10px 0 0; +} +#upload .statusBar .progress span.percentage { + width: 0; + height: 100%; + left: 0; + top: 0; + background: #1483d8; + position: absolute; +} +#upload .statusBar .progress span.text { + position: relative; + z-index: 10; +} + +#upload .statusBar .info { + display: inline-block; + font-size: 14px; + color: #666666; +} + +#upload .statusBar .btns { + position: absolute; + top: 7px; + right: 0; + line-height: 30px; +} + +#filePickerBtn { + display: inline-block; + float: left; +} +#upload .statusBar .btns .webuploader-pick, +#upload .statusBar .btns .uploadBtn, +#upload .statusBar .btns .uploadBtn.state-uploading, +#upload .statusBar .btns .uploadBtn.state-paused { + background: #ffffff; + border: 1px solid #cfcfcf; + color: #565656; + padding: 0 18px; + display: inline-block; + border-radius: 3px; + margin-left: 10px; + cursor: pointer; + font-size: 14px; + float: left; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#upload .statusBar .btns .webuploader-pick-hover, +#upload .statusBar .btns .uploadBtn:hover, +#upload .statusBar .btns .uploadBtn.state-uploading:hover, +#upload .statusBar .btns .uploadBtn.state-paused:hover { + background: #f0f0f0; +} + +#upload .statusBar .btns .uploadBtn, +#upload .statusBar .btns .uploadBtn.state-paused{ + background: #00b7ee; + color: #fff; + border-color: transparent; +} +#upload .statusBar .btns .uploadBtn:hover, +#upload .statusBar .btns .uploadBtn.state-paused:hover{ + background: #00a2d4; +} + +#upload .statusBar .btns .uploadBtn.disabled { + pointer-events: none; + filter:alpha(opacity=60); + -moz-opacity:0.6; + -khtml-opacity: 0.6; + opacity: 0.6; +} + + + +/* 图片管理样式 */ +#online { + width: 100%; + height: 336px; + padding: 10px 0 0 0; +} +#online #imageList{ + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + position: relative; +} +#online ul { + display: block; + list-style: none; + margin: 0; + padding: 0; +} +#online li { + float: left; + display: block; + list-style: none; + padding: 0; + width: 113px; + height: 113px; + margin: 0 0 9px 9px; + *margin: 0 0 6px 6px; + background-color: #eee; + overflow: hidden; + cursor: pointer; + position: relative; +} +#online li.clearFloat { + float: none; + clear: both; + display: block; + width:0; + height:0; + margin: 0; + padding: 0; +} +#online li img { + cursor: pointer; +} +#online li .icon { + cursor: pointer; + width: 113px; + height: 113px; + position: absolute; + top: 0; + left: 0; + z-index: 2; + border: 0; + background-repeat: no-repeat; +} +#online li .icon:hover { + width: 107px; + height: 107px; + border: 3px solid #1094fa; +} +#online li.selected .icon { + background-image: url(images/success.png); + background-image: url(images/success.gif)\9; + background-position: 75px 75px; +} +#online li.selected .icon:hover { + width: 107px; + height: 107px; + border: 3px solid #1094fa; + background-position: 72px 72px; +} + + +/* 图片搜索样式 */ +#search .searchBar { + width: 100%; + height: 30px; + margin: 10px 0 5px 0; + padding: 0; +} + +#search input.text{ + width: 150px; + padding: 3px 6px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +#search input.text:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); +} +#search input.searchTxt { + margin-left:5px; + padding-left: 5px; + background: #FFF; + width: 300px; + *width: 260px; + height: 21px; + line-height: 21px; + float: left; + dislay: block; +} + +#search .searchType { + width: 65px; + height: 28px; + padding:0; + line-height: 28px; + border: 1px solid #d7d7d7; + border-radius: 0; + vertical-align: top; + margin-left: 5px; + float: left; + dislay: block; +} + +#search #searchBtn, +#search #searchReset { + display: inline-block; + margin-bottom: 0; + margin-right: 5px; + padding: 4px 10px; + font-weight: 400; + text-align: center; + vertical-align: middle; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + font-size: 14px; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + vertical-align: top; + float: right; +} + +#search #searchBtn { + color: white; + border-color: #285e8e; + background-color: #3b97d7; +} +#search #searchReset { + color: #333; + border-color: #ccc; + background-color: #fff; +} +#search #searchBtn:hover { + background-color: #3276b1; +} +#search #searchReset:hover { + background-color: #eee; +} + +#search .msg { + margin-left: 5px; +} + +#search .searchList{ + width: 100%; + height: 300px; + overflow: hidden; + clear: both; +} +#search .searchList ul{ + margin:0; + padding:0; + list-style:none; + clear: both; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + zoom: 1; + position: relative; +} + +#search .searchList li { + list-style:none; + float: left; + display: block; + width: 115px; + margin: 5px 10px 5px 20px; + *margin: 5px 10px 5px 15px; + padding:0; + font-size: 12px; + box-shadow: 0 1px 3px rgba(0, 0, 0, .3); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .3); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .3); + position: relative; + vertical-align: top; + text-align: center; + overflow: hidden; + cursor: pointer; + filter: alpha(Opacity=100); + -moz-opacity: 1; + opacity: 1; + border: 2px solid #eee; +} + +#search .searchList li.selected { + filter: alpha(Opacity=40); + -moz-opacity: 0.4; + opacity: 0.4; + border: 2px solid #00a0e9; +} + +#search .searchList li p { + background-color: #eee; + margin: 0; + padding: 0; + position: relative; + width:100%; + height:115px; + overflow: hidden; +} + +#search .searchList li p img { + cursor: pointer; + border: 0; +} + +#search .searchList li a { + color: #999; + border-top: 1px solid #F2F2F2; + background: #FAFAFA; + text-align: center; + display: block; + padding: 0 5px; + width: 105px; + height:32px; + line-height:32px; + white-space:nowrap; + text-overflow:ellipsis; + text-decoration: none; + overflow: hidden; + word-break: break-all; +} + +#search .searchList a:hover { + text-decoration: underline; + color: #333; +} +#search .searchList .clearFloat{ + clear: both; +} \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/image/image.html b/public/vendor/ueditor/dialogs/image/image.html new file mode 100644 index 0000000..08ca022 --- /dev/null +++ b/public/vendor/ueditor/dialogs/image/image.html @@ -0,0 +1,120 @@ + + + + + ueditor图片对话框 + + + + + + + + + + + + + + +
    +
    + + + + +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    + + +
    +
    +
    +
    + +   px +   px + +
    +
    + + px +
    +
    + + px +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + 0% + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
      +
    • +
    +
    +
    + + +
    +
    +
    + + + + +
    +
    + + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/image/image.js b/public/vendor/ueditor/dialogs/image/image.js new file mode 100644 index 0000000..c4f52aa --- /dev/null +++ b/public/vendor/ueditor/dialogs/image/image.js @@ -0,0 +1,1139 @@ +/** + * User: Jinqn + * Date: 14-04-08 + * Time: 下午16:34 + * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片 + */ + +(function () { + + var remoteImage, + uploadImage, + onlineImage, + searchImage; + + window.onload = function () { + initTabs(); + initAlign(); + initButtons(); + }; + + /* 初始化tab标签 */ + function initTabs() { + var tabs = $G('tabhead').children; + for (var i = 0; i < tabs.length; i++) { + domUtils.on(tabs[i], "click", function (e) { + var target = e.target || e.srcElement; + setTabFocus(target.getAttribute('data-content-id')); + }); + } + + var img = editor.selection.getRange().getClosedNode(); + if (img && img.tagName && img.tagName.toLowerCase() == 'img') { + setTabFocus('remote'); + } else { + setTabFocus('upload'); + } + } + + /* 初始化tabbody */ + function setTabFocus(id) { + if(!id) return; + var i, bodyId, tabs = $G('tabhead').children; + for (i = 0; i < tabs.length; i++) { + bodyId = tabs[i].getAttribute('data-content-id'); + if (bodyId == id) { + domUtils.addClass(tabs[i], 'focus'); + domUtils.addClass($G(bodyId), 'focus'); + } else { + domUtils.removeClasses(tabs[i], 'focus'); + domUtils.removeClasses($G(bodyId), 'focus'); + } + } + switch (id) { + case 'remote': + remoteImage = remoteImage || new RemoteImage(); + break; + case 'upload': + setAlign(editor.getOpt('imageInsertAlign')); + uploadImage = uploadImage || new UploadImage('queueList'); + break; + case 'online': + setAlign(editor.getOpt('imageManagerInsertAlign')); + onlineImage = onlineImage || new OnlineImage('imageList'); + onlineImage.reset(); + break; + case 'search': + setAlign(editor.getOpt('imageManagerInsertAlign')); + searchImage = searchImage || new SearchImage(); + break; + } + } + + /* 初始化onok事件 */ + function initButtons() { + + dialog.onok = function () { + var remote = false, list = [], id, tabs = $G('tabhead').children; + for (var i = 0; i < tabs.length; i++) { + if (domUtils.hasClass(tabs[i], 'focus')) { + id = tabs[i].getAttribute('data-content-id'); + break; + } + } + + switch (id) { + case 'remote': + list = remoteImage.getInsertList(); + break; + case 'upload': + list = uploadImage.getInsertList(); + var count = uploadImage.getQueueCount(); + if (count) { + $('.info', '#queueList').html('' + '还有2个未上传文件'.replace(/[\d]/, count) + ''); + return false; + } + break; + case 'online': + list = onlineImage.getInsertList(); + break; + case 'search': + list = searchImage.getInsertList(); + remote = true; + break; + } + + if(list) { + editor.execCommand('insertimage', list); + remote && editor.fireEvent("catchRemoteImage"); + } + }; + } + + + /* 初始化对其方式的点击事件 */ + function initAlign(){ + /* 点击align图标 */ + domUtils.on($G("alignIcon"), 'click', function(e){ + var target = e.target || e.srcElement; + if(target.className && target.className.indexOf('-align') != -1) { + setAlign(target.getAttribute('data-align')); + } + }); + } + + /* 设置对齐方式 */ + function setAlign(align){ + align = align || 'none'; + var aligns = $G("alignIcon").children; + for(i = 0; i < aligns.length; i++){ + if(aligns[i].getAttribute('data-align') == align) { + domUtils.addClass(aligns[i], 'focus'); + $G("align").value = aligns[i].getAttribute('data-align'); + } else { + domUtils.removeClasses(aligns[i], 'focus'); + } + } + } + /* 获取对齐方式 */ + function getAlign(){ + var align = $G("align").value || 'none'; + return align == 'none' ? '':align; + } + + + /* 在线图片 */ + function RemoteImage(target) { + this.container = utils.isString(target) ? document.getElementById(target) : target; + this.init(); + } + RemoteImage.prototype = { + init: function () { + this.initContainer(); + this.initEvents(); + }, + initContainer: function () { + this.dom = { + 'url': $G('url'), + 'width': $G('width'), + 'height': $G('height'), + 'border': $G('border'), + 'vhSpace': $G('vhSpace'), + 'title': $G('title'), + 'align': $G('align') + }; + var img = editor.selection.getRange().getClosedNode(); + if (img) { + this.setImage(img); + } + }, + initEvents: function () { + var _this = this, + locker = $G('lock'); + + /* 改变url */ + domUtils.on($G("url"), 'keyup', updatePreview); + domUtils.on($G("border"), 'keyup', updatePreview); + domUtils.on($G("title"), 'keyup', updatePreview); + + domUtils.on($G("width"), 'keyup', function(){ + updatePreview(); + if(locker.checked) { + var proportion =locker.getAttribute('data-proportion'); + $G('height').value = Math.round(this.value / proportion); + } else { + _this.updateLocker(); + } + }); + domUtils.on($G("height"), 'keyup', function(){ + updatePreview(); + if(locker.checked) { + var proportion =locker.getAttribute('data-proportion'); + $G('width').value = Math.round(this.value * proportion); + } else { + _this.updateLocker(); + } + }); + domUtils.on($G("lock"), 'change', function(){ + var proportion = parseInt($G("width").value) /parseInt($G("height").value); + locker.setAttribute('data-proportion', proportion); + }); + + function updatePreview(){ + _this.setPreview(); + } + }, + updateLocker: function(){ + var width = $G('width').value, + height = $G('height').value, + locker = $G('lock'); + if(width && height && width == parseInt(width) && height == parseInt(height)) { + locker.disabled = false; + locker.title = ''; + } else { + locker.checked = false; + locker.disabled = 'disabled'; + locker.title = lang.remoteLockError; + } + }, + setImage: function(img){ + /* 不是正常的图片 */ + if (!img.tagName || img.tagName.toLowerCase() != 'img' && !img.getAttribute("src") || !img.src) return; + + var wordImgFlag = img.getAttribute("word_img"), + src = wordImgFlag ? wordImgFlag.replace("&", "&") : (img.getAttribute('_src') || img.getAttribute("src", 2).replace("&", "&")), + align = editor.queryCommandValue("imageFloat"); + + /* 防止onchange事件循环调用 */ + if (src !== $G("url").value) $G("url").value = src; + if(src) { + /* 设置表单内容 */ + $G("width").value = img.width || ''; + $G("height").value = img.height || ''; + $G("border").value = img.getAttribute("border") || '0'; + $G("vhSpace").value = img.getAttribute("vspace") || '0'; + $G("title").value = img.title || img.alt || ''; + setAlign(align); + this.setPreview(); + this.updateLocker(); + } + }, + getData: function(){ + var data = {}; + for(var k in this.dom){ + data[k] = this.dom[k].value; + } + return data; + }, + setPreview: function(){ + var url = $G('url').value, + ow = $G('width').value, + oh = $G('height').value, + border = $G('border').value, + title = $G('title').value, + preview = $G('preview'), + width, + height; + + width = ((!ow || !oh) ? preview.offsetWidth:Math.min(ow, preview.offsetWidth)); + width = width+(border*2) > preview.offsetWidth ? width:(preview.offsetWidth - (border*2)); + height = (!ow || !oh) ? '':width*oh/ow; + + if(url) { + preview.innerHTML = ''; + } + }, + getInsertList: function () { + var data = this.getData(); + if(data['url']) { + return [{ + src: data['url'], + _src: data['url'], + width: data['width'] || '', + height: data['height'] || '', + border: data['border'] || '', + floatStyle: data['align'] || '', + vspace: data['vhSpace'] || '', + title: data['title'] || '', + alt: data['title'] || '', + style: "width:" + data['width'] + "px;height:" + data['height'] + "px;" + }]; + } else { + return []; + } + } + }; + + + + /* 上传图片 */ + function UploadImage(target) { + this.$wrap = target.constructor == String ? $('#' + target) : $(target); + this.init(); + } + UploadImage.prototype = { + init: function () { + this.imageList = []; + this.initContainer(); + this.initUploader(); + }, + initContainer: function () { + this.$queue = this.$wrap.find('.filelist'); + }, + /* 初始化容器 */ + initUploader: function () { + var _this = this, + $ = jQuery, // just in case. Make sure it's not an other libaray. + $wrap = _this.$wrap, + // 图片容器 + $queue = $wrap.find('.filelist'), + // 状态栏,包括进度和控制按钮 + $statusBar = $wrap.find('.statusBar'), + // 文件总体选择信息。 + $info = $statusBar.find('.info'), + // 上传按钮 + $upload = $wrap.find('.uploadBtn'), + // 上传按钮 + $filePickerBtn = $wrap.find('.filePickerBtn'), + // 上传按钮 + $filePickerBlock = $wrap.find('.filePickerBlock'), + // 没选择文件之前的内容。 + $placeHolder = $wrap.find('.placeholder'), + // 总体进度条 + $progress = $statusBar.find('.progress').hide(), + // 添加的文件数量 + fileCount = 0, + // 添加的文件总大小 + fileSize = 0, + // 优化retina, 在retina下这个值是2 + ratio = window.devicePixelRatio || 1, + // 缩略图大小 + thumbnailWidth = 113 * ratio, + thumbnailHeight = 113 * ratio, + // 可能有pedding, ready, uploading, confirm, done. + state = '', + // 所有文件的进度信息,key为file id + percentages = {}, + supportTransition = (function () { + var s = document.createElement('p').style, + r = 'transition' in s || + 'WebkitTransition' in s || + 'MozTransition' in s || + 'msTransition' in s || + 'OTransition' in s; + s = null; + return r; + })(), + // WebUploader实例 + uploader, + actionUrl = editor.getActionUrl(editor.getOpt('imageActionName')), + acceptExtensions = (editor.getOpt('imageAllowFiles') || []).join('').replace(/\./g, ',').replace(/^[,]/, ''), + imageMaxSize = editor.getOpt('imageMaxSize'), + imageCompressBorder = editor.getOpt('imageCompressBorder'); + + if (!WebUploader.Uploader.support()) { + $('#filePickerReady').after($('
    ').html(lang.errorNotSupport)).hide(); + return; + } else if (!editor.getOpt('imageActionName')) { + $('#filePickerReady').after($('
    ').html(lang.errorLoadConfig)).hide(); + return; + } + + uploader = _this.uploader = WebUploader.create({ + pick: { + id: '#filePickerReady', + label: lang.uploadSelectFile + }, + accept: { + title: 'Images', + extensions: acceptExtensions, + mimeTypes: 'image/*' + }, + swf: '../../third-party/webuploader/Uploader.swf', + server: actionUrl, + fileVal: editor.getOpt('imageFieldName'), + duplicate: true, + fileSingleSizeLimit: imageMaxSize, // 默认 2 M + compress: editor.getOpt('imageCompressEnable') ? { + width: imageCompressBorder, + height: imageCompressBorder, + // 图片质量,只有type为`image/jpeg`的时候才有效。 + quality: 90, + // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. + allowMagnify: false, + // 是否允许裁剪。 + crop: false, + // 是否保留头部meta信息。 + preserveHeaders: true + }:false + }); + uploader.addButton({ + id: '#filePickerBlock' + }); + uploader.addButton({ + id: '#filePickerBtn', + label: lang.uploadAddFile + }); + + setState('pedding'); + + // 当有文件添加进来时执行,负责view的创建 + function addFile(file) { + var $li = $('
  • ' + + '

    ' + file.name + '

    ' + + '

    ' + + '

    ' + + '
  • '), + + $btns = $('
    ' + + '' + lang.uploadDelete + '' + + '' + lang.uploadTurnRight + '' + + '' + lang.uploadTurnLeft + '
    ').appendTo($li), + $prgress = $li.find('p.progress span'), + $wrap = $li.find('p.imgWrap'), + $info = $('

    ').hide().appendTo($li), + + showError = function (code) { + switch (code) { + case 'exceed_size': + text = lang.errorExceedSize; + break; + case 'interrupt': + text = lang.errorInterrupt; + break; + case 'http': + text = lang.errorHttp; + break; + case 'not_allow_type': + text = lang.errorFileType; + break; + default: + text = lang.errorUploadRetry; + break; + } + $info.text(text).show(); + }; + + if (file.getStatus() === 'invalid') { + showError(file.statusText); + } else { + $wrap.text(lang.uploadPreview); + if (browser.ie && browser.version <= 7) { + $wrap.text(lang.uploadNoPreview); + } else { + uploader.makeThumb(file, function (error, src) { + if (error || !src) { + $wrap.text(lang.uploadNoPreview); + } else { + var $img = $(''); + $wrap.empty().append($img); + $img.on('error', function () { + $wrap.text(lang.uploadNoPreview); + }); + } + }, thumbnailWidth, thumbnailHeight); + } + percentages[ file.id ] = [ file.size, 0 ]; + file.rotation = 0; + + /* 检查文件格式 */ + if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) { + showError('not_allow_type'); + uploader.removeFile(file); + } + } + + file.on('statuschange', function (cur, prev) { + if (prev === 'progress') { + $prgress.hide().width(0); + } else if (prev === 'queued') { + $li.off('mouseenter mouseleave'); + $btns.remove(); + } + // 成功 + if (cur === 'error' || cur === 'invalid') { + showError(file.statusText); + percentages[ file.id ][ 1 ] = 1; + } else if (cur === 'interrupt') { + showError('interrupt'); + } else if (cur === 'queued') { + percentages[ file.id ][ 1 ] = 0; + } else if (cur === 'progress') { + $info.hide(); + $prgress.css('display', 'block'); + } else if (cur === 'complete') { + } + + $li.removeClass('state-' + prev).addClass('state-' + cur); + }); + + $li.on('mouseenter', function () { + $btns.stop().animate({height: 30}); + }); + $li.on('mouseleave', function () { + $btns.stop().animate({height: 0}); + }); + + $btns.on('click', 'span', function () { + var index = $(this).index(), + deg; + + switch (index) { + case 0: + uploader.removeFile(file); + return; + case 1: + file.rotation += 90; + break; + case 2: + file.rotation -= 90; + break; + } + + if (supportTransition) { + deg = 'rotate(' + file.rotation + 'deg)'; + $wrap.css({ + '-webkit-transform': deg, + '-mos-transform': deg, + '-o-transform': deg, + 'transform': deg + }); + } else { + $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')'); + } + + }); + + $li.insertBefore($filePickerBlock); + } + + // 负责view的销毁 + function removeFile(file) { + var $li = $('#' + file.id); + delete percentages[ file.id ]; + updateTotalProgress(); + $li.off().find('.file-panel').off().end().remove(); + } + + function updateTotalProgress() { + var loaded = 0, + total = 0, + spans = $progress.children(), + percent; + + $.each(percentages, function (k, v) { + total += v[ 0 ]; + loaded += v[ 0 ] * v[ 1 ]; + }); + + percent = total ? loaded / total : 0; + + spans.eq(0).text(Math.round(percent * 100) + '%'); + spans.eq(1).css('width', Math.round(percent * 100) + '%'); + updateStatus(); + } + + function setState(val, files) { + + if (val != state) { + + var stats = uploader.getStats(); + + $upload.removeClass('state-' + state); + $upload.addClass('state-' + val); + + switch (val) { + + /* 未选择文件 */ + case 'pedding': + $queue.addClass('element-invisible'); + $statusBar.addClass('element-invisible'); + $placeHolder.removeClass('element-invisible'); + $progress.hide(); $info.hide(); + uploader.refresh(); + break; + + /* 可以开始上传 */ + case 'ready': + $placeHolder.addClass('element-invisible'); + $queue.removeClass('element-invisible'); + $statusBar.removeClass('element-invisible'); + $progress.hide(); $info.show(); + $upload.text(lang.uploadStart); + uploader.refresh(); + break; + + /* 上传中 */ + case 'uploading': + $progress.show(); $info.hide(); + $upload.text(lang.uploadPause); + break; + + /* 暂停上传 */ + case 'paused': + $progress.show(); $info.hide(); + $upload.text(lang.uploadContinue); + break; + + case 'confirm': + $progress.show(); $info.hide(); + $upload.text(lang.uploadStart); + + stats = uploader.getStats(); + if (stats.successNum && !stats.uploadFailNum) { + setState('finish'); + return; + } + break; + + case 'finish': + $progress.hide(); $info.show(); + if (stats.uploadFailNum) { + $upload.text(lang.uploadRetry); + } else { + $upload.text(lang.uploadStart); + } + break; + } + + state = val; + updateStatus(); + + } + + if (!_this.getQueueCount()) { + $upload.addClass('disabled') + } else { + $upload.removeClass('disabled') + } + + } + + function updateStatus() { + var text = '', stats; + + if (state === 'ready') { + text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize)); + } else if (state === 'confirm') { + stats = uploader.getStats(); + if (stats.uploadFailNum) { + text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum); + } + } else { + stats = uploader.getStats(); + text = lang.updateStatusFinish.replace('_', fileCount). + replace('_KB', WebUploader.formatSize(fileSize)). + replace('_', stats.successNum); + + if (stats.uploadFailNum) { + text += lang.updateStatusError.replace('_', stats.uploadFailNum); + } + } + + $info.html(text); + } + + uploader.on('fileQueued', function (file) { + fileCount++; + fileSize += file.size; + + if (fileCount === 1) { + $placeHolder.addClass('element-invisible'); + $statusBar.show(); + } + + addFile(file); + }); + + uploader.on('fileDequeued', function (file) { + fileCount--; + fileSize -= file.size; + + removeFile(file); + updateTotalProgress(); + }); + + uploader.on('filesQueued', function (file) { + if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) { + setState('ready'); + } + updateTotalProgress(); + }); + + uploader.on('all', function (type, files) { + switch (type) { + case 'uploadFinished': + setState('confirm', files); + break; + case 'startUpload': + /* 添加额外的GET参数 */ + var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '', + url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + 'encode=utf-8&' + params); + uploader.option('server', url); + setState('uploading', files); + break; + case 'stopUpload': + setState('paused', files); + break; + } + }); + + uploader.on('uploadBeforeSend', function (file, data, header) { + //这里可以通过data对象添加POST参数 + header['X_Requested_With'] = 'XMLHttpRequest'; + }); + + uploader.on('uploadProgress', function (file, percentage) { + var $li = $('#' + file.id), + $percent = $li.find('.progress span'); + + $percent.css('width', percentage * 100 + '%'); + percentages[ file.id ][ 1 ] = percentage; + updateTotalProgress(); + }); + + uploader.on('uploadSuccess', function (file, ret) { + var $file = $('#' + file.id); + try { + var responseText = (ret._raw || ret), + json = utils.str2json(responseText); + if (json.state == 'SUCCESS') { + _this.imageList.push(json); + $file.append(''); + } else { + $file.find('.error').text(json.state).show(); + } + } catch (e) { + $file.find('.error').text(lang.errorServerUpload).show(); + } + }); + + uploader.on('uploadError', function (file, code) { + }); + uploader.on('error', function (code, file) { + if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') { + addFile(file); + } + }); + uploader.on('uploadComplete', function (file, ret) { + }); + + $upload.on('click', function () { + if ($(this).hasClass('disabled')) { + return false; + } + + if (state === 'ready') { + uploader.upload(); + } else if (state === 'paused') { + uploader.upload(); + } else if (state === 'uploading') { + uploader.stop(); + } + }); + + $upload.addClass('state-' + state); + updateTotalProgress(); + }, + getQueueCount: function () { + var file, i, status, readyFile = 0, files = this.uploader.getFiles(); + for (i = 0; file = files[i++]; ) { + status = file.getStatus(); + if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++; + } + return readyFile; + }, + destroy: function () { + this.$wrap.remove(); + }, + getInsertList: function () { + var i, data, list = [], + align = getAlign(), + prefix = editor.getOpt('imageUrlPrefix'); + for (i = 0; i < this.imageList.length; i++) { + data = this.imageList[i]; + list.push({ + src: prefix + data.url, + _src: prefix + data.url, + title: data.title, + alt: data.original, + floatStyle: align + }); + } + return list; + } + }; + + + /* 在线图片 */ + function OnlineImage(target) { + this.container = utils.isString(target) ? document.getElementById(target) : target; + this.init(); + } + OnlineImage.prototype = { + init: function () { + this.reset(); + this.initEvents(); + }, + /* 初始化容器 */ + initContainer: function () { + this.container.innerHTML = ''; + this.list = document.createElement('ul'); + this.clearFloat = document.createElement('li'); + + domUtils.addClass(this.list, 'list'); + domUtils.addClass(this.clearFloat, 'clearFloat'); + + this.list.appendChild(this.clearFloat); + this.container.appendChild(this.list); + }, + /* 初始化滚动事件,滚动到地步自动拉取数据 */ + initEvents: function () { + var _this = this; + + /* 滚动拉取图片 */ + domUtils.on($G('imageList'), 'scroll', function(e){ + var panel = this; + if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) { + _this.getImageData(); + } + }); + /* 选中图片 */ + domUtils.on(this.container, 'click', function (e) { + var target = e.target || e.srcElement, + li = target.parentNode; + + if (li.tagName.toLowerCase() == 'li') { + if (domUtils.hasClass(li, 'selected')) { + domUtils.removeClasses(li, 'selected'); + } else { + domUtils.addClass(li, 'selected'); + } + } + }); + }, + /* 初始化第一次的数据 */ + initData: function () { + + /* 拉取数据需要使用的值 */ + this.state = 0; + this.listSize = editor.getOpt('imageManagerListSize'); + this.listIndex = 0; + this.listEnd = false; + + /* 第一次拉取数据 */ + this.getImageData(); + }, + /* 重置界面 */ + reset: function() { + this.initContainer(); + this.initData(); + }, + /* 向后台拉取图片列表数据 */ + getImageData: function () { + var _this = this; + + if(!_this.listEnd && !this.isLoadingData) { + this.isLoadingData = true; + var url = editor.getActionUrl(editor.getOpt('imageManagerActionName')), + isJsonp = utils.isCrossDomainUrl(url); + ajax.request(url, { + 'timeout': 100000, + 'dataType': isJsonp ? 'jsonp':'', + 'data': utils.extend({ + start: this.listIndex, + size: this.listSize + }, editor.queryCommandValue('serverparam')), + 'method': 'get', + 'onsuccess': function (r) { + try { + var json = isJsonp ? r:eval('(' + r.responseText + ')'); + if (json.state == 'SUCCESS') { + _this.pushData(json.list); + _this.listIndex = parseInt(json.start) + parseInt(json.list.length); + if(_this.listIndex >= json.total) { + _this.listEnd = true; + } + _this.isLoadingData = false; + } + } catch (e) { + if(r.responseText.indexOf('ue_separate_ue') != -1) { + var list = r.responseText.split(r.responseText); + _this.pushData(list); + _this.listIndex = parseInt(list.length); + _this.listEnd = true; + _this.isLoadingData = false; + } + } + }, + 'onerror': function () { + _this.isLoadingData = false; + } + }); + } + }, + /* 添加图片到列表界面上 */ + pushData: function (list) { + var i, item, img, icon, _this = this, + urlPrefix = editor.getOpt('imageManagerUrlPrefix'); + for (i = 0; i < list.length; i++) { + if(list[i] && list[i].url) { + item = document.createElement('li'); + img = document.createElement('img'); + icon = document.createElement('span'); + + domUtils.on(img, 'load', (function(image){ + return function(){ + _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight); + } + })(img)); + img.width = 113; + img.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) ); + img.setAttribute('_src', urlPrefix + list[i].url); + domUtils.addClass(icon, 'icon'); + + item.appendChild(img); + item.appendChild(icon); + this.list.insertBefore(item, this.clearFloat); + } + } + }, + /* 改变图片大小 */ + scale: function (img, w, h, type) { + var ow = img.width, + oh = img.height; + + if (type == 'justify') { + if (ow >= oh) { + img.width = w; + img.height = h * oh / ow; + img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px'; + } else { + img.width = w * ow / oh; + img.height = h; + img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px'; + } + } else { + if (ow >= oh) { + img.width = w * ow / oh; + img.height = h; + img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px'; + } else { + img.width = w; + img.height = h * oh / ow; + img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px'; + } + } + }, + getInsertList: function () { + var i, lis = this.list.children, list = [], align = getAlign(); + for (i = 0; i < lis.length; i++) { + if (domUtils.hasClass(lis[i], 'selected')) { + var img = lis[i].firstChild, + src = img.getAttribute('_src'); + list.push({ + src: src, + _src: src, + alt: src.substr(src.lastIndexOf('/') + 1), + floatStyle: align + }); + } + + } + return list; + } + }; + + /*搜索图片 */ + function SearchImage() { + this.init(); + } + SearchImage.prototype = { + init: function () { + this.initEvents(); + }, + initEvents: function(){ + var _this = this; + + /* 点击搜索按钮 */ + domUtils.on($G('searchBtn'), 'click', function(){ + var key = $G('searchTxt').value; + if(key && key != lang.searchRemind) { + _this.getImageData(); + } + }); + /* 点击清除妞 */ + domUtils.on($G('searchReset'), 'click', function(){ + $G('searchTxt').value = lang.searchRemind; + $G('searchListUl').innerHTML = ''; + $G('searchType').selectedIndex = 0; + }); + /* 搜索框聚焦 */ + domUtils.on($G('searchTxt'), 'focus', function(){ + var key = $G('searchTxt').value; + if(key && key == lang.searchRemind) { + $G('searchTxt').value = ''; + } + }); + /* 搜索框回车键搜索 */ + domUtils.on($G('searchTxt'), 'keydown', function(e){ + var keyCode = e.keyCode || e.which; + if (keyCode == 13) { + $G('searchBtn').click(); + } + }); + + /* 选中图片 */ + domUtils.on($G('searchList'), 'click', function(e){ + var target = e.target || e.srcElement, + li = target.parentNode.parentNode; + + if (li.tagName.toLowerCase() == 'li') { + if (domUtils.hasClass(li, 'selected')) { + domUtils.removeClasses(li, 'selected'); + } else { + domUtils.addClass(li, 'selected'); + } + } + }); + }, + encodeToGb2312:function (str){ + if(!str) return ''; + var strOut = "", + z = 'D2BBB6A18140C6DF814181428143CDF2D5C9C8FDC9CFCFC2D8A2B2BBD3EB8144D8A4B3F38145D7A8C7D2D8A7CAC08146C7F0B1FBD2B5B4D4B6ABCBBFD8A9814781488149B6AA814AC1BDD1CF814BC9A5D8AD814CB8F6D1BEE3DCD6D0814D814EB7E1814FB4AE8150C1D98151D8BC8152CDE8B5A4CEAAD6F78153C0F6BED9D8AF815481558156C4CB8157BEC38158D8B1C3B4D2E58159D6AECEDAD5A7BAF5B7A6C0D6815AC6B9C5D2C7C7815BB9D4815CB3CBD2D2815D815ED8BFBEC5C6F2D2B2CFB0CFE7815F816081618162CAE981638164D8C081658166816781688169816AC2F2C2D2816BC8E9816C816D816E816F817081718172817381748175C7AC8176817781788179817A817B817CC1CB817DD3E8D5F9817ECAC2B6FED8A1D3DABFF78180D4C6BBA5D8C1CEE5BEAE81818182D8A88183D1C7D0A9818481858186D8BDD9EFCDF6BFBA8187BDBBBAA5D2E0B2FABAE0C4B68188CFEDBEA9CDA4C1C18189818A818BC7D7D9F1818CD9F4818D818E818F8190C8CBD8E9819181928193D2DACAB2C8CAD8ECD8EAD8C6BDF6C6CDB3F08194D8EBBDF1BDE98195C8D4B4D381968197C2D88198B2D6D7D0CACBCBFBD5CCB8B6CFC98199819A819BD9DAD8F0C7AA819CD8EE819DB4FAC1EED2D4819E819FD8ED81A0D2C7D8EFC3C781A181A281A3D1F681A4D6D9D8F281A5D8F5BCFEBCDB81A681A781A8C8CE81A9B7DD81AAB7C281ABC6F381AC81AD81AE81AF81B081B181B2D8F8D2C181B381B4CEE9BCBFB7FCB7A5D0DD81B581B681B781B881B9D6DAD3C5BBEFBBE1D8F181BA81BBC9A1CEB0B4AB81BCD8F381BDC9CBD8F6C2D7D8F781BE81BFCEB1D8F981C081C181C2B2AEB9C081C3D9A381C4B0E981C5C1E681C6C9EC81C7CBC581C8CBC6D9A481C981CA81CB81CC81CDB5E881CE81CFB5AB81D081D181D281D381D481D5CEBBB5CDD7A1D7F4D3D381D6CCE581D7BACE81D8D9A2D9DCD3E0D8FDB7F0D7F7D8FED8FAD9A1C4E381D981DAD3B6D8F4D9DD81DBD8FB81DCC5E581DD81DEC0D081DF81E0D1F0B0DB81E181E2BCD1D9A681E3D9A581E481E581E681E7D9ACD9AE81E8D9ABCAB981E981EA81EBD9A9D6B681EC81ED81EEB3DED9A881EFC0FD81F0CACC81F1D9AA81F2D9A781F381F4D9B081F581F6B6B181F781F881F9B9A981FAD2C081FB81FCCFC081FD81FEC2C28240BDC4D5ECB2E0C7C8BFEBD9AD8241D9AF8242CEEABAEE82438244824582468247C7D682488249824A824B824C824D824E824F8250B1E3825182528253B4D9B6EDD9B48254825582568257BFA182588259825AD9DEC7CEC0FED9B8825B825C825D825E825FCBD7B7FD8260D9B58261D9B7B1A3D3E1D9B98262D0C58263D9B682648265D9B18266D9B2C1A9D9B382678268BCF3D0DEB8A98269BEE3826AD9BD826B826C826D826ED9BA826FB0B3827082718272D9C28273827482758276827782788279827A827B827C827D827E8280D9C4B1B68281D9BF82828283B5B98284BEF3828582868287CCC8BAF2D2D08288D9C38289828ABDE8828BB3AB828C828D828ED9C5BEEB828FD9C6D9BBC4DF8290D9BED9C1D9C0829182928293829482958296829782988299829A829BD5AE829CD6B5829DC7E3829E829F82A082A1D9C882A282A382A4BCD9D9CA82A582A682A7D9BC82A8D9CBC6AB82A982AA82AB82AC82ADD9C982AE82AF82B082B1D7F682B2CDA382B382B482B582B682B782B882B982BABDA182BB82BC82BD82BE82BF82C0D9CC82C182C282C382C482C582C682C782C882C9C5BCCDB582CA82CB82CCD9CD82CD82CED9C7B3A5BFFE82CF82D082D182D2B8B582D382D4C0FC82D582D682D782D8B0F882D982DA82DB82DC82DD82DE82DF82E082E182E282E382E482E582E682E782E882E982EA82EB82EC82EDB4F682EED9CE82EFD9CFB4A2D9D082F082F1B4DF82F282F382F482F582F6B0C182F782F882F982FA82FB82FC82FDD9D1C9B582FE8340834183428343834483458346834783488349834A834B834C834D834E834F83508351CFF1835283538354835583568357D9D283588359835AC1C5835B835C835D835E835F836083618362836383648365D9D6C9AE8366836783688369D9D5D9D4D9D7836A836B836C836DCBDB836EBDA9836F8370837183728373C6A7837483758376837783788379837A837B837C837DD9D3D9D8837E83808381D9D9838283838384838583868387C8E583888389838A838B838C838D838E838F839083918392839383948395C0DC8396839783988399839A839B839C839D839E839F83A083A183A283A383A483A583A683A783A883A983AA83AB83AC83AD83AE83AF83B083B183B2B6F9D8A3D4CA83B3D4AAD0D6B3E4D5D783B4CFC8B9E283B5BFCB83B6C3E283B783B883B9B6D283BA83BBCDC3D9EED9F083BC83BD83BEB5B383BFB6B583C083C183C283C383C4BEA483C583C6C8EB83C783C8C8AB83C983CAB0CBB9ABC1F9D9E283CBC0BCB9B283CCB9D8D0CBB1F8C6E4BEDFB5E4D7C883CDD1F8BCE6CADE83CE83CFBCBDD9E6D8E783D083D1C4DA83D283D3B8D4C8BD83D483D5B2E1D4D983D683D783D883D9C3B083DA83DBC3E1DAA2C8DF83DCD0B483DDBEFCC5A983DE83DF83E0B9DA83E1DAA383E2D4A9DAA483E383E483E583E683E7D9FBB6AC83E883E9B7EBB1F9D9FCB3E5BEF683EABFF6D2B1C0E483EB83EC83EDB6B3D9FED9FD83EE83EFBEBB83F083F183F2C6E083F3D7BCDAA183F4C1B983F5B5F2C1E883F683F7BCF583F8B4D583F983FA83FB83FC83FD83FE844084418442C1DD8443C4FD84448445BCB8B7B284468447B7EF84488449844A844B844C844DD9EC844EC6BE844FBFADBBCB84508451B5CA8452DBC9D0D78453CDB9B0BCB3F6BBF7DBCABAAF8454D4E4B5B6B5F3D8D6C8D084558456B7D6C7D0D8D78457BFAF84588459DBBBD8D8845A845BD0CCBBAE845C845D845EEBBEC1D0C1F5D4F2B8D5B4B4845FB3F584608461C9BE846284638464C5D0846584668467C5D9C0FB8468B1F08469D8D9B9CE846AB5BD846B846CD8DA846D846ED6C6CBA2C8AFC9B2B4CCBFCC846FB9F48470D8DBD8DCB6E7BCC1CCEA847184728473847484758476CFF78477D8DDC7B084788479B9D0BDA3847A847BCCDE847CC6CA847D847E848084818482D8E08483D8DE84848485D8DF848684878488B0FE8489BEE7848ACAA3BCF4848B848C848D848EB8B1848F8490B8EE849184928493849484958496849784988499849AD8E2849BBDCB849CD8E4D8E3849D849E849F84A084A1C5FC84A284A384A484A584A684A784A8D8E584A984AAD8E684AB84AC84AD84AE84AF84B084B1C1A684B2C8B0B0ECB9A6BCD3CEF1DBBDC1D384B384B484B584B6B6AFD6FAC5ACBDD9DBBEDBBF84B784B884B9C0F8BEA2C0CD84BA84BB84BC84BD84BE84BF84C084C184C284C3DBC0CAC684C484C584C6B2AA84C784C884C9D3C284CAC3E384CBD1AB84CC84CD84CE84CFDBC284D0C0D584D184D284D3DBC384D4BFB184D584D684D784D884D984DAC4BC84DB84DC84DD84DEC7DA84DF84E084E184E284E384E484E584E684E784E884E9DBC484EA84EB84EC84ED84EE84EF84F084F1D9E8C9D784F284F384F4B9B4CEF0D4C884F584F684F784F8B0FCB4D284F9D0D984FA84FB84FC84FDD9E984FEDECBD9EB8540854185428543D8B0BBAFB1B18544B3D7D8CE85458546D4D185478548BDB3BFEF8549CFBB854A854BD8D0854C854D854EB7CB854F85508551D8D185528553855485558556855785588559855A855BC6A5C7F8D2BD855C855DD8D2C4E4855ECAAE855FC7A78560D8A68561C9FDCEE7BBDCB0EB856285638564BBAAD0AD8565B1B0D7E4D7BF8566B5A5C2F4C4CF85678568B2A98569B2B7856AB1E5DFB2D5BCBFA8C2ACD8D5C2B1856BD8D4CED4856CDAE0856DCEC0856E856FD8B4C3AED3A1CEA38570BCB4C8B4C2D18571BEEDD0B68572DAE18573857485758576C7E485778578B3A78579B6F2CCFCC0FA857A857BC0F7857CD1B9D1E1D8C7857D857E85808581858285838584B2DE85858586C0E58587BAF185888589D8C8858AD4AD858B858CCFE1D8C9858DD8CACFC3858EB3F8BEC7858F859085918592D8CB8593859485958596859785988599DBCC859A859B859C859DC8A5859E859F85A0CFD885A1C8FEB2CE85A285A385A485A585A6D3D6B2E6BCB0D3D1CBABB7B485A785A885A9B7A285AA85ABCAE585ACC8A1CADCB1E4D0F085ADC5D185AE85AF85B0DBC5B5FE85B185B2BFDAB9C5BEE4C1ED85B3DFB6DFB5D6BBBDD0D5D9B0C8B6A3BFC9CCA8DFB3CAB7D3D285B4D8CFD2B6BAC5CBBECCBE85B5DFB7B5F0DFB485B685B785B8D3F585B9B3D4B8F785BADFBA85BBBACFBCAAB5F585BCCDACC3FBBAF3C0F4CDC2CFF2DFB8CFC585BDC2C0DFB9C2F085BE85BF85C0BEFD85C1C1DFCDCCD2F7B7CDDFC185C2DFC485C385C4B7F1B0C9B6D6B7D485C5BAACCCFDBFD4CBB1C6F485C6D6A8DFC585C7CEE2B3B385C885C9CEFCB4B585CACEC7BAF085CBCEE185CCD1BD85CD85CEDFC085CF85D0B4F485D1B3CA85D2B8E6DFBB85D385D485D585D6C4C585D7DFBCDFBDDFBEC5BBDFBFDFC2D4B1DFC385D8C7BACED885D985DA85DB85DC85DDC4D885DEDFCA85DFDFCF85E0D6DC85E185E285E385E485E585E685E785E8DFC9DFDACEB685E9BAC7DFCEDFC8C5DE85EA85EBC9EBBAF4C3FC85EC85EDBED785EEDFC685EFDFCD85F0C5D885F185F285F385F4D5A6BACD85F5BECCD3BDB8C085F6D6E485F7DFC7B9BEBFA785F885F9C1FCDFCBDFCC85FADFD085FB85FC85FD85FE8640DFDBDFE58641DFD7DFD6D7C9DFE3DFE4E5EBD2A7DFD28642BFA98643D4DB8644BFC8DFD4864586468647CFCC86488649DFDD864AD1CA864BDFDEB0A7C6B7DFD3864CBAE5864DB6DFCDDBB9FED4D5864E864FDFDFCFECB0A5DFE7DFD1D1C6DFD5DFD8DFD9DFDC8650BBA98651DFE0DFE18652DFE2DFE6DFE8D3B486538654865586568657B8E7C5B6DFEAC9DAC1A8C4C486588659BFDECFF8865A865B865CD5DCDFEE865D865E865F866086618662B2B88663BADFDFEC8664DBC18665D1E48666866786688669CBF4B4BD866AB0A6866B866C866D866E866FDFF1CCC6DFF286708671DFED867286738674867586768677DFE986788679867A867BDFEB867CDFEFDFF0BBBD867D867EDFF386808681DFF48682BBA38683CADBCEA8E0A7B3AA8684E0A6868586868687E0A186888689868A868BDFFE868CCDD9DFFC868DDFFA868EBFD0D7C4868FC9CC86908691DFF8B0A186928693869486958696DFFD869786988699869ADFFBE0A2869B869C869D869E869FE0A886A086A186A286A3B7C886A486A5C6A1C9B6C0B2DFF586A686A7C5BE86A8D8C4DFF9C4F686A986AA86AB86AC86AD86AEE0A3E0A4E0A5D0A586AF86B0E0B4CCE486B1E0B186B2BFA6E0AFCEB9E0ABC9C686B386B4C0AEE0AEBAEDBAB0E0A986B586B686B7DFF686B8E0B386B986BAE0B886BB86BC86BDB4ADE0B986BE86BFCFB2BAC886C0E0B086C186C286C386C486C586C686C7D0FA86C886C986CA86CB86CC86CD86CE86CF86D0E0AC86D1D4FB86D2DFF786D3C5E786D4E0AD86D5D3F786D6E0B6E0B786D786D886D986DA86DBE0C4D0E186DC86DD86DEE0BC86DF86E0E0C9E0CA86E186E286E3E0BEE0AAC9A4E0C186E4E0B286E586E686E786E886E9CAC8E0C386EAE0B586EBCECB86ECCBC3E0CDE0C6E0C286EDE0CB86EEE0BAE0BFE0C086EF86F0E0C586F186F2E0C7E0C886F3E0CC86F4E0BB86F586F686F786F886F9CBD4E0D586FAE0D6E0D286FB86FC86FD86FE87408741E0D0BCCE87428743E0D18744B8C2D8C587458746874787488749874A874B874CD0EA874D874EC2EF874F8750E0CFE0BD875187528753E0D4E0D387548755E0D78756875787588759E0DCE0D8875A875B875CD6F6B3B0875DD7EC875ECBBB875F8760E0DA8761CEFB876287638764BAD987658766876787688769876A876B876C876D876E876F8770E0E1E0DDD2AD87718772877387748775E0E287768777E0DBE0D9E0DF87788779E0E0877A877B877C877D877EE0DE8780E0E4878187828783C6F7D8ACD4EBE0E6CAC98784878587868787E0E587888789878A878BB8C1878C878D878E878FE0E7E0E887908791879287938794879587968797E0E9E0E387988799879A879B879C879D879EBABFCCE7879F87A087A1E0EA87A287A387A487A587A687A787A887A987AA87AB87AC87AD87AE87AF87B0CFF987B187B287B387B487B587B687B787B887B987BA87BBE0EB87BC87BD87BE87BF87C087C187C2C8C287C387C487C587C6BDC087C787C887C987CA87CB87CC87CD87CE87CF87D087D187D287D3C4D287D487D587D687D787D887D987DA87DB87DCE0EC87DD87DEE0ED87DF87E0C7F4CBC487E1E0EEBBD8D8B6D2F2E0EFCDC587E2B6DA87E387E487E587E687E787E8E0F187E9D4B087EA87EBC0A7B4D187EC87EDCEA7E0F087EE87EF87F0E0F2B9CC87F187F2B9FACDBCE0F387F387F487F5C6D4E0F487F6D4B287F7C8A6E0F6E0F587F887F987FA87FB87FC87FD87FE8840884188428843884488458846884788488849E0F7884A884BCDC1884C884D884ECAA5884F885088518852D4DADBD7DBD98853DBD8B9E7DBDCDBDDB5D888548855DBDA8856885788588859885ADBDBB3A1DBDF885B885CBBF8885DD6B7885EDBE0885F886088618862BEF988638864B7BB8865DBD0CCAEBFB2BBB5D7F8BFD38866886788688869886ABFE9886B886CBCE1CCB3DBDEB0D3CEEBB7D8D7B9C6C2886D886EC0A4886FCCB98870DBE7DBE1C6BADBE38871DBE88872C5F7887388748875DBEA88768877DBE9BFC088788879887ADBE6DBE5887B887C887D887E8880B4B9C0ACC2A2DBE2DBE48881888288838884D0CDDBED88858886888788888889C0DDDBF2888A888B888C888D888E888F8890B6E28891889288938894DBF3DBD2B9B8D4ABDBEC8895BFD1DBF08896DBD18897B5E68898DBEBBFE58899889A889BDBEE889CDBF1889D889E889FDBF988A088A188A288A388A488A588A688A788A8B9A1B0A388A988AA88AB88AC88AD88AE88AFC2F188B088B1B3C7DBEF88B288B3DBF888B4C6D2DBF488B588B6DBF5DBF7DBF688B788B8DBFE88B9D3F2B2BA88BA88BB88BCDBFD88BD88BE88BF88C088C188C288C388C4DCA488C5DBFB88C688C788C888C9DBFA88CA88CB88CCDBFCC5E0BBF988CD88CEDCA388CF88D0DCA588D1CCC388D288D388D4B6D1DDC088D588D688D7DCA188D8DCA288D988DA88DBC7B588DC88DD88DEB6E988DF88E088E1DCA788E288E388E488E5DCA688E6DCA9B1A488E788E8B5CC88E988EA88EB88EC88EDBFB088EE88EF88F088F188F2D1DF88F388F488F588F6B6C288F788F888F988FA88FB88FC88FD88FE894089418942894389448945DCA88946894789488949894A894B894CCBFAEBF3894D894E894FCBDC89508951CBFE895289538954CCC189558956895789588959C8FB895A895B895C895D895E895FDCAA89608961896289638964CCEEDCAB89658966896789688969896A896B896C896D896E896F897089718972897389748975DBD38976DCAFDCAC8977BEB38978CAFB8979897A897BDCAD897C897D897E89808981898289838984C9CAC4B989858986898789888989C7BDDCAE898A898B898CD4F6D0E6898D898E898F89908991899289938994C4ABB6D589958996899789988999899A899B899C899D899E899F89A089A189A289A389A489A589A6DBD489A789A889A989AAB1DA89AB89AC89ADDBD589AE89AF89B089B189B289B389B489B589B689B789B8DBD689B989BA89BBBABE89BC89BD89BE89BF89C089C189C289C389C489C589C689C789C889C9C8C089CA89CB89CC89CD89CE89CFCABFC8C989D0D7B389D1C9F989D289D3BFC789D489D5BAF889D689D7D2BC89D889D989DA89DB89DC89DD89DE89DFE2BA89E0B4A689E189E2B1B889E389E489E589E689E7B8B489E8CFC489E989EA89EB89ECD9E7CFA6CDE289ED89EED9EDB6E089EFD2B989F089F1B9BB89F289F389F489F5E2B9E2B789F6B4F389F7CCECCCABB7F289F8D8B2D1EBBABB89F9CAA789FA89FBCDB789FC89FDD2C4BFE4BCD0B6E189FEDEC58A408A418A428A43DEC6DBBC8A44D1D98A458A46C6E6C4CEB7EE8A47B7DC8A488A49BFFCD7E08A4AC6F58A4B8A4CB1BCDEC8BDB1CCD7DECA8A4DDEC98A4E8A4F8A508A518A52B5EC8A53C9DD8A548A55B0C28A568A578A588A598A5A8A5B8A5C8A5D8A5E8A5F8A608A618A62C5AEC5AB8A63C4CC8A64BCE9CBFD8A658A668A67BAC38A688A698A6AE5F9C8E7E5FACDFD8A6BD7B1B8BEC2E88A6CC8D18A6D8A6EE5FB8A6F8A708A718A72B6CABCCB8A738A74D1FDE6A18A75C3EE8A768A778A788A79E6A48A7A8A7B8A7C8A7DE5FEE6A5CDD78A7E8A80B7C1E5FCE5FDE6A38A818A82C4DDE6A88A838A84E6A78A858A868A878A888A898A8AC3C38A8BC6DE8A8C8A8DE6AA8A8E8A8F8A908A918A928A938A94C4B78A958A968A97E6A2CABC8A988A998A9A8A9BBDE3B9C3E6A6D0D5CEAF8A9C8A9DE6A9E6B08A9ED2A68A9FBDAAE6AD8AA08AA18AA28AA38AA4E6AF8AA5C0D18AA68AA7D2CC8AA88AA98AAABCA78AAB8AAC8AAD8AAE8AAF8AB08AB18AB28AB38AB48AB58AB6E6B18AB7D2F68AB88AB98ABAD7CB8ABBCDFE8ABCCDDEC2A6E6ABE6ACBDBFE6AEE6B38ABD8ABEE6B28ABF8AC08AC18AC2E6B68AC3E6B88AC48AC58AC68AC7C4EF8AC88AC98ACAC4C88ACB8ACCBEEAC9EF8ACD8ACEE6B78ACFB6F08AD08AD18AD2C3E48AD38AD48AD58AD68AD78AD88AD9D3E9E6B48ADAE6B58ADBC8A28ADC8ADD8ADE8ADF8AE0E6BD8AE18AE28AE3E6B98AE48AE58AE68AE78AE8C6C58AE98AEACDF1E6BB8AEB8AEC8AED8AEE8AEF8AF08AF18AF28AF38AF4E6BC8AF58AF68AF78AF8BBE98AF98AFA8AFB8AFC8AFD8AFE8B40E6BE8B418B428B438B44E6BA8B458B46C0B78B478B488B498B4A8B4B8B4C8B4D8B4E8B4FD3A4E6BFC9F4E6C38B508B51E6C48B528B538B548B55D0F68B568B578B588B598B5A8B5B8B5C8B5D8B5E8B5F8B608B618B628B638B648B658B668B67C3BD8B688B698B6A8B6B8B6C8B6D8B6EC3C4E6C28B6F8B708B718B728B738B748B758B768B778B788B798B7A8B7B8B7CE6C18B7D8B7E8B808B818B828B838B84E6C7CFB18B85EBF48B868B87E6CA8B888B898B8A8B8B8B8CE6C58B8D8B8EBCDEC9A98B8F8B908B918B928B938B94BCB58B958B96CFD38B978B988B998B9A8B9BE6C88B9CE6C98B9DE6CE8B9EE6D08B9F8BA08BA1E6D18BA28BA38BA4E6CBB5D58BA5E6CC8BA68BA7E6CF8BA88BA9C4DB8BAAE6C68BAB8BAC8BAD8BAE8BAFE6CD8BB08BB18BB28BB38BB48BB58BB68BB78BB88BB98BBA8BBB8BBC8BBD8BBE8BBF8BC08BC18BC28BC38BC48BC58BC6E6D28BC78BC88BC98BCA8BCB8BCC8BCD8BCE8BCF8BD08BD18BD2E6D4E6D38BD38BD48BD58BD68BD78BD88BD98BDA8BDB8BDC8BDD8BDE8BDF8BE08BE18BE28BE38BE48BE58BE68BE78BE88BE98BEA8BEB8BECE6D58BEDD9F88BEE8BEFE6D68BF08BF18BF28BF38BF48BF58BF68BF7E6D78BF88BF98BFA8BFB8BFC8BFD8BFE8C408C418C428C438C448C458C468C47D7D3E6DD8C48E6DEBFD7D4D08C49D7D6B4E6CBEFE6DAD8C3D7CED0A28C4AC3CF8C4B8C4CE6DFBCBEB9C2E6DBD1A78C4D8C4EBAA2C2CF8C4FD8AB8C508C518C52CAEBE5EE8C53E6DC8C54B7F58C558C568C578C58C8E68C598C5AC4F58C5B8C5CE5B2C4FE8C5DCBFCE5B3D5AC8C5ED3EECAD8B0B28C5FCBCECDEA8C608C61BAEA8C628C638C64E5B58C65E5B48C66D7DAB9D9D6E6B6A8CDF0D2CBB1A6CAB58C67B3E8C9F3BFCDD0FBCAD2E5B6BBC28C688C698C6ACFDCB9AC8C6B8C6C8C6D8C6ED4D78C6F8C70BAA6D1E7CFFCBCD28C71E5B7C8DD8C728C738C74BFEDB1F6CBDE8C758C76BCC58C77BCC4D2FAC3DCBFDC8C788C798C7A8C7BB8BB8C7C8C7D8C7EC3C28C80BAAED4A28C818C828C838C848C858C868C878C888C89C7DEC4AFB2EC8C8AB9D18C8B8C8CE5BBC1C88C8D8C8ED5AF8C8F8C908C918C928C93E5BC8C94E5BE8C958C968C978C988C998C9A8C9BB4E7B6D4CBC2D1B0B5BC8C9C8C9DCAD98C9EB7E28C9F8CA0C9E48CA1BDAB8CA28CA3CEBED7F08CA48CA58CA68CA7D0A18CA8C9D98CA98CAAB6FBE6D8BCE28CABB3BE8CACC9D08CADE6D9B3A28CAE8CAF8CB08CB1DECC8CB2D3C8DECD8CB3D2A28CB48CB58CB68CB7DECE8CB88CB98CBA8CBBBECD8CBC8CBDDECF8CBE8CBF8CC0CAACD2FCB3DFE5EAC4E1BEA1CEB2C4F2BED6C6A8B2E38CC18CC2BED38CC38CC4C7FCCCEBBDECCEDD8CC58CC6CABAC6C1E5ECD0BC8CC78CC88CC9D5B98CCA8CCB8CCCE5ED8CCD8CCE8CCF8CD0CAF48CD1CDC0C2C58CD2E5EF8CD3C2C4E5F08CD48CD58CD68CD78CD88CD98CDAE5F8CDCD8CDBC9BD8CDC8CDD8CDE8CDF8CE08CE18CE2D2D9E1A88CE38CE48CE58CE6D3EC8CE7CBEAC6F18CE88CE98CEA8CEB8CECE1AC8CED8CEE8CEFE1A7E1A98CF08CF1E1AAE1AF8CF28CF3B2ED8CF4E1ABB8DAE1ADE1AEE1B0B5BAE1B18CF58CF68CF78CF88CF9E1B3E1B88CFA8CFB8CFC8CFD8CFED1D28D40E1B6E1B5C1EB8D418D428D43E1B78D44D4C08D45E1B28D46E1BAB0B68D478D488D498D4AE1B48D4BBFF98D4CE1B98D4D8D4EE1BB8D4F8D508D518D528D538D54E1BE8D558D568D578D588D598D5AE1BC8D5B8D5C8D5D8D5E8D5F8D60D6C58D618D628D638D648D658D668D67CFBF8D688D69E1BDE1BFC2CD8D6AB6EB8D6BD3F88D6C8D6DC7CD8D6E8D6FB7E58D708D718D728D738D748D758D768D778D788D79BEFE8D7A8D7B8D7C8D7D8D7E8D80E1C0E1C18D818D82E1C7B3E78D838D848D858D868D878D88C6E98D898D8A8D8B8D8C8D8DB4DE8D8ED1C28D8F8D908D918D92E1C88D938D94E1C68D958D968D978D988D99E1C58D9AE1C3E1C28D9BB1C08D9C8D9D8D9ED5B8E1C48D9F8DA08DA18DA28DA3E1CB8DA48DA58DA68DA78DA88DA98DAA8DABE1CCE1CA8DAC8DAD8DAE8DAF8DB08DB18DB28DB3EFFA8DB48DB5E1D3E1D2C7B68DB68DB78DB88DB98DBA8DBB8DBC8DBD8DBE8DBF8DC0E1C98DC18DC2E1CE8DC3E1D08DC48DC58DC68DC78DC88DC98DCA8DCB8DCC8DCD8DCEE1D48DCFE1D1E1CD8DD08DD1E1CF8DD28DD38DD48DD5E1D58DD68DD78DD88DD98DDA8DDB8DDC8DDD8DDE8DDF8DE08DE18DE2E1D68DE38DE48DE58DE68DE78DE88DE98DEA8DEB8DEC8DED8DEE8DEF8DF08DF18DF28DF38DF48DF58DF68DF78DF8E1D78DF98DFA8DFBE1D88DFC8DFD8DFE8E408E418E428E438E448E458E468E478E488E498E4A8E4B8E4C8E4D8E4E8E4F8E508E518E528E538E548E55E1DA8E568E578E588E598E5A8E5B8E5C8E5D8E5E8E5F8E608E618E62E1DB8E638E648E658E668E678E688E69CEA18E6A8E6B8E6C8E6D8E6E8E6F8E708E718E728E738E748E758E76E7DD8E77B4A8D6DD8E788E79D1B2B3B28E7A8E7BB9A4D7F3C7C9BEDEB9AE8E7CCED78E7D8E7EB2EEDBCF8E80BCBAD2D1CBC8B0CD8E818E82CFEF8E838E848E858E868E87D9E3BDED8E888E89B1D2CAD0B2BC8E8ACBA7B7AB8E8BCAA68E8C8E8D8E8ECFA38E8F8E90E0F8D5CAE0FB8E918E92E0FAC5C1CCFB8E93C1B1E0F9D6E3B2AFD6C4B5DB8E948E958E968E978E988E998E9A8E9BB4F8D6A18E9C8E9D8E9E8E9F8EA0CFAFB0EF8EA18EA2E0FC8EA38EA48EA58EA68EA7E1A1B3A38EA88EA9E0FDE0FEC3B18EAA8EAB8EAC8EADC3DD8EAEE1A2B7F98EAF8EB08EB18EB28EB38EB4BBCF8EB58EB68EB78EB88EB98EBA8EBBE1A3C4BB8EBC8EBD8EBE8EBF8EC0E1A48EC18EC2E1A58EC38EC4E1A6B4B18EC58EC68EC78EC88EC98ECA8ECB8ECC8ECD8ECE8ECF8ED08ED18ED28ED3B8C9C6BDC4EA8ED4B2A28ED5D0D28ED6E7DBBBC3D3D7D3C48ED7B9E3E2CF8ED88ED98EDAD7AF8EDBC7ECB1D38EDC8EDDB4B2E2D18EDE8EDF8EE0D0F2C2AEE2D08EE1BFE2D3A6B5D7E2D2B5EA8EE2C3EDB8FD8EE3B8AE8EE4C5D3B7CFE2D48EE58EE68EE78EE8E2D3B6C8D7F98EE98EEA8EEB8EEC8EEDCDA58EEE8EEF8EF08EF18EF2E2D88EF3E2D6CAFCBFB5D3B9E2D58EF48EF58EF68EF7E2D78EF88EF98EFA8EFB8EFC8EFD8EFE8F408F418F42C1AEC0C88F438F448F458F468F478F48E2DBE2DAC0AA8F498F4AC1CE8F4B8F4C8F4D8F4EE2DC8F4F8F508F518F528F538F548F558F568F578F588F598F5AE2DD8F5BE2DE8F5C8F5D8F5E8F5F8F608F618F628F638F64DBC88F65D1D3CDA28F668F67BDA88F688F698F6ADEC3D8A5BFAADBCDD2ECC6FAC5AA8F6B8F6C8F6DDEC48F6EB1D7DFAE8F6F8F708F71CABD8F72DFB18F73B9AD8F74D2FD8F75B8A5BAEB8F768F77B3DA8F788F798F7AB5DCD5C58F7B8F7C8F7D8F7EC3D6CFD2BBA18F80E5F3E5F28F818F82E5F48F83CDE48F84C8F58F858F868F878F888F898F8A8F8BB5AFC7BF8F8CE5F68F8D8F8E8F8FECB08F908F918F928F938F948F958F968F978F988F998F9A8F9B8F9C8F9D8F9EE5E68F9FB9E9B5B18FA0C2BCE5E8E5E7E5E98FA18FA28FA38FA4D2CD8FA58FA68FA7E1EAD0CE8FA8CDAE8FA9D1E58FAA8FABB2CAB1EB8FACB1F2C5ED8FAD8FAED5C3D3B08FAFE1DC8FB08FB18FB2E1DD8FB3D2DB8FB4B3B9B1CB8FB58FB68FB7CDF9D5F7E1DE8FB8BEB6B4FD8FB9E1DFBADCE1E0BBB2C2C9E1E18FBA8FBB8FBCD0EC8FBDCDBD8FBE8FBFE1E28FC0B5C3C5C7E1E38FC18FC2E1E48FC38FC48FC58FC6D3F98FC78FC88FC98FCA8FCB8FCCE1E58FCDD1AD8FCE8FCFE1E6CEA28FD08FD18FD28FD38FD48FD5E1E78FD6B5C28FD78FD88FD98FDAE1E8BBD58FDB8FDC8FDD8FDE8FDFD0C4E2E0B1D8D2E48FE08FE1E2E18FE28FE3BCC9C8CC8FE4E2E3ECFEECFDDFAF8FE58FE68FE7E2E2D6BECDFCC3A68FE88FE98FEAE3C38FEB8FECD6D2E2E78FED8FEEE2E88FEF8FF0D3C78FF18FF2E2ECBFEC8FF3E2EDE2E58FF48FF5B3C08FF68FF78FF8C4EE8FF98FFAE2EE8FFB8FFCD0C38FFDBAF6E2E9B7DEBBB3CCACCBCBE2E4E2E6E2EAE2EB8FFE90409041E2F790429043E2F4D4F5E2F390449045C5AD9046D5FAC5C2B2C090479048E2EF9049E2F2C1AFCBBC904A904BB5A1E2F9904C904D904EBCB1E2F1D0D4D4B9E2F5B9D6E2F6904F90509051C7D390529053905490559056E2F0905790589059905A905BD7DCEDA1905C905DE2F8905EEDA5E2FECAD1905F906090619062906390649065C1B59066BBD090679068BFD69069BAE3906A906BCBA1906C906D906EEDA6EDA3906F9070EDA29071907290739074BBD6EDA7D0F490759076EDA4BADEB6F7E3A1B6B2CCF1B9A79077CFA2C7A190789079BFD2907A907BB6F1907CE2FAE2FBE2FDE2FCC4D5E3A2907DD3C1907E90809081E3A7C7C49082908390849085CFA490869087E3A9BAB790889089908A908BE3A8908CBBDA908DE3A3908E908F9090E3A4E3AA9091E3A69092CEF2D3C690939094BBBC90959096D4C39097C4FA90989099EDA8D0FCE3A5909AC3F5909BE3ADB1AF909CE3B2909D909E909FBCC290A090A1E3ACB5BF90A290A390A490A590A690A790A890A9C7E9E3B090AA90AB90ACBEAACDEF90AD90AE90AF90B090B1BBF390B290B390B4CCE890B590B6E3AF90B7E3B190B8CFA7E3AE90B9CEA9BBDD90BA90BB90BC90BD90BEB5EBBEE5B2D2B3CD90BFB1B9E3ABB2D1B5ACB9DFB6E890C090C1CFEBE3B790C2BBCC90C390C4C8C7D0CA90C590C690C790C890C9E3B8B3EE90CA90CB90CC90CDEDA990CED3FAD3E490CF90D090D1EDAAE3B9D2E290D290D390D490D590D6E3B590D790D890D990DAD3DE90DB90DC90DD90DEB8D0E3B390DF90E0E3B6B7DF90E1E3B4C0A290E290E390E4E3BA90E590E690E790E890E990EA90EB90EC90ED90EE90EF90F090F190F290F390F490F590F690F7D4B890F890F990FA90FB90FC90FD90FE9140B4C89141E3BB9142BBC59143C9F791449145C9E5914691479148C4BD9149914A914B914C914D914E914FEDAB9150915191529153C2FD9154915591569157BBDBBFAE91589159915A915B915C915D915ECEBF915F916091619162E3BC9163BFB6916491659166916791689169916A916B916C916D916E916F9170917191729173917491759176B1EF91779178D4F79179917A917B917C917DE3BE917E9180918191829183918491859186EDAD918791889189918A918B918C918D918E918FE3BFBAA9EDAC91909191E3BD91929193919491959196919791989199919A919BE3C0919C919D919E919F91A091A1BAB691A291A391A4B6AE91A591A691A791A891A9D0B891AAB0C3EDAE91AB91AC91AD91AE91AFEDAFC0C191B0E3C191B191B291B391B491B591B691B791B891B991BA91BB91BC91BD91BE91BF91C091C1C5B391C291C391C491C591C691C791C891C991CA91CB91CC91CD91CE91CFE3C291D091D191D291D391D491D591D691D791D8DCB291D991DA91DB91DC91DD91DEEDB091DFB8EA91E0CEECEAA7D0E7CAF9C8D6CFB7B3C9CED2BDE491E191E2E3DEBBF2EAA8D5BD91E3C6DDEAA991E491E591E6EAAA91E7EAACEAAB91E8EAAEEAAD91E991EA91EB91ECBDD891EDEAAF91EEC2BE91EF91F091F191F2B4C1B4F791F391F4BBA791F591F691F791F891F9ECE6ECE5B7BFCBF9B1E291FAECE791FB91FC91FDC9C8ECE8ECE991FECAD6DED0B2C5D4FA92409241C6CBB0C7B4F2C8D3924292439244CDD092459246BFB8924792489249924A924B924C924DBFDB924E924FC7A4D6B49250C0A9DED1C9A8D1EFC5A4B0E7B3B6C8C592519252B0E292539254B7F692559256C5FA92579258B6F39259D5D2B3D0BCBC925A925B925CB3AD925D925E925F9260BEF1B0D1926192629263926492659266D2D6CAE3D7A59267CDB6B6B6BFB9D5DB9268B8A7C5D79269926A926BDED2BFD9C2D5C7C0926CBBA4B1A8926D926EC5EA926F9270C5FBCCA79271927292739274B1A7927592769277B5D692789279927AC4A8927BDED3D1BAB3E9927CC3F2927D927EB7F79280D6F4B5A3B2F0C4B4C4E9C0ADDED49281B0E8C5C4C1E09282B9D59283BEDCCDD8B0CE9284CDCFDED6BED0D7BEDED5D5D0B0DD92859286C4E292879288C2A3BCF09289D3B5C0B9C5A1B2A6D4F1928A928BC0A8CAC3DED7D5FC928CB9B0928DC8ADCBA9928EDED9BFBD928F929092919292C6B4D7A7CAB0C4C39293B3D6B9D29294929592969297D6B8EAFCB0B492989299929A929BBFE6929C929DCCF4929E929F92A092A1CDDA92A292A392A4D6BFC2CE92A5CECECCA2D0AEC4D3B5B2DED8D5F5BCB7BBD392A692A7B0A492A8C5B2B4EC92A992AA92ABD5F192AC92ADEAFD92AE92AF92B092B192B292B3DEDACDA692B492B5CDEC92B692B792B892B9CEE6DEDC92BACDB1C0A692BB92BCD7BD92BDDEDBB0C6BAB4C9D3C4F3BEE892BE92BF92C092C1B2B692C292C392C492C592C692C792C892C9C0CCCBF092CABCF1BBBBB5B792CB92CC92CDC5F592CEDEE692CF92D092D1DEE3BEDD92D292D3DEDF92D492D592D692D7B4B7BDDD92D892D9DEE0C4ED92DA92DB92DC92DDCFC692DEB5E092DF92E092E192E2B6DECADAB5F4DEE592E3D5C692E4DEE1CCCDC6FE92E5C5C592E692E792E8D2B492E9BEF292EA92EB92EC92ED92EE92EF92F0C2D392F1CCBDB3B892F2BDD392F3BFD8CDC6D1DAB4EB92F4DEE4DEDDDEE792F5EAFE92F692F7C2B0DEE292F892F9D6C0B5A792FAB2F492FBDEE892FCDEF292FD92FE934093419342DEED9343DEF193449345C8E0934693479348D7E1DEEFC3E8CCE19349B2E5934A934B934CD2BE934D934E934F9350935193529353DEEE9354DEEBCED59355B4A79356935793589359935ABFABBEBE935B935CBDD2935D935E935F9360DEE99361D4AE9362DEDE9363DEEA9364936593669367C0BF9368DEECB2F3B8E9C2A79369936ABDC1936B936C936D936E936FDEF5DEF893709371B2ABB4A493729373B4EAC9A6937493759376937793789379DEF6CBD1937AB8E3937BDEF7DEFA937C937D937E9380DEF9938193829383CCC29384B0E1B4EE93859386938793889389938AE5BA938B938C938D938E938FD0AF93909391B2EB9392EBA19393DEF493949395C9E3DEF3B0DAD2A1B1F79396CCAF939793989399939A939B939C939DDEF0939ECBA4939F93A093A1D5AA93A293A393A493A593A6DEFB93A793A893A993AA93AB93AC93AD93AEB4DD93AFC4A693B093B193B2DEFD93B393B493B593B693B793B893B993BA93BB93BCC3FEC4A1DFA193BD93BE93BF93C093C193C293C3C1CC93C4DEFCBEEF93C5C6B293C693C793C893C993CA93CB93CC93CD93CEB3C5C8F693CF93D0CBBADEFE93D193D2DFA493D393D493D593D6D7B293D793D893D993DA93DBB3B793DC93DD93DE93DFC1C393E093E1C7CBB2A5B4E993E2D7AB93E393E493E593E6C4EC93E7DFA2DFA393E8DFA593E9BAB393EA93EB93ECDFA693EDC0DE93EE93EFC9C393F093F193F293F393F493F593F6B2D9C7E693F7DFA793F8C7DC93F993FA93FB93FCDFA8EBA293FD93FE944094419442CBD3944394449445DFAA9446DFA99447B2C194489449944A944B944C944D944E944F9450945194529453945494559456945794589459945A945B945C945D945E945F9460C5CA94619462946394649465946694679468DFAB9469946A946B946C946D946E946F9470D4DC94719472947394749475C8C19476947794789479947A947B947C947D947E948094819482DFAC94839484948594869487BEF094889489DFADD6A7948A948B948C948DEAB7EBB6CAD5948ED8FCB8C4948FB9A594909491B7C5D5FE94929493949494959496B9CA94979498D0A7F4CD9499949AB5D0949B949CC3F4949DBEC8949E949F94A0EBB7B0BD94A194A2BDCC94A3C1B294A4B1D6B3A894A594A694A7B8D2C9A294A894A9B6D894AA94AB94AC94ADEBB8BEB494AE94AF94B0CAFD94B1C7C394B2D5FB94B394B4B7F394B594B694B794B894B994BA94BB94BC94BD94BE94BF94C094C194C294C3CEC494C494C594C6D5ABB1F394C794C894C9ECB3B0DF94CAECB594CB94CC94CDB6B794CEC1CF94CFF5FAD0B194D094D1D5E594D2CED394D394D4BDEFB3E294D5B8AB94D6D5B694D7EDBD94D8B6CF94D9CBB9D0C294DA94DB94DC94DD94DE94DF94E094E1B7BD94E294E3ECB6CAA994E494E594E6C5D494E7ECB9ECB8C2C3ECB794E894E994EA94EBD0FDECBA94ECECBBD7E594ED94EEECBC94EF94F094F1ECBDC6EC94F294F394F494F594F694F794F894F9CEDE94FABCC894FB94FCC8D5B5A9BEC9D6BCD4E794FD94FED1AED0F1EAB8EAB9EABABAB59540954195429543CAB1BFF595449545CDFA9546954795489549954AEAC0954BB0BAEABE954C954DC0A5954E954F9550EABB9551B2FD9552C3F7BBE8955395549555D2D7CEF4EABF955695579558EABC9559955A955BEAC3955CD0C7D3B3955D955E955F9560B4BA9561C3C1D7F29562956395649565D5D19566CAC79567EAC595689569EAC4EAC7EAC6956A956B956C956D956ED6E7956FCFD495709571EACB9572BBCE9573957495759576957795789579BDFAC9CE957A957BEACC957C957DC9B9CFFEEACAD4CEEACDEACF957E9580CDED9581958295839584EAC99585EACE95869587CEEE9588BBDE9589B3BF958A958B958C958D958EC6D5BEB0CEFA958F95909591C7E79592BEA7EAD095939594D6C7959595969597C1C095989599959AD4DD959BEAD1959C959DCFBE959E959F95A095A1EAD295A295A395A495A5CAEE95A695A795A895A9C5AFB0B595AA95AB95AC95AD95AEEAD495AF95B095B195B295B395B495B595B695B7EAD3F4DF95B895B995BA95BB95BCC4BA95BD95BE95BF95C095C1B1A995C295C395C495C5E5DF95C695C795C895C9EAD595CA95CB95CC95CD95CE95CF95D095D195D295D395D495D595D695D795D895D995DA95DB95DC95DD95DE95DF95E095E195E295E3CAEF95E4EAD6EAD7C6D895E595E695E795E895E995EA95EB95ECEAD895ED95EEEAD995EF95F095F195F295F395F4D4BB95F5C7FAD2B7B8FC95F695F7EAC295F8B2DC95F995FAC2FC95FBD4F8CCE6D7EE95FC95FD95FE9640964196429643D4C2D3D0EBC3C5F39644B7FE96459646EBD4964796489649CBB7EBDE964AC0CA964B964C964DCDFB964EB3AF964FC6DA965096519652965396549655EBFC9656C4BE9657CEB4C4A9B1BED4FD9658CAF59659D6EC965A965BC6D3B6E4965C965D965E965FBBFA96609661D0E096629663C9B19664D4D3C8A896659666B8CB9667E8BEC9BC96689669E8BB966AC0EED0D3B2C4B4E5966BE8BC966C966DD5C8966E966F967096719672B6C59673E8BDCAF8B8DCCCF5967496759676C0B496779678D1EEE8BFE8C29679967ABABC967BB1ADBDDC967CEABDE8C3967DE8C6967EE8CB9680968196829683E8CC9684CBC9B0E59685BCAB96869687B9B996889689E8C1968ACDF7968BE8CA968C968D968E968FCEF69690969196929693D5ED9694C1D6E8C49695C3B69696B9FBD6A6E8C8969796989699CAE0D4E6969AE8C0969BE8C5E8C7969CC7B9B7E3969DE8C9969EBFDDE8D2969F96A0E8D796A1E8D5BCDCBCCFE8DB96A296A396A496A596A696A796A896A9E8DE96AAE8DAB1FA96AB96AC96AD96AE96AF96B096B196B296B396B4B0D8C4B3B8CCC6E2C8BEC8E196B596B696B7E8CFE8D4E8D696B8B9F1E8D8D7F596B9C4FB96BAE8DC96BB96BCB2E996BD96BE96BFE8D196C096C1BCED96C296C3BFC2E8CDD6F996C4C1F8B2F196C596C696C796C896C996CA96CB96CCE8DF96CDCAC1E8D996CE96CF96D096D1D5A496D2B1EAD5BBE8CEE8D0B6B0E8D396D3E8DDC0B896D4CAF796D5CBA896D696D7C6DCC0F596D896D996DA96DB96DCE8E996DD96DE96DFD0A396E096E196E296E396E496E596E6E8F2D6EA96E796E896E996EA96EB96EC96EDE8E0E8E196EE96EF96F0D1F9BACBB8F996F196F2B8F1D4D4E8EF96F3E8EEE8ECB9F0CCD2E8E6CEA6BFF296F4B0B8E8F1E8F096F5D7C096F6E8E496F7CDA9C9A396F8BBB8BDDBE8EA96F996FA96FB96FC96FD96FE9740974197429743E8E2E8E3E8E5B5B5E8E7C7C5E8EBE8EDBDB0D7AE9744E8F897459746974797489749974A974B974CE8F5974DCDB0E8F6974E974F9750975197529753975497559756C1BA9757E8E89758C3B7B0F09759975A975B975C975D975E975F9760E8F4976197629763E8F7976497659766B9A3976797689769976A976B976C976D976E976F9770C9D2977197729773C3CECEE0C0E69774977597769777CBF39778CCDDD0B59779977ACAE1977BE8F3977C977D977E9780978197829783978497859786BCEC9787E8F997889789978A978B978C978DC3DE978EC6E5978FB9F79790979197929793B0F497949795D7D897969797BCAC9798C5EF9799979A979B979C979DCCC4979E979FE9A697A097A197A297A397A497A597A697A797A897A9C9AD97AAE9A2C0E297AB97AC97ADBFC397AE97AF97B0E8FEB9D797B1E8FB97B297B397B497B5E9A497B697B797B8D2CE97B997BA97BB97BC97BDE9A397BED6B2D7B597BFE9A797C0BDB797C197C297C397C497C597C697C797C897C997CA97CB97CCE8FCE8FD97CD97CE97CFE9A197D097D197D297D397D497D597D697D7CDD697D897D9D2AC97DA97DB97DCE9B297DD97DE97DF97E0E9A997E197E297E3B4AA97E4B4BB97E597E6E9AB97E797E897E997EA97EB97EC97ED97EE97EF97F097F197F297F397F497F597F697F7D0A897F897F9E9A597FA97FBB3FE97FC97FDE9ACC0E397FEE9AA98409841E9B998429843E9B89844984598469847E9AE98489849E8FA984A984BE9A8984C984D984E984F9850BFACE9B1E9BA98519852C2A5985398549855E9AF9856B8C59857E9AD9858D3DCE9B4E9B5E9B79859985A985BE9C7985C985D985E985F98609861C0C6E9C598629863E9B098649865E9BBB0F19866986798689869986A986B986C986D986E986FE9BCD5A598709871E9BE9872E9BF987398749875E9C198769877C1F198789879C8B6987A987B987CE9BD987D987E988098819882E9C29883988498859886988798889889988AE9C3988BE9B3988CE9B6988DBBB1988E988F9890E9C0989198929893989498959896BCF7989798989899E9C4E9C6989A989B989C989D989E989F98A098A198A298A398A498A5E9CA98A698A798A898A9E9CE98AA98AB98AC98AD98AE98AF98B098B198B298B3B2DB98B4E9C898B598B698B798B898B998BA98BB98BC98BD98BEB7AE98BF98C098C198C298C398C498C598C698C798C898C998CAE9CBE9CC98CB98CC98CD98CE98CF98D0D5C198D1C4A398D298D398D498D598D698D7E9D898D8BAE198D998DA98DB98DCE9C998DDD3A398DE98DF98E0E9D498E198E298E398E498E598E698E7E9D7E9D098E898E998EA98EB98ECE9CF98ED98EEC7C198EF98F098F198F298F398F498F598F6E9D298F798F898F998FA98FB98FC98FDE9D9B3C898FEE9D399409941994299439944CFF0994599469947E9CD99489949994A994B994C994D994E994F995099519952B3F79953995499559956995799589959E9D6995A995BE9DA995C995D995ECCB4995F99609961CFAD99629963996499659966996799689969996AE9D5996BE9DCE9DB996C996D996E996F9970E9DE99719972997399749975997699779978E9D19979997A997B997C997D997E99809981E9DD9982E9DFC3CA9983998499859986998799889989998A998B998C998D998E998F9990999199929993999499959996999799989999999A999B999C999D999E999F99A099A199A299A399A499A599A699A799A899A999AA99AB99AC99AD99AE99AF99B099B199B299B399B499B599B699B799B899B999BA99BB99BC99BD99BE99BF99C099C199C299C399C499C599C699C799C899C999CA99CB99CC99CD99CE99CF99D099D199D299D399D499D599D699D799D899D999DA99DB99DC99DD99DE99DF99E099E199E299E399E499E599E699E799E899E999EA99EB99EC99ED99EE99EF99F099F199F299F399F499F5C7B7B4CEBBB6D0C0ECA399F699F7C5B799F899F999FA99FB99FC99FD99FE9A409A419A42D3FB9A439A449A459A46ECA49A47ECA5C6DB9A489A499A4ABFEE9A4B9A4C9A4D9A4EECA69A4F9A50ECA7D0AA9A51C7B89A529A53B8E89A549A559A569A579A589A599A5A9A5B9A5C9A5D9A5E9A5FECA89A609A619A629A639A649A659A669A67D6B9D5FDB4CBB2BDCEE4C6E79A689A69CDE19A6A9A6B9A6C9A6D9A6E9A6F9A709A719A729A739A749A759A769A77B4F59A78CBC0BCDF9A799A7A9A7B9A7CE9E2E9E3D1EAE9E59A7DB4F9E9E49A7ED1B3CAE2B2D09A80E9E89A819A829A839A84E9E6E9E79A859A86D6B39A879A889A89E9E9E9EA9A8A9A8B9A8C9A8D9A8EE9EB9A8F9A909A919A929A939A949A959A96E9EC9A979A989A999A9A9A9B9A9C9A9D9A9EECAFC5B9B6CE9A9FD2F39AA09AA19AA29AA39AA49AA59AA6B5EE9AA7BBD9ECB19AA89AA9D2E39AAA9AAB9AAC9AAD9AAECEE39AAFC4B89AB0C3BF9AB19AB2B6BED8B9B1C8B1CFB1D1C5FE9AB3B1D09AB4C3AB9AB59AB69AB79AB89AB9D5B19ABA9ABB9ABC9ABD9ABE9ABF9AC09AC1EBA4BAC19AC29AC39AC4CCBA9AC59AC69AC7EBA59AC8EBA79AC99ACA9ACBEBA89ACC9ACD9ACEEBA69ACF9AD09AD19AD29AD39AD49AD5EBA9EBABEBAA9AD69AD79AD89AD99ADAEBAC9ADBCACFD8B5C3F19ADCC3A5C6F8EBADC4CA9ADDEBAEEBAFEBB0B7D59ADE9ADF9AE0B7FA9AE1EBB1C7E29AE2EBB39AE3BAA4D1F5B0B1EBB2EBB49AE49AE59AE6B5AAC2C8C7E89AE7EBB59AE8CBAEE3DF9AE99AEAD3C09AEB9AEC9AED9AEED9DB9AEF9AF0CDA1D6ADC7F39AF19AF29AF3D9E0BBE39AF4BABAE3E29AF59AF69AF79AF89AF9CFAB9AFA9AFB9AFCE3E0C9C79AFDBAB99AFE9B409B41D1B4E3E1C8EAB9AFBDADB3D8CEDB9B429B43CCC09B449B459B46E3E8E3E9CDF49B479B489B499B4A9B4BCCAD9B4CBCB39B4DE3EA9B4EE3EB9B4F9B50D0DA9B519B529B53C6FBB7DA9B549B55C7DFD2CACED69B56E3E4E3EC9B57C9F2B3C19B589B59E3E79B5A9B5BC6E3E3E59B5C9B5DEDB3E3E69B5E9B5F9B609B61C9B39B62C5E69B639B649B65B9B59B66C3BB9B67E3E3C5BDC1A4C2D9B2D79B68E3EDBBA6C4AD9B69E3F0BEDA9B6A9B6BE3FBE3F5BAD39B6C9B6D9B6E9B6FB7D0D3CD9B70D6CED5D3B9C1D5B4D1D89B719B729B739B74D0B9C7F69B759B769B77C8AAB2B49B78C3DA9B799B7A9B7BE3EE9B7C9B7DE3FCE3EFB7A8E3F7E3F49B7E9B809B81B7BA9B829B83C5A29B84E3F6C5DDB2A8C6FC9B85C4E09B869B87D7A29B88C0E1E3F99B899B8AE3FAE3FDCCA9E3F39B8BD3BE9B8CB1C3EDB4E3F1E3F29B8DE3F8D0BAC6C3D4F3E3FE9B8E9B8FBDE09B909B91E4A79B929B93E4A69B949B959B96D1F3E4A39B97E4A99B989B999B9AC8F79B9B9B9C9B9D9B9ECFB49B9FE4A8E4AEC2E59BA09BA1B6B49BA29BA39BA49BA59BA69BA7BDF29BA8E4A29BA99BAABAE9E4AA9BAB9BACE4AC9BAD9BAEB6FDD6DEE4B29BAFE4AD9BB09BB19BB2E4A19BB3BBEECDDDC7A2C5C99BB49BB5C1F79BB6E4A49BB7C7B3BDACBDBDE4A59BB8D7C7B2E29BB9E4ABBCC3E4AF9BBABBEBE4B0C5A8E4B19BBB9BBC9BBD9BBED5E3BFA39BBFE4BA9BC0E4B79BC1E4BB9BC29BC3E4BD9BC49BC5C6D69BC69BC7BAC6C0CB9BC89BC99BCAB8A1E4B49BCB9BCC9BCD9BCED4A19BCF9BD0BAA3BDFE9BD19BD29BD3E4BC9BD49BD59BD69BD79BD8CDBF9BD99BDAC4F99BDB9BDCCFFBC9E69BDD9BDED3BF9BDFCFD19BE09BE1E4B39BE2E4B8E4B9CCE99BE39BE49BE59BE69BE7CCCE9BE8C0D4E4B5C1B0E4B6CED09BE9BBC1B5D39BEAC8F3BDA7D5C7C9ACB8A2E4CA9BEB9BECE4CCD1C49BED9BEED2BA9BEF9BF0BAAD9BF19BF2BAD49BF39BF49BF59BF69BF79BF8E4C3B5ED9BF99BFA9BFBD7CDE4C0CFFDE4BF9BFC9BFD9BFEC1DCCCCA9C409C419C429C43CAE79C449C459C469C47C4D79C48CCD4E4C89C499C4A9C4BE4C7E4C19C4CE4C4B5AD9C4D9C4ED3D99C4FE4C69C509C519C529C53D2F9B4E39C54BBB49C559C56C9EE9C57B4BE9C589C599C5ABBEC9C5BD1CD9C5CCCEDEDB59C5D9C5E9C5F9C609C619C629C639C64C7E59C659C669C679C68D4A89C69E4CBD7D5E4C29C6ABDA5E4C59C6B9C6CD3E69C6DE4C9C9F89C6E9C6FE4BE9C709C71D3E59C729C73C7FEB6C99C74D4FCB2B3E4D79C759C769C77CEC29C78E4CD9C79CEBC9C7AB8DB9C7B9C7CE4D69C7DBFCA9C7E9C809C81D3CE9C82C3EC9C839C849C859C869C879C889C899C8AC5C8E4D89C8B9C8C9C8D9C8E9C8F9C909C919C92CDC4E4CF9C939C949C959C96E4D4E4D59C97BAFE9C98CFE69C999C9AD5BF9C9B9C9C9C9DE4D29C9E9C9F9CA09CA19CA29CA39CA49CA59CA69CA79CA8E4D09CA99CAAE4CE9CAB9CAC9CAD9CAE9CAF9CB09CB19CB29CB39CB49CB59CB69CB79CB89CB9CDE5CAAA9CBA9CBB9CBCC0A39CBDBDA6E4D39CBE9CBFB8C89CC09CC19CC29CC39CC4E4E7D4B49CC59CC69CC79CC89CC99CCA9CCBE4DB9CCC9CCD9CCEC1EF9CCF9CD0E4E99CD19CD2D2E79CD39CD4E4DF9CD5E4E09CD69CD7CFAA9CD89CD99CDA9CDBCBDD9CDCE4DAE4D19CDDE4E59CDEC8DCE4E39CDF9CE0C4E7E4E29CE1E4E19CE29CE39CE4B3FCE4E89CE59CE69CE79CE8B5E19CE99CEA9CEBD7CC9CEC9CED9CEEE4E69CEFBBAC9CF0D7D2CCCFEBF89CF1E4E49CF29CF3B9F69CF49CF59CF6D6CDE4D9E4DCC2FAE4DE9CF7C2CBC0C4C2D09CF8B1F5CCB29CF99CFA9CFB9CFC9CFD9CFE9D409D419D429D43B5CE9D449D459D469D47E4EF9D489D499D4A9D4B9D4C9D4D9D4E9D4FC6AF9D509D519D52C6E19D539D54E4F59D559D569D579D589D59C2A99D5A9D5B9D5CC0ECD1DDE4EE9D5D9D5E9D5F9D609D619D629D639D649D659D66C4AE9D679D689D69E4ED9D6A9D6B9D6C9D6DE4F6E4F4C2FE9D6EE4DD9D6FE4F09D70CAFE9D71D5C49D729D73E4F19D749D759D769D779D789D799D7AD1FA9D7B9D7C9D7D9D7E9D809D819D82E4EBE4EC9D839D849D85E4F29D86CEAB9D879D889D899D8A9D8B9D8C9D8D9D8E9D8F9D90C5CB9D919D929D93C7B19D94C2BA9D959D969D97E4EA9D989D999D9AC1CA9D9B9D9C9D9D9D9E9D9F9DA0CCB6B3B19DA19DA29DA3E4FB9DA4E4F39DA59DA69DA7E4FA9DA8E4FD9DA9E4FC9DAA9DAB9DAC9DAD9DAE9DAF9DB0B3CE9DB19DB29DB3B3BAE4F79DB49DB5E4F9E4F8C5EC9DB69DB79DB89DB99DBA9DBB9DBC9DBD9DBE9DBF9DC09DC19DC2C0BD9DC39DC49DC59DC6D4E89DC79DC89DC99DCA9DCBE5A29DCC9DCD9DCE9DCF9DD09DD19DD29DD39DD49DD59DD6B0C49DD79DD8E5A49DD99DDAE5A39DDB9DDC9DDD9DDE9DDF9DE0BCA49DE1E5A59DE29DE39DE49DE59DE69DE7E5A19DE89DE99DEA9DEB9DEC9DED9DEEE4FEB1F49DEF9DF09DF19DF29DF39DF49DF59DF69DF79DF89DF9E5A89DFAE5A9E5A69DFB9DFC9DFD9DFE9E409E419E429E439E449E459E469E47E5A7E5AA9E489E499E4A9E4B9E4C9E4D9E4E9E4F9E509E519E529E539E549E559E569E579E589E599E5A9E5B9E5C9E5D9E5E9E5F9E609E619E629E639E649E659E669E679E68C6D99E699E6A9E6B9E6C9E6D9E6E9E6F9E70E5ABE5AD9E719E729E739E749E759E769E77E5AC9E789E799E7A9E7B9E7C9E7D9E7E9E809E819E829E839E849E859E869E879E889E89E5AF9E8A9E8B9E8CE5AE9E8D9E8E9E8F9E909E919E929E939E949E959E969E979E989E999E9A9E9B9E9C9E9D9E9EB9E09E9F9EA0E5B09EA19EA29EA39EA49EA59EA69EA79EA89EA99EAA9EAB9EAC9EAD9EAEE5B19EAF9EB09EB19EB29EB39EB49EB59EB69EB79EB89EB99EBABBF0ECE1C3F09EBBB5C6BBD29EBC9EBD9EBE9EBFC1E9D4EE9EC0BEC49EC19EC29EC3D7C69EC4D4D6B2D3ECBE9EC59EC69EC79EC8EAC19EC99ECA9ECBC2AFB4B69ECC9ECD9ECED1D79ECF9ED09ED1B3B49ED2C8B2BFBBECC09ED39ED4D6CB9ED59ED6ECBFECC19ED79ED89ED99EDA9EDB9EDC9EDD9EDE9EDF9EE09EE19EE29EE3ECC5BEE6CCBFC5DABEBC9EE4ECC69EE5B1FE9EE69EE79EE8ECC4D5A8B5E39EE9ECC2C1B6B3E39EEA9EEBECC3CBB8C0C3CCFE9EEC9EED9EEE9EEFC1D29EF0ECC89EF19EF29EF39EF49EF59EF69EF79EF89EF99EFA9EFB9EFC9EFDBAE6C0D39EFED6F29F409F419F42D1CC9F439F449F459F46BFBE9F47B7B3C9D5ECC7BBE29F48CCCCBDFDC8C89F49CFA99F4A9F4B9F4C9F4D9F4E9F4F9F50CDE99F51C5EB9F529F539F54B7E99F559F569F579F589F599F5A9F5B9F5C9F5D9F5E9F5FD1C9BAB89F609F619F629F639F64ECC99F659F66ECCA9F67BBC0ECCB9F68ECE2B1BAB7D99F699F6A9F6B9F6C9F6D9F6E9F6F9F709F719F729F73BDB99F749F759F769F779F789F799F7A9F7BECCCD1E6ECCD9F7C9F7D9F7E9F80C8BB9F819F829F839F849F859F869F879F889F899F8A9F8B9F8C9F8D9F8EECD19F8F9F909F919F92ECD39F93BBCD9F94BCE59F959F969F979F989F999F9A9F9B9F9C9F9D9F9E9F9F9FA09FA1ECCF9FA2C9B79FA39FA49FA59FA69FA7C3BA9FA8ECE3D5D5ECD09FA99FAA9FAB9FAC9FADD6F39FAE9FAF9FB0ECD2ECCE9FB19FB29FB39FB4ECD49FB5ECD59FB69FB7C9BF9FB89FB99FBA9FBB9FBC9FBDCFA89FBE9FBF9FC09FC19FC2D0DC9FC39FC49FC59FC6D1AC9FC79FC89FC99FCAC8DB9FCB9FCC9FCDECD6CEF59FCE9FCF9FD09FD19FD2CAECECDA9FD39FD49FD59FD69FD79FD89FD9ECD99FDA9FDB9FDCB0BE9FDD9FDE9FDF9FE09FE19FE2ECD79FE3ECD89FE49FE59FE6ECE49FE79FE89FE99FEA9FEB9FEC9FED9FEE9FEFC8BC9FF09FF19FF29FF39FF49FF59FF69FF79FF89FF9C1C79FFA9FFB9FFC9FFD9FFEECDCD1E0A040A041A042A043A044A045A046A047A048A049ECDBA04AA04BA04CA04DD4EFA04EECDDA04FA050A051A052A053A054DBC6A055A056A057A058A059A05AA05BA05CA05DA05EECDEA05FA060A061A062A063A064A065A066A067A068A069A06AB1ACA06BA06CA06DA06EA06FA070A071A072A073A074A075A076A077A078A079A07AA07BA07CA07DA07EA080A081ECDFA082A083A084A085A086A087A088A089A08AA08BECE0A08CD7A6A08DC5C0A08EA08FA090EBBCB0AEA091A092A093BEF4B8B8D2AFB0D6B5F9A094D8B3A095CBACA096E3DDA097A098A099A09AA09BA09CA09DC6ACB0E6A09EA09FA0A0C5C6EBB9A0A1A0A2A0A3A0A4EBBAA0A5A0A6A0A7EBBBA0A8A0A9D1C0A0AAC5A3A0ABEAF2A0ACC4B2A0ADC4B5C0CEA0AEA0AFA0B0EAF3C4C1A0B1CEEFA0B2A0B3A0B4A0B5EAF0EAF4A0B6A0B7C9FCA0B8A0B9C7A3A0BAA0BBA0BCCCD8CEFEA0BDA0BEA0BFEAF5EAF6CFACC0E7A0C0A0C1EAF7A0C2A0C3A0C4A0C5A0C6B6BFEAF8A0C7EAF9A0C8EAFAA0C9A0CAEAFBA0CBA0CCA0CDA0CEA0CFA0D0A0D1A0D2A0D3A0D4A0D5A0D6EAF1A0D7A0D8A0D9A0DAA0DBA0DCA0DDA0DEA0DFA0E0A0E1A0E2C8AEE1EBA0E3B7B8E1ECA0E4A0E5A0E6E1EDA0E7D7B4E1EEE1EFD3CCA0E8A0E9A0EAA0EBA0ECA0EDA0EEE1F1BFF1E1F0B5D2A0EFA0F0A0F1B1B7A0F2A0F3A0F4A0F5E1F3E1F2A0F6BAFCA0F7E1F4A0F8A0F9A0FAA0FBB9B7A0FCBED1A0FDA0FEAA40AA41C4FCAA42BADDBDC6AA43AA44AA45AA46AA47AA48E1F5E1F7AA49AA4AB6C0CFC1CAA8E1F6D5F8D3FCE1F8E1FCE1F9AA4BAA4CE1FAC0EAAA4DE1FEE2A1C0C7AA4EAA4FAA50AA51E1FBAA52E1FDAA53AA54AA55AA56AA57AA58E2A5AA59AA5AAA5BC1D4AA5CAA5DAA5EAA5FE2A3AA60E2A8B2FEE2A2AA61AA62AA63C3CDB2C2E2A7E2A6AA64AA65E2A4E2A9AA66AA67E2ABAA68AA69AA6AD0C9D6EDC3A8E2ACAA6BCFD7AA6CAA6DE2AEAA6EAA6FBAEFAA70AA71E9E0E2ADE2AAAA72AA73AA74AA75BBABD4B3AA76AA77AA78AA79AA7AAA7BAA7CAA7DAA7EAA80AA81AA82AA83E2B0AA84AA85E2AFAA86E9E1AA87AA88AA89AA8AE2B1AA8BAA8CAA8DAA8EAA8FAA90AA91AA92E2B2AA93AA94AA95AA96AA97AA98AA99AA9AAA9BAA9CAA9DE2B3CCA1AA9EE2B4AA9FAAA0AB40AB41AB42AB43AB44AB45AB46AB47AB48AB49AB4AAB4BE2B5AB4CAB4DAB4EAB4FAB50D0FEAB51AB52C2CAAB53D3F1AB54CDF5AB55AB56E7E0AB57AB58E7E1AB59AB5AAB5BAB5CBEC1AB5DAB5EAB5FAB60C2EAAB61AB62AB63E7E4AB64AB65E7E3AB66AB67AB68AB69AB6AAB6BCDE6AB6CC3B5AB6DAB6EE7E2BBB7CFD6AB6FC1E1E7E9AB70AB71AB72E7E8AB73AB74E7F4B2A3AB75AB76AB77AB78E7EAAB79E7E6AB7AAB7BAB7CAB7DAB7EE7ECE7EBC9BAAB80AB81D5E4AB82E7E5B7A9E7E7AB83AB84AB85AB86AB87AB88AB89E7EEAB8AAB8BAB8CAB8DE7F3AB8ED6E9AB8FAB90AB91AB92E7EDAB93E7F2AB94E7F1AB95AB96AB97B0E0AB98AB99AB9AAB9BE7F5AB9CAB9DAB9EAB9FABA0AC40AC41AC42AC43AC44AC45AC46AC47AC48AC49AC4AC7F2AC4BC0C5C0EDAC4CAC4DC1F0E7F0AC4EAC4FAC50AC51E7F6CBF6AC52AC53AC54AC55AC56AC57AC58AC59AC5AE8A2E8A1AC5BAC5CAC5DAC5EAC5FAC60D7C1AC61AC62E7FAE7F9AC63E7FBAC64E7F7AC65E7FEAC66E7FDAC67E7FCAC68AC69C1D5C7D9C5FDC5C3AC6AAC6BAC6CAC6DAC6EC7EDAC6FAC70AC71AC72E8A3AC73AC74AC75AC76AC77AC78AC79AC7AAC7BAC7CAC7DAC7EAC80AC81AC82AC83AC84AC85AC86E8A6AC87E8A5AC88E8A7BAF7E7F8E8A4AC89C8F0C9AAAC8AAC8BAC8CAC8DAC8EAC8FAC90AC91AC92AC93AC94AC95AC96E8A9AC97AC98B9E5AC99AC9AAC9BAC9CAC9DD1FEE8A8AC9EAC9FACA0AD40AD41AD42E8AAAD43E8ADE8AEAD44C1A7AD45AD46AD47E8AFAD48AD49AD4AE8B0AD4BAD4CE8ACAD4DE8B4AD4EAD4FAD50AD51AD52AD53AD54AD55AD56AD57AD58E8ABAD59E8B1AD5AAD5BAD5CAD5DAD5EAD5FAD60AD61E8B5E8B2E8B3AD62AD63AD64AD65AD66AD67AD68AD69AD6AAD6BAD6CAD6DAD6EAD6FAD70AD71E8B7AD72AD73AD74AD75AD76AD77AD78AD79AD7AAD7BAD7CAD7DAD7EAD80AD81AD82AD83AD84AD85AD86AD87AD88AD89E8B6AD8AAD8BAD8CAD8DAD8EAD8FAD90AD91AD92B9CFAD93F0ACAD94F0ADAD95C6B0B0EAC8BFAD96CDDFAD97AD98AD99AD9AAD9BAD9CAD9DCECDEAB1AD9EAD9FADA0AE40EAB2AE41C6BFB4C9AE42AE43AE44AE45AE46AE47AE48EAB3AE49AE4AAE4BAE4CD5E7AE4DAE4EAE4FAE50AE51AE52AE53AE54DDF9AE55EAB4AE56EAB5AE57EAB6AE58AE59AE5AAE5BB8CADFB0C9F5AE5CCCF0AE5DAE5EC9FAAE5FAE60AE61AE62AE63C9FBAE64AE65D3C3CBA6AE66B8A6F0AEB1C2AE67E5B8CCEFD3C9BCD7C9EAAE68B5E7AE69C4D0B5E9AE6AEEAEBBADAE6BAE6CE7DEAE6DEEAFAE6EAE6FAE70AE71B3A9AE72AE73EEB2AE74AE75EEB1BDE7AE76EEB0CEB7AE77AE78AE79AE7AC5CFAE7BAE7CAE7DAE7EC1F4DBCEEEB3D0F3AE80AE81AE82AE83AE84AE85AE86AE87C2D4C6E8AE88AE89AE8AB7ACAE8BAE8CAE8DAE8EAE8FAE90AE91EEB4AE92B3EBAE93AE94AE95BBFBEEB5AE96AE97AE98AE99AE9AE7DCAE9BAE9CAE9DEEB6AE9EAE9FBDAEAEA0AF40AF41AF42F1E2AF43AF44AF45CAE8AF46D2C9F0DAAF47F0DBAF48F0DCC1C6AF49B8EDBECEAF4AAF4BF0DEAF4CC5B1F0DDD1F1AF4DF0E0B0CCBDEAAF4EAF4FAF50AF51AF52D2DFF0DFAF53B4AFB7E8F0E6F0E5C6A3F0E1F0E2B4C3AF54AF55F0E3D5EEAF56AF57CCDBBED2BCB2AF58AF59AF5AF0E8F0E7F0E4B2A1AF5BD6A2D3B8BEB7C8ACAF5CAF5DF0EAAF5EAF5FAF60AF61D1F7AF62D6CCBADBF0E9AF63B6BBAF64AF65CDB4AF66AF67C6A6AF68AF69AF6AC1A1F0EBF0EEAF6BF0EDF0F0F0ECAF6CBBBEF0EFAF6DAF6EAF6FAF70CCB5F0F2AF71AF72B3D5AF73AF74AF75AF76B1D4AF77AF78F0F3AF79AF7AF0F4F0F6B4E1AF7BF0F1AF7CF0F7AF7DAF7EAF80AF81F0FAAF82F0F8AF83AF84AF85F0F5AF86AF87AF88AF89F0FDAF8AF0F9F0FCF0FEAF8BF1A1AF8CAF8DAF8ECEC1F1A4AF8FF1A3AF90C1F6F0FBCADDAF91AF92B4F1B1F1CCB1AF93F1A6AF94AF95F1A7AF96AF97F1ACD5CEF1A9AF98AF99C8B3AF9AAF9BAF9CF1A2AF9DF1ABF1A8F1A5AF9EAF9FF1AAAFA0B040B041B042B043B044B045B046B0A9F1ADB047B048B049B04AB04BB04CF1AFB04DF1B1B04EB04FB050B051B052F1B0B053F1AEB054B055B056B057D1A2B058B059B05AB05BB05CB05DB05EF1B2B05FB060B061F1B3B062B063B064B065B066B067B068B069B9EFB06AB06BB5C7B06CB0D7B0D9B06DB06EB06FD4EDB070B5C4B071BDD4BBCAF0A7B072B073B8DEB074B075F0A8B076B077B0A8B078F0A9B079B07ACDEEB07BB07CF0AAB07DB07EB080B081B082B083B084B085B086B087F0ABB088B089B08AB08BB08CB08DB08EB08FB090C6A4B091B092D6E5F1E4B093F1E5B094B095B096B097B098B099B09AB09BB09CB09DC3F3B09EB09FD3DBB0A0B140D6D1C5E8B141D3AFB142D2E6B143B144EEC1B0BBD5B5D1CEBCE0BAD0B145BFF8B146B8C7B5C1C5CCB147B148CAA2B149B14AB14BC3CBB14CB14DB14EB14FB150EEC2B151B152B153B154B155B156B157B158C4BFB6A2B159EDECC3A4B15AD6B1B15BB15CB15DCFE0EDEFB15EB15FC5CEB160B6DCB161B162CAA1B163B164EDEDB165B166EDF0EDF1C3BCB167BFB4B168EDEEB169B16AB16BB16CB16DB16EB16FB170B171B172B173EDF4EDF2B174B175B176B177D5E6C3DFB178EDF3B179B17AB17BEDF6B17CD5A3D1A3B17DB17EB180EDF5B181C3D0B182B183B184B185B186EDF7BFF4BEECEDF8B187CCF7B188D1DBB189B18AB18BD7C5D5F6B18CEDFCB18DB18EB18FEDFBB190B191B192B193B194B195B196B197EDF9EDFAB198B199B19AB19BB19CB19DB19EB19FEDFDBEA6B1A0B240B241B242B243CBAFEEA1B6BDB244EEA2C4C0B245EDFEB246B247BDDEB2C7B248B249B24AB24BB24CB24DB24EB24FB250B251B252B253B6C3B254B255B256EEA5D8BAEEA3EEA6B257B258B259C3E9B3F2B25AB25BB25CB25DB25EB25FEEA7EEA4CFB9B260B261EEA8C2F7B262B263B264B265B266B267B268B269B26AB26BB26CB26DEEA9EEAAB26EDEABB26FB270C6B3B271C7C6B272D6F5B5C9B273CBB2B274B275B276EEABB277B278CDABB279EEACB27AB27BB27CB27DB27ED5B0B280EEADB281F6C4B282B283B284B285B286B287B288B289B28AB28BB28CB28DB28EDBC7B28FB290B291B292B293B294B295B296B297B4A3B298B299B29AC3ACF1E6B29BB29CB29DB29EB29FCAB8D2D3B2A0D6AAB340EFF2B341BED8B342BDC3EFF3B6CCB0ABB343B344B345B346CAAFB347B348EDB6B349EDB7B34AB34BB34CB34DCEF9B7AFBFF3EDB8C2EBC9B0B34EB34FB350B351B352B353EDB9B354B355C6F6BFB3B356B357B358EDBCC5F8B359D1D0B35AD7A9EDBAEDBBB35BD1E2B35CEDBFEDC0B35DEDC4B35EB35FB360EDC8B361EDC6EDCED5E8B362EDC9B363B364EDC7EDBEB365B366C5E9B367B368B369C6C6B36AB36BC9E9D4D2EDC1EDC2EDC3EDC5B36CC0F9B36DB4A1B36EB36FB370B371B9E8B372EDD0B373B374B375B376EDD1B377EDCAB378EDCFB379CEF8B37AB37BCBB6EDCCEDCDB37CB37DB37EB380B381CFF5B382B383B384B385B386B387B388B389B38AB38BB38CB38DEDD2C1F2D3B2EDCBC8B7B38EB38FB390B391B392B393B394B395BCEFB396B397B398B399C5F0B39AB39BB39CB39DB39EB39FB3A0B440B441B442EDD6B443B5EFB444B445C2B5B0ADCBE9B446B447B1AEB448EDD4B449B44AB44BCDEBB5E2B44CEDD5EDD3EDD7B44DB44EB5FAB44FEDD8B450EDD9B451EDDCB452B1CCB453B454B455B456B457B458B459B45AC5F6BCEEEDDACCBCB2EAB45BB45CB45DB45EEDDBB45FB460B461B462C4EBB463B464B4C5B465B466B467B0F5B468B469B46AEDDFC0DAB4E8B46BB46CB46DB46EC5CDB46FB470B471EDDDBFC4B472B473B474EDDEB475B476B477B478B479B47AB47BB47CB47DB47EB480B481B482B483C4A5B484B485B486EDE0B487B488B489B48AB48BEDE1B48CEDE3B48DB48EC1D7B48FB490BBC7B491B492B493B494B495B496BDB8B497B498B499EDE2B49AB49BB49CB49DB49EB49FB4A0B540B541B542B543B544B545EDE4B546B547B548B549B54AB54BB54CB54DB54EB54FEDE6B550B551B552B553B554EDE5B555B556B557B558B559B55AB55BB55CB55DB55EB55FB560B561B562B563EDE7B564B565B566B567B568CABEECEAC0F1B569C9E7B56AECEBC6EEB56BB56CB56DB56EECECB56FC6EDECEDB570B571B572B573B574B575B576B577B578ECF0B579B57AD7E6ECF3B57BB57CECF1ECEEECEFD7A3C9F1CBEEECF4B57DECF2B57EB580CFE9B581ECF6C6B1B582B583B584B585BCC0B586ECF5B587B588B589B58AB58BB58CB58DB5BBBBF6B58EECF7B58FB590B591B592B593D9F7BDFBB594B595C2BBECF8B596B597B598B599ECF9B59AB59BB59CB59DB8A3B59EB59FB5A0B640B641B642B643B644B645B646ECFAB647B648B649B64AB64BB64CB64DB64EB64FB650B651B652ECFBB653B654B655B656B657B658B659B65AB65BB65CB65DECFCB65EB65FB660B661B662D3EDD8AEC0EBB663C7DDBACCB664D0E3CBBDB665CDBAB666B667B8D1B668B669B1FCB66AC7EFB66BD6D6B66CB66DB66EBFC6C3EBB66FB670EFF5B671B672C3D8B673B674B675B676B677B678D7E2B679B67AB67BEFF7B3D3B67CC7D8D1EDB67DD6C8B67EEFF8B680EFF6B681BBFDB3C6B682B683B684B685B686B687B688BDD5B689B68AD2C6B68BBBE0B68CB68DCFA1B68EEFFCEFFBB68FB690EFF9B691B692B693B694B3CCB695C9D4CBB0B696B697B698B699B69AEFFEB69BB69CB0DEB69DB69ED6C9B69FB6A0B740EFFDB741B3EDB742B743F6D5B744B745B746B747B748B749B74AB74BB74CB74DB74EB74FB750B751B752CEC8B753B754B755F0A2B756F0A1B757B5BEBCDABBFCB758B8E5B759B75AB75BB75CB75DB75EC4C2B75FB760B761B762B763B764B765B766B767B768F0A3B769B76AB76BB76CB76DCBEBB76EB76FB770B771B772B773B774B775B776B777B778B779B77AB77BB77CB77DB77EB780B781B782B783B784B785B786F0A6B787B788B789D1A8B78ABEBFC7EEF1B6F1B7BFD5B78BB78CB78DB78EB4A9F1B8CDBBB78FC7D4D5ADB790F1B9B791F1BAB792B793B794B795C7CFB796B797B798D2A4D6CFB799B79AF1BBBDD1B4B0BEBDB79BB79CB79DB4DCCED1B79EBFDFF1BDB79FB7A0B840B841BFFAF1BCB842F1BFB843B844B845F1BEF1C0B846B847B848B849B84AF1C1B84BB84CB84DB84EB84FB850B851B852B853B854B855C1FEB856B857B858B859B85AB85BB85CB85DB85EB85FB860C1A2B861B862B863B864B865B866B867B868B869B86ACAFAB86BB86CD5BEB86DB86EB86FB870BEBABEB9D5C2B871B872BFA2B873CDAFF1B5B874B875B876B877B878B879BDDFB87AB6CBB87BB87CB87DB87EB880B881B882B883B884D6F1F3C3B885B886F3C4B887B8CDB888B889B88AF3C6F3C7B88BB0CAB88CF3C5B88DF3C9CBF1B88EB88FB890F3CBB891D0A6B892B893B1CAF3C8B894B895B896F3CFB897B5D1B898B899F3D7B89AF3D2B89BB89CB89DF3D4F3D3B7FBB89EB1BFB89FF3CEF3CAB5DAB8A0F3D0B940B941F3D1B942F3D5B943B944B945B946F3CDB947BCE3B948C1FDB949F3D6B94AB94BB94CB94DB94EB94FF3DAB950F3CCB951B5C8B952BDEEF3DCB953B954B7A4BFF0D6FECDB2B955B4F0B956B2DFB957F3D8B958F3D9C9B8B959F3DDB95AB95BF3DEB95CF3E1B95DB95EB95FB960B961B962B963B964B965B966B967F3DFB968B969F3E3F3E2B96AB96BF3DBB96CBFEAB96DB3EFB96EF3E0B96FB970C7A9B971BCF2B972B973B974B975F3EBB976B977B978B979B97AB97BB97CB9BFB97DB97EF3E4B980B981B982B2ADBBFEB983CBE3B984B985B986B987F3EDF3E9B988B989B98AB9DCF3EEB98BB98CB98DF3E5F3E6F3EAC2E1F3ECF3EFF3E8BCFDB98EB98FB990CFE4B991B992F3F0B993B994B995F3E7B996B997B998B999B99AB99BB99CB99DF3F2B99EB99FB9A0BA40D7ADC6AABA41BA42BA43BA44F3F3BA45BA46BA47BA48F3F1BA49C2A8BA4ABA4BBA4CBA4DBA4EB8DDF3F5BA4FBA50F3F4BA51BA52BA53B4DBBA54BA55BA56F3F6F3F7BA57BA58BA59F3F8BA5ABA5BBA5CC0BABA5DBA5EC0E9BA5FBA60BA61BA62BA63C5F1BA64BA65BA66BA67F3FBBA68F3FABA69BA6ABA6BBA6CBA6DBA6EBA6FBA70B4D8BA71BA72BA73F3FEF3F9BA74BA75F3FCBA76BA77BA78BA79BA7ABA7BF3FDBA7CBA7DBA7EBA80BA81BA82BA83BA84F4A1BA85BA86BA87BA88BA89BA8AF4A3BBC9BA8BBA8CF4A2BA8DBA8EBA8FBA90BA91BA92BA93BA94BA95BA96BA97BA98BA99F4A4BA9ABA9BBA9CBA9DBA9EBA9FB2BEF4A6F4A5BAA0BB40BB41BB42BB43BB44BB45BB46BB47BB48BB49BCAEBB4ABB4BBB4CBB4DBB4EBB4FBB50BB51BB52BB53BB54BB55BB56BB57BB58BB59BB5ABB5BBB5CBB5DBB5EBB5FBB60BB61BB62BB63BB64BB65BB66BB67BB68BB69BB6ABB6BBB6CBB6DBB6EC3D7D9E1BB6FBB70BB71BB72BB73BB74C0E0F4CCD7D1BB75BB76BB77BB78BB79BB7ABB7BBB7CBB7DBB7EBB80B7DBBB81BB82BB83BB84BB85BB86BB87F4CEC1A3BB88BB89C6C9BB8AB4D6D5B3BB8BBB8CBB8DF4D0F4CFF4D1CBDABB8EBB8FF4D2BB90D4C1D6E0BB91BB92BB93BB94B7E0BB95BB96BB97C1B8BB98BB99C1BBF4D3BEACBB9ABB9BBB9CBB9DBB9EB4E2BB9FBBA0F4D4F4D5BEABBC40BC41F4D6BC42BC43BC44F4DBBC45F4D7F4DABC46BAFDBC47F4D8F4D9BC48BC49BC4ABC4BBC4CBC4DBC4EB8E2CCC7F4DCBC4FB2DABC50BC51C3D3BC52BC53D4E3BFB7BC54BC55BC56BC57BC58BC59BC5AF4DDBC5BBC5CBC5DBC5EBC5FBC60C5B4BC61BC62BC63BC64BC65BC66BC67BC68F4E9BC69BC6ACFB5BC6BBC6CBC6DBC6EBC6FBC70BC71BC72BC73BC74BC75BC76BC77BC78CEC9BC79BC7ABC7BBC7CBC7DBC7EBC80BC81BC82BC83BC84BC85BC86BC87BC88BC89BC8ABC8BBC8CBC8DBC8ECBD8BC8FCBF7BC90BC91BC92BC93BDF4BC94BC95BC96D7CFBC97BC98BC99C0DBBC9ABC9BBC9CBC9DBC9EBC9FBCA0BD40BD41BD42BD43BD44BD45BD46BD47BD48BD49BD4ABD4BBD4CBD4DBD4EBD4FBD50BD51BD52BD53BD54BD55BD56BD57BD58BD59BD5ABD5BBD5CBD5DBD5EBD5FBD60BD61BD62BD63BD64BD65BD66BD67BD68BD69BD6ABD6BBD6CBD6DBD6EBD6FBD70BD71BD72BD73BD74BD75BD76D0F5BD77BD78BD79BD7ABD7BBD7CBD7DBD7EF4EABD80BD81BD82BD83BD84BD85BD86BD87BD88BD89BD8ABD8BBD8CBD8DBD8EBD8FBD90BD91BD92BD93BD94BD95BD96BD97BD98BD99BD9ABD9BBD9CBD9DBD9EBD9FBDA0BE40BE41BE42BE43BE44BE45BE46BE47BE48BE49BE4ABE4BBE4CF4EBBE4DBE4EBE4FBE50BE51BE52BE53F4ECBE54BE55BE56BE57BE58BE59BE5ABE5BBE5CBE5DBE5EBE5FBE60BE61BE62BE63BE64BE65BE66BE67BE68BE69BE6ABE6BBE6CBE6DBE6EBE6FBE70BE71BE72BE73BE74BE75BE76BE77BE78BE79BE7ABE7BBE7CBE7DBE7EBE80BE81BE82BE83BE84BE85BE86BE87BE88BE89BE8ABE8BBE8CBE8DBE8EBE8FBE90BE91BE92BE93BE94BE95BE96BE97BE98BE99BE9ABE9BBE9CBE9DBE9EBE9FBEA0BF40BF41BF42BF43BF44BF45BF46BF47BF48BF49BF4ABF4BBF4CBF4DBF4EBF4FBF50BF51BF52BF53BF54BF55BF56BF57BF58BF59BF5ABF5BBF5CBF5DBF5EBF5FBF60BF61BF62BF63BF64BF65BF66BF67BF68BF69BF6ABF6BBF6CBF6DBF6EBF6FBF70BF71BF72BF73BF74BF75BF76BF77BF78BF79BF7ABF7BBF7CBF7DBF7EBF80F7E3BF81BF82BF83BF84BF85B7B1BF86BF87BF88BF89BF8AF4EDBF8BBF8CBF8DBF8EBF8FBF90BF91BF92BF93BF94BF95BF96BF97BF98BF99BF9ABF9BBF9CBF9DBF9EBF9FBFA0C040C041C042C043C044C045C046C047C048C049C04AC04BC04CC04DC04EC04FC050C051C052C053C054C055C056C057C058C059C05AC05BC05CC05DC05EC05FC060C061C062C063D7EBC064C065C066C067C068C069C06AC06BC06CC06DC06EC06FC070C071C072C073C074C075C076C077C078C079C07AC07BF4EEC07CC07DC07EE6F9BEC0E6FABAECE6FBCFCBE6FCD4BCBCB6E6FDE6FEBCCDC8D2CEB3E7A1C080B4BFE7A2C9B4B8D9C4C9C081D7DDC2DAB7D7D6BDCEC6B7C4C082C083C5A6E7A3CFDFE7A4E7A5E7A6C1B7D7E9C9F0CFB8D6AFD6D5E7A7B0EDE7A8E7A9C9DCD2EFBEADE7AAB0F3C8DEBDE1E7ABC8C6C084E7ACBBE6B8F8D1A4E7ADC2E7BEF8BDCACDB3E7AEE7AFBEEED0E5C085CBE7CCD0BCCCE7B0BCA8D0F7E7B1C086D0F8E7B2E7B3B4C2E7B4E7B5C9FECEACC3E0E7B7B1C1B3F1C087E7B8E7B9D7DBD5C0E7BAC2CCD7BAE7BBE7BCE7BDBCEAC3E5C0C2E7BEE7BFBCA9C088E7C0E7C1E7B6B6D0E7C2C089E7C3E7C4BBBAB5DEC2C6B1E0E7C5D4B5E7C6B8BFE7C8E7C7B7ECC08AE7C9B2F8E7CAE7CBE7CCE7CDE7CEE7CFE7D0D3A7CBF5E7D1E7D2E7D3E7D4C9C9E7D5E7D6E7D7E7D8E7D9BDC9E7DAF3BEC08BB8D7C08CC8B1C08DC08EC08FC090C091C092C093F3BFC094F3C0F3C1C095C096C097C098C099C09AC09BC09CC09DC09EB9DECDF8C09FC0A0D8E8BAB1C140C2DEEEB7C141B7A3C142C143C144C145EEB9C146EEB8B0D5C147C148C149C14AC14BEEBBD5D6D7EFC14CC14DC14ED6C3C14FC150EEBDCAF0C151EEBCC152C153C154C155EEBEC156C157C158C159EEC0C15AC15BEEBFC15CC15DC15EC15FC160C161C162C163D1F2C164C7BCC165C3C0C166C167C168C169C16AB8E1C16BC16CC16DC16EC16FC1E7C170C171F4C6D0DFF4C7C172CFDBC173C174C8BAC175C176F4C8C177C178C179C17AC17BC17CC17DF4C9F4CAC17EF4CBC180C181C182C183C184D9FAB8FEC185C186E5F1D3F0C187F4E0C188CECCC189C18AC18BB3E1C18CC18DC18EC18FF1B4C190D2EEC191F4E1C192C193C194C195C196CFE8F4E2C197C198C7CCC199C19AC19BC19CC19DC19EB5D4B4E4F4E4C19FC1A0C240F4E3F4E5C241C242F4E6C243C244C245C246F4E7C247BAB2B0BFC248F4E8C249C24AC24BC24CC24DC24EC24FB7ADD2EDC250C251C252D2ABC0CFC253BFBCEBA3D5DFEAC8C254C255C256C257F1F3B6F8CBA3C258C259C4CDC25AF1E7C25BF1E8B8FBF1E9BAC4D4C5B0D2C25CC25DF1EAC25EC25FC260F1EBC261F1ECC262C263F1EDF1EEF1EFF1F1F1F0C5D5C264C265C266C267C268C269F1F2C26AB6FAC26BF1F4D2AEDEC7CBCAC26CC26DB3DCC26EB5A2C26FB9A2C270C271C4F4F1F5C272C273F1F6C274C275C276C1C4C1FBD6B0F1F7C277C278C279C27AF1F8C27BC1AAC27CC27DC27EC6B8C280BEDBC281C282C283C284C285C286C287C288C289C28AC28BC28CC28DC28EF1F9B4CFC28FC290C291C292C293C294F1FAC295C296C297C298C299C29AC29BC29CC29DC29EC29FC2A0C340EDB2EDB1C341C342CBE0D2DEC343CBC1D5D8C344C8E2C345C0DFBCA1C346C347C348C349C34AC34BEBC1C34CC34DD0A4C34ED6E2C34FB6C7B8D8EBC0B8CEC350EBBFB3A6B9C9D6ABC351B7F4B7CAC352C353C354BCE7B7BEEBC6C355EBC7B0B9BFCFC356EBC5D3FDC357EBC8C358C359EBC9C35AC35BB7CEC35CEBC2EBC4C9F6D6D7D5CDD0B2EBCFCEB8EBD0C35DB5A8C35EC35FC360C361C362B1B3EBD2CCA5C363C364C365C366C367C368C369C5D6EBD3C36AEBD1C5DFEBCECAA4EBD5B0FBC36BC36CBAFAC36DC36ED8B7F1E3C36FEBCAEBCBEBCCEBCDEBD6E6C0EBD9C370BFE8D2C8EBD7EBDCB8ECEBD8C371BDBAC372D0D8C373B0B7C374EBDDC4DCC375C376C377C378D6ACC379C37AC37BB4E0C37CC37DC2F6BCB9C37EC380EBDAEBDBD4E0C6EAC4D4EBDFC5A7D9F5C381B2B1C382EBE4C383BDC5C384C385C386EBE2C387C388C389C38AC38BC38CC38DC38EC38FC390C391C392C393EBE3C394C395B8ACC396CDD1EBE5C397C398C399EBE1C39AC1B3C39BC39CC39DC39EC39FC6A2C3A0C440C441C442C443C444C445CCF3C446EBE6C447C0B0D2B8EBE7C448C449C44AB8AFB8ADC44BEBE8C7BBCDF3C44CC44DC44EEBEAEBEBC44FC450C451C452C453EBEDC454C455C456C457D0C8C458EBF2C459EBEEC45AC45BC45CEBF1C8F9C45DD1FCEBECC45EC45FEBE9C460C461C462C463B8B9CFD9C4E5EBEFEBF0CCDACDC8B0F2C464EBF6C465C466C467C468C469EBF5C46AB2B2C46BC46CC46DC46EB8E0C46FEBF7C470C471C472C473C474C475B1ECC476C477CCC5C4A4CFA5C478C479C47AC47BC47CEBF9C47DC47EECA2C480C5F2C481EBFAC482C483C484C485C486C487C488C489C9C5C48AC48BC48CC48DC48EC48FE2DFEBFEC490C491C492C493CDCEECA1B1DBD3B7C494C495D2DCC496C497C498EBFDC499EBFBC49AC49BC49CC49DC49EC49FC4A0C540C541C542C543C544C545C546C547C548C549C54AC54BC54CC54DC54EB3BCC54FC550C551EAB0C552C553D7D4C554F4ABB3F4C555C556C557C558C559D6C1D6C2C55AC55BC55CC55DC55EC55FD5E9BECAC560F4A7C561D2A8F4A8F4A9C562F4AABECBD3DFC563C564C565C566C567C9E0C9E1C568C569F3C2C56ACAE6C56BCCF2C56CC56DC56EC56FC570C571E2B6CBB4C572CEE8D6DBC573F4ADF4AEF4AFC574C575C576C577F4B2C578BABDF4B3B0E3F4B0C579F4B1BDA2B2D5C57AF4B6F4B7B6E6B2B0CFCFF4B4B4ACC57BF4B5C57CC57DF4B8C57EC580C581C582C583F4B9C584C585CDA7C586F4BAC587F4BBC588C589C58AF4BCC58BC58CC58DC58EC58FC590C591C592CBD2C593F4BDC594C595C596C597F4BEC598C599C59AC59BC59CC59DC59EC59FF4BFC5A0C640C641C642C643F4DEC1BCBCE8C644C9ABD1DEE5F5C645C646C647C648DCB3D2D5C649C64ADCB4B0ACDCB5C64BC64CBDDAC64DDCB9C64EC64FC650D8C2C651DCB7D3F3C652C9D6DCBADCB6C653DCBBC3A2C654C655C656C657DCBCDCC5DCBDC658C659CEDFD6A5C65ADCCFC65BDCCDC65CC65DDCD2BDE6C2ABC65EDCB8DCCBDCCEDCBEB7D2B0C5DCC7D0BEDCC1BBA8C65FB7BCDCCCC660C661DCC6DCBFC7DBC662C663C664D1BFDCC0C665C666DCCAC667C668DCD0C669C66ACEADDCC2C66BDCC3DCC8DCC9B2D4DCD1CBD5C66CD4B7DCDBDCDFCCA6DCE6C66DC3E7DCDCC66EC66FBFC1DCD9C670B0FAB9B6DCE5DCD3C671DCC4DCD6C8F4BFE0C672C673C674C675C9BBC676C677C678B1BDC679D3A2C67AC67BDCDAC67CC67DDCD5C67EC6BBC680DCDEC681C682C683C684C685D7C2C3AFB7B6C7D1C3A9DCE2DCD8DCEBDCD4C686C687DCDDC688BEA5DCD7C689DCE0C68AC68BDCE3DCE4C68CDCF8C68DC68EDCE1DDA2DCE7C68FC690C691C692C693C694C695C696C697C698BCEBB4C4C699C69AC3A3B2E7DCFAC69BDCF2C69CDCEFC69DDCFCDCEED2F0B2E8C69EC8D7C8E3DCFBC69FDCEDC6A0C740C741DCF7C742C743DCF5C744C745BEA3DCF4C746B2DDC747C748C749C74AC74BDCF3BCF6DCE8BBC4C74CC0F3C74DC74EC74FC750C751BCD4DCE9DCEAC752DCF1DCF6DCF9B5B4C753C8D9BBE7DCFEDCFDD3ABDDA1DDA3DDA5D2F1DDA4DDA6DDA7D2A9C754C755C756C757C758C759C75ABAC9DDA9C75BC75CDDB6DDB1DDB4C75DC75EC75FC760C761C762C763DDB0C6CEC764C765C0F2C766C767C768C769C9AFC76AC76BC76CDCECDDAEC76DC76EC76FC770DDB7C771C772DCF0DDAFC773DDB8C774DDACC775C776C777C778C779C77AC77BDDB9DDB3DDADC4AAC77CC77DC77EC780DDA8C0B3C1ABDDAADDABC781DDB2BBF1DDB5D3A8DDBAC782DDBBC3A7C783C784DDD2DDBCC785C786C787DDD1C788B9BDC789C78ABED5C78BBEFAC78CC78DBACAC78EC78FC790C791DDCAC792DDC5C793DDBFC794C795C796B2CBDDC3C797DDCBB2A4DDD5C798C799C79ADDBEC79BC79CC79DC6D0DDD0C79EC79FC7A0C840C841DDD4C1E2B7C6C842C843C844C845C846DDCEDDCFC847C848C849DDC4C84AC84BC84CDDBDC84DDDCDCCD1C84EDDC9C84FC850C851C852DDC2C3C8C6BCCEAEDDCCC853DDC8C854C855C856C857C858C859DDC1C85AC85BC85CDDC6C2DCC85DC85EC85FC860C861C862D3A9D3AADDD3CFF4C8F8C863C864C865C866C867C868C869C86ADDE6C86BC86CC86DC86EC86FC870DDC7C871C872C873DDE0C2E4C874C875C876C877C878C879C87AC87BDDE1C87CC87DC87EC880C881C882C883C884C885C886DDD7C887C888C889C88AC88BD6F8C88CDDD9DDD8B8F0DDD6C88DC88EC88FC890C6CFC891B6ADC892C893C894C895C896DDE2C897BAF9D4E1DDE7C898C899C89AB4D0C89BDDDAC89CBFFBDDE3C89DDDDFC89EDDDDC89FC8A0C940C941C942C943C944B5D9C945C946C947C948DDDBDDDCDDDEC949BDAFDDE4C94ADDE5C94BC94CC94DC94EC94FC950C951C952DDF5C953C3C9C954C955CBE2C956C957C958C959DDF2C95AC95BC95CC95DC95EC95FC960C961C962C963C964C965C966D8E1C967C968C6D1C969DDF4C96AC96BC96CD5F4DDF3DDF0C96DC96EDDECC96FDDEFC970DDE8C971C972D0EEC973C974C975C976C8D8DDEEC977C978DDE9C979C97ADDEACBF2C97BDDEDC97CC97DB1CDC97EC980C981C982C983C984C0B6C985BCBBDDF1C986C987DDF7C988DDF6DDEBC989C98AC98BC98CC98DC5EEC98EC98FC990DDFBC991C992C993C994C995C996C997C998C999C99AC99BDEA4C99CC99DDEA3C99EC99FC9A0CA40CA41CA42CA43CA44CA45CA46CA47CA48DDF8CA49CA4ACA4BCA4CC3EFCA4DC2FBCA4ECA4FCA50D5E1CA51CA52CEB5CA53CA54CA55CA56DDFDCA57B2CCCA58CA59CA5ACA5BCA5CCA5DCA5ECA5FCA60C4E8CADFCA61CA62CA63CA64CA65CA66CA67CA68CA69CA6AC7BEDDFADDFCDDFEDEA2B0AAB1CECA6BCA6CCA6DCA6ECA6FDEACCA70CA71CA72CA73DEA6BDB6C8EFCA74CA75CA76CA77CA78CA79CA7ACA7BCA7CCA7DCA7EDEA1CA80CA81DEA5CA82CA83CA84CA85DEA9CA86CA87CA88CA89CA8ADEA8CA8BCA8CCA8DDEA7CA8ECA8FCA90CA91CA92CA93CA94CA95CA96DEADCA97D4CCCA98CA99CA9ACA9BDEB3DEAADEAECA9CCA9DC0D9CA9ECA9FCAA0CB40CB41B1A1DEB6CB42DEB1CB43CB44CB45CB46CB47CB48CB49DEB2CB4ACB4BCB4CCB4DCB4ECB4FCB50CB51CB52CB53CB54D1A6DEB5CB55CB56CB57CB58CB59CB5ACB5BDEAFCB5CCB5DCB5EDEB0CB5FD0BDCB60CB61CB62DEB4CAEDDEB9CB63CB64CB65CB66CB67CB68DEB8CB69DEB7CB6ACB6BCB6CCB6DCB6ECB6FCB70DEBBCB71CB72CB73CB74CB75CB76CB77BDE5CB78CB79CB7ACB7BCB7CB2D8C3EACB7DCB7EDEBACB80C5BACB81CB82CB83CB84CB85CB86DEBCCB87CB88CB89CB8ACB8BCB8CCB8DCCD9CB8ECB8FCB90CB91B7AACB92CB93CB94CB95CB96CB97CB98CB99CB9ACB9BCB9CCB9DCB9ECB9FCBA0CC40CC41D4E5CC42CC43CC44DEBDCC45CC46CC47CC48CC49DEBFCC4ACC4BCC4CCC4DCC4ECC4FCC50CC51CC52CC53CC54C4A2CC55CC56CC57CC58DEC1CC59CC5ACC5BCC5CCC5DCC5ECC5FCC60CC61CC62CC63CC64CC65CC66CC67CC68DEBECC69DEC0CC6ACC6BCC6CCC6DCC6ECC6FCC70CC71CC72CC73CC74CC75CC76CC77D5BACC78CC79CC7ADEC2CC7BCC7CCC7DCC7ECC80CC81CC82CC83CC84CC85CC86CC87CC88CC89CC8ACC8BF2AEBBA2C2B2C5B0C2C7CC8CCC8DF2AFCC8ECC8FCC90CC91CC92D0E9CC93CC94CC95D3DDCC96CC97CC98EBBDCC99CC9ACC9BCC9CCC9DCC9ECC9FCCA0B3E6F2B0CD40F2B1CD41CD42CAADCD43CD44CD45CD46CD47CD48CD49BAE7F2B3F2B5F2B4CBE4CFBAF2B2CAB4D2CFC2ECCD4ACD4BCD4CCD4DCD4ECD4FCD50CEC3F2B8B0F6F2B7CD51CD52CD53CD54CD55F2BECD56B2CFCD57CD58CD59CD5ACD5BCD5CD1C1F2BACD5DCD5ECD5FCD60CD61F2BCD4E9CD62CD63F2BBF2B6F2BFF2BDCD64F2B9CD65CD66F2C7F2C4F2C6CD67CD68F2CAF2C2F2C0CD69CD6ACD6BF2C5CD6CCD6DCD6ECD6FCD70D6FBCD71CD72CD73F2C1CD74C7F9C9DFCD75F2C8B9C6B5B0CD76CD77F2C3F2C9F2D0F2D6CD78CD79BBD7CD7ACD7BCD7CF2D5CDDCCD7DD6EBCD7ECD80F2D2F2D4CD81CD82CD83CD84B8F2CD85CD86CD87CD88F2CBCD89CD8ACD8BF2CEC2F9CD8CD5DDF2CCF2CDF2CFF2D3CD8DCD8ECD8FF2D9D3BCCD90CD91CD92CD93B6EACD94CAF1CD95B7E4F2D7CD96CD97CD98F2D8F2DAF2DDF2DBCD99CD9AF2DCCD9BCD9CCD9DCD9ED1D1F2D1CD9FCDC9CDA0CECFD6A9CE40F2E3CE41C3DBCE42F2E0CE43CE44C0AFF2ECF2DECE45F2E1CE46CE47CE48F2E8CE49CE4ACE4BCE4CF2E2CE4DCE4EF2E7CE4FCE50F2E6CE51CE52F2E9CE53CE54CE55F2DFCE56CE57F2E4F2EACE58CE59CE5ACE5BCE5CCE5DCE5ED3ACF2E5B2F5CE5FCE60F2F2CE61D0ABCE62CE63CE64CE65F2F5CE66CE67CE68BBC8CE69F2F9CE6ACE6BCE6CCE6DCE6ECE6FF2F0CE70CE71F2F6F2F8F2FACE72CE73CE74CE75CE76CE77CE78CE79F2F3CE7AF2F1CE7BCE7CCE7DBAFBCE7EB5FBCE80CE81CE82CE83F2EFF2F7F2EDF2EECE84CE85CE86F2EBF3A6CE87F3A3CE88CE89F3A2CE8ACE8BF2F4CE8CC8DACE8DCE8ECE8FCE90CE91F2FBCE92CE93CE94F3A5CE95CE96CE97CE98CE99CE9ACE9BC3F8CE9CCE9DCE9ECE9FCEA0CF40CF41CF42F2FDCF43CF44F3A7F3A9F3A4CF45F2FCCF46CF47CF48F3ABCF49F3AACF4ACF4BCF4CCF4DC2DDCF4ECF4FF3AECF50CF51F3B0CF52CF53CF54CF55CF56F3A1CF57CF58CF59F3B1F3ACCF5ACF5BCF5CCF5DCF5EF3AFF2FEF3ADCF5FCF60CF61CF62CF63CF64CF65F3B2CF66CF67CF68CF69F3B4CF6ACF6BCF6CCF6DF3A8CF6ECF6FCF70CF71F3B3CF72CF73CF74F3B5CF75CF76CF77CF78CF79CF7ACF7BCF7CCF7DCF7ED0B7CF80CF81CF82CF83F3B8CF84CF85CF86CF87D9F9CF88CF89CF8ACF8BCF8CCF8DF3B9CF8ECF8FCF90CF91CF92CF93CF94CF95F3B7CF96C8E4F3B6CF97CF98CF99CF9AF3BACF9BCF9CCF9DCF9ECF9FF3BBB4C0CFA0D040D041D042D043D044D045D046D047D048D049D04AD04BD04CD04DEEC3D04ED04FD050D051D052D053F3BCD054D055F3BDD056D057D058D1AAD059D05AD05BF4ACD0C6D05CD05DD05ED05FD060D061D0D0D1DCD062D063D064D065D066D067CFCED068D069BDD6D06AD1C3D06BD06CD06DD06ED06FD070D071BAE2E1E9D2C2F1C2B2B9D072D073B1EDF1C3D074C9C0B3C4D075D9F2D076CBA5D077F1C4D078D079D07AD07BD6D4D07CD07DD07ED080D081F1C5F4C0F1C6D082D4ACF1C7D083B0C0F4C1D084D085F4C2D086D087B4FCD088C5DBD089D08AD08BD08CCCBBD08DD08ED08FD0E4D090D091D092D093D094CDE0D095D096D097D098D099F1C8D09AD9F3D09BD09CD09DD09ED09FD0A0B1BBD140CFAED141D142D143B8A4D144D145D146D147D148F1CAD149D14AD14BD14CF1CBD14DD14ED14FD150B2C3C1D1D151D152D7B0F1C9D153D154F1CCD155D156D157D158F1CED159D15AD15BD9F6D15CD2E1D4A3D15DD15EF4C3C8B9D15FD160D161D162D163F4C4D164D165F1CDF1CFBFE3F1D0D166D167F1D4D168D169D16AD16BD16CD16DD16EF1D6F1D1D16FC9D1C5E1D170D171D172C2E3B9FCD173D174F1D3D175F1D5D176D177D178B9D3D179D17AD17BD17CD17DD17ED180F1DBD181D182D183D184D185BAD6D186B0FDF1D9D187D188D189D18AD18BF1D8F1D2F1DAD18CD18DD18ED18FD190F1D7D191D192D193C8ECD194D195D196D197CDCAF1DDD198D199D19AD19BE5BDD19CD19DD19EF1DCD19FF1DED1A0D240D241D242D243D244D245D246D247D248F1DFD249D24ACFE5D24BD24CD24DD24ED24FD250D251D252D253D254D255D256D257D258D259D25AD25BD25CD25DD25ED25FD260D261D262D263F4C5BDF3D264D265D266D267D268D269F1E0D26AD26BD26CD26DD26ED26FD270D271D272D273D274D275D276D277D278D279D27AD27BD27CD27DF1E1D27ED280D281CEF7D282D2AAD283F1FBD284D285B8B2D286D287D288D289D28AD28BD28CD28DD28ED28FD290D291D292D293D294D295D296D297D298D299D29AD29BD29CD29DD29ED29FD2A0D340D341D342D343D344D345D346D347D348D349D34AD34BD34CD34DD34ED34FD350D351D352D353D354D355D356D357D358D359D35AD35BD35CD35DD35EBCFBB9DBD35FB9E6C3D9CAD3EAE8C0C0BEF5EAE9EAEAEAEBD360EAECEAEDEAEEEAEFBDC7D361D362D363F5FBD364D365D366F5FDD367F5FED368F5FCD369D36AD36BD36CBDE2D36DF6A1B4A5D36ED36FD370D371F6A2D372D373D374F6A3D375D376D377ECB2D378D379D37AD37BD37CD37DD37ED380D381D382D383D384D1D4D385D386D387D388D389D38AD9EAD38BD38CD38DD38ED38FD390D391D392D393D394D395D396D397D398D399D39AD39BD39CD39DD39ED39FD3A0D440D441D442D443D444D445D446D447D448D449D44AD44BD44CD44DD44ED44FD450D451D452D453D454D455D456D457D458D459D45AD45BD45CD45DD45ED45FF6A4D460D461D462D463D464D465D466D467D468EEBAD469D46AD46BD46CD46DD46ED46FD470D471D472D473D474D475D476D477D478D479D47AD47BD47CD47DD47ED480D481D482D483D484D485D486D487D488D489D48AD48BD48CD48DD48ED48FD490D491D492D493D494D495D496D497D498D499D5B2D49AD49BD49CD49DD49ED49FD4A0D540D541D542D543D544D545D546D547D3FECCDCD548D549D54AD54BD54CD54DD54ED54FCAC4D550D551D552D553D554D555D556D557D558D559D55AD55BD55CD55DD55ED55FD560D561D562D563D564D565D566D567D568D569D56AD56BD56CD56DD56ED56FD570D571D572D573D574D575D576D577D578D579D57AD57BD57CD57DD57ED580D581D582D583D584D585D586D587D588D589D58AD58BD58CD58DD58ED58FD590D591D592D593D594D595D596D597D598D599D59AD59BD59CD59DD59ED59FD5A0D640D641D642D643D644D645D646D647D648D649D64AD64BD64CD64DD64ED64FD650D651D652D653D654D655D656D657D658D659D65AD65BD65CD65DD65ED65FD660D661D662E5C0D663D664D665D666D667D668D669D66AD66BD66CD66DD66ED66FD670D671D672D673D674D675D676D677D678D679D67AD67BD67CD67DD67ED680D681F6A5D682D683D684D685D686D687D688D689D68AD68BD68CD68DD68ED68FD690D691D692D693D694D695D696D697D698D699D69AD69BD69CD69DD69ED69FD6A0D740D741D742D743D744D745D746D747D748D749D74AD74BD74CD74DD74ED74FD750D751D752D753D754D755D756D757D758D759D75AD75BD75CD75DD75ED75FBEAFD760D761D762D763D764C6A9D765D766D767D768D769D76AD76BD76CD76DD76ED76FD770D771D772D773D774D775D776D777D778D779D77AD77BD77CD77DD77ED780D781D782D783D784D785D786D787D788D789D78AD78BD78CD78DD78ED78FD790D791D792D793D794D795D796D797D798DAA5BCC6B6A9B8BCC8CFBCA5DAA6DAA7CCD6C8C3DAA8C6FDD799D1B5D2E9D1B6BCC7D79ABDB2BBE4DAA9DAAAD1C8DAABD0EDB6EFC2DBD79BCBCFB7EDC9E8B7C3BEF7D6A4DAACDAADC6C0D7E7CAB6D79CD5A9CBDFD5EFDAAED6DFB4CADAB0DAAFD79DD2EBDAB1DAB2DAB3CAD4DAB4CAABDAB5DAB6B3CFD6EFDAB7BBB0B5AEDAB8DAB9B9EED1AFD2E8DABAB8C3CFEAB2EFDABBDABCD79EBDEBCEDCD3EFDABDCEF3DABED3D5BBE5DABFCBB5CBD0DAC0C7EBD6EEDAC1C5B5B6C1DAC2B7CCBFCEDAC3DAC4CBADDAC5B5F7DAC6C1C2D7BBDAC7CCB8D79FD2EAC4B1DAC8B5FDBBD1DAC9D0B3DACADACBCEBDDACCDACDDACEB2F7DAD1DACFD1E8DAD0C3D5DAD2D7A0DAD3DAD4DAD5D0BBD2A5B0F9DAD6C7ABDAD7BDF7C3A1DAD8DAD9C3FDCCB7DADADADBC0BEC6D7DADCDADDC7B4DADEDADFB9C8D840D841D842D843D844D845D846D847D848BBEDD849D84AD84BD84CB6B9F4F8D84DF4F9D84ED84FCDE3D850D851D852D853D854D855D856D857F5B9D858D859D85AD85BEBE0D85CD85DD85ED85FD860D861CFF3BBBFD862D863D864D865D866D867D868BAC0D4A5D869D86AD86BD86CD86DD86ED86FE1D9D870D871D872D873F5F4B1AAB2F2D874D875D876D877D878D879D87AF5F5D87BD87CF5F7D87DD87ED880BAD1F5F6D881C3B2D882D883D884D885D886D887D888F5F9D889D88AD88BF5F8D88CD88DD88ED88FD890D891D892D893D894D895D896D897D898D899D89AD89BD89CD89DD89ED89FD8A0D940D941D942D943D944D945D946D947D948D949D94AD94BD94CD94DD94ED94FD950D951D952D953D954D955D956D957D958D959D95AD95BD95CD95DD95ED95FD960D961D962D963D964D965D966D967D968D969D96AD96BD96CD96DD96ED96FD970D971D972D973D974D975D976D977D978D979D97AD97BD97CD97DD97ED980D981D982D983D984D985D986D987D988D989D98AD98BD98CD98DD98ED98FD990D991D992D993D994D995D996D997D998D999D99AD99BD99CD99DD99ED99FD9A0DA40DA41DA42DA43DA44DA45DA46DA47DA48DA49DA4ADA4BDA4CDA4DDA4EB1B4D5EAB8BADA4FB9B1B2C6D4F0CFCDB0DCD5CBBBF5D6CAB7B7CCB0C6B6B1E1B9BAD6FCB9E1B7A1BCFAEADAEADBCCF9B9F3EADCB4FBC3B3B7D1BAD8EADDD4F4EADEBCD6BBDFEADFC1DEC2B8D4DFD7CAEAE0EAE1EAE4EAE2EAE3C9DEB8B3B6C4EAE5CAEAC9CDB4CDDA50DA51E2D9C5E2EAE6C0B5DA52D7B8EAE7D7ACC8FCD8D3D8CDD4DEDA53D4F9C9C4D3AEB8D3B3E0DA54C9E2F4F6DA55DA56DA57BAD5DA58F4F7DA59DA5AD7DFDA5BDA5CF4F1B8B0D5D4B8CFC6F0DA5DDA5EDA5FDA60DA61DA62DA63DA64DA65B3C3DA66DA67F4F2B3ACDA68DA69DA6ADA6BD4BDC7F7DA6CDA6DDA6EDA6FDA70F4F4DA71DA72F4F3DA73DA74DA75DA76DA77DA78DA79DA7ADA7BDA7CCCCBDA7DDA7EDA80C8A4DA81DA82DA83DA84DA85DA86DA87DA88DA89DA8ADA8BDA8CDA8DF4F5DA8ED7E3C5BFF5C0DA8FDA90F5BBDA91F5C3DA92F5C2DA93D6BAF5C1DA94DA95DA96D4BEF5C4DA97F5CCDA98DA99DA9ADA9BB0CFB5F8DA9CF5C9F5CADA9DC5DCDA9EDA9FDAA0DB40F5C5F5C6DB41DB42F5C7F5CBDB43BEE0F5C8B8FADB44DB45DB46F5D0F5D3DB47DB48DB49BFE7DB4AB9F2F5BCF5CDDB4BDB4CC2B7DB4DDB4EDB4FCCF8DB50BCF9DB51F5CEF5CFF5D1B6E5F5D2DB52F5D5DB53DB54DB55DB56DB57DB58DB59F5BDDB5ADB5BDB5CF5D4D3BBDB5DB3ECDB5EDB5FCCA4DB60DB61DB62DB63F5D6DB64DB65DB66DB67DB68DB69DB6ADB6BF5D7BEE1F5D8DB6CDB6DCCDFF5DBDB6EDB6FDB70DB71DB72B2C8D7D9DB73F5D9DB74F5DAF5DCDB75F5E2DB76DB77DB78F5E0DB79DB7ADB7BF5DFF5DDDB7CDB7DF5E1DB7EDB80F5DEF5E4F5E5DB81CCE3DB82DB83E5BFB5B8F5E3F5E8CCA3DB84DB85DB86DB87DB88F5E6F5E7DB89DB8ADB8BDB8CDB8DDB8EF5BEDB8FDB90DB91DB92DB93DB94DB95DB96DB97DB98DB99DB9AB1C4DB9BDB9CF5BFDB9DDB9EB5C5B2E4DB9FF5ECF5E9DBA0B6D7DC40F5EDDC41F5EADC42DC43DC44DC45DC46F5EBDC47DC48B4DADC49D4EADC4ADC4BDC4CF5EEDC4DB3F9DC4EDC4FDC50DC51DC52DC53DC54F5EFF5F1DC55DC56DC57F5F0DC58DC59DC5ADC5BDC5CDC5DDC5EF5F2DC5FF5F3DC60DC61DC62DC63DC64DC65DC66DC67DC68DC69DC6ADC6BC9EDB9AADC6CDC6DC7FBDC6EDC6FB6E3DC70DC71DC72DC73DC74DC75DC76CCC9DC77DC78DC79DC7ADC7BDC7CDC7DDC7EDC80DC81DC82DC83DC84DC85DC86DC87DC88DC89DC8AEAA6DC8BDC8CDC8DDC8EDC8FDC90DC91DC92DC93DC94DC95DC96DC97DC98DC99DC9ADC9BDC9CDC9DDC9EDC9FDCA0DD40DD41DD42DD43DD44DD45DD46DD47DD48DD49DD4ADD4BDD4CDD4DDD4EDD4FDD50DD51DD52DD53DD54DD55DD56DD57DD58DD59DD5ADD5BDD5CDD5DDD5EDD5FDD60DD61DD62DD63DD64DD65DD66DD67DD68DD69DD6ADD6BDD6CDD6DDD6EDD6FDD70DD71DD72DD73DD74DD75DD76DD77DD78DD79DD7ADD7BDD7CDD7DDD7EDD80DD81DD82DD83DD84DD85DD86DD87DD88DD89DD8ADD8BDD8CDD8DDD8EDD8FDD90DD91DD92DD93DD94DD95DD96DD97DD98DD99DD9ADD9BDD9CDD9DDD9EDD9FDDA0DE40DE41DE42DE43DE44DE45DE46DE47DE48DE49DE4ADE4BDE4CDE4DDE4EDE4FDE50DE51DE52DE53DE54DE55DE56DE57DE58DE59DE5ADE5BDE5CDE5DDE5EDE5FDE60B3B5D4FEB9ECD0F9DE61E9EDD7AAE9EEC2D6C8EDBAE4E9EFE9F0E9F1D6E1E9F2E9F3E9F5E9F4E9F6E9F7C7E1E9F8D4D8E9F9BDCEDE62E9FAE9FBBDCFE9FCB8A8C1BEE9FDB1B2BBD4B9F5E9FEDE63EAA1EAA2EAA3B7F8BCADDE64CAE4E0CED4AFCFBDD5B7EAA4D5DEEAA5D0C1B9BCDE65B4C7B1D9DE66DE67DE68C0B1DE69DE6ADE6BDE6CB1E6B1E7DE6DB1E8DE6EDE6FDE70DE71B3BDC8E8DE72DE73DE74DE75E5C1DE76DE77B1DFDE78DE79DE7AC1C9B4EFDE7BDE7CC7A8D3D8DE7DC6F9D1B8DE7EB9FDC2F5DE80DE81DE82DE83DE84D3ADDE85D4CBBDFCDE86E5C2B7B5E5C3DE87DE88BBB9D5E2DE89BDF8D4B6CEA5C1ACB3D9DE8ADE8BCCF6DE8CE5C6E5C4E5C8DE8DE5CAE5C7B5CFC6C8DE8EB5FCE5C5DE8FCAF6DE90DE91E5C9DE92DE93DE94C3D4B1C5BCA3DE95DE96DE97D7B7DE98DE99CDCBCBCDCACACCD3E5CCE5CBC4E6DE9ADE9BD1A1D1B7E5CDDE9CE5D0DE9DCDB8D6F0E5CFB5DDDE9ECDBEDE9FE5D1B6BADEA0DF40CDA8B9E4DF41CAC5B3D1CBD9D4ECE5D2B7EADF42DF43DF44E5CEDF45DF46DF47DF48DF49DF4AE5D5B4FEE5D6DF4BDF4CDF4DDF4EDF4FE5D3E5D4DF50D2DDDF51DF52C2DFB1C6DF53D3E2DF54DF55B6DDCBECDF56E5D7DF57DF58D3F6DF59DF5ADF5BDF5CDF5DB1E9DF5EB6F4E5DAE5D8E5D9B5C0DF5FDF60DF61D2C5E5DCDF62DF63E5DEDF64DF65DF66DF67DF68DF69E5DDC7B2DF6AD2A3DF6BDF6CE5DBDF6DDF6EDF6FDF70D4E2D5DADF71DF72DF73DF74DF75E5E0D7F1DF76DF77DF78DF79DF7ADF7BDF7CE5E1DF7DB1DCD1FBDF7EE5E2E5E4DF80DF81DF82DF83E5E3DF84DF85E5E5DF86DF87DF88DF89DF8AD2D8DF8BB5CBDF8CE7DFDF8DDAF5DF8EDAF8DF8FDAF6DF90DAF7DF91DF92DF93DAFAD0CFC4C7DF94DF95B0EEDF96DF97DF98D0B0DF99DAF9DF9AD3CABAAADBA2C7F1DF9BDAFCDAFBC9DBDAFDDF9CDBA1D7DEDAFEC1DADF9DDF9EDBA5DF9FDFA0D3F4E040E041DBA7DBA4E042DBA8E043E044BDBCE045E046E047C0C9DBA3DBA6D6A3E048DBA9E049E04AE04BDBADE04CE04DE04EDBAEDBACBAC2E04FE050E051BFA4DBABE052E053E054DBAAD4C7B2BFE055E056DBAFE057B9F9E058DBB0E059E05AE05BE05CB3BBE05DE05EE05FB5A6E060E061E062E063B6BCDBB1E064E065E066B6F5E067DBB2E068E069E06AE06BE06CE06DE06EE06FE070E071E072E073E074E075E076E077E078E079E07AE07BB1C9E07CE07DE07EE080DBB4E081E082E083DBB3DBB5E084E085E086E087E088E089E08AE08BE08CE08DE08EDBB7E08FDBB6E090E091E092E093E094E095E096DBB8E097E098E099E09AE09BE09CE09DE09EE09FDBB9E0A0E140DBBAE141E142D3CFF4FAC7F5D7C3C5E4F4FCF4FDF4FBE143BEC6E144E145E146E147D0EFE148E149B7D3E14AE14BD4CDCCAAE14CE14DF5A2F5A1BAA8F4FECBD6E14EE14FE150F5A4C0D2E151B3EAE152CDAAF5A5F5A3BDB4F5A8E153F5A9BDCDC3B8BFE1CBE1F5AAE154E155E156F5A6F5A7C4F0E157E158E159E15AE15BF5ACE15CB4BCE15DD7EDE15EB4D7F5ABF5AEE15FE160F5ADF5AFD0D1E161E162E163E164E165E166E167C3D1C8A9E168E169E16AE16BE16CE16DF5B0F5B1E16EE16FE170E171E172E173F5B2E174E175F5B3F5B4F5B5E176E177E178E179F5B7F5B6E17AE17BE17CE17DF5B8E17EE180E181E182E183E184E185E186E187E188E189E18AB2C9E18BD3D4CACDE18CC0EFD6D8D2B0C1BFE18DBDF0E18EE18FE190E191E192E193E194E195E196E197B8AAE198E199E19AE19BE19CE19DE19EE19FE1A0E240E241E242E243E244E245E246E247E248E249E24AE24BE24CE24DE24EE24FE250E251E252E253E254E255E256E257E258E259E25AE25BE25CE25DE25EE25FE260E261E262E263E264E265E266E267E268E269E26AE26BE26CE26DE26EE26FE270E271E272E273E274E275E276E277E278E279E27AE27BE27CE27DE27EE280E281E282E283E284E285E286E287E288E289E28AE28BE28CE28DE28EE28FE290E291E292E293E294E295E296E297E298E299E29AE29BE29CE29DE29EE29FE2A0E340E341E342E343E344E345E346E347E348E349E34AE34BE34CE34DE34EE34FE350E351E352E353E354E355E356E357E358E359E35AE35BE35CE35DE35EE35FE360E361E362E363E364E365E366E367E368E369E36AE36BE36CE36DBCF8E36EE36FE370E371E372E373E374E375E376E377E378E379E37AE37BE37CE37DE37EE380E381E382E383E384E385E386E387F6C6E388E389E38AE38BE38CE38DE38EE38FE390E391E392E393E394E395E396E397E398E399E39AE39BE39CE39DE39EE39FE3A0E440E441E442E443E444E445F6C7E446E447E448E449E44AE44BE44CE44DE44EE44FE450E451E452E453E454E455E456E457E458E459E45AE45BE45CE45DE45EF6C8E45FE460E461E462E463E464E465E466E467E468E469E46AE46BE46CE46DE46EE46FE470E471E472E473E474E475E476E477E478E479E47AE47BE47CE47DE47EE480E481E482E483E484E485E486E487E488E489E48AE48BE48CE48DE48EE48FE490E491E492E493E494E495E496E497E498E499E49AE49BE49CE49DE49EE49FE4A0E540E541E542E543E544E545E546E547E548E549E54AE54BE54CE54DE54EE54FE550E551E552E553E554E555E556E557E558E559E55AE55BE55CE55DE55EE55FE560E561E562E563E564E565E566E567E568E569E56AE56BE56CE56DE56EE56FE570E571E572E573F6C9E574E575E576E577E578E579E57AE57BE57CE57DE57EE580E581E582E583E584E585E586E587E588E589E58AE58BE58CE58DE58EE58FE590E591E592E593E594E595E596E597E598E599E59AE59BE59CE59DE59EE59FF6CAE5A0E640E641E642E643E644E645E646E647E648E649E64AE64BE64CE64DE64EE64FE650E651E652E653E654E655E656E657E658E659E65AE65BE65CE65DE65EE65FE660E661E662F6CCE663E664E665E666E667E668E669E66AE66BE66CE66DE66EE66FE670E671E672E673E674E675E676E677E678E679E67AE67BE67CE67DE67EE680E681E682E683E684E685E686E687E688E689E68AE68BE68CE68DE68EE68FE690E691E692E693E694E695E696E697E698E699E69AE69BE69CE69DF6CBE69EE69FE6A0E740E741E742E743E744E745E746E747F7E9E748E749E74AE74BE74CE74DE74EE74FE750E751E752E753E754E755E756E757E758E759E75AE75BE75CE75DE75EE75FE760E761E762E763E764E765E766E767E768E769E76AE76BE76CE76DE76EE76FE770E771E772E773E774E775E776E777E778E779E77AE77BE77CE77DE77EE780E781E782E783E784E785E786E787E788E789E78AE78BE78CE78DE78EE78FE790E791E792E793E794E795E796E797E798E799E79AE79BE79CE79DE79EE79FE7A0E840E841E842E843E844E845E846E847E848E849E84AE84BE84CE84DE84EF6CDE84FE850E851E852E853E854E855E856E857E858E859E85AE85BE85CE85DE85EE85FE860E861E862E863E864E865E866E867E868E869E86AE86BE86CE86DE86EE86FE870E871E872E873E874E875E876E877E878E879E87AF6CEE87BE87CE87DE87EE880E881E882E883E884E885E886E887E888E889E88AE88BE88CE88DE88EE88FE890E891E892E893E894EEC4EEC5EEC6D5EBB6A4EEC8EEC7EEC9EECAC7A5EECBEECCE895B7B0B5F6EECDEECFE896EECEE897B8C6EED0EED1EED2B6DBB3AED6D3C4C6B1B5B8D6EED3EED4D4BFC7D5BEFBCED9B9B3EED6EED5EED8EED7C5A5EED9EEDAC7AEEEDBC7AFEEDCB2A7EEDDEEDEEEDFEEE0EEE1D7EAEEE2EEE3BCD8EEE4D3CBCCFAB2ACC1E5EEE5C7A6C3ADE898EEE6EEE7EEE8EEE9EEEAEEEBEEECE899EEEDEEEEEEEFE89AE89BEEF0EEF1EEF2EEF4EEF3E89CEEF5CDADC2C1EEF6EEF7EEF8D5A1EEF9CFB3EEFAEEFBE89DEEFCEEFDEFA1EEFEEFA2B8F5C3FAEFA3EFA4BDC2D2BFB2F9EFA5EFA6EFA7D2F8EFA8D6FDEFA9C6CCE89EEFAAEFABC1B4EFACCFFACBF8EFAEEFADB3FAB9F8EFAFEFB0D0E2EFB1EFB2B7E6D0BFEFB3EFB4EFB5C8F1CCE0EFB6EFB7EFB8EFB9EFBAD5E0EFBBB4EDC3AAEFBCE89FEFBDEFBEEFBFE8A0CEFDEFC0C2E0B4B8D7B6BDF5E940CFC7EFC3EFC1EFC2EFC4B6A7BCFCBEE2C3CCEFC5EFC6E941EFC7EFCFEFC8EFC9EFCAC7C2EFF1B6CDEFCBE942EFCCEFCDB6C6C3BEEFCEE943EFD0EFD1EFD2D5F2E944EFD3C4F7E945EFD4C4F8EFD5EFD6B8E4B0F7EFD7EFD8EFD9E946EFDAEFDBEFDCEFDDE947EFDEBEB5EFE1EFDFEFE0E948EFE2EFE3C1CDEFE4EFE5EFE6EFE7EFE8EFE9EFEAEFEBEFECC0D8E949EFEDC1ADEFEEEFEFEFF0E94AE94BCFE2E94CE94DE94EE94FE950E951E952E953B3A4E954E955E956E957E958E959E95AE95BE95CE95DE95EE95FE960E961E962E963E964E965E966E967E968E969E96AE96BE96CE96DE96EE96FE970E971E972E973E974E975E976E977E978E979E97AE97BE97CE97DE97EE980E981E982E983E984E985E986E987E988E989E98AE98BE98CE98DE98EE98FE990E991E992E993E994E995E996E997E998E999E99AE99BE99CE99DE99EE99FE9A0EA40EA41EA42EA43EA44EA45EA46EA47EA48EA49EA4AEA4BEA4CEA4DEA4EEA4FEA50EA51EA52EA53EA54EA55EA56EA57EA58EA59EA5AEA5BC3C5E3C5C9C1E3C6EA5CB1D5CECAB4B3C8F2E3C7CFD0E3C8BCE4E3C9E3CAC3C6D5A2C4D6B9EBCEC5E3CBC3F6E3CCEA5DB7A7B8F3BAD2E3CDE3CED4C4E3CFEA5EE3D0D1CBE3D1E3D2E3D3E3D4D1D6E3D5B2FBC0BBE3D6EA5FC0ABE3D7E3D8E3D9EA60E3DAE3DBEA61B8B7DAE2EA62B6D3EA63DAE4DAE3EA64EA65EA66EA67EA68EA69EA6ADAE6EA6BEA6CEA6DC8EEEA6EEA6FDAE5B7C0D1F4D2F5D5F3BDD7EA70EA71EA72EA73D7E8DAE8DAE7EA74B0A2CDD3EA75DAE9EA76B8BDBCCAC2BDC2A4B3C2DAEAEA77C2AAC4B0BDB5EA78EA79CFDEEA7AEA7BEA7CDAEBC9C2EA7DEA7EEA80EA81EA82B1DDEA83EA84EA85DAECEA86B6B8D4BAEA87B3FDEA88EA89DAEDD4C9CFD5C5E3EA8ADAEEEA8BEA8CEA8DEA8EEA8FDAEFEA90DAF0C1EACCD5CFDDEA91EA92EA93EA94EA95EA96EA97EA98EA99EA9AEA9BEA9CEA9DD3E7C2A1EA9EDAF1EA9FEAA0CBE5EB40DAF2EB41CBE6D2FEEB42EB43EB44B8F4EB45EB46DAF3B0AFCFB6EB47EB48D5CFEB49EB4AEB4BEB4CEB4DEB4EEB4FEB50EB51EB52CBEDEB53EB54EB55EB56EB57EB58EB59EB5ADAF4EB5BEB5CE3C4EB5DEB5EC1A5EB5FEB60F6BFEB61EB62F6C0F6C1C4D1EB63C8B8D1E3EB64EB65D0DBD1C5BCAFB9CDEB66EFF4EB67EB68B4C6D3BAF6C2B3FBEB69EB6AF6C3EB6BEB6CB5F1EB6DEB6EEB6FEB70EB71EB72EB73EB74EB75EB76F6C5EB77EB78EB79EB7AEB7BEB7CEB7DD3EAF6A7D1A9EB7EEB80EB81EB82F6A9EB83EB84EB85F6A8EB86EB87C1E3C0D7EB88B1A2EB89EB8AEB8BEB8CCEEDEB8DD0E8F6ABEB8EEB8FCFF6EB90F6AAD5F0F6ACC3B9EB91EB92EB93BBF4F6AEF6ADEB94EB95EB96C4DEEB97EB98C1D8EB99EB9AEB9BEB9CEB9DCBAAEB9ECFBCEB9FEBA0EC40EC41EC42EC43EC44EC45EC46EC47EC48F6AFEC49EC4AF6B0EC4BEC4CF6B1EC4DC2B6EC4EEC4FEC50EC51EC52B0D4C5F9EC53EC54EC55EC56F6B2EC57EC58EC59EC5AEC5BEC5CEC5DEC5EEC5FEC60EC61EC62EC63EC64EC65EC66EC67EC68EC69C7E0F6A6EC6AEC6BBEB8EC6CEC6DBEB2EC6EB5E5EC6FEC70B7C7EC71BFBFC3D2C3E6EC72EC73D8CCEC74EC75EC76B8EFEC77EC78EC79EC7AEC7BEC7CEC7DEC7EEC80BDF9D1A5EC81B0D0EC82EC83EC84EC85EC86F7B0EC87EC88EC89EC8AEC8BEC8CEC8DEC8EF7B1EC8FEC90EC91EC92EC93D0ACEC94B0B0EC95EC96EC97F7B2F7B3EC98F7B4EC99EC9AEC9BC7CAEC9CEC9DEC9EEC9FECA0ED40ED41BECFED42ED43F7B7ED44ED45ED46ED47ED48ED49ED4AF7B6ED4BB1DEED4CF7B5ED4DED4EF7B8ED4FF7B9ED50ED51ED52ED53ED54ED55ED56ED57ED58ED59ED5AED5BED5CED5DED5EED5FED60ED61ED62ED63ED64ED65ED66ED67ED68ED69ED6AED6BED6CED6DED6EED6FED70ED71ED72ED73ED74ED75ED76ED77ED78ED79ED7AED7BED7CED7DED7EED80ED81CEA4C8CDED82BAABE8B8E8B9E8BABEC2ED83ED84ED85ED86ED87D2F4ED88D4CFC9D8ED89ED8AED8BED8CED8DED8EED8FED90ED91ED92ED93ED94ED95ED96ED97ED98ED99ED9AED9BED9CED9DED9EED9FEDA0EE40EE41EE42EE43EE44EE45EE46EE47EE48EE49EE4AEE4BEE4CEE4DEE4EEE4FEE50EE51EE52EE53EE54EE55EE56EE57EE58EE59EE5AEE5BEE5CEE5DEE5EEE5FEE60EE61EE62EE63EE64EE65EE66EE67EE68EE69EE6AEE6BEE6CEE6DEE6EEE6FEE70EE71EE72EE73EE74EE75EE76EE77EE78EE79EE7AEE7BEE7CEE7DEE7EEE80EE81EE82EE83EE84EE85EE86EE87EE88EE89EE8AEE8BEE8CEE8DEE8EEE8FEE90EE91EE92EE93EE94EE95EE96EE97EE98EE99EE9AEE9BEE9CEE9DEE9EEE9FEEA0EF40EF41EF42EF43EF44EF45D2B3B6A5C7EAF1FCCFEECBB3D0EBE7EFCDE7B9CBB6D9F1FDB0E4CBCCF1FED4A4C2ADC1ECC6C4BEB1F2A1BCD5EF46F2A2F2A3EF47F2A4D2C3C6B5EF48CDC7F2A5EF49D3B1BFC5CCE2EF4AF2A6F2A7D1D5B6EEF2A8F2A9B5DFF2AAF2ABEF4BB2FCF2ACF2ADC8A7EF4CEF4DEF4EEF4FEF50EF51EF52EF53EF54EF55EF56EF57EF58EF59EF5AEF5BEF5CEF5DEF5EEF5FEF60EF61EF62EF63EF64EF65EF66EF67EF68EF69EF6AEF6BEF6CEF6DEF6EEF6FEF70EF71B7E7EF72EF73ECA9ECAAECABEF74ECACEF75EF76C6AEECADECAEEF77EF78EF79B7C9CAB3EF7AEF7BEF7CEF7DEF7EEF80EF81E2B8F7CFEF82EF83EF84EF85EF86EF87EF88EF89EF8AEF8BEF8CEF8DEF8EEF8FEF90EF91EF92EF93EF94EF95EF96EF97EF98EF99EF9AEF9BEF9CEF9DEF9EEF9FEFA0F040F041F042F043F044F7D0F045F046B2CDF047F048F049F04AF04BF04CF04DF04EF04FF050F051F052F053F054F055F056F057F058F059F05AF05BF05CF05DF05EF05FF060F061F062F063F7D1F064F065F066F067F068F069F06AF06BF06CF06DF06EF06FF070F071F072F073F074F075F076F077F078F079F07AF07BF07CF07DF07EF080F081F082F083F084F085F086F087F088F089F7D3F7D2F08AF08BF08CF08DF08EF08FF090F091F092F093F094F095F096E2BBF097BCA2F098E2BCE2BDE2BEE2BFE2C0E2C1B7B9D2FBBDA4CACEB1A5CBC7F099E2C2B6FCC8C4E2C3F09AF09BBDC8F09CB1FDE2C4F09DB6F6E2C5C4D9F09EF09FE2C6CFDAB9DDE2C7C0A1F0A0E2C8B2F6F140E2C9F141C1F3E2CAE2CBC2F8E2CCE2CDE2CECAD7D8B8D9E5CFE3F142F143F144F145F146F147F148F149F14AF14BF14CF0A5F14DF14EDCB0F14FF150F151F152F153F154F155F156F157F158F159F15AF15BF15CF15DF15EF15FF160F161F162F163F164F165F166F167F168F169F16AF16BF16CF16DF16EF16FF170F171F172F173F174F175F176F177F178F179F17AF17BF17CF17DF17EF180F181F182F183F184F185F186F187F188F189F18AF18BF18CF18DF18EF18FF190F191F192F193F194F195F196F197F198F199F19AF19BF19CF19DF19EF19FF1A0F240F241F242F243F244F245F246F247F248F249F24AF24BF24CF24DF24EF24FF250F251F252F253F254F255F256F257F258F259F25AF25BF25CF25DF25EF25FF260F261F262F263F264F265F266F267F268F269F26AF26BF26CF26DF26EF26FF270F271F272F273F274F275F276F277F278F279F27AF27BF27CF27DF27EF280F281F282F283F284F285F286F287F288F289F28AF28BF28CF28DF28EF28FF290F291F292F293F294F295F296F297F298F299F29AF29BF29CF29DF29EF29FF2A0F340F341F342F343F344F345F346F347F348F349F34AF34BF34CF34DF34EF34FF350F351C2EDD4A6CDD4D1B1B3DBC7FDF352B2B5C2BFE6E0CABBE6E1E6E2BED4E6E3D7A4CDD5E6E5BCDDE6E4E6E6E6E7C2EEF353BDBEE6E8C2E6BAA7E6E9F354E6EAB3D2D1E9F355F356BFA5E6EBC6EFE6ECE6EDF357F358E6EEC6ADE6EFF359C9A7E6F0E6F1E6F2E5B9E6F3E6F4C2E2E6F5E6F6D6E8E6F7F35AE6F8B9C7F35BF35CF35DF35EF35FF360F361F7BBF7BAF362F363F364F365F7BEF7BCBAA1F366F7BFF367F7C0F368F369F36AF7C2F7C1F7C4F36BF36CF7C3F36DF36EF36FF370F371F7C5F7C6F372F373F374F375F7C7F376CBE8F377F378F379F37AB8DFF37BF37CF37DF37EF380F381F7D4F382F7D5F383F384F385F386F7D6F387F388F389F38AF7D8F38BF7DAF38CF7D7F38DF38EF38FF390F391F392F393F394F395F7DBF396F7D9F397F398F399F39AF39BF39CF39DD7D7F39EF39FF3A0F440F7DCF441F442F443F444F445F446F7DDF447F448F449F7DEF44AF44BF44CF44DF44EF44FF450F451F452F453F454F7DFF455F456F457F7E0F458F459F45AF45BF45CF45DF45EF45FF460F461F462DBCBF463F464D8AAF465F466F467F468F469F46AF46BF46CE5F7B9EDF46DF46EF46FF470BFFDBBEAF7C9C6C7F7C8F471F7CAF7CCF7CBF472F473F474F7CDF475CEBAF476F7CEF477F478C4A7F479F47AF47BF47CF47DF47EF480F481F482F483F484F485F486F487F488F489F48AF48BF48CF48DF48EF48FF490F491F492F493F494F495F496F497F498F499F49AF49BF49CF49DF49EF49FF4A0F540F541F542F543F544F545F546F547F548F549F54AF54BF54CF54DF54EF54FF550F551F552F553F554F555F556F557F558F559F55AF55BF55CF55DF55EF55FF560F561F562F563F564F565F566F567F568F569F56AF56BF56CF56DF56EF56FF570F571F572F573F574F575F576F577F578F579F57AF57BF57CF57DF57EF580F581F582F583F584F585F586F587F588F589F58AF58BF58CF58DF58EF58FF590F591F592F593F594F595F596F597F598F599F59AF59BF59CF59DF59EF59FF5A0F640F641F642F643F644F645F646F647F648F649F64AF64BF64CF64DF64EF64FF650F651F652F653F654F655F656F657F658F659F65AF65BF65CF65DF65EF65FF660F661F662F663F664F665F666F667F668F669F66AF66BF66CF66DF66EF66FF670F671F672F673F674F675F676F677F678F679F67AF67BF67CF67DF67EF680F681F682F683F684F685F686F687F688F689F68AF68BF68CF68DF68EF68FF690F691F692F693F694F695F696F697F698F699F69AF69BF69CF69DF69EF69FF6A0F740F741F742F743F744F745F746F747F748F749F74AF74BF74CF74DF74EF74FF750F751F752F753F754F755F756F757F758F759F75AF75BF75CF75DF75EF75FF760F761F762F763F764F765F766F767F768F769F76AF76BF76CF76DF76EF76FF770F771F772F773F774F775F776F777F778F779F77AF77BF77CF77DF77EF780D3E3F781F782F6CFF783C2B3F6D0F784F785F6D1F6D2F6D3F6D4F786F787F6D6F788B1ABF6D7F789F6D8F6D9F6DAF78AF6DBF6DCF78BF78CF78DF78EF6DDF6DECFCAF78FF6DFF6E0F6E1F6E2F6E3F6E4C0F0F6E5F6E6F6E7F6E8F6E9F790F6EAF791F6EBF6ECF792F6EDF6EEF6EFF6F0F6F1F6F2F6F3F6F4BEA8F793F6F5F6F6F6F7F6F8F794F795F796F797F798C8FAF6F9F6FAF6FBF6FCF799F79AF6FDF6FEF7A1F7A2F7A3F7A4F7A5F79BF79CF7A6F7A7F7A8B1EEF7A9F7AAF7ABF79DF79EF7ACF7ADC1DBF7AEF79FF7A0F7AFF840F841F842F843F844F845F846F847F848F849F84AF84BF84CF84DF84EF84FF850F851F852F853F854F855F856F857F858F859F85AF85BF85CF85DF85EF85FF860F861F862F863F864F865F866F867F868F869F86AF86BF86CF86DF86EF86FF870F871F872F873F874F875F876F877F878F879F87AF87BF87CF87DF87EF880F881F882F883F884F885F886F887F888F889F88AF88BF88CF88DF88EF88FF890F891F892F893F894F895F896F897F898F899F89AF89BF89CF89DF89EF89FF8A0F940F941F942F943F944F945F946F947F948F949F94AF94BF94CF94DF94EF94FF950F951F952F953F954F955F956F957F958F959F95AF95BF95CF95DF95EF95FF960F961F962F963F964F965F966F967F968F969F96AF96BF96CF96DF96EF96FF970F971F972F973F974F975F976F977F978F979F97AF97BF97CF97DF97EF980F981F982F983F984F985F986F987F988F989F98AF98BF98CF98DF98EF98FF990F991F992F993F994F995F996F997F998F999F99AF99BF99CF99DF99EF99FF9A0FA40FA41FA42FA43FA44FA45FA46FA47FA48FA49FA4AFA4BFA4CFA4DFA4EFA4FFA50FA51FA52FA53FA54FA55FA56FA57FA58FA59FA5AFA5BFA5CFA5DFA5EFA5FFA60FA61FA62FA63FA64FA65FA66FA67FA68FA69FA6AFA6BFA6CFA6DFA6EFA6FFA70FA71FA72FA73FA74FA75FA76FA77FA78FA79FA7AFA7BFA7CFA7DFA7EFA80FA81FA82FA83FA84FA85FA86FA87FA88FA89FA8AFA8BFA8CFA8DFA8EFA8FFA90FA91FA92FA93FA94FA95FA96FA97FA98FA99FA9AFA9BFA9CFA9DFA9EFA9FFAA0FB40FB41FB42FB43FB44FB45FB46FB47FB48FB49FB4AFB4BFB4CFB4DFB4EFB4FFB50FB51FB52FB53FB54FB55FB56FB57FB58FB59FB5AFB5BC4F1F0AFBCA6F0B0C3F9FB5CC5B8D1BBFB5DF0B1F0B2F0B3F0B4F0B5D1BCFB5ED1ECFB5FF0B7F0B6D4A7FB60CDD2F0B8F0BAF0B9F0BBF0BCFB61FB62B8EBF0BDBAE8FB63F0BEF0BFBEE9F0C0B6ECF0C1F0C2F0C3F0C4C8B5F0C5F0C6FB64F0C7C5F4FB65F0C8FB66FB67FB68F0C9FB69F0CAF7BDFB6AF0CBF0CCF0CDFB6BF0CEFB6CFB6DFB6EFB6FF0CFBAD7FB70F0D0F0D1F0D2F0D3F0D4F0D5F0D6F0D8FB71FB72D3A5F0D7FB73F0D9FB74FB75FB76FB77FB78FB79FB7AFB7BFB7CFB7DF5BAC2B9FB7EFB80F7E4FB81FB82FB83FB84F7E5F7E6FB85FB86F7E7FB87FB88FB89FB8AFB8BFB8CF7E8C2B4FB8DFB8EFB8FFB90FB91FB92FB93FB94FB95F7EAFB96F7EBFB97FB98FB99FB9AFB9BFB9CC2F3FB9DFB9EFB9FFBA0FC40FC41FC42FC43FC44FC45FC46FC47FC48F4F0FC49FC4AFC4BF4EFFC4CFC4DC2E9FC4EF7E1F7E2FC4FFC50FC51FC52FC53BBC6FC54FC55FC56FC57D9E4FC58FC59FC5ACAF2C0E8F0A4FC5BBADAFC5CFC5DC7ADFC5EFC5FFC60C4ACFC61FC62F7ECF7EDF7EEFC63F7F0F7EFFC64F7F1FC65FC66F7F4FC67F7F3FC68F7F2F7F5FC69FC6AFC6BFC6CF7F6FC6DFC6EFC6FFC70FC71FC72FC73FC74FC75EDE9FC76EDEAEDEBFC77F6BCFC78FC79FC7AFC7BFC7CFC7DFC7EFC80FC81FC82FC83FC84F6BDFC85F6BEB6A6FC86D8BEFC87FC88B9C4FC89FC8AFC8BD8BBFC8CDCB1FC8DFC8EFC8FFC90FC91FC92CAF3FC93F7F7FC94FC95FC96FC97FC98FC99FC9AFC9BFC9CF7F8FC9DFC9EF7F9FC9FFCA0FD40FD41FD42FD43FD44F7FBFD45F7FAFD46B1C7FD47F7FCF7FDFD48FD49FD4AFD4BFD4CF7FEFD4DFD4EFD4FFD50FD51FD52FD53FD54FD55FD56FD57C6EBECB4FD58FD59FD5AFD5BFD5CFD5DFD5EFD5FFD60FD61FD62FD63FD64FD65FD66FD67FD68FD69FD6AFD6BFD6CFD6DFD6EFD6FFD70FD71FD72FD73FD74FD75FD76FD77FD78FD79FD7AFD7BFD7CFD7DFD7EFD80FD81FD82FD83FD84FD85B3DDF6B3FD86FD87F6B4C1E4F6B5F6B6F6B7F6B8F6B9F6BAC8A3F6BBFD88FD89FD8AFD8BFD8CFD8DFD8EFD8FFD90FD91FD92FD93C1FAB9A8EDE8FD94FD95FD96B9EAD9DFFD97FD98FD99FD9AFD9'; + + for (var i = 0; i < str.length; i++) { + var c = str.charAt(i), + code = str.charCodeAt(i); + if (c == " ") strOut += "+"; + else if (code >= 19968 && code <= 40869) { + var index = code - 19968; + strOut += "%" + z.substr(index * 4, 2) + "%" + z.substr(index * 4 + 2, 2); + } else { + strOut += "%" + str.charCodeAt(i).toString(16); + } + } + return strOut; + }, + /* 改变图片大小 */ + scale: function (img, w, h) { + var ow = img.width, + oh = img.height; + + if (ow >= oh) { + img.width = w * ow / oh; + img.height = h; + img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px'; + } else { + img.width = w; + img.height = h * oh / ow; + img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px'; + } + }, + getImageData: function(){ + var _this = this, + key = $G('searchTxt').value, + type = $G('searchType').value, + keepOriginName = editor.options.keepOriginName ? "1" : "0", + url = "http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&st=-1&tn=baiduimagejson&istype=2&rn=32&fm=index&pv=&word=" + _this.encodeToGb2312(key) + type + "&keeporiginname=" + keepOriginName + "&" + +new Date; + + $G('searchListUl').innerHTML = lang.searchLoading; + ajax.request(url, { + 'dataType': 'jsonp', + 'charset': 'GB18030', + 'onsuccess':function(json){ + var list = []; + if(json && json.data) { + for(var i = 0; i < json.data.length; i++) { + if(json.data[i].objURL) { + list.push({ + title: json.data[i].fromPageTitleEnc, + src: json.data[i].objURL, + url: json.data[i].fromURL + }); + } + } + } + _this.setList(list); + }, + 'onerror':function(){ + $G('searchListUl').innerHTML = lang.searchRetry; + } + }); + }, + /* 添加图片到列表界面上 */ + setList: function (list) { + var i, item, p, img, link, _this = this, + listUl = $G('searchListUl'); + + listUl.innerHTML = ''; + if(list.length) { + for (i = 0; i < list.length; i++) { + item = document.createElement('li'); + p = document.createElement('p'); + img = document.createElement('img'); + link = document.createElement('a'); + + img.onload = function () { + _this.scale(this, 113, 113); + }; + img.width = 113; + img.setAttribute('src', list[i].src); + + link.href = list[i].url; + link.target = '_blank'; + link.title = list[i].title; + link.innerHTML = list[i].title; + + p.appendChild(img); + item.appendChild(p); + item.appendChild(link); + listUl.appendChild(item); + } + } else { + listUl.innerHTML = lang.searchRetry; + } + }, + getInsertList: function () { + var child, + src, + align = getAlign(), + list = [], + items = $G('searchListUl').children; + for(var i = 0; i < items.length; i++) { + child = items[i].firstChild && items[i].firstChild.firstChild; + if(child.tagName && child.tagName.toLowerCase() == 'img' && domUtils.hasClass(items[i], 'selected')) { + src = child.src; + list.push({ + src: src, + _src: src, + alt: src.substr(src.lastIndexOf('/') + 1), + floatStyle: align + }); + } + } + return list; + } + }; + +})(); diff --git a/public/vendor/ueditor/dialogs/image/images/alignicon.jpg b/public/vendor/ueditor/dialogs/image/images/alignicon.jpg new file mode 100644 index 0000000..754755b Binary files /dev/null and b/public/vendor/ueditor/dialogs/image/images/alignicon.jpg differ diff --git a/public/vendor/ueditor/dialogs/image/images/bg.png b/public/vendor/ueditor/dialogs/image/images/bg.png new file mode 100644 index 0000000..580be0a Binary files /dev/null and b/public/vendor/ueditor/dialogs/image/images/bg.png differ diff --git a/public/vendor/ueditor/dialogs/image/images/icons.gif b/public/vendor/ueditor/dialogs/image/images/icons.gif new file mode 100644 index 0000000..78459de Binary files /dev/null and b/public/vendor/ueditor/dialogs/image/images/icons.gif differ diff --git a/public/vendor/ueditor/dialogs/image/images/icons.png b/public/vendor/ueditor/dialogs/image/images/icons.png new file mode 100644 index 0000000..12e4700 Binary files /dev/null and b/public/vendor/ueditor/dialogs/image/images/icons.png differ diff --git a/public/vendor/ueditor/dialogs/image/images/image.png b/public/vendor/ueditor/dialogs/image/images/image.png new file mode 100644 index 0000000..19699f6 Binary files /dev/null and b/public/vendor/ueditor/dialogs/image/images/image.png differ diff --git a/public/vendor/ueditor/dialogs/image/images/progress.png b/public/vendor/ueditor/dialogs/image/images/progress.png new file mode 100644 index 0000000..717c486 Binary files /dev/null and b/public/vendor/ueditor/dialogs/image/images/progress.png differ diff --git a/public/vendor/ueditor/dialogs/image/images/success.gif b/public/vendor/ueditor/dialogs/image/images/success.gif new file mode 100644 index 0000000..8d4f311 Binary files /dev/null and b/public/vendor/ueditor/dialogs/image/images/success.gif differ diff --git a/public/vendor/ueditor/dialogs/image/images/success.png b/public/vendor/ueditor/dialogs/image/images/success.png new file mode 100644 index 0000000..94f968d Binary files /dev/null and b/public/vendor/ueditor/dialogs/image/images/success.png differ diff --git a/public/vendor/ueditor/dialogs/insertframe/insertframe.html b/public/vendor/ueditor/dialogs/insertframe/insertframe.html new file mode 100644 index 0000000..7f1f3e9 --- /dev/null +++ b/public/vendor/ueditor/dialogs/insertframe/insertframe.html @@ -0,0 +1,98 @@ + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    + + +
    px
    px
    + +
    +
    + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/internal.js b/public/vendor/ueditor/dialogs/internal.js new file mode 100644 index 0000000..44dc17f --- /dev/null +++ b/public/vendor/ueditor/dialogs/internal.js @@ -0,0 +1,81 @@ +(function () { + var parent = window.parent; + //dialog对象 + dialog = parent.$EDITORUI[window.frameElement.id.replace( /_iframe$/, '' )]; + //当前打开dialog的编辑器实例 + editor = dialog.editor; + + UE = parent.UE; + + domUtils = UE.dom.domUtils; + + utils = UE.utils; + + browser = UE.browser; + + ajax = UE.ajax; + + $G = function ( id ) { + return document.getElementById( id ) + }; + //focus元素 + $focus = function ( node ) { + setTimeout( function () { + if ( browser.ie ) { + var r = node.createTextRange(); + r.collapse( false ); + r.select(); + } else { + node.focus() + } + }, 0 ) + }; + utils.loadFile(document,{ + href:editor.options.themePath + editor.options.theme + "/dialogbase.css?cache="+Math.random(), + tag:"link", + type:"text/css", + rel:"stylesheet" + }); + lang = editor.getLang(dialog.className.split( "-" )[2]); + if(lang){ + domUtils.on(window,'load',function () { + + var langImgPath = editor.options.langPath + editor.options.lang + "/images/"; + //针对静态资源 + for ( var i in lang["static"] ) { + var dom = $G( i ); + if(!dom) continue; + var tagName = dom.tagName, + content = lang["static"][i]; + if(content.src){ + //clone + content = utils.extend({},content,false); + content.src = langImgPath + content.src; + } + if(content.style){ + content = utils.extend({},content,false); + content.style = content.style.replace(/url\s*\(/g,"url(" + langImgPath) + } + switch ( tagName.toLowerCase() ) { + case "var": + dom.parentNode.replaceChild( document.createTextNode( content ), dom ); + break; + case "select": + var ops = dom.options; + for ( var j = 0, oj; oj = ops[j]; ) { + oj.innerHTML = content.options[j++]; + } + for ( var p in content ) { + p != "options" && dom.setAttribute( p, content[p] ); + } + break; + default : + domUtils.setAttributes( dom, content); + } + } + } ); + } + + +})(); + diff --git a/public/vendor/ueditor/dialogs/link/link.html b/public/vendor/ueditor/dialogs/link/link.html new file mode 100644 index 0000000..55ab4d1 --- /dev/null +++ b/public/vendor/ueditor/dialogs/link/link.html @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + + diff --git a/public/vendor/ueditor/dialogs/map/map.html b/public/vendor/ueditor/dialogs/map/map.html new file mode 100644 index 0000000..e763b8e --- /dev/null +++ b/public/vendor/ueditor/dialogs/map/map.html @@ -0,0 +1,135 @@ + + + + + + + + + + +
    + + + + + + + + + +
    ::
    +
    + +
    + + + + + diff --git a/public/vendor/ueditor/dialogs/map/show.html b/public/vendor/ueditor/dialogs/map/show.html new file mode 100644 index 0000000..329cfeb --- /dev/null +++ b/public/vendor/ueditor/dialogs/map/show.html @@ -0,0 +1,118 @@ + + + + + + + 百度地图API自定义地图 + + + + + + + +
    + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/music/music.css b/public/vendor/ueditor/dialogs/music/music.css new file mode 100644 index 0000000..8fb7a94 --- /dev/null +++ b/public/vendor/ueditor/dialogs/music/music.css @@ -0,0 +1,30 @@ +.wrapper{margin: 5px 10px;} + +.searchBar{height:30px;padding:7px 0 3px;text-align:center;} +.searchBtn{font-size:13px;height:24px;} + +.resultBar{width:460px;margin:5px auto;border: 1px solid #CCC;border-radius: 5px;box-shadow: 2px 2px 5px #D3D6DA;overflow: hidden;} + +.listPanel{overflow: hidden;} +.panelon{display:block;} +.paneloff{display:none} + +.page{width:220px;margin:20px auto;overflow: hidden;} +.pageon{float:right;width:24px;line-height:24px;height:24px;margin-right: 5px;background: none;border: none;color: #000;font-weight: bold;text-align:center} +.pageoff{float:right;width:24px;line-height:24px;height:24px;cursor:pointer;background-color: #fff; + border: 1px solid #E7ECF0;color: #2D64B3;margin-right: 5px;text-decoration: none;text-align:center;} + +.m-box{width:460px;} +.m-m{float: left;line-height: 20px;height: 20px;} +.m-h{height:24px;line-height:24px;padding-left: 46px;background-color:#FAFAFA;border-bottom: 1px solid #DAD8D8;font-weight: bold;font-size: 12px;color: #333;} +.m-l{float:left;width:40px; } +.m-t{float:left;width:140px;} +.m-s{float:left;width:110px;} +.m-z{float:left;width:100px;} +.m-try-t{float: left;width: 60px;;} + +.m-try{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/try_music.gif') no-repeat ;} +.m-trying{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/stop_music.gif') no-repeat ;} + +.loading{width:95px;height:7px;font-size:7px;margin:60px auto;background:url(http://static.tieba.baidu.com/tb/editor/images/loading.gif) no-repeat} +.empty{width:300px;height:40px;padding:2px;margin:50px auto;line-height:40px; color:#006699;text-align:center;} \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/music/music.html b/public/vendor/ueditor/dialogs/music/music.html new file mode 100644 index 0000000..e7ef04f --- /dev/null +++ b/public/vendor/ueditor/dialogs/music/music.html @@ -0,0 +1,32 @@ + + + + + 插入音乐 + + + + +
    + +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/music/music.js b/public/vendor/ueditor/dialogs/music/music.js new file mode 100644 index 0000000..1c538bf --- /dev/null +++ b/public/vendor/ueditor/dialogs/music/music.js @@ -0,0 +1,192 @@ +function Music() { + this.init(); +} +(function () { + var pages = [], + panels = [], + selectedItem = null; + Music.prototype = { + total:70, + pageSize:10, + dataUrl:"http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.search.common", + playerUrl:"http://box.baidu.com/widget/flash/bdspacesong.swf", + + init:function () { + var me = this; + domUtils.on($G("J_searchName"), "keyup", function (event) { + var e = window.event || event; + if (e.keyCode == 13) { + me.dosearch(); + } + }); + domUtils.on($G("J_searchBtn"), "click", function () { + me.dosearch(); + }); + }, + callback:function (data) { + var me = this; + me.data = data.song_list; + setTimeout(function () { + $G('J_resultBar').innerHTML = me._renderTemplate(data.song_list); + }, 300); + }, + dosearch:function () { + var me = this; + selectedItem = null; + var key = $G('J_searchName').value; + if (utils.trim(key) == "")return false; + key = encodeURIComponent(key); + me._sent(key); + }, + doselect:function (i) { + var me = this; + if (typeof i == 'object') { + selectedItem = i; + } else if (typeof i == 'number') { + selectedItem = me.data[i]; + } + }, + onpageclick:function (id) { + var me = this; + for (var i = 0; i < pages.length; i++) { + $G(pages[i]).className = 'pageoff'; + $G(panels[i]).className = 'paneloff'; + } + $G('page' + id).className = 'pageon'; + $G('panel' + id).className = 'panelon'; + }, + listenTest:function (elem) { + var me = this, + view = $G('J_preview'), + is_play_action = (elem.className == 'm-try'), + old_trying = me._getTryingElem(); + + if (old_trying) { + old_trying.className = 'm-try'; + view.innerHTML = ''; + } + if (is_play_action) { + elem.className = 'm-trying'; + view.innerHTML = me._buildMusicHtml(me._getUrl(true)); + } + }, + _sent:function (param) { + var me = this; + $G('J_resultBar').innerHTML = '
    '; + + utils.loadFile(document, { + src:me.dataUrl + '&query=' + param + '&page_size=' + me.total + '&callback=music.callback&.r=' + Math.random(), + tag:"script", + type:"text/javascript", + defer:"defer" + }); + }, + _removeHtml:function (str) { + var reg = /<\s*\/?\s*[^>]*\s*>/gi; + return str.replace(reg, ""); + }, + _getUrl:function (isTryListen) { + var me = this; + var param = 'from=tiebasongwidget&url=&name=' + encodeURIComponent(me._removeHtml(selectedItem.title)) + '&artist=' + + encodeURIComponent(me._removeHtml(selectedItem.author)) + '&extra=' + + encodeURIComponent(me._removeHtml(selectedItem.album_title)) + + '&autoPlay='+isTryListen+'' + '&loop=true'; + return me.playerUrl + "?" + param; + }, + _getTryingElem:function () { + var s = $G('J_listPanel').getElementsByTagName('span'); + + for (var i = 0; i < s.length; i++) { + if (s[i].className == 'm-trying') + return s[i]; + } + return null; + }, + _buildMusicHtml:function (playerUrl) { + var html = ' 12) + return s.substring(0, 5) + '...'; + if (!s) s = " "; + return s; + }, + _rebuildData:function (data) { + var me = this, + newData = [], + d = me.pageSize, + itembox; + for (var i = 0; i < data.length; i++) { + if ((i + d) % d == 0) { + itembox = []; + newData.push(itembox) + } + itembox.push(data[i]); + } + return newData; + }, + _renderTemplate:function (data) { + var me = this; + if (data.length == 0)return '
    ' + lang.emptyTxt + '
    '; + data = me._rebuildData(data); + var s = [], p = [], t = []; + s.push('
    '); + p.push('
    '); + for (var i = 0, tmpList; tmpList = data[i++];) { + panels.push('panel' + i); + pages.push('page' + i); + if (i == 1) { + s.push('
    '); + if (data.length != 1) { + t.push('
    ' + (i ) + '
    '); + } + } else { + s.push('
    '); + t.push('
    ' + (i ) + '
    '); + } + s.push('
    '); + s.push('
    ' + lang.chapter + '' + lang.singer + + '' + lang.special + '' + lang.listenTest + '
    '); + for (var j = 0, tmpObj; tmpObj = tmpList[j++];) { + s.push(''); + } + s.push('
    '); + s.push('
    '); + } + t.reverse(); + p.push(t.join('')); + s.push('
    '); + p.push('
    '); + return s.join('') + p.join(''); + }, + exec:function () { + var me = this; + if (selectedItem == null) return; + $G('J_preview').innerHTML = ""; + editor.execCommand('music', { + url:me._getUrl(false), + width:400, + height:95 + }); + } + }; +})(); + + + diff --git a/public/vendor/ueditor/dialogs/preview/preview.html b/public/vendor/ueditor/dialogs/preview/preview.html new file mode 100644 index 0000000..f6b433b --- /dev/null +++ b/public/vendor/ueditor/dialogs/preview/preview.html @@ -0,0 +1,40 @@ + + + + + + + + + + +
    + +
    + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/scrawl/images/addimg.png b/public/vendor/ueditor/dialogs/scrawl/images/addimg.png new file mode 100644 index 0000000..03a8713 Binary files /dev/null and b/public/vendor/ueditor/dialogs/scrawl/images/addimg.png differ diff --git a/public/vendor/ueditor/dialogs/scrawl/images/brush.png b/public/vendor/ueditor/dialogs/scrawl/images/brush.png new file mode 100644 index 0000000..efa6fdb Binary files /dev/null and b/public/vendor/ueditor/dialogs/scrawl/images/brush.png differ diff --git a/public/vendor/ueditor/dialogs/scrawl/images/delimg.png b/public/vendor/ueditor/dialogs/scrawl/images/delimg.png new file mode 100644 index 0000000..5a892e4 Binary files /dev/null and b/public/vendor/ueditor/dialogs/scrawl/images/delimg.png differ diff --git a/public/vendor/ueditor/dialogs/scrawl/images/delimgH.png b/public/vendor/ueditor/dialogs/scrawl/images/delimgH.png new file mode 100644 index 0000000..2f0c5c9 Binary files /dev/null and b/public/vendor/ueditor/dialogs/scrawl/images/delimgH.png differ diff --git a/public/vendor/ueditor/dialogs/scrawl/images/empty.png b/public/vendor/ueditor/dialogs/scrawl/images/empty.png new file mode 100644 index 0000000..0375196 Binary files /dev/null and b/public/vendor/ueditor/dialogs/scrawl/images/empty.png differ diff --git a/public/vendor/ueditor/dialogs/scrawl/images/emptyH.png b/public/vendor/ueditor/dialogs/scrawl/images/emptyH.png new file mode 100644 index 0000000..838ca72 Binary files /dev/null and b/public/vendor/ueditor/dialogs/scrawl/images/emptyH.png differ diff --git a/public/vendor/ueditor/dialogs/scrawl/images/eraser.png b/public/vendor/ueditor/dialogs/scrawl/images/eraser.png new file mode 100644 index 0000000..63e87ce Binary files /dev/null and b/public/vendor/ueditor/dialogs/scrawl/images/eraser.png differ diff --git a/public/vendor/ueditor/dialogs/scrawl/images/redo.png b/public/vendor/ueditor/dialogs/scrawl/images/redo.png new file mode 100644 index 0000000..12cd9bb Binary files /dev/null and b/public/vendor/ueditor/dialogs/scrawl/images/redo.png differ diff --git a/public/vendor/ueditor/dialogs/scrawl/images/redoH.png b/public/vendor/ueditor/dialogs/scrawl/images/redoH.png new file mode 100644 index 0000000..d9f33d3 Binary files /dev/null and b/public/vendor/ueditor/dialogs/scrawl/images/redoH.png differ diff --git a/public/vendor/ueditor/dialogs/scrawl/images/scale.png b/public/vendor/ueditor/dialogs/scrawl/images/scale.png new file mode 100644 index 0000000..935a3f3 Binary files /dev/null and b/public/vendor/ueditor/dialogs/scrawl/images/scale.png differ diff --git a/public/vendor/ueditor/dialogs/scrawl/images/scaleH.png b/public/vendor/ueditor/dialogs/scrawl/images/scaleH.png new file mode 100644 index 0000000..72e64a9 Binary files /dev/null and b/public/vendor/ueditor/dialogs/scrawl/images/scaleH.png differ diff --git a/public/vendor/ueditor/dialogs/scrawl/images/size.png b/public/vendor/ueditor/dialogs/scrawl/images/size.png new file mode 100644 index 0000000..8366845 Binary files /dev/null and b/public/vendor/ueditor/dialogs/scrawl/images/size.png differ diff --git a/public/vendor/ueditor/dialogs/scrawl/images/undo.png b/public/vendor/ueditor/dialogs/scrawl/images/undo.png new file mode 100644 index 0000000..084c7cc Binary files /dev/null and b/public/vendor/ueditor/dialogs/scrawl/images/undo.png differ diff --git a/public/vendor/ueditor/dialogs/scrawl/images/undoH.png b/public/vendor/ueditor/dialogs/scrawl/images/undoH.png new file mode 100644 index 0000000..fde7eb3 Binary files /dev/null and b/public/vendor/ueditor/dialogs/scrawl/images/undoH.png differ diff --git a/public/vendor/ueditor/dialogs/scrawl/scrawl.css b/public/vendor/ueditor/dialogs/scrawl/scrawl.css new file mode 100644 index 0000000..b18430d --- /dev/null +++ b/public/vendor/ueditor/dialogs/scrawl/scrawl.css @@ -0,0 +1,72 @@ +/*common +*/ +body{margin: 0;} +table{width:100%;} +table td{padding:2px 4px;vertical-align: middle;} +a{text-decoration: none;} +em{font-style: normal;} +.border_style1{border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;} +/*module +*/ +.main{margin: 8px;overflow: hidden;} + +.hot{float:left;height:335px;} +.drawBoard{position: relative; cursor: crosshair;} +.brushBorad{position: absolute;left:0;top:0;z-index: 998;} +.picBoard{border: none;text-align: center;line-height: 300px;cursor: default;} +.operateBar{margin-top:10px;font-size:12px;text-align: center;} +.operateBar span{margin-left: 10px;} + +.drawToolbar{float:right;width:110px;height:300px;overflow: hidden;} +.colorBar{margin-top:10px;font-size: 12px;text-align: center;} +.colorBar a{display:block;width: 10px;height: 10px;border:1px solid #1006F1;border-radius: 3px; box-shadow:2px 2px 5px #d3d6da;opacity: 0.3} +.sectionBar{margin-top:15px;font-size: 12px;text-align: center;} +.sectionBar a{display:inline-block;width:10px;height:12px;color: #888;text-indent: -999px;opacity: 0.3} +.size1{background: url('images/size.png') 1px center no-repeat ;} +.size2{background: url('images/size.png') -10px center no-repeat;} +.size3{background: url('images/size.png') -22px center no-repeat;} +.size4{background: url('images/size.png') -35px center no-repeat;} + +.addImgH{position: relative;} +.addImgH_form{position: absolute;left: 18px;top: -1px;width: 75px;height: 21px;opacity: 0;cursor: pointer;} +.addImgH_form input{width: 100%;} +/*scrawl遮罩层 +*/ +.maskLayerNull{display: none;} +.maskLayer{position: absolute;top:0;left:0;width: 100%; height: 100%;opacity: 0.7; + background-color: #fff;text-align:center;font-weight:bold;line-height:300px;z-index: 1000;} +/*btn state +*/ +.previousStepH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/undoH.png');cursor: pointer;} +.previousStepH .text{color:#888;cursor:pointer;} +.previousStep .icon{display: inline-block;width:16px;height:16px;background-image: url('images/undo.png');cursor:default;} +.previousStep .text{color:#ccc;cursor:default;} + +.nextStepH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/redoH.png');cursor: pointer;} +.nextStepH .text{color:#888;cursor:pointer;} +.nextStep .icon{display: inline-block;width:16px;height:16px;background-image: url('images/redo.png');cursor:default;} +.nextStep .text{color:#ccc;cursor:default;} + +.clearBoardH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/emptyH.png');cursor: pointer;} +.clearBoardH .text{color:#888;cursor:pointer;} +.clearBoard .icon{display: inline-block;width:16px;height:16px;background-image: url('images/empty.png');cursor:default;} +.clearBoard .text{color:#ccc;cursor:default;} + +.scaleBoardH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/scaleH.png');cursor: pointer;} +.scaleBoardH .text{color:#888;cursor:pointer;} +.scaleBoard .icon{display: inline-block;width:16px;height:16px;background-image: url('images/scale.png');cursor:default;} +.scaleBoard .text{color:#ccc;cursor:default;} + +.removeImgH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/delimgH.png');cursor: pointer;} +.removeImgH .text{color:#888;cursor:pointer;} +.removeImg .icon{display: inline-block;width:16px;height:16px;background-image: url('images/delimg.png');cursor:default;} +.removeImg .text{color:#ccc;cursor:default;} + +.addImgH .icon{vertical-align:top;display: inline-block;width:16px;height:16px;background-image: url('images/addimg.png')} +.addImgH .text{color:#888;cursor:pointer;} +/*icon +*/ +.brushIcon{display: inline-block;width:16px;height:16px;background-image: url('images/brush.png')} +.eraserIcon{display: inline-block;width:16px;height:16px;background-image: url('images/eraser.png')} + + diff --git a/public/vendor/ueditor/dialogs/scrawl/scrawl.html b/public/vendor/ueditor/dialogs/scrawl/scrawl.html new file mode 100644 index 0000000..9371abd --- /dev/null +++ b/public/vendor/ueditor/dialogs/scrawl/scrawl.html @@ -0,0 +1,95 @@ + + + + + + + + + + +
    +
    +
    + +
    +
    +
    + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    + + 1 + 3 + 5 + 7 +
    +
    + + 1 + 3 + 5 + 7 +
    +
    +
    + + +
    + +
    + +
    +
    +
    + + + + +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/scrawl/scrawl.js b/public/vendor/ueditor/dialogs/scrawl/scrawl.js new file mode 100644 index 0000000..e0c005e --- /dev/null +++ b/public/vendor/ueditor/dialogs/scrawl/scrawl.js @@ -0,0 +1,671 @@ +/** + * Created with JetBrains PhpStorm. + * User: xuheng + * Date: 12-5-22 + * Time: 上午11:38 + * To change this template use File | Settings | File Templates. + */ +var scrawl = function (options) { + options && this.initOptions(options); +}; +(function () { + var canvas = $G("J_brushBoard"), + context = canvas.getContext('2d'), + drawStep = [], //undo redo存储 + drawStepIndex = 0; //undo redo指针 + + scrawl.prototype = { + isScrawl:false, //是否涂鸦 + brushWidth:-1, //画笔粗细 + brushColor:"", //画笔颜色 + + initOptions:function (options) { + var me = this; + me.originalState(options);//初始页面状态 + me._buildToolbarColor(options.colorList);//动态生成颜色选择集合 + + me._addBoardListener(options.saveNum);//添加画板处理 + me._addOPerateListener(options.saveNum);//添加undo redo clearBoard处理 + me._addColorBarListener();//添加颜色选择处理 + me._addBrushBarListener();//添加画笔大小处理 + me._addEraserBarListener();//添加橡皮大小处理 + me._addAddImgListener();//添加增添背景图片处理 + me._addRemoveImgListenter();//删除背景图片处理 + me._addScalePicListenter();//添加缩放处理 + me._addClearSelectionListenter();//添加清楚选中状态处理 + + me._originalColorSelect(options.drawBrushColor);//初始化颜色选中 + me._originalBrushSelect(options.drawBrushSize);//初始化画笔选中 + me._clearSelection();//清楚选中状态 + }, + + originalState:function (options) { + var me = this; + + me.brushWidth = options.drawBrushSize;//同步画笔粗细 + me.brushColor = options.drawBrushColor;//同步画笔颜色 + + context.lineWidth = me.brushWidth;//初始画笔大小 + context.strokeStyle = me.brushColor;//初始画笔颜色 + context.fillStyle = "transparent";//初始画布背景颜色 + context.lineCap = "round";//去除锯齿 + context.fill(); + }, + _buildToolbarColor:function (colorList) { + var tmp = null, arr = []; + arr.push(""); + for (var i = 0, color; color = colorList[i++];) { + if ((i - 1) % 5 == 0) { + if (i != 1) { + arr.push(""); + } + arr.push(""); + } + tmp = '#' + color; + arr.push(""); + } + arr.push("
    "); + $G("J_colorBar").innerHTML = arr.join(""); + }, + + _addBoardListener:function (saveNum) { + var me = this, + margin = 0, + startX = -1, + startY = -1, + isMouseDown = false, + isMouseMove = false, + isMouseUp = false, + buttonPress = 0, button, flag = ''; + + margin = parseInt(domUtils.getComputedStyle($G("J_wrap"), "margin-left")); + drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height)); + drawStepIndex += 1; + + domUtils.on(canvas, ["mousedown", "mousemove", "mouseup", "mouseout"], function (e) { + button = browser.webkit ? e.which : buttonPress; + switch (e.type) { + case 'mousedown': + buttonPress = 1; + flag = 1; + isMouseDown = true; + isMouseUp = false; + isMouseMove = false; + me.isScrawl = true; + startX = e.clientX - margin;//10为外边距总和 + startY = e.clientY - margin; + context.beginPath(); + break; + case 'mousemove' : + if (!flag && button == 0) { + return; + } + if (!flag && button) { + startX = e.clientX - margin;//10为外边距总和 + startY = e.clientY - margin; + context.beginPath(); + flag = 1; + } + if (isMouseUp || !isMouseDown) { + return; + } + var endX = e.clientX - margin, + endY = e.clientY - margin; + + context.moveTo(startX, startY); + context.lineTo(endX, endY); + context.stroke(); + startX = endX; + startY = endY; + isMouseMove = true; + break; + case 'mouseup': + buttonPress = 0; + if (!isMouseDown)return; + if (!isMouseMove) { + context.arc(startX, startY, context.lineWidth, 0, Math.PI * 2, false); + context.fillStyle = context.strokeStyle; + context.fill(); + } + context.closePath(); + me._saveOPerate(saveNum); + isMouseDown = false; + isMouseMove = false; + isMouseUp = true; + startX = -1; + startY = -1; + break; + case 'mouseout': + flag = ''; + buttonPress = 0; + if (button == 1) return; + context.closePath(); + break; + } + }); + }, + _addOPerateListener:function (saveNum) { + var me = this; + domUtils.on($G("J_previousStep"), "click", function () { + if (drawStepIndex > 1) { + drawStepIndex -= 1; + context.clearRect(0, 0, context.canvas.width, context.canvas.height); + context.putImageData(drawStep[drawStepIndex - 1], 0, 0); + me.btn2Highlight("J_nextStep"); + drawStepIndex == 1 && me.btn2disable("J_previousStep"); + } + }); + domUtils.on($G("J_nextStep"), "click", function () { + if (drawStepIndex > 0 && drawStepIndex < drawStep.length) { + context.clearRect(0, 0, context.canvas.width, context.canvas.height); + context.putImageData(drawStep[drawStepIndex], 0, 0); + drawStepIndex += 1; + me.btn2Highlight("J_previousStep"); + drawStepIndex == drawStep.length && me.btn2disable("J_nextStep"); + } + }); + domUtils.on($G("J_clearBoard"), "click", function () { + context.clearRect(0, 0, context.canvas.width, context.canvas.height); + drawStep = []; + me._saveOPerate(saveNum); + drawStepIndex = 1; + me.isScrawl = false; + me.btn2disable("J_previousStep"); + me.btn2disable("J_nextStep"); + me.btn2disable("J_clearBoard"); + }); + }, + _addColorBarListener:function () { + var me = this; + domUtils.on($G("J_colorBar"), "click", function (e) { + var target = me.getTarget(e), + color = target.title; + if (!!color) { + me._addColorSelect(target); + + me.brushColor = color; + context.globalCompositeOperation = "source-over"; + context.lineWidth = me.brushWidth; + context.strokeStyle = color; + } + }); + }, + _addBrushBarListener:function () { + var me = this; + domUtils.on($G("J_brushBar"), "click", function (e) { + var target = me.getTarget(e), + size = browser.ie ? target.innerText : target.text; + if (!!size) { + me._addBESelect(target); + + context.globalCompositeOperation = "source-over"; + context.lineWidth = parseInt(size); + context.strokeStyle = me.brushColor; + me.brushWidth = context.lineWidth; + } + }); + }, + _addEraserBarListener:function () { + var me = this; + domUtils.on($G("J_eraserBar"), "click", function (e) { + var target = me.getTarget(e), + size = browser.ie ? target.innerText : target.text; + if (!!size) { + me._addBESelect(target); + + context.lineWidth = parseInt(size); + context.globalCompositeOperation = "destination-out"; + context.strokeStyle = "#FFF"; + } + }); + }, + _addAddImgListener:function () { + var file = $G("J_imgTxt"); + if (!window.FileReader) { + $G("J_addImg").style.display = 'none'; + $G("J_removeImg").style.display = 'none'; + $G("J_sacleBoard").style.display = 'none'; + } + domUtils.on(file, "change", function (e) { + var frm = file.parentNode; + addMaskLayer(lang.backgroundUploading); + + var target = e.target || e.srcElement, + reader = new FileReader(); + reader.onload = function(evt){ + var target = evt.target || evt.srcElement; + ue_callback(target.result, 'SUCCESS'); + }; + reader.readAsDataURL(target.files[0]); + frm.reset(); + }); + }, + _addRemoveImgListenter:function () { + var me = this; + domUtils.on($G("J_removeImg"), "click", function () { + $G("J_picBoard").innerHTML = ""; + me.btn2disable("J_removeImg"); + me.btn2disable("J_sacleBoard"); + }); + }, + _addScalePicListenter:function () { + domUtils.on($G("J_sacleBoard"), "click", function () { + var picBoard = $G("J_picBoard"), + scaleCon = $G("J_scaleCon"), + img = picBoard.children[0]; + + if (img) { + if (!scaleCon) { + picBoard.style.cssText = "position:relative;z-index:999;"+picBoard.style.cssText; + img.style.cssText = "position: absolute;top:" + (canvas.height - img.height) / 2 + "px;left:" + (canvas.width - img.width) / 2 + "px;"; + var scale = new ScaleBoy(); + picBoard.appendChild(scale.init()); + scale.startScale(img); + } else { + if (scaleCon.style.visibility == "visible") { + scaleCon.style.visibility = "hidden"; + picBoard.style.position = ""; + picBoard.style.zIndex = ""; + } else { + scaleCon.style.visibility = "visible"; + picBoard.style.cssText += "position:relative;z-index:999"; + } + } + } + }); + }, + _addClearSelectionListenter:function () { + var doc = document; + domUtils.on(doc, 'mousemove', function (e) { + if (browser.ie && browser.version < 11) + doc.selection.clear(); + else + window.getSelection().removeAllRanges(); + }); + }, + _clearSelection:function () { + var list = ["J_operateBar", "J_colorBar", "J_brushBar", "J_eraserBar", "J_picBoard"]; + for (var i = 0, group; group = list[i++];) { + domUtils.unSelectable($G(group)); + } + }, + + _saveOPerate:function (saveNum) { + var me = this; + if (drawStep.length <= saveNum) { + if(drawStepIndex"); + } + scale.innerHTML = arr.join(""); + return scale; + } + + var rect = [ + //[left, top, width, height] + [1, 1, -1, -1], + [0, 1, 0, -1], + [0, 1, 1, -1], + [1, 0, -1, 0], + [0, 0, 1, 0], + [1, 0, -1, 1], + [0, 0, 0, 1], + [0, 0, 1, 1] + ]; + ScaleBoy.prototype = { + init:function () { + _appendStyle(); + var me = this, + scale = me.dom = _getDom(); + + me.scaleMousemove.fp = me; + domUtils.on(scale, 'mousedown', function (e) { + var target = e.target || e.srcElement; + me.start = {x:e.clientX, y:e.clientY}; + if (target.className.indexOf('hand') != -1) { + me.dir = target.className.replace('hand', ''); + } + domUtils.on(document.body, 'mousemove', me.scaleMousemove); + e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true; + }); + domUtils.on(document.body, 'mouseup', function (e) { + if (me.start) { + domUtils.un(document.body, 'mousemove', me.scaleMousemove); + if (me.moved) { + me.updateScaledElement({position:{x:scale.style.left, y:scale.style.top}, size:{w:scale.style.width, h:scale.style.height}}); + } + delete me.start; + delete me.moved; + delete me.dir; + } + }); + return scale; + }, + startScale:function (objElement) { + var me = this, Idom = me.dom; + + Idom.style.cssText = 'visibility:visible;top:' + objElement.style.top + ';left:' + objElement.style.left + ';width:' + objElement.offsetWidth + 'px;height:' + objElement.offsetHeight + 'px;'; + me.scalingElement = objElement; + }, + updateScaledElement:function (objStyle) { + var cur = this.scalingElement, + pos = objStyle.position, + size = objStyle.size; + if (pos) { + typeof pos.x != 'undefined' && (cur.style.left = pos.x); + typeof pos.y != 'undefined' && (cur.style.top = pos.y); + } + if (size) { + size.w && (cur.style.width = size.w); + size.h && (cur.style.height = size.h); + } + }, + updateStyleByDir:function (dir, offset) { + var me = this, + dom = me.dom, tmp; + + rect['def'] = [1, 1, 0, 0]; + if (rect[dir][0] != 0) { + tmp = parseInt(dom.style.left) + offset.x; + dom.style.left = me._validScaledProp('left', tmp) + 'px'; + } + if (rect[dir][1] != 0) { + tmp = parseInt(dom.style.top) + offset.y; + dom.style.top = me._validScaledProp('top', tmp) + 'px'; + } + if (rect[dir][2] != 0) { + tmp = dom.clientWidth + rect[dir][2] * offset.x; + dom.style.width = me._validScaledProp('width', tmp) + 'px'; + } + if (rect[dir][3] != 0) { + tmp = dom.clientHeight + rect[dir][3] * offset.y; + dom.style.height = me._validScaledProp('height', tmp) + 'px'; + } + if (dir === 'def') { + me.updateScaledElement({position:{x:dom.style.left, y:dom.style.top}}); + } + }, + scaleMousemove:function (e) { + var me = arguments.callee.fp, + start = me.start, + dir = me.dir || 'def', + offset = {x:e.clientX - start.x, y:e.clientY - start.y}; + + me.updateStyleByDir(dir, offset); + arguments.callee.fp.start = {x:e.clientX, y:e.clientY}; + arguments.callee.fp.moved = 1; + }, + _validScaledProp:function (prop, value) { + var ele = this.dom, + wrap = $G("J_picBoard"); + + value = isNaN(value) ? 0 : value; + switch (prop) { + case 'left': + return value < 0 ? 0 : (value + ele.clientWidth) > wrap.clientWidth ? wrap.clientWidth - ele.clientWidth : value; + case 'top': + return value < 0 ? 0 : (value + ele.clientHeight) > wrap.clientHeight ? wrap.clientHeight - ele.clientHeight : value; + case 'width': + return value <= 0 ? 1 : (value + ele.offsetLeft) > wrap.clientWidth ? wrap.clientWidth - ele.offsetLeft : value; + case 'height': + return value <= 0 ? 1 : (value + ele.offsetTop) > wrap.clientHeight ? wrap.clientHeight - ele.offsetTop : value; + } + } + }; +})(); + +//后台回调 +function ue_callback(url, state) { + var doc = document, + picBorard = $G("J_picBoard"), + img = doc.createElement("img"); + + //图片缩放 + function scale(img, max, oWidth, oHeight) { + var width = 0, height = 0, percent, ow = img.width || oWidth, oh = img.height || oHeight; + if (ow > max || oh > max) { + if (ow >= oh) { + if (width = ow - max) { + percent = (width / ow).toFixed(2); + img.height = oh - oh * percent; + img.width = max; + } + } else { + if (height = oh - max) { + percent = (height / oh).toFixed(2); + img.width = ow - ow * percent; + img.height = max; + } + } + } + } + + //移除遮罩层 + removeMaskLayer(); + //状态响应 + if (state == "SUCCESS") { + picBorard.innerHTML = ""; + img.onload = function () { + scale(this, 300); + picBorard.appendChild(img); + + var obj = new scrawl(); + obj.btn2Highlight("J_removeImg"); + //trace 2457 + obj.btn2Highlight("J_sacleBoard"); + }; + img.src = url; + } else { + alert(state); + } +} +//去掉遮罩层 +function removeMaskLayer() { + var maskLayer = $G("J_maskLayer"); + maskLayer.className = "maskLayerNull"; + maskLayer.innerHTML = ""; + dialog.buttons[0].setDisabled(false); +} +//添加遮罩层 +function addMaskLayer(html) { + var maskLayer = $G("J_maskLayer"); + dialog.buttons[0].setDisabled(true); + maskLayer.className = "maskLayer"; + maskLayer.innerHTML = html; +} +//执行确认按钮方法 +function exec(scrawlObj) { + if (scrawlObj.isScrawl) { + addMaskLayer(lang.scrawlUpLoading); + var base64 = scrawlObj.getCanvasData(); + if (!!base64) { + var options = { + timeout:100000, + onsuccess:function (xhr) { + if (!scrawlObj.isCancelScrawl) { + var responseObj; + responseObj = eval("(" + xhr.responseText + ")"); + if (responseObj.state == "SUCCESS") { + var imgObj = {}, + url = editor.options.scrawlUrlPrefix + responseObj.url; + imgObj.src = url; + imgObj._src = url; + imgObj.alt = responseObj.original || ''; + imgObj.title = responseObj.title || ''; + editor.execCommand("insertImage", imgObj); + dialog.close(); + } else { + alert(responseObj.state); + } + + } + }, + onerror:function () { + alert(lang.imageError); + dialog.close(); + } + }; + options[editor.getOpt('scrawlFieldName')] = base64; + + var actionUrl = editor.getActionUrl(editor.getOpt('scrawlActionName')), + params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '', + url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + params); + ajax.request(url, options); + } + } else { + addMaskLayer(lang.noScarwl + "   "); + } +} + diff --git a/public/vendor/ueditor/dialogs/searchreplace/searchreplace.html b/public/vendor/ueditor/dialogs/searchreplace/searchreplace.html new file mode 100644 index 0000000..b91f190 --- /dev/null +++ b/public/vendor/ueditor/dialogs/searchreplace/searchreplace.html @@ -0,0 +1,102 @@ + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    :
    + +
    + + +
    +   +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    :
    :
    + +
    + + + + +
    +   +
    + +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/searchreplace/searchreplace.js b/public/vendor/ueditor/dialogs/searchreplace/searchreplace.js new file mode 100644 index 0000000..1b52857 --- /dev/null +++ b/public/vendor/ueditor/dialogs/searchreplace/searchreplace.js @@ -0,0 +1,164 @@ +/** + * Created with JetBrains PhpStorm. + * User: xuheng + * Date: 12-9-26 + * Time: 下午12:29 + * To change this template use File | Settings | File Templates. + */ + +//清空上次查选的痕迹 +editor.firstForSR = 0; +editor.currentRangeForSR = null; +//给tab注册切换事件 +/** + * tab点击处理事件 + * @param tabHeads + * @param tabBodys + * @param obj + */ +function clickHandler( tabHeads,tabBodys,obj ) { + //head样式更改 + for ( var k = 0, len = tabHeads.length; k < len; k++ ) { + tabHeads[k].className = ""; + } + obj.className = "focus"; + //body显隐 + var tabSrc = obj.getAttribute( "tabSrc" ); + for ( var j = 0, length = tabBodys.length; j < length; j++ ) { + var body = tabBodys[j], + id = body.getAttribute( "id" ); + if ( id != tabSrc ) { + body.style.zIndex = 1; + } else { + body.style.zIndex = 200; + } + } + +} + +/** + * TAB切换 + * @param tabParentId tab的父节点ID或者对象本身 + */ +function switchTab( tabParentId ) { + var tabElements = $G( tabParentId ).children, + tabHeads = tabElements[0].children, + tabBodys = tabElements[1].children; + + for ( var i = 0, length = tabHeads.length; i < length; i++ ) { + var head = tabHeads[i]; + if ( head.className === "focus" )clickHandler(tabHeads,tabBodys, head ); + head.onclick = function () { + clickHandler(tabHeads,tabBodys,this); + } + } +} +$G('searchtab').onmousedown = function(){ + $G('search-msg').innerHTML = ''; + $G('replace-msg').innerHTML = '' +} +//是否区分大小写 +function getMatchCase(id) { + return $G(id).checked ? true : false; +} +//查找 +$G("nextFindBtn").onclick = function (txt, dir, mcase) { + var findtxt = $G("findtxt").value, obj; + if (!findtxt) { + return false; + } + obj = { + searchStr:findtxt, + dir:1, + casesensitive:getMatchCase("matchCase") + }; + if (!frCommond(obj)) { + var bk = editor.selection.getRange().createBookmark(); + $G('search-msg').innerHTML = lang.getEnd; + editor.selection.getRange().moveToBookmark(bk).select(); + + + } +}; +$G("nextReplaceBtn").onclick = function (txt, dir, mcase) { + var findtxt = $G("findtxt1").value, obj; + if (!findtxt) { + return false; + } + obj = { + searchStr:findtxt, + dir:1, + casesensitive:getMatchCase("matchCase1") + }; + frCommond(obj); +}; +$G("preFindBtn").onclick = function (txt, dir, mcase) { + var findtxt = $G("findtxt").value, obj; + if (!findtxt) { + return false; + } + obj = { + searchStr:findtxt, + dir:-1, + casesensitive:getMatchCase("matchCase") + }; + if (!frCommond(obj)) { + $G('search-msg').innerHTML = lang.getStart; + } +}; +$G("preReplaceBtn").onclick = function (txt, dir, mcase) { + var findtxt = $G("findtxt1").value, obj; + if (!findtxt) { + return false; + } + obj = { + searchStr:findtxt, + dir:-1, + casesensitive:getMatchCase("matchCase1") + }; + frCommond(obj); +}; +//替换 +$G("repalceBtn").onclick = function () { + var findtxt = $G("findtxt1").value.replace(/^\s|\s$/g, ""), obj, + replacetxt = $G("replacetxt").value.replace(/^\s|\s$/g, ""); + if (!findtxt) { + return false; + } + if (findtxt == replacetxt || (!getMatchCase("matchCase1") && findtxt.toLowerCase() == replacetxt.toLowerCase())) { + return false; + } + obj = { + searchStr:findtxt, + dir:1, + casesensitive:getMatchCase("matchCase1"), + replaceStr:replacetxt + }; + frCommond(obj); +}; +//全部替换 +$G("repalceAllBtn").onclick = function () { + var findtxt = $G("findtxt1").value.replace(/^\s|\s$/g, ""), obj, + replacetxt = $G("replacetxt").value.replace(/^\s|\s$/g, ""); + if (!findtxt) { + return false; + } + if (findtxt == replacetxt || (!getMatchCase("matchCase1") && findtxt.toLowerCase() == replacetxt.toLowerCase())) { + return false; + } + obj = { + searchStr:findtxt, + casesensitive:getMatchCase("matchCase1"), + replaceStr:replacetxt, + all:true + }; + var num = frCommond(obj); + if (num) { + $G('replace-msg').innerHTML = lang.countMsg.replace("{#count}", num); + } +}; +//执行 +var frCommond = function (obj) { + return editor.execCommand("searchreplace", obj); +}; +switchTab("searchtab"); \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/snapscreen/snapscreen.html b/public/vendor/ueditor/dialogs/snapscreen/snapscreen.html new file mode 100644 index 0000000..cf8209e --- /dev/null +++ b/public/vendor/ueditor/dialogs/snapscreen/snapscreen.html @@ -0,0 +1,58 @@ + + + + + + + + + +
    +

    +
    +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/spechars/spechars.html b/public/vendor/ueditor/dialogs/spechars/spechars.html new file mode 100644 index 0000000..0b5c416 --- /dev/null +++ b/public/vendor/ueditor/dialogs/spechars/spechars.html @@ -0,0 +1,21 @@ + + + + + + + + + +
    +
    +
    + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/spechars/spechars.js b/public/vendor/ueditor/dialogs/spechars/spechars.js new file mode 100644 index 0000000..f4c155e --- /dev/null +++ b/public/vendor/ueditor/dialogs/spechars/spechars.js @@ -0,0 +1,57 @@ +/** + * Created with JetBrains PhpStorm. + * User: xuheng + * Date: 12-9-26 + * Time: 下午1:09 + * To change this template use File | Settings | File Templates. + */ +var charsContent = [ + { name:"tsfh", title:lang.tsfh, content:toArray("、,。,·,ˉ,ˇ,¨,〃,々,—,~,‖,…,‘,’,“,”,〔,〕,〈,〉,《,》,「,」,『,』,〖,〗,【,】,±,×,÷,∶,∧,∨,∑,∏,∪,∩,∈,∷,√,⊥,∥,∠,⌒,⊙,∫,∮,≡,≌,≈,∽,∝,≠,≮,≯,≤,≥,∞,∵,∴,♂,♀,°,′,″,℃,$,¤,¢,£,‰,§,№,☆,★,○,●,◎,◇,◆,□,■,△,▲,※,→,←,↑,↓,〓,〡,〢,〣,〤,〥,〦,〧,〨,〩,㊣,㎎,㎏,㎜,㎝,㎞,㎡,㏄,㏎,㏑,㏒,㏕,︰,¬,¦,℡,ˊ,ˋ,˙,–,―,‥,‵,℅,℉,↖,↗,↘,↙,∕,∟,∣,≒,≦,≧,⊿,═,║,╒,╓,╔,╕,╖,╗,╘,╙,╚,╛,╜,╝,╞,╟,╠,╡,╢,╣,╤,╥,╦,╧,╨,╩,╪,╫,╬,╭,╮,╯,╰,╱,╲,╳,▁,▂,▃,▄,▅,▆,▇,�,█,▉,▊,▋,▌,▍,▎,▏,▓,▔,▕,▼,▽,◢,◣,◤,◥,☉,⊕,〒,〝,〞")}, + { name:"lmsz", title:lang.lmsz, content:toArray("ⅰ,ⅱ,ⅲ,ⅳ,ⅴ,ⅵ,ⅶ,ⅷ,ⅸ,ⅹ,Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ,Ⅻ")}, + { name:"szfh", title:lang.szfh, content:toArray("⒈,⒉,⒊,⒋,⒌,⒍,⒎,⒏,⒐,⒑,⒒,⒓,⒔,⒕,⒖,⒗,⒘,⒙,⒚,⒛,⑴,⑵,⑶,⑷,⑸,⑹,⑺,⑻,⑼,⑽,⑾,⑿,⒀,⒁,⒂,⒃,⒄,⒅,⒆,⒇,①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,㈠,㈡,㈢,㈣,㈤,㈥,㈦,㈧,㈨,㈩")}, + { name:"rwfh", title:lang.rwfh, content:toArray("ぁ,あ,ぃ,い,ぅ,う,ぇ,え,ぉ,お,か,が,き,ぎ,く,ぐ,け,げ,こ,ご,さ,ざ,し,じ,す,ず,せ,ぜ,そ,ぞ,た,だ,ち,ぢ,っ,つ,づ,て,で,と,ど,な,に,ぬ,ね,の,は,ば,ぱ,ひ,び,ぴ,ふ,ぶ,ぷ,へ,べ,ぺ,ほ,ぼ,ぽ,ま,み,む,め,も,ゃ,や,ゅ,ゆ,ょ,よ,ら,り,る,れ,ろ,ゎ,わ,ゐ,ゑ,を,ん,ァ,ア,ィ,イ,ゥ,ウ,ェ,エ,ォ,オ,カ,ガ,キ,ギ,ク,グ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン,ヴ,ヵ,ヶ")}, + { name:"xlzm", title:lang.xlzm, content:toArray("Α,Β,Γ,Δ,Ε,Ζ,Η,Θ,Ι,Κ,Λ,Μ,Ν,Ξ,Ο,Π,Ρ,Σ,Τ,Υ,Φ,Χ,Ψ,Ω,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,τ,υ,φ,χ,ψ,ω")}, + { name:"ewzm", title:lang.ewzm, content:toArray("А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я")}, + { name:"pyzm", title:lang.pyzm, content:toArray("ā,á,ǎ,à,ē,é,ě,è,ī,í,ǐ,ì,ō,ó,ǒ,ò,ū,ú,ǔ,ù,ǖ,ǘ,ǚ,ǜ,ü")}, + { name:"yyyb", title:lang.yyyb, content:toArray("i:,i,e,æ,ʌ,ə:,ə,u:,u,ɔ:,ɔ,a:,ei,ai,ɔi,əu,au,iə,εə,uə,p,t,k,b,d,g,f,s,ʃ,θ,h,v,z,ʒ,ð,tʃ,tr,ts,dʒ,dr,dz,m,n,ŋ,l,r,w,j,")}, + { name:"zyzf", title:lang.zyzf, content:toArray("ㄅ,ㄆ,ㄇ,ㄈ,ㄉ,ㄊ,ㄋ,ㄌ,ㄍ,ㄎ,ㄏ,ㄐ,ㄑ,ㄒ,ㄓ,ㄔ,ㄕ,ㄖ,ㄗ,ㄘ,ㄙ,ㄚ,ㄛ,ㄜ,ㄝ,ㄞ,ㄟ,ㄠ,ㄡ,ㄢ,ㄣ,ㄤ,ㄥ,ㄦ,ㄧ,ㄨ")} +]; +(function createTab(content) { + for (var i = 0, ci; ci = content[i++];) { + var span = document.createElement("span"); + span.setAttribute("tabSrc", ci.name); + span.innerHTML = ci.title; + if (i == 1)span.className = "focus"; + domUtils.on(span, "click", function () { + var tmps = $G("tabHeads").children; + for (var k = 0, sk; sk = tmps[k++];) { + sk.className = ""; + } + tmps = $G("tabBodys").children; + for (var k = 0, sk; sk = tmps[k++];) { + sk.style.display = "none"; + } + this.className = "focus"; + $G(this.getAttribute("tabSrc")).style.display = ""; + }); + $G("tabHeads").appendChild(span); + domUtils.insertAfter(span, document.createTextNode("\n")); + var div = document.createElement("div"); + div.id = ci.name; + div.style.display = (i == 1) ? "" : "none"; + var cons = ci.content; + for (var j = 0, con; con = cons[j++];) { + var charSpan = document.createElement("span"); + charSpan.innerHTML = con; + domUtils.on(charSpan, "click", function () { + editor.execCommand("insertHTML", this.innerHTML); + dialog.close(); + }); + div.appendChild(charSpan); + } + $G("tabBodys").appendChild(div); + } +})(charsContent); +function toArray(str) { + return str.split(","); +} diff --git a/public/vendor/ueditor/dialogs/table/dragicon.png b/public/vendor/ueditor/dialogs/table/dragicon.png new file mode 100644 index 0000000..f26203b Binary files /dev/null and b/public/vendor/ueditor/dialogs/table/dragicon.png differ diff --git a/public/vendor/ueditor/dialogs/table/edittable.css b/public/vendor/ueditor/dialogs/table/edittable.css new file mode 100644 index 0000000..c6f9396 --- /dev/null +++ b/public/vendor/ueditor/dialogs/table/edittable.css @@ -0,0 +1,84 @@ +body{ + overflow: hidden; + width: 540px; +} +.wrapper { + margin: 10px auto 0; + font-size: 12px; + overflow: hidden; + width: 520px; + height: 315px; +} + +.clear { + clear: both; +} + +.wrapper .left { + float: left; + margin-left: 10px;; +} + +.wrapper .right { + float: right; + border-left: 2px dotted #EDEDED; + padding-left: 15px; +} + +.section { + margin-bottom: 15px; + width: 240px; + overflow: hidden; +} + +.section h3 { + font-weight: bold; + padding: 5px 0; + margin-bottom: 10px; + border-bottom: 1px solid #EDEDED; + font-size: 12px; +} + +.section ul { + list-style: none; + overflow: hidden; + clear: both; + +} + +.section li { + float: left; + width: 120px;; +} + +.section .tone { + width: 80px;; +} + +.section .preview { + width: 220px; +} + +.section .preview table { + text-align: center; + vertical-align: middle; + color: #666; +} + +.section .preview caption { + font-weight: bold; +} + +.section .preview td { + border-width: 1px; + border-style: solid; + height: 22px; +} + +.section .preview th { + border-style: solid; + border-color: #DDD; + border-width: 2px 1px 1px 1px; + height: 22px; + background-color: #F7F7F7; +} \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/table/edittable.html b/public/vendor/ueditor/dialogs/table/edittable.html new file mode 100644 index 0000000..3c412fb --- /dev/null +++ b/public/vendor/ueditor/dialogs/table/edittable.html @@ -0,0 +1,64 @@ + + + + + + + + +
    +
    +
    +

    +
      +
    • + +
    • +
    • + +
    • +
    +
      +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +

    +
      +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +

    +
      +
    • + + +
    • +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/table/edittable.js b/public/vendor/ueditor/dialogs/table/edittable.js new file mode 100644 index 0000000..11dbee7 --- /dev/null +++ b/public/vendor/ueditor/dialogs/table/edittable.js @@ -0,0 +1,237 @@ +/** + * Created with JetBrains PhpStorm. + * User: xuheng + * Date: 12-12-19 + * Time: 下午4:55 + * To change this template use File | Settings | File Templates. + */ +(function () { + var title = $G("J_title"), + titleCol = $G("J_titleCol"), + caption = $G("J_caption"), + sorttable = $G("J_sorttable"), + autoSizeContent = $G("J_autoSizeContent"), + autoSizePage = $G("J_autoSizePage"), + tone = $G("J_tone"), + me, + preview = $G("J_preview"); + + var editTable = function () { + me = this; + me.init(); + }; + editTable.prototype = { + init:function () { + var colorPiker = new UE.ui.ColorPicker({ + editor:editor + }), + colorPop = new UE.ui.Popup({ + editor:editor, + content:colorPiker + }); + + title.checked = editor.queryCommandState("inserttitle") == -1; + titleCol.checked = editor.queryCommandState("inserttitlecol") == -1; + caption.checked = editor.queryCommandState("insertcaption") == -1; + sorttable.checked = editor.queryCommandState("enablesort") == 1; + + var enablesortState = editor.queryCommandState("enablesort"), + disablesortState = editor.queryCommandState("disablesort"); + + sorttable.checked = !!(enablesortState < 0 && disablesortState >=0); + sorttable.disabled = !!(enablesortState < 0 && disablesortState < 0); + sorttable.title = enablesortState < 0 && disablesortState < 0 ? lang.errorMsg:''; + + me.createTable(title.checked, titleCol.checked, caption.checked); + me.setAutoSize(); + me.setColor(me.getColor()); + + domUtils.on(title, "click", me.titleHanler); + domUtils.on(titleCol, "click", me.titleColHanler); + domUtils.on(caption, "click", me.captionHanler); + domUtils.on(sorttable, "click", me.sorttableHanler); + domUtils.on(autoSizeContent, "click", me.autoSizeContentHanler); + domUtils.on(autoSizePage, "click", me.autoSizePageHanler); + + domUtils.on(tone, "click", function () { + colorPop.showAnchor(tone); + }); + domUtils.on(document, 'mousedown', function () { + colorPop.hide(); + }); + colorPiker.addListener("pickcolor", function () { + me.setColor(arguments[1]); + colorPop.hide(); + }); + colorPiker.addListener("picknocolor", function () { + me.setColor(""); + colorPop.hide(); + }); + }, + + createTable:function (hasTitle, hasTitleCol, hasCaption) { + var arr = [], + sortSpan = '^'; + arr.push(""); + if (hasCaption) { + arr.push("") + } + if (hasTitle) { + arr.push(""); + if(hasTitleCol) { arr.push(""); } + for (var j = 0; j < 5; j++) { + arr.push(""); + } + arr.push(""); + } + for (var i = 0; i < 6; i++) { + arr.push(""); + if(hasTitleCol) { arr.push("") } + for (var k = 0; k < 5; k++) { + arr.push("") + } + arr.push(""); + } + arr.push("
    " + lang.captionName + "
    " + lang.titleName + "" + lang.titleName + "
    " + lang.titleName + "" + lang.cellsName + "
    "); + preview.innerHTML = arr.join(""); + this.updateSortSpan(); + }, + titleHanler:function () { + var example = $G("J_example"), + frg=document.createDocumentFragment(), + color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"), + colCount = example.rows[0].children.length; + + if (title.checked) { + example.insertRow(0); + for (var i = 0, node; i < colCount; i++) { + node = document.createElement("th"); + node.innerHTML = lang.titleName; + frg.appendChild(node); + } + example.rows[0].appendChild(frg); + + } else { + domUtils.remove(example.rows[0]); + } + me.setColor(color); + me.updateSortSpan(); + }, + titleColHanler:function () { + var example = $G("J_example"), + color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"), + colArr = example.rows, + colCount = colArr.length; + + if (titleCol.checked) { + for (var i = 0, node; i < colCount; i++) { + node = document.createElement("th"); + node.innerHTML = lang.titleName; + colArr[i].insertBefore(node, colArr[i].children[0]); + } + } else { + for (var i = 0; i < colCount; i++) { + domUtils.remove(colArr[i].children[0]); + } + } + me.setColor(color); + me.updateSortSpan(); + }, + captionHanler:function () { + var example = $G("J_example"); + if (caption.checked) { + var row = document.createElement('caption'); + row.innerHTML = lang.captionName; + example.insertBefore(row, example.firstChild); + } else { + domUtils.remove(domUtils.getElementsByTagName(example, 'caption')[0]); + } + }, + sorttableHanler:function(){ + me.updateSortSpan(); + }, + autoSizeContentHanler:function () { + var example = $G("J_example"); + example.removeAttribute("width"); + }, + autoSizePageHanler:function () { + var example = $G("J_example"); + var tds = example.getElementsByTagName(example, "td"); + utils.each(tds, function (td) { + td.removeAttribute("width"); + }); + example.setAttribute('width', '100%'); + }, + updateSortSpan: function(){ + var example = $G("J_example"), + row = example.rows[0]; + + var spans = domUtils.getElementsByTagName(example,"span"); + utils.each(spans,function(span){ + span.parentNode.removeChild(span); + }); + if (sorttable.checked) { + utils.each(row.cells, function(cell, i){ + var span = document.createElement("span"); + span.innerHTML = "^"; + cell.appendChild(span); + }); + } + }, + getColor:function () { + var start = editor.selection.getStart(), color, + cell = domUtils.findParentByTagName(start, ["td", "th", "caption"], true); + color = cell && domUtils.getComputedStyle(cell, "border-color"); + if (!color) color = "#DDDDDD"; + return color; + }, + setColor:function (color) { + var example = $G("J_example"), + arr = domUtils.getElementsByTagName(example, "td").concat( + domUtils.getElementsByTagName(example, "th"), + domUtils.getElementsByTagName(example, "caption") + ); + + tone.value = color; + utils.each(arr, function (node) { + node.style.borderColor = color; + }); + + }, + setAutoSize:function () { + var me = this; + autoSizePage.checked = true; + me.autoSizePageHanler(); + } + }; + + new editTable; + + dialog.onok = function () { + editor.__hasEnterExecCommand = true; + + var checks = { + title:"inserttitle deletetitle", + titleCol:"inserttitlecol deletetitlecol", + caption:"insertcaption deletecaption", + sorttable:"enablesort disablesort" + }; + editor.fireEvent('saveScene'); + for(var i in checks){ + var cmds = checks[i].split(" "), + input = $G("J_" + i); + if(input["checked"]){ + editor.queryCommandState(cmds[0])!=-1 &&editor.execCommand(cmds[0]); + }else{ + editor.queryCommandState(cmds[1])!=-1 &&editor.execCommand(cmds[1]); + } + } + + editor.execCommand("edittable", tone.value); + autoSizeContent.checked ?editor.execCommand('adaptbytext') : ""; + autoSizePage.checked ? editor.execCommand("adaptbywindow") : ""; + editor.fireEvent('saveScene'); + + editor.__hasEnterExecCommand = false; + }; +})(); \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/table/edittd.html b/public/vendor/ueditor/dialogs/table/edittd.html new file mode 100644 index 0000000..49a52f7 --- /dev/null +++ b/public/vendor/ueditor/dialogs/table/edittd.html @@ -0,0 +1,61 @@ + + + + + + + + +
    + + +
    + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/table/edittip.html b/public/vendor/ueditor/dialogs/table/edittip.html new file mode 100644 index 0000000..954f7bb --- /dev/null +++ b/public/vendor/ueditor/dialogs/table/edittip.html @@ -0,0 +1,33 @@ + + + + 表格删除提示 + + + + +
    +
    + +
    +
    + +
    +
    + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/template/config.js b/public/vendor/ueditor/dialogs/template/config.js new file mode 100644 index 0000000..417b8f7 --- /dev/null +++ b/public/vendor/ueditor/dialogs/template/config.js @@ -0,0 +1,42 @@ +/** + * Created with JetBrains PhpStorm. + * User: xuheng + * Date: 12-8-8 + * Time: 下午2:00 + * To change this template use File | Settings | File Templates. + */ +var templates = [ + { + "pre":"pre0.png", + 'title':lang.blank, + 'preHtml':'

     欢迎使用UEditor!

    ', + "html":'

    欢迎使用UEditor!

    ' + + }, + { + "pre":"pre1.png", + 'title':lang.blog, + 'preHtml':'

    深入理解Range

    UEditor二次开发

    什么是Range

    对于“插入”选项卡上的库,在设计时都充分考虑了其中的项与文档整体外观的协调性。


    Range能干什么

    在“开始”选项卡上,通过从快速样式库中为所选文本选择一种外观,您可以方便地更改文档中所选文本的格式。

    ', + "html":'

    [键入文档标题]

    [键入文档副标题]

    [标题 1]

    对于“插入”选项卡上的库,在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。

    [标题 2]

    在“开始”选项卡上,通过从快速样式库中为所选文本选择一种外观,您可以方便地更改文档中所选文本的格式。 您还可以使用“开始”选项卡上的其他控件来直接设置文本格式。大多数控件都允许您选择是使用当前主题外观,还是使用某种直接指定的格式。

    [标题 3]

    对于“插入”选项卡上的库,在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。


    ' + + }, + { + "pre":"pre2.png", + 'title':lang.resume, + 'preHtml':'

    WEB前端开发简历


    联系电话:[键入您的电话]

    电子邮件:[键入您的电子邮件地址]

    家庭住址:[键入您的地址]

    目标职位

    WEB前端研发工程师

    学历

    1. [起止时间] [学校名称] [所学专业] [所获学位]

    工作经验


    ', + "html":'

    [此处键入简历标题]


    【此处插入照片】


    联系电话:[键入您的电话]


    电子邮件:[键入您的电子邮件地址]


    家庭住址:[键入您的地址]


    目标职位

    [此处键入您的期望职位]

    学历

    1. [键入起止时间] [键入学校名称] [键入所学专业] [键入所获学位]

    2. [键入起止时间] [键入学校名称] [键入所学专业] [键入所获学位]

    工作经验

    1. [键入起止时间] [键入公司名称] [键入职位名称]

      1. [键入负责项目] [键入项目简介]

      2. [键入负责项目] [键入项目简介]

    2. [键入起止时间] [键入公司名称] [键入职位名称]

      1. [键入负责项目] [键入项目简介]

    掌握技能

     [这里可以键入您所掌握的技能]

    ' + + }, + { + "pre":"pre3.png", + 'title':lang.richText, + 'preHtml':'

    [此处键入文章标题]

    图文混排方法

    图片居左,文字围绕图片排版

    方法:在文字前面插入图片,设置居左对齐,然后即可在右边输入多行文


    还有没有什么其他的环绕方式呢?这里是居右环绕


    欢迎大家多多尝试,为UEditor提供更多高质量模板!

    ', + "html":'


    [此处键入文章标题]

    图文混排方法

    1. 图片居左,文字围绕图片排版

    方法:在文字前面插入图片,设置居左对齐,然后即可在右边输入多行文本


    2. 图片居右,文字围绕图片排版

    方法:在文字前面插入图片,设置居右对齐,然后即可在左边输入多行文本


    3. 图片居中环绕排版

    方法:亲,这个真心没有办法。。。



    还有没有什么其他的环绕方式呢?这里是居右环绕


    欢迎大家多多尝试,为UEditor提供更多高质量模板!


    占位


    占位


    占位


    占位


    占位



    ' + }, + { + "pre":"pre4.png", + 'title':lang.sciPapers, + 'preHtml':'

    [键入文章标题]

    摘要:这里可以输入很长很长很长很长很长很长很长很长很差的摘要

    标题 1

    这里可以输入很多内容,可以图文混排,可以有列表等。

    标题 2

    1. 列表 1

    2. 列表 2

      1. 多级列表 1

      2. 多级列表 2

    3. 列表 3

    标题 3

    来个文字图文混排的


    ', + 'html':'

    [键入文章标题]

    摘要:这里可以输入很长很长很长很长很长很长很长很长很差的摘要

    标题 1

    这里可以输入很多内容,可以图文混排,可以有列表等。

    标题 2

    来个列表瞅瞅:

    1. 列表 1

    2. 列表 2

      1. 多级列表 1

      2. 多级列表 2

    3. 列表 3

    标题 3

    来个文字图文混排的

    这里可以多行

    右边是图片

    绝对没有问题的,不信你也可以试试看


    ' + } +]; \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/template/images/bg.gif b/public/vendor/ueditor/dialogs/template/images/bg.gif new file mode 100644 index 0000000..8c1d10a Binary files /dev/null and b/public/vendor/ueditor/dialogs/template/images/bg.gif differ diff --git a/public/vendor/ueditor/dialogs/template/images/pre0.png b/public/vendor/ueditor/dialogs/template/images/pre0.png new file mode 100644 index 0000000..8f3c16a Binary files /dev/null and b/public/vendor/ueditor/dialogs/template/images/pre0.png differ diff --git a/public/vendor/ueditor/dialogs/template/images/pre1.png b/public/vendor/ueditor/dialogs/template/images/pre1.png new file mode 100644 index 0000000..5a03f96 Binary files /dev/null and b/public/vendor/ueditor/dialogs/template/images/pre1.png differ diff --git a/public/vendor/ueditor/dialogs/template/images/pre2.png b/public/vendor/ueditor/dialogs/template/images/pre2.png new file mode 100644 index 0000000..5a55672 Binary files /dev/null and b/public/vendor/ueditor/dialogs/template/images/pre2.png differ diff --git a/public/vendor/ueditor/dialogs/template/images/pre3.png b/public/vendor/ueditor/dialogs/template/images/pre3.png new file mode 100644 index 0000000..d852d29 Binary files /dev/null and b/public/vendor/ueditor/dialogs/template/images/pre3.png differ diff --git a/public/vendor/ueditor/dialogs/template/images/pre4.png b/public/vendor/ueditor/dialogs/template/images/pre4.png new file mode 100644 index 0000000..0d7bc72 Binary files /dev/null and b/public/vendor/ueditor/dialogs/template/images/pre4.png differ diff --git a/public/vendor/ueditor/dialogs/template/template.css b/public/vendor/ueditor/dialogs/template/template.css new file mode 100644 index 0000000..6c1608d --- /dev/null +++ b/public/vendor/ueditor/dialogs/template/template.css @@ -0,0 +1,18 @@ +.wrap{ padding: 5px;font-size: 14px;} +.left{width:425px;float: left;} +.right{width:160px;border: 1px solid #ccc;float: right;padding: 5px;margin-right: 5px;} +.right .pre{height: 332px;overflow-y: auto;} +.right .preitem{border: white 1px solid;margin: 5px 0;padding: 2px 0;} +.right .preitem:hover{background-color: lemonChiffon;cursor: pointer;border: #ccc 1px solid;} +.right .preitem img{display: block;margin: 0 auto;width:100px;} +.clear{clear: both;} +.top{height:26px;line-height: 26px;padding: 5px;} +.bottom{height:320px;width:100%;margin: 0 auto;} +.transparent{ background: url("images/bg.gif") repeat;} +.bottom table tr td{border:1px dashed #ccc;} +#colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;} +.border_style1{padding:2px;border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;} +p{margin: 5px 0} +table{clear:both;margin-bottom:10px;border-collapse:collapse;word-break:break-all;} +li{clear:both} +ol{padding-left:40px; } \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/template/template.html b/public/vendor/ueditor/dialogs/template/template.html new file mode 100644 index 0000000..d9903a4 --- /dev/null +++ b/public/vendor/ueditor/dialogs/template/template.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + + + + diff --git a/public/vendor/ueditor/dialogs/template/template.js b/public/vendor/ueditor/dialogs/template/template.js new file mode 100644 index 0000000..80a334b --- /dev/null +++ b/public/vendor/ueditor/dialogs/template/template.js @@ -0,0 +1,53 @@ +/** + * Created with JetBrains PhpStorm. + * User: xuheng + * Date: 12-8-8 + * Time: 下午2:09 + * To change this template use File | Settings | File Templates. + */ +(function () { + var me = editor, + preview = $G( "preview" ), + preitem = $G( "preitem" ), + tmps = templates, + currentTmp; + var initPre = function () { + var str = ""; + for ( var i = 0, tmp; tmp = tmps[i++]; ) { + str += '
    '; + } + preitem.innerHTML = str; + }; + var pre = function ( n ) { + var tmp = tmps[n - 1]; + currentTmp = tmp; + clearItem(); + domUtils.setStyles( preitem.childNodes[n - 1], { + "background-color":"lemonChiffon", + "border":"#ccc 1px solid" + } ); + preview.innerHTML = tmp.preHtml ? tmp.preHtml : ""; + }; + var clearItem = function () { + var items = preitem.children; + for ( var i = 0, item; item = items[i++]; ) { + domUtils.setStyles( item, { + "background-color":"", + "border":"white 1px solid" + } ); + } + }; + dialog.onok = function () { + if ( !$G( "issave" ).checked ){ + me.execCommand( "cleardoc" ); + } + var obj = { + html:currentTmp && currentTmp.html + }; + me.execCommand( "template", obj ); + }; + initPre(); + window.pre = pre; + pre(2) + +})(); \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/video/images/bg.png b/public/vendor/ueditor/dialogs/video/images/bg.png new file mode 100644 index 0000000..580be0a Binary files /dev/null and b/public/vendor/ueditor/dialogs/video/images/bg.png differ diff --git a/public/vendor/ueditor/dialogs/video/images/center_focus.jpg b/public/vendor/ueditor/dialogs/video/images/center_focus.jpg new file mode 100644 index 0000000..262b029 Binary files /dev/null and b/public/vendor/ueditor/dialogs/video/images/center_focus.jpg differ diff --git a/public/vendor/ueditor/dialogs/video/images/file-icons.gif b/public/vendor/ueditor/dialogs/video/images/file-icons.gif new file mode 100644 index 0000000..d8c02c2 Binary files /dev/null and b/public/vendor/ueditor/dialogs/video/images/file-icons.gif differ diff --git a/public/vendor/ueditor/dialogs/video/images/file-icons.png b/public/vendor/ueditor/dialogs/video/images/file-icons.png new file mode 100644 index 0000000..3ff82c8 Binary files /dev/null and b/public/vendor/ueditor/dialogs/video/images/file-icons.png differ diff --git a/public/vendor/ueditor/dialogs/video/images/icons.gif b/public/vendor/ueditor/dialogs/video/images/icons.gif new file mode 100644 index 0000000..78459de Binary files /dev/null and b/public/vendor/ueditor/dialogs/video/images/icons.gif differ diff --git a/public/vendor/ueditor/dialogs/video/images/icons.png b/public/vendor/ueditor/dialogs/video/images/icons.png new file mode 100644 index 0000000..12e4700 Binary files /dev/null and b/public/vendor/ueditor/dialogs/video/images/icons.png differ diff --git a/public/vendor/ueditor/dialogs/video/images/image.png b/public/vendor/ueditor/dialogs/video/images/image.png new file mode 100644 index 0000000..19699f6 Binary files /dev/null and b/public/vendor/ueditor/dialogs/video/images/image.png differ diff --git a/public/vendor/ueditor/dialogs/video/images/left_focus.jpg b/public/vendor/ueditor/dialogs/video/images/left_focus.jpg new file mode 100644 index 0000000..7886d27 Binary files /dev/null and b/public/vendor/ueditor/dialogs/video/images/left_focus.jpg differ diff --git a/public/vendor/ueditor/dialogs/video/images/none_focus.jpg b/public/vendor/ueditor/dialogs/video/images/none_focus.jpg new file mode 100644 index 0000000..7c768dc Binary files /dev/null and b/public/vendor/ueditor/dialogs/video/images/none_focus.jpg differ diff --git a/public/vendor/ueditor/dialogs/video/images/progress.png b/public/vendor/ueditor/dialogs/video/images/progress.png new file mode 100644 index 0000000..717c486 Binary files /dev/null and b/public/vendor/ueditor/dialogs/video/images/progress.png differ diff --git a/public/vendor/ueditor/dialogs/video/images/right_focus.jpg b/public/vendor/ueditor/dialogs/video/images/right_focus.jpg new file mode 100644 index 0000000..173e10d Binary files /dev/null and b/public/vendor/ueditor/dialogs/video/images/right_focus.jpg differ diff --git a/public/vendor/ueditor/dialogs/video/images/success.gif b/public/vendor/ueditor/dialogs/video/images/success.gif new file mode 100644 index 0000000..8d4f311 Binary files /dev/null and b/public/vendor/ueditor/dialogs/video/images/success.gif differ diff --git a/public/vendor/ueditor/dialogs/video/images/success.png b/public/vendor/ueditor/dialogs/video/images/success.png new file mode 100644 index 0000000..94f968d Binary files /dev/null and b/public/vendor/ueditor/dialogs/video/images/success.png differ diff --git a/public/vendor/ueditor/dialogs/video/video.css b/public/vendor/ueditor/dialogs/video/video.css new file mode 100644 index 0000000..5870e7a --- /dev/null +++ b/public/vendor/ueditor/dialogs/video/video.css @@ -0,0 +1,635 @@ +@charset "utf-8"; +.wrapper{ width: 570px;_width:575px;margin: 10px auto; zoom:1;position: relative} +.tabbody{height: 335px;} +.tabbody .panel { + position: absolute; + width: 0; + height: 0; + background: #fff; + overflow: hidden; + display: none; +} +.tabbody .panel.focus { + width: 100%; + height: 335px; + display: block; +} + +.tabbody .panel table td{vertical-align: middle;} +#videoUrl { + width: 490px; + height: 21px; + line-height: 21px; + margin: 8px 5px; + background: #FFF; + border: 1px solid #d7d7d7; +} +#videoSearchTxt{margin-left:15px;background: #FFF;width:200px;height:21px;line-height:21px;border: 1px solid #d7d7d7;} +#searchList{width: 570px;overflow: auto;zoom:1;height: 270px;} +#searchList div{float: left;width: 120px;height: 135px;margin: 5px 15px;} +#searchList img{margin: 2px 8px;cursor: pointer;border: 2px solid #fff} /*不用缩略图*/ +#searchList p{margin-left: 10px;} +#videoType{ + width: 65px; + height: 23px; + line-height: 22px; + border: 1px solid #d7d7d7; +} +#videoSearchBtn,#videoSearchReset{ + /*width: 80px;*/ + height: 25px; + line-height: 25px; + background: #eee; + border: 1px solid #d7d7d7; + cursor: pointer; + padding: 0 5px; +} + + + +#preview{position: relative;width: 420px;padding:0;overflow: hidden; margin-left: 10px; _margin-left:5px; height: 280px;background-color: #ddd;float: left} +#preview .previewMsg {position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;background-color: #666;} +#preview .previewMsg span{display:block;margin: 125px auto 0 auto;text-align:center;font-size:18px;color:#fff;} +#preview .previewVideo {position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;} +.edui-video-wrapper fieldset{ + border: 1px solid #ddd; + padding-left: 5px; + margin-bottom: 20px; + padding-bottom: 5px; + width: 115px; +} + +#videoInfo {width: 120px;float: left;margin-left: 10px;_margin-left:7px;} +fieldset{ + border: 1px solid #ddd; + padding-left: 5px; + margin-bottom: 20px; + padding-bottom: 5px; + width: 115px; +} +fieldset legend{font-weight: bold;} +fieldset p{line-height: 30px;} +fieldset input.txt{ + width: 65px; + height: 21px; + line-height: 21px; + margin: 8px 5px; + background: #FFF; + border: 1px solid #d7d7d7; +} +label.url{font-weight: bold;margin-left: 5px;color: #06c;} +#videoFloat div{cursor:pointer;opacity: 0.5;filter: alpha(opacity = 50);margin:9px;_margin:5px;width:38px;height:36px;float:left;} +#videoFloat .focus{opacity: 1;filter: alpha(opacity = 100)} +span.view{display: inline-block;width: 30px;float: right;cursor: pointer;color: blue} + + + + +/* upload video */ +.tabbody #upload.panel { + width: 0; + height: 0; + overflow: hidden; + position: absolute !important; + clip: rect(1px, 1px, 1px, 1px); + background: #fff; + display: block; +} +.tabbody #upload.panel.focus { + width: 100%; + height: 335px; + display: block; + clip: auto; +} +#upload_alignment div{cursor:pointer;opacity: 0.5;filter: alpha(opacity = 50);margin:9px;_margin:5px;width:38px;height:36px;float:left;} +#upload_alignment .focus{opacity: 1;filter: alpha(opacity = 100)} +#upload_left { width:427px; float:left; } +#upload_left .controller { height: 30px; clear: both; } +#uploadVideoInfo{margin-top:10px;float:right;padding-right:8px;} + +#upload .queueList { + margin: 0; +} + +#upload p { + margin: 0; +} + +.element-invisible { + width: 0 !important; + height: 0 !important; + border: 0; + padding: 0; + margin: 0; + overflow: hidden; + position: absolute !important; + clip: rect(1px, 1px, 1px, 1px); +} + +#upload .placeholder { + margin: 10px; + margin-right:0; + border: 2px dashed #e6e6e6; + *border: 0px dashed #e6e6e6; + height: 161px; + padding-top: 150px; + text-align: center; + width: 97%; + float: left; + background: url(./images/image.png) center 70px no-repeat; + color: #cccccc; + font-size: 18px; + position: relative; + top:0; + *margin-left: 0; + *left: 10px; +} + +#upload .placeholder .webuploader-pick { + font-size: 18px; + background: #00b7ee; + border-radius: 3px; + line-height: 44px; + padding: 0 30px; + *width: 120px; + color: #fff; + display: inline-block; + margin: 0 auto 20px auto; + cursor: pointer; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); +} + +#upload .placeholder .webuploader-pick-hover { + background: #00a2d4; +} + + +#filePickerContainer { + text-align: center; +} + +#upload .placeholder .flashTip { + color: #666666; + font-size: 12px; + position: absolute; + width: 100%; + text-align: center; + bottom: 20px; +} + +#upload .placeholder .flashTip a { + color: #0785d1; + text-decoration: none; +} + +#upload .placeholder .flashTip a:hover { + text-decoration: underline; +} + +#upload .placeholder.webuploader-dnd-over { + border-color: #999999; +} + +#upload .filelist { + list-style: none; + margin: 0; + padding: 0; + overflow-x: hidden; + overflow-y: auto; + position: relative; + height: 285px; +} + +#upload .filelist:after { + content: ''; + display: block; + width: 0; + height: 0; + overflow: hidden; + clear: both; +} + +#upload .filelist li { + width: 113px; + height: 113px; + background: url(./images/bg.png); + text-align: center; + margin: 15px 0 0 20px; + *margin: 15px 0 0 15px; + position: relative; + display: block; + float: left; + overflow: hidden; + font-size: 12px; +} + +#upload .filelist li p.log { + position: relative; + top: -45px; +} + +#upload .filelist li p.title { + position: absolute; + top: 0; + left: 0; + width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + top: 5px; + text-indent: 5px; + text-align: left; +} + +#upload .filelist li p.progress { + position: absolute; + width: 100%; + bottom: 0; + left: 0; + height: 8px; + overflow: hidden; + z-index: 50; + margin: 0; + border-radius: 0; + background: none; + -webkit-box-shadow: 0 0 0; +} + +#upload .filelist li p.progress span { + display: none; + overflow: hidden; + width: 0; + height: 100%; + background: #1483d8 url(./images/progress.png) repeat-x; + + -webit-transition: width 200ms linear; + -moz-transition: width 200ms linear; + -o-transition: width 200ms linear; + -ms-transition: width 200ms linear; + transition: width 200ms linear; + + -webkit-animation: progressmove 2s linear infinite; + -moz-animation: progressmove 2s linear infinite; + -o-animation: progressmove 2s linear infinite; + -ms-animation: progressmove 2s linear infinite; + animation: progressmove 2s linear infinite; + + -webkit-transform: translateZ(0); +} + +@-webkit-keyframes progressmove { + 0% { + background-position: 0 0; + } + 100% { + background-position: 17px 0; + } +} + +@-moz-keyframes progressmove { + 0% { + background-position: 0 0; + } + 100% { + background-position: 17px 0; + } +} + +@keyframes progressmove { + 0% { + background-position: 0 0; + } + 100% { + background-position: 17px 0; + } +} + +#upload .filelist li p.imgWrap { + position: relative; + z-index: 2; + line-height: 113px; + vertical-align: middle; + overflow: hidden; + width: 113px; + height: 113px; + + -webkit-transform-origin: 50% 50%; + -moz-transform-origin: 50% 50%; + -o-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + transform-origin: 50% 50%; + + -webit-transition: 200ms ease-out; + -moz-transition: 200ms ease-out; + -o-transition: 200ms ease-out; + -ms-transition: 200ms ease-out; + transition: 200ms ease-out; +} +#upload .filelist li p.imgWrap.notimage { + margin-top: 0; + width: 111px; + height: 111px; + border: 1px #eeeeee solid; +} +#upload .filelist li p.imgWrap.notimage i.file-preview { + margin-top: 15px; +} + +#upload .filelist li img { + width: 100%; +} + +#upload .filelist li p.error { + background: #f43838; + color: #fff; + position: absolute; + bottom: 0; + left: 0; + height: 28px; + line-height: 28px; + width: 100%; + z-index: 100; + display:none; +} + +#upload .filelist li .success { + display: block; + position: absolute; + left: 0; + bottom: 0; + height: 40px; + width: 100%; + z-index: 200; + background: url(./images/success.png) no-repeat right bottom; + background-image: url(./images/success.gif) \9; +} + +#upload .filelist li.filePickerBlock { + width: 113px; + height: 113px; + background: url(./images/image.png) no-repeat center 12px; + border: 1px solid #eeeeee; + border-radius: 0; +} +#upload .filelist li.filePickerBlock div.webuploader-pick { + width: 100%; + height: 100%; + margin: 0; + padding: 0; + opacity: 0; + background: none; + font-size: 0; +} + +#upload .filelist div.file-panel { + position: absolute; + height: 0; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \0; + background: rgba(0, 0, 0, 0.5); + width: 100%; + top: 0; + left: 0; + overflow: hidden; + z-index: 300; +} + +#upload .filelist div.file-panel span { + width: 24px; + height: 24px; + display: inline; + float: right; + text-indent: -9999px; + overflow: hidden; + background: url(./images/icons.png) no-repeat; + background: url(./images/icons.gif) no-repeat \9; + margin: 5px 1px 1px; + cursor: pointer; + -webkit-tap-highlight-color: rgba(0,0,0,0); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +#upload .filelist div.file-panel span.rotateLeft { + display:none; + background-position: 0 -24px; +} + +#upload .filelist div.file-panel span.rotateLeft:hover { + background-position: 0 0; +} + +#upload .filelist div.file-panel span.rotateRight { + display:none; + background-position: -24px -24px; +} + +#upload .filelist div.file-panel span.rotateRight:hover { + background-position: -24px 0; +} + +#upload .filelist div.file-panel span.cancel { + background-position: -48px -24px; +} + +#upload .filelist div.file-panel span.cancel:hover { + background-position: -48px 0; +} + +#upload .statusBar { + height: 45px; + border-bottom: 1px solid #dadada; + margin: 0 10px; + padding: 0; + line-height: 45px; + vertical-align: middle; + position: relative; +} + +#upload .statusBar .progress { + border: 1px solid #1483d8; + width: 198px; + background: #fff; + height: 18px; + position: absolute; + top: 12px; + display: none; + text-align: center; + line-height: 18px; + color: #6dbfff; + margin: 0 10px 0 0; +} +#upload .statusBar .progress span.percentage { + width: 0; + height: 100%; + left: 0; + top: 0; + background: #1483d8; + position: absolute; +} +#upload .statusBar .progress span.text { + position: relative; + z-index: 10; +} + +#upload .statusBar .info { + display: inline-block; + font-size: 14px; + color: #666666; +} + +#upload .statusBar .btns { + position: absolute; + top: 7px; + right: 0; + line-height: 30px; +} + +#filePickerBtn { + display: inline-block; + float: left; +} +#upload .statusBar .btns .webuploader-pick, +#upload .statusBar .btns .uploadBtn, +#upload .statusBar .btns .uploadBtn.state-uploading, +#upload .statusBar .btns .uploadBtn.state-paused { + background: #ffffff; + border: 1px solid #cfcfcf; + color: #565656; + padding: 0 18px; + display: inline-block; + border-radius: 3px; + margin-left: 10px; + cursor: pointer; + font-size: 14px; + float: left; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#upload .statusBar .btns .webuploader-pick-hover, +#upload .statusBar .btns .uploadBtn:hover, +#upload .statusBar .btns .uploadBtn.state-uploading:hover, +#upload .statusBar .btns .uploadBtn.state-paused:hover { + background: #f0f0f0; +} + +#upload .statusBar .btns .uploadBtn, +#upload .statusBar .btns .uploadBtn.state-paused{ + background: #00b7ee; + color: #fff; + border-color: transparent; +} +#upload .statusBar .btns .uploadBtn:hover, +#upload .statusBar .btns .uploadBtn.state-paused:hover{ + background: #00a2d4; +} + +#upload .statusBar .btns .uploadBtn.disabled { + pointer-events: none; + filter:alpha(opacity=60); + -moz-opacity:0.6; + -khtml-opacity: 0.6; + opacity: 0.6; +} + + +/* 在线文件的文件预览图标 */ +i.file-preview { + display: block; + margin: 10px auto; + width: 70px; + height: 70px; + background-image: url("./images/file-icons.png"); + background-image: url("./images/file-icons.gif") \9; + background-position: -140px center; + background-repeat: no-repeat; +} +i.file-preview.file-type-dir{ + background-position: 0 center; +} +i.file-preview.file-type-file{ + background-position: -140px center; +} +i.file-preview.file-type-filelist{ + background-position: -210px center; +} +i.file-preview.file-type-zip, +i.file-preview.file-type-rar, +i.file-preview.file-type-7z, +i.file-preview.file-type-tar, +i.file-preview.file-type-gz, +i.file-preview.file-type-bz2{ + background-position: -280px center; +} +i.file-preview.file-type-xls, +i.file-preview.file-type-xlsx{ + background-position: -350px center; +} +i.file-preview.file-type-doc, +i.file-preview.file-type-docx{ + background-position: -420px center; +} +i.file-preview.file-type-ppt, +i.file-preview.file-type-pptx{ + background-position: -490px center; +} +i.file-preview.file-type-vsd{ + background-position: -560px center; +} +i.file-preview.file-type-pdf{ + background-position: -630px center; +} +i.file-preview.file-type-txt, +i.file-preview.file-type-md, +i.file-preview.file-type-json, +i.file-preview.file-type-htm, +i.file-preview.file-type-xml, +i.file-preview.file-type-html, +i.file-preview.file-type-js, +i.file-preview.file-type-css, +i.file-preview.file-type-php, +i.file-preview.file-type-jsp, +i.file-preview.file-type-asp{ + background-position: -700px center; +} +i.file-preview.file-type-apk{ + background-position: -770px center; +} +i.file-preview.file-type-exe{ + background-position: -840px center; +} +i.file-preview.file-type-ipa{ + background-position: -910px center; +} +i.file-preview.file-type-mp4, +i.file-preview.file-type-swf, +i.file-preview.file-type-mkv, +i.file-preview.file-type-avi, +i.file-preview.file-type-flv, +i.file-preview.file-type-mov, +i.file-preview.file-type-mpg, +i.file-preview.file-type-mpeg, +i.file-preview.file-type-ogv, +i.file-preview.file-type-webm, +i.file-preview.file-type-rm, +i.file-preview.file-type-rmvb{ + background-position: -980px center; +} +i.file-preview.file-type-ogg, +i.file-preview.file-type-wav, +i.file-preview.file-type-wmv, +i.file-preview.file-type-mid, +i.file-preview.file-type-mp3{ + background-position: -1050px center; +} +i.file-preview.file-type-jpg, +i.file-preview.file-type-jpeg, +i.file-preview.file-type-gif, +i.file-preview.file-type-bmp, +i.file-preview.file-type-png, +i.file-preview.file-type-psd{ + background-position: -140px center; +} \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/video/video.html b/public/vendor/ueditor/dialogs/video/video.html new file mode 100644 index 0000000..5007882 --- /dev/null +++ b/public/vendor/ueditor/dialogs/video/video.html @@ -0,0 +1,86 @@ + + + + + + + + + +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    + + + + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + 0% + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
      +
    • +
    +
    +
    +
    +
    + + + + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/video/video.js b/public/vendor/ueditor/dialogs/video/video.js new file mode 100644 index 0000000..8d99b9f --- /dev/null +++ b/public/vendor/ueditor/dialogs/video/video.js @@ -0,0 +1,789 @@ +/** + * Created by JetBrains PhpStorm. + * User: taoqili + * Date: 12-2-20 + * Time: 上午11:19 + * To change this template use File | Settings | File Templates. + */ + +(function(){ + + var video = {}, + uploadVideoList = [], + isModifyUploadVideo = false, + uploadFile; + + window.onload = function(){ + $focus($G("videoUrl")); + initTabs(); + initVideo(); + initUpload(); + }; + + /* 初始化tab标签 */ + function initTabs(){ + var tabs = $G('tabHeads').children; + for (var i = 0; i < tabs.length; i++) { + domUtils.on(tabs[i], "click", function (e) { + var j, bodyId, target = e.target || e.srcElement; + for (j = 0; j < tabs.length; j++) { + bodyId = tabs[j].getAttribute('data-content-id'); + if(tabs[j] == target){ + domUtils.addClass(tabs[j], 'focus'); + domUtils.addClass($G(bodyId), 'focus'); + }else { + domUtils.removeClasses(tabs[j], 'focus'); + domUtils.removeClasses($G(bodyId), 'focus'); + } + } + }); + } + } + + function initVideo(){ + createAlignButton( ["videoFloat", "upload_alignment"] ); + addUrlChangeListener($G("videoUrl")); + addOkListener(); + + //编辑视频时初始化相关信息 + (function(){ + var img = editor.selection.getRange().getClosedNode(),url; + if(img && img.className){ + var hasFakedClass = (img.className == "edui-faked-video"), + hasUploadClass = img.className.indexOf("edui-upload-video")!=-1; + if(hasFakedClass || hasUploadClass) { + $G("videoUrl").value = url = img.getAttribute("_url"); + $G("videoWidth").value = img.width; + $G("videoHeight").value = img.height; + var align = domUtils.getComputedStyle(img,"float"), + parentAlign = domUtils.getComputedStyle(img.parentNode,"text-align"); + updateAlignButton(parentAlign==="center"?"center":align); + } + if(hasUploadClass) { + isModifyUploadVideo = true; + } + } + createPreviewVideo(url); + })(); + } + + /** + * 监听确认和取消两个按钮事件,用户执行插入或者清空正在播放的视频实例操作 + */ + function addOkListener(){ + dialog.onok = function(){ + $G("preview").innerHTML = ""; + var currentTab = findFocus("tabHeads","tabSrc"); + switch(currentTab){ + case "video": + return insertSingle(); + break; + case "videoSearch": + return insertSearch("searchList"); + break; + case "upload": + return insertUpload(); + break; + } + }; + dialog.oncancel = function(){ + $G("preview").innerHTML = ""; + }; + } + + /** + * 依据传入的align值更新按钮信息 + * @param align + */ + function updateAlignButton( align ) { + var aligns = $G( "videoFloat" ).children; + for ( var i = 0, ci; ci = aligns[i++]; ) { + if ( ci.getAttribute( "name" ) == align ) { + if ( ci.className !="focus" ) { + ci.className = "focus"; + } + } else { + if ( ci.className =="focus" ) { + ci.className = ""; + } + } + } + } + + /** + * 将单个视频信息插入编辑器中 + */ + function insertSingle(){ + var width = $G("videoWidth"), + height = $G("videoHeight"), + url=$G('videoUrl').value, + align = findFocus("videoFloat","name"); + if(!url) return false; + if ( !checkNum( [width, height] ) ) return false; + editor.execCommand('insertvideo', { + url: convert_url(url), + width: width.value, + height: height.value, + align: align + }, isModifyUploadVideo ? 'upload':null); + } + + /** + * 将元素id下的所有代表视频的图片插入编辑器中 + * @param id + */ + function insertSearch(id){ + var imgs = domUtils.getElementsByTagName($G(id),"img"), + videoObjs=[]; + for(var i=0,img; img=imgs[i++];){ + if(img.getAttribute("selected")){ + videoObjs.push({ + url:img.getAttribute("ue_video_url"), + width:420, + height:280, + align:"none" + }); + } + } + editor.execCommand('insertvideo',videoObjs); + } + + /** + * 找到id下具有focus类的节点并返回该节点下的某个属性 + * @param id + * @param returnProperty + */ + function findFocus( id, returnProperty ) { + var tabs = $G( id ).children, + property; + for ( var i = 0, ci; ci = tabs[i++]; ) { + if ( ci.className=="focus" ) { + property = ci.getAttribute( returnProperty ); + break; + } + } + return property; + } + function convert_url(url){ + if ( !url ) return ''; + url = utils.trim(url) + .replace(/v\.youku\.com\/v_show\/id_([\w\-=]+)\.html/i, 'player.youku.com/player.php/sid/$1/v.swf') + .replace(/(www\.)?youtube\.com\/watch\?v=([\w\-]+)/i, "www.youtube.com/v/$2") + .replace(/youtu.be\/(\w+)$/i, "www.youtube.com/v/$1") + .replace(/v\.ku6\.com\/.+\/([\w\.]+)\.html.*$/i, "player.ku6.com/refer/$1/v.swf") + .replace(/www\.56\.com\/u\d+\/v_([\w\-]+)\.html/i, "player.56.com/v_$1.swf") + .replace(/www.56.com\/w\d+\/play_album\-aid\-\d+_vid\-([^.]+)\.html/i, "player.56.com/v_$1.swf") + .replace(/v\.pps\.tv\/play_([\w]+)\.html.*$/i, "player.pps.tv/player/sid/$1/v.swf") + .replace(/www\.letv\.com\/ptv\/vplay\/([\d]+)\.html.*$/i, "i7.imgs.letv.com/player/swfPlayer.swf?id=$1&autoplay=0") + .replace(/www\.tudou\.com\/programs\/view\/([\w\-]+)\/?/i, "www.tudou.com/v/$1") + .replace(/v\.qq\.com\/cover\/[\w]+\/[\w]+\/([\w]+)\.html/i, "static.video.qq.com/TPout.swf?vid=$1") + .replace(/v\.qq\.com\/.+[\?\&]vid=([^&]+).*$/i, "static.video.qq.com/TPout.swf?vid=$1") + .replace(/my\.tv\.sohu\.com\/[\w]+\/[\d]+\/([\d]+)\.shtml.*$/i, "share.vrs.sohu.com/my/v.swf&id=$1"); + + return url; + } + + /** + * 检测传入的所有input框中输入的长宽是否是正数 + * @param nodes input框集合, + */ + function checkNum( nodes ) { + for ( var i = 0, ci; ci = nodes[i++]; ) { + var value = ci.value; + if ( !isNumber( value ) && value) { + alert( lang.numError ); + ci.value = ""; + ci.focus(); + return false; + } + } + return true; + } + + /** + * 数字判断 + * @param value + */ + function isNumber( value ) { + return /(0|^[1-9]\d*$)/.test( value ); + } + + /** + * 创建图片浮动选择按钮 + * @param ids + */ + function createAlignButton( ids ) { + for ( var i = 0, ci; ci = ids[i++]; ) { + var floatContainer = $G( ci ), + nameMaps = {"none":lang['default'], "left":lang.floatLeft, "right":lang.floatRight, "center":lang.block}; + for ( var j in nameMaps ) { + var div = document.createElement( "div" ); + div.setAttribute( "name", j ); + if ( j == "none" ) div.className="focus"; + div.style.cssText = "background:url(images/" + j + "_focus.jpg);"; + div.setAttribute( "title", nameMaps[j] ); + floatContainer.appendChild( div ); + } + switchSelect( ci ); + } + } + + /** + * 选择切换 + * @param selectParentId + */ + function switchSelect( selectParentId ) { + var selects = $G( selectParentId ).children; + for ( var i = 0, ci; ci = selects[i++]; ) { + domUtils.on( ci, "click", function () { + for ( var j = 0, cj; cj = selects[j++]; ) { + cj.className = ""; + cj.removeAttribute && cj.removeAttribute( "class" ); + } + this.className = "focus"; + } ) + } + } + + /** + * 监听url改变事件 + * @param url + */ + function addUrlChangeListener(url){ + if (browser.ie) { + url.onpropertychange = function () { + createPreviewVideo( this.value ); + } + } else { + url.addEventListener( "input", function () { + createPreviewVideo( this.value ); + }, false ); + } + } + + /** + * 根据url生成视频预览 + * @param url + */ + function createPreviewVideo(url){ + if ( !url )return; + + var conUrl = convert_url(url); + + $G("preview").innerHTML = '
    '+lang.urlError+'
    '+ + '' + + ''; + } + + + /* 插入上传视频 */ + function insertUpload(){ + var videoObjs=[], + uploadDir = editor.getOpt('videoUrlPrefix'), + width = $G('upload_width').value || 420, + height = $G('upload_height').value || 280, + align = findFocus("upload_alignment","name") || 'none'; + for(var key in uploadVideoList) { + var file = uploadVideoList[key]; + videoObjs.push({ + url: uploadDir + file.url, + width:width, + height:height, + align:align + }); + } + + var count = uploadFile.getQueueCount(); + if (count) { + $('.info', '#queueList').html('' + '还有2个未上传文件'.replace(/[\d]/, count) + ''); + return false; + } else { + editor.execCommand('insertvideo', videoObjs, 'upload'); + } + } + + /*初始化上传标签*/ + function initUpload(){ + uploadFile = new UploadFile('queueList'); + } + + + /* 上传附件 */ + function UploadFile(target) { + this.$wrap = target.constructor == String ? $('#' + target) : $(target); + this.init(); + } + UploadFile.prototype = { + init: function () { + this.fileList = []; + this.initContainer(); + this.initUploader(); + }, + initContainer: function () { + this.$queue = this.$wrap.find('.filelist'); + }, + /* 初始化容器 */ + initUploader: function () { + var _this = this, + $ = jQuery, // just in case. Make sure it's not an other libaray. + $wrap = _this.$wrap, + // 图片容器 + $queue = $wrap.find('.filelist'), + // 状态栏,包括进度和控制按钮 + $statusBar = $wrap.find('.statusBar'), + // 文件总体选择信息。 + $info = $statusBar.find('.info'), + // 上传按钮 + $upload = $wrap.find('.uploadBtn'), + // 上传按钮 + $filePickerBtn = $wrap.find('.filePickerBtn'), + // 上传按钮 + $filePickerBlock = $wrap.find('.filePickerBlock'), + // 没选择文件之前的内容。 + $placeHolder = $wrap.find('.placeholder'), + // 总体进度条 + $progress = $statusBar.find('.progress').hide(), + // 添加的文件数量 + fileCount = 0, + // 添加的文件总大小 + fileSize = 0, + // 优化retina, 在retina下这个值是2 + ratio = window.devicePixelRatio || 1, + // 缩略图大小 + thumbnailWidth = 113 * ratio, + thumbnailHeight = 113 * ratio, + // 可能有pedding, ready, uploading, confirm, done. + state = '', + // 所有文件的进度信息,key为file id + percentages = {}, + supportTransition = (function () { + var s = document.createElement('p').style, + r = 'transition' in s || + 'WebkitTransition' in s || + 'MozTransition' in s || + 'msTransition' in s || + 'OTransition' in s; + s = null; + return r; + })(), + // WebUploader实例 + uploader, + actionUrl = editor.getActionUrl(editor.getOpt('videoActionName')), + fileMaxSize = editor.getOpt('videoMaxSize'), + acceptExtensions = (editor.getOpt('videoAllowFiles') || []).join('').replace(/\./g, ',').replace(/^[,]/, '');; + + if (!WebUploader.Uploader.support()) { + $('#filePickerReady').after($('
    ').html(lang.errorNotSupport)).hide(); + return; + } else if (!editor.getOpt('videoActionName')) { + $('#filePickerReady').after($('
    ').html(lang.errorLoadConfig)).hide(); + return; + } + + uploader = _this.uploader = WebUploader.create({ + pick: { + id: '#filePickerReady', + label: lang.uploadSelectFile + }, + swf: '../../third-party/webuploader/Uploader.swf', + server: actionUrl, + fileVal: editor.getOpt('videoFieldName'), + duplicate: true, + fileSingleSizeLimit: fileMaxSize, + compress: false + }); + uploader.addButton({ + id: '#filePickerBlock' + }); + uploader.addButton({ + id: '#filePickerBtn', + label: lang.uploadAddFile + }); + + setState('pedding'); + + // 当有文件添加进来时执行,负责view的创建 + function addFile(file) { + var $li = $('
  • ' + + '

    ' + file.name + '

    ' + + '

    ' + + '

    ' + + '
  • '), + + $btns = $('
    ' + + '' + lang.uploadDelete + '' + + '' + lang.uploadTurnRight + '' + + '' + lang.uploadTurnLeft + '
    ').appendTo($li), + $prgress = $li.find('p.progress span'), + $wrap = $li.find('p.imgWrap'), + $info = $('

    ').hide().appendTo($li), + + showError = function (code) { + switch (code) { + case 'exceed_size': + text = lang.errorExceedSize; + break; + case 'interrupt': + text = lang.errorInterrupt; + break; + case 'http': + text = lang.errorHttp; + break; + case 'not_allow_type': + text = lang.errorFileType; + break; + default: + text = lang.errorUploadRetry; + break; + } + $info.text(text).show(); + }; + + if (file.getStatus() === 'invalid') { + showError(file.statusText); + } else { + $wrap.text(lang.uploadPreview); + if ('|png|jpg|jpeg|bmp|gif|'.indexOf('|'+file.ext.toLowerCase()+'|') == -1) { + $wrap.empty().addClass('notimage').append('' + + '' + file.name + ''); + } else { + if (browser.ie && browser.version <= 7) { + $wrap.text(lang.uploadNoPreview); + } else { + uploader.makeThumb(file, function (error, src) { + if (error || !src || (/^data:/.test(src) && browser.ie && browser.version <= 7)) { + $wrap.text(lang.uploadNoPreview); + } else { + var $img = $(''); + $wrap.empty().append($img); + $img.on('error', function () { + $wrap.text(lang.uploadNoPreview); + }); + } + }, thumbnailWidth, thumbnailHeight); + } + } + percentages[ file.id ] = [ file.size, 0 ]; + file.rotation = 0; + + /* 检查文件格式 */ + if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) { + showError('not_allow_type'); + uploader.removeFile(file); + } + } + + file.on('statuschange', function (cur, prev) { + if (prev === 'progress') { + $prgress.hide().width(0); + } else if (prev === 'queued') { + $li.off('mouseenter mouseleave'); + $btns.remove(); + } + // 成功 + if (cur === 'error' || cur === 'invalid') { + showError(file.statusText); + percentages[ file.id ][ 1 ] = 1; + } else if (cur === 'interrupt') { + showError('interrupt'); + } else if (cur === 'queued') { + percentages[ file.id ][ 1 ] = 0; + } else if (cur === 'progress') { + $info.hide(); + $prgress.css('display', 'block'); + } else if (cur === 'complete') { + } + + $li.removeClass('state-' + prev).addClass('state-' + cur); + }); + + $li.on('mouseenter', function () { + $btns.stop().animate({height: 30}); + }); + $li.on('mouseleave', function () { + $btns.stop().animate({height: 0}); + }); + + $btns.on('click', 'span', function () { + var index = $(this).index(), + deg; + + switch (index) { + case 0: + uploader.removeFile(file); + return; + case 1: + file.rotation += 90; + break; + case 2: + file.rotation -= 90; + break; + } + + if (supportTransition) { + deg = 'rotate(' + file.rotation + 'deg)'; + $wrap.css({ + '-webkit-transform': deg, + '-mos-transform': deg, + '-o-transform': deg, + 'transform': deg + }); + } else { + $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')'); + } + + }); + + $li.insertBefore($filePickerBlock); + } + + // 负责view的销毁 + function removeFile(file) { + var $li = $('#' + file.id); + delete percentages[ file.id ]; + updateTotalProgress(); + $li.off().find('.file-panel').off().end().remove(); + } + + function updateTotalProgress() { + var loaded = 0, + total = 0, + spans = $progress.children(), + percent; + + $.each(percentages, function (k, v) { + total += v[ 0 ]; + loaded += v[ 0 ] * v[ 1 ]; + }); + + percent = total ? loaded / total : 0; + + spans.eq(0).text(Math.round(percent * 100) + '%'); + spans.eq(1).css('width', Math.round(percent * 100) + '%'); + updateStatus(); + } + + function setState(val, files) { + + if (val != state) { + + var stats = uploader.getStats(); + + $upload.removeClass('state-' + state); + $upload.addClass('state-' + val); + + switch (val) { + + /* 未选择文件 */ + case 'pedding': + $queue.addClass('element-invisible'); + $statusBar.addClass('element-invisible'); + $placeHolder.removeClass('element-invisible'); + $progress.hide(); $info.hide(); + uploader.refresh(); + break; + + /* 可以开始上传 */ + case 'ready': + $placeHolder.addClass('element-invisible'); + $queue.removeClass('element-invisible'); + $statusBar.removeClass('element-invisible'); + $progress.hide(); $info.show(); + $upload.text(lang.uploadStart); + uploader.refresh(); + break; + + /* 上传中 */ + case 'uploading': + $progress.show(); $info.hide(); + $upload.text(lang.uploadPause); + break; + + /* 暂停上传 */ + case 'paused': + $progress.show(); $info.hide(); + $upload.text(lang.uploadContinue); + break; + + case 'confirm': + $progress.show(); $info.hide(); + $upload.text(lang.uploadStart); + + stats = uploader.getStats(); + if (stats.successNum && !stats.uploadFailNum) { + setState('finish'); + return; + } + break; + + case 'finish': + $progress.hide(); $info.show(); + if (stats.uploadFailNum) { + $upload.text(lang.uploadRetry); + } else { + $upload.text(lang.uploadStart); + } + break; + } + + state = val; + updateStatus(); + + } + + if (!_this.getQueueCount()) { + $upload.addClass('disabled') + } else { + $upload.removeClass('disabled') + } + + } + + function updateStatus() { + var text = '', stats; + + if (state === 'ready') { + text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize)); + } else if (state === 'confirm') { + stats = uploader.getStats(); + if (stats.uploadFailNum) { + text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum); + } + } else { + stats = uploader.getStats(); + text = lang.updateStatusFinish.replace('_', fileCount). + replace('_KB', WebUploader.formatSize(fileSize)). + replace('_', stats.successNum); + + if (stats.uploadFailNum) { + text += lang.updateStatusError.replace('_', stats.uploadFailNum); + } + } + + $info.html(text); + } + + uploader.on('fileQueued', function (file) { + fileCount++; + fileSize += file.size; + + if (fileCount === 1) { + $placeHolder.addClass('element-invisible'); + $statusBar.show(); + } + + addFile(file); + }); + + uploader.on('fileDequeued', function (file) { + fileCount--; + fileSize -= file.size; + + removeFile(file); + updateTotalProgress(); + }); + + uploader.on('filesQueued', function (file) { + if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) { + setState('ready'); + } + updateTotalProgress(); + }); + + uploader.on('all', function (type, files) { + switch (type) { + case 'uploadFinished': + setState('confirm', files); + break; + case 'startUpload': + /* 添加额外的GET参数 */ + var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '', + url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + 'encode=utf-8&' + params); + uploader.option('server', url); + setState('uploading', files); + break; + case 'stopUpload': + setState('paused', files); + break; + } + }); + + uploader.on('uploadBeforeSend', function (file, data, header) { + //这里可以通过data对象添加POST参数 + header['X_Requested_With'] = 'XMLHttpRequest'; + }); + + uploader.on('uploadProgress', function (file, percentage) { + var $li = $('#' + file.id), + $percent = $li.find('.progress span'); + + $percent.css('width', percentage * 100 + '%'); + percentages[ file.id ][ 1 ] = percentage; + updateTotalProgress(); + }); + + uploader.on('uploadSuccess', function (file, ret) { + var $file = $('#' + file.id); + try { + var responseText = (ret._raw || ret), + json = utils.str2json(responseText); + if (json.state == 'SUCCESS') { + uploadVideoList.push({ + 'url': json.url, + 'type': json.type, + 'original':json.original + }); + $file.append(''); + } else { + $file.find('.error').text(json.state).show(); + } + } catch (e) { + $file.find('.error').text(lang.errorServerUpload).show(); + } + }); + + uploader.on('uploadError', function (file, code) { + }); + uploader.on('error', function (code, file) { + if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') { + addFile(file); + } + }); + uploader.on('uploadComplete', function (file, ret) { + }); + + $upload.on('click', function () { + if ($(this).hasClass('disabled')) { + return false; + } + + if (state === 'ready') { + uploader.upload(); + } else if (state === 'paused') { + uploader.upload(); + } else if (state === 'uploading') { + uploader.stop(); + } + }); + + $upload.addClass('state-' + state); + updateTotalProgress(); + }, + getQueueCount: function () { + var file, i, status, readyFile = 0, files = this.uploader.getFiles(); + for (i = 0; file = files[i++]; ) { + status = file.getStatus(); + if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++; + } + return readyFile; + }, + refresh: function(){ + this.uploader.refresh(); + } + }; + +})(); \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/webapp/webapp.html b/public/vendor/ueditor/dialogs/webapp/webapp.html new file mode 100644 index 0000000..1614377 --- /dev/null +++ b/public/vendor/ueditor/dialogs/webapp/webapp.html @@ -0,0 +1,53 @@ + + + + + + + + + +
    +
    +
    + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/wordimage/fClipboard_ueditor.swf b/public/vendor/ueditor/dialogs/wordimage/fClipboard_ueditor.swf new file mode 100644 index 0000000..ac5d27f Binary files /dev/null and b/public/vendor/ueditor/dialogs/wordimage/fClipboard_ueditor.swf differ diff --git a/public/vendor/ueditor/dialogs/wordimage/imageUploader.swf b/public/vendor/ueditor/dialogs/wordimage/imageUploader.swf new file mode 100644 index 0000000..2a554ca Binary files /dev/null and b/public/vendor/ueditor/dialogs/wordimage/imageUploader.swf differ diff --git a/public/vendor/ueditor/dialogs/wordimage/tangram.js b/public/vendor/ueditor/dialogs/wordimage/tangram.js new file mode 100644 index 0000000..2ebd8fd --- /dev/null +++ b/public/vendor/ueditor/dialogs/wordimage/tangram.js @@ -0,0 +1,1495 @@ +// Copyright (c) 2009, Baidu Inc. All rights reserved. +// +// Licensed under the BSD License +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http:// tangram.baidu.com/license.html +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + /** + * @namespace T Tangram七巧板 + * @name T + * @version 1.6.0 +*/ + +/** + * 声明baidu包 + * @author: allstar, erik, meizz, berg + */ +var T, + baidu = T = baidu || {version: "1.5.0"}; +baidu.guid = "$BAIDU$"; +baidu.$$ = window[baidu.guid] = window[baidu.guid] || {global:{}}; + +/** + * 使用flash资源封装的一些功能 + * @namespace baidu.flash + */ +baidu.flash = baidu.flash || {}; + +/** + * 操作dom的方法 + * @namespace baidu.dom + */ +baidu.dom = baidu.dom || {}; + + +/** + * 从文档中获取指定的DOM元素 + * @name baidu.dom.g + * @function + * @grammar baidu.dom.g(id) + * @param {string|HTMLElement} id 元素的id或DOM元素. + * @shortcut g,T.G + * @meta standard + * @see baidu.dom.q + * + * @return {HTMLElement|null} 获取的元素,查找不到时返回null,如果参数不合法,直接返回参数. + */ +baidu.dom.g = function(id) { + if (!id) return null; + if ('string' == typeof id || id instanceof String) { + return document.getElementById(id); + } else if (id.nodeName && (id.nodeType == 1 || id.nodeType == 9)) { + return id; + } + return null; +}; +baidu.g = baidu.G = baidu.dom.g; + + +/** + * 操作数组的方法 + * @namespace baidu.array + */ + +baidu.array = baidu.array || {}; + + +/** + * 遍历数组中所有元素 + * @name baidu.array.each + * @function + * @grammar baidu.array.each(source, iterator[, thisObject]) + * @param {Array} source 需要遍历的数组 + * @param {Function} iterator 对每个数组元素进行调用的函数,该函数有两个参数,第一个为数组元素,第二个为数组索引值,function (item, index)。 + * @param {Object} [thisObject] 函数调用时的this指针,如果没有此参数,默认是当前遍历的数组 + * @remark + * each方法不支持对Object的遍历,对Object的遍历使用baidu.object.each 。 + * @shortcut each + * @meta standard + * + * @returns {Array} 遍历的数组 + */ + +baidu.each = baidu.array.forEach = baidu.array.each = function (source, iterator, thisObject) { + var returnValue, item, i, len = source.length; + + if ('function' == typeof iterator) { + for (i = 0; i < len; i++) { + item = source[i]; + returnValue = iterator.call(thisObject || source, item, i); + + if (returnValue === false) { + break; + } + } + } + return source; +}; + +/** + * 对语言层面的封装,包括类型判断、模块扩展、继承基类以及对象自定义事件的支持。 + * @namespace baidu.lang + */ +baidu.lang = baidu.lang || {}; + + +/** + * 判断目标参数是否为function或Function实例 + * @name baidu.lang.isFunction + * @function + * @grammar baidu.lang.isFunction(source) + * @param {Any} source 目标参数 + * @version 1.2 + * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate + * @meta standard + * @returns {boolean} 类型判断结果 + */ +baidu.lang.isFunction = function (source) { + return '[object Function]' == Object.prototype.toString.call(source); +}; + +/** + * 判断目标参数是否string类型或String对象 + * @name baidu.lang.isString + * @function + * @grammar baidu.lang.isString(source) + * @param {Any} source 目标参数 + * @shortcut isString + * @meta standard + * @see baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate + * + * @returns {boolean} 类型判断结果 + */ +baidu.lang.isString = function (source) { + return '[object String]' == Object.prototype.toString.call(source); +}; +baidu.isString = baidu.lang.isString; + + +/** + * 判断浏览器类型和特性的属性 + * @namespace baidu.browser + */ +baidu.browser = baidu.browser || {}; + + +/** + * 判断是否为opera浏览器 + * @property opera opera版本号 + * @grammar baidu.browser.opera + * @meta standard + * @see baidu.browser.ie,baidu.browser.firefox,baidu.browser.safari,baidu.browser.chrome + * @returns {Number} opera版本号 + */ + +/** + * opera 从10开始不是用opera后面的字符串进行版本的判断 + * 在Browser identification最后添加Version + 数字进行版本标识 + * opera后面的数字保持在9.80不变 + */ +baidu.browser.opera = /opera(\/| )(\d+(\.\d+)?)(.+?(version\/(\d+(\.\d+)?)))?/i.test(navigator.userAgent) ? + ( RegExp["\x246"] || RegExp["\x242"] ) : undefined; + + +/** + * 在目标元素的指定位置插入HTML代码 + * @name baidu.dom.insertHTML + * @function + * @grammar baidu.dom.insertHTML(element, position, html) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {string} position 插入html的位置信息,取值为beforeBegin,afterBegin,beforeEnd,afterEnd + * @param {string} html 要插入的html + * @remark + * + * 对于position参数,大小写不敏感
    + * 参数的意思:beforeBegin<span>afterBegin this is span! beforeEnd</span> afterEnd
    + * 此外,如果使用本函数插入带有script标签的HTML字符串,script标签对应的脚本将不会被执行。 + * + * @shortcut insertHTML + * @meta standard + * + * @returns {HTMLElement} 目标元素 + */ +baidu.dom.insertHTML = function (element, position, html) { + element = baidu.dom.g(element); + var range,begin; + if (element.insertAdjacentHTML && !baidu.browser.opera) { + element.insertAdjacentHTML(position, html); + } else { + range = element.ownerDocument.createRange(); + position = position.toUpperCase(); + if (position == 'AFTERBEGIN' || position == 'BEFOREEND') { + range.selectNodeContents(element); + range.collapse(position == 'AFTERBEGIN'); + } else { + begin = position == 'BEFOREBEGIN'; + range[begin ? 'setStartBefore' : 'setEndAfter'](element); + range.collapse(begin); + } + range.insertNode(range.createContextualFragment(html)); + } + return element; +}; + +baidu.insertHTML = baidu.dom.insertHTML; + +/** + * 操作flash对象的方法,包括创建flash对象、获取flash对象以及判断flash插件的版本号 + * @namespace baidu.swf + */ +baidu.swf = baidu.swf || {}; + + +/** + * 浏览器支持的flash插件版本 + * @property version 浏览器支持的flash插件版本 + * @grammar baidu.swf.version + * @return {String} 版本号 + * @meta standard + */ +baidu.swf.version = (function () { + var n = navigator; + if (n.plugins && n.mimeTypes.length) { + var plugin = n.plugins["Shockwave Flash"]; + if (plugin && plugin.description) { + return plugin.description + .replace(/([a-zA-Z]|\s)+/, "") + .replace(/(\s)+r/, ".") + ".0"; + } + } else if (window.ActiveXObject && !window.opera) { + for (var i = 12; i >= 2; i--) { + try { + var c = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.' + i); + if (c) { + var version = c.GetVariable("$version"); + return version.replace(/WIN/g,'').replace(/,/g,'.'); + } + } catch(e) {} + } + } +})(); + +/** + * 操作字符串的方法 + * @namespace baidu.string + */ +baidu.string = baidu.string || {}; + + +/** + * 对目标字符串进行html编码 + * @name baidu.string.encodeHTML + * @function + * @grammar baidu.string.encodeHTML(source) + * @param {string} source 目标字符串 + * @remark + * 编码字符有5个:&<>"' + * @shortcut encodeHTML + * @meta standard + * @see baidu.string.decodeHTML + * + * @returns {string} html编码后的字符串 + */ +baidu.string.encodeHTML = function (source) { + return String(source) + .replace(/&/g,'&') + .replace(//g,'>') + .replace(/"/g, """) + .replace(/'/g, "'"); +}; + +baidu.encodeHTML = baidu.string.encodeHTML; + +/** + * 创建flash对象的html字符串 + * @name baidu.swf.createHTML + * @function + * @grammar baidu.swf.createHTML(options) + * + * @param {Object} options 创建flash的选项参数 + * @param {string} options.id 要创建的flash的标识 + * @param {string} options.url flash文件的url + * @param {String} options.errorMessage 未安装flash player或flash player版本号过低时的提示 + * @param {string} options.ver 最低需要的flash player版本号 + * @param {string} options.width flash的宽度 + * @param {string} options.height flash的高度 + * @param {string} options.align flash的对齐方式,允许值:middle/left/right/top/bottom + * @param {string} options.base 设置用于解析swf文件中的所有相对路径语句的基本目录或URL + * @param {string} options.bgcolor swf文件的背景色 + * @param {string} options.salign 设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值:l/r/t/b/tl/tr/bl/br + * @param {boolean} options.menu 是否显示右键菜单,允许值:true/false + * @param {boolean} options.loop 播放到最后一帧时是否重新播放,允许值: true/false + * @param {boolean} options.play flash是否在浏览器加载时就开始播放。允许值:true/false + * @param {string} options.quality 设置flash播放的画质,允许值:low/medium/high/autolow/autohigh/best + * @param {string} options.scale 设置flash内容如何缩放来适应设置的宽高。允许值:showall/noborder/exactfit + * @param {string} options.wmode 设置flash的显示模式。允许值:window/opaque/transparent + * @param {string} options.allowscriptaccess 设置flash与页面的通信权限。允许值:always/never/sameDomain + * @param {string} options.allownetworking 设置swf文件中允许使用的网络API。允许值:all/internal/none + * @param {boolean} options.allowfullscreen 是否允许flash全屏。允许值:true/false + * @param {boolean} options.seamlesstabbing 允许设置执行无缝跳格,从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值:true/false + * @param {boolean} options.devicefont 设置静态文本对象是否以设备字体呈现。允许值:true/false + * @param {boolean} options.swliveconnect 第一次加载flash时浏览器是否应启动Java。允许值:true/false + * @param {Object} options.vars 要传递给flash的参数,支持JSON或string类型。 + * + * @see baidu.swf.create + * @meta standard + * @returns {string} flash对象的html字符串 + */ +baidu.swf.createHTML = function (options) { + options = options || {}; + var version = baidu.swf.version, + needVersion = options['ver'] || '6.0.0', + vUnit1, vUnit2, i, k, len, item, tmpOpt = {}, + encodeHTML = baidu.string.encodeHTML; + for (k in options) { + tmpOpt[k] = options[k]; + } + options = tmpOpt; + if (version) { + version = version.split('.'); + needVersion = needVersion.split('.'); + for (i = 0; i < 3; i++) { + vUnit1 = parseInt(version[i], 10); + vUnit2 = parseInt(needVersion[i], 10); + if (vUnit2 < vUnit1) { + break; + } else if (vUnit2 > vUnit1) { + return ''; + } + } + } else { + return ''; + } + + var vars = options['vars'], + objProperties = ['classid', 'codebase', 'id', 'width', 'height', 'align']; + options['align'] = options['align'] || 'middle'; + options['classid'] = 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000'; + options['codebase'] = 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0'; + options['movie'] = options['url'] || ''; + delete options['vars']; + delete options['url']; + if ('string' == typeof vars) { + options['flashvars'] = vars; + } else { + var fvars = []; + for (k in vars) { + item = vars[k]; + fvars.push(k + "=" + encodeURIComponent(item)); + } + options['flashvars'] = fvars.join('&'); + } + var str = [''); + var params = { + 'wmode' : 1, + 'scale' : 1, + 'quality' : 1, + 'play' : 1, + 'loop' : 1, + 'menu' : 1, + 'salign' : 1, + 'bgcolor' : 1, + 'base' : 1, + 'allowscriptaccess' : 1, + 'allownetworking' : 1, + 'allowfullscreen' : 1, + 'seamlesstabbing' : 1, + 'devicefont' : 1, + 'swliveconnect' : 1, + 'flashvars' : 1, + 'movie' : 1 + }; + + for (k in options) { + item = options[k]; + k = k.toLowerCase(); + if (params[k] && (item || item === false || item === 0)) { + str.push(''); + } + } + options['src'] = options['movie']; + options['name'] = options['id']; + delete options['id']; + delete options['movie']; + delete options['classid']; + delete options['codebase']; + options['type'] = 'application/x-shockwave-flash'; + options['pluginspage'] = 'http://www.macromedia.com/go/getflashplayer'; + str.push(''); + + return str.join(''); +}; + + +/** + * 在页面中创建一个flash对象 + * @name baidu.swf.create + * @function + * @grammar baidu.swf.create(options[, container]) + * + * @param {Object} options 创建flash的选项参数 + * @param {string} options.id 要创建的flash的标识 + * @param {string} options.url flash文件的url + * @param {String} options.errorMessage 未安装flash player或flash player版本号过低时的提示 + * @param {string} options.ver 最低需要的flash player版本号 + * @param {string} options.width flash的宽度 + * @param {string} options.height flash的高度 + * @param {string} options.align flash的对齐方式,允许值:middle/left/right/top/bottom + * @param {string} options.base 设置用于解析swf文件中的所有相对路径语句的基本目录或URL + * @param {string} options.bgcolor swf文件的背景色 + * @param {string} options.salign 设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值:l/r/t/b/tl/tr/bl/br + * @param {boolean} options.menu 是否显示右键菜单,允许值:true/false + * @param {boolean} options.loop 播放到最后一帧时是否重新播放,允许值: true/false + * @param {boolean} options.play flash是否在浏览器加载时就开始播放。允许值:true/false + * @param {string} options.quality 设置flash播放的画质,允许值:low/medium/high/autolow/autohigh/best + * @param {string} options.scale 设置flash内容如何缩放来适应设置的宽高。允许值:showall/noborder/exactfit + * @param {string} options.wmode 设置flash的显示模式。允许值:window/opaque/transparent + * @param {string} options.allowscriptaccess 设置flash与页面的通信权限。允许值:always/never/sameDomain + * @param {string} options.allownetworking 设置swf文件中允许使用的网络API。允许值:all/internal/none + * @param {boolean} options.allowfullscreen 是否允许flash全屏。允许值:true/false + * @param {boolean} options.seamlesstabbing 允许设置执行无缝跳格,从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值:true/false + * @param {boolean} options.devicefont 设置静态文本对象是否以设备字体呈现。允许值:true/false + * @param {boolean} options.swliveconnect 第一次加载flash时浏览器是否应启动Java。允许值:true/false + * @param {Object} options.vars 要传递给flash的参数,支持JSON或string类型。 + * + * @param {HTMLElement|string} [container] flash对象的父容器元素,不传递该参数时在当前代码位置创建flash对象。 + * @meta standard + * @see baidu.swf.createHTML,baidu.swf.getMovie + */ +baidu.swf.create = function (options, target) { + options = options || {}; + var html = baidu.swf.createHTML(options) + || options['errorMessage'] + || ''; + + if (target && 'string' == typeof target) { + target = document.getElementById(target); + } + baidu.dom.insertHTML( target || document.body ,'beforeEnd',html ); +}; +/** + * 判断是否为ie浏览器 + * @name baidu.browser.ie + * @field + * @grammar baidu.browser.ie + * @returns {Number} IE版本号 + */ +baidu.browser.ie = baidu.ie = /msie (\d+\.\d+)/i.test(navigator.userAgent) ? (document.documentMode || + RegExp['\x241']) : undefined; + +/** + * 移除数组中的项 + * @name baidu.array.remove + * @function + * @grammar baidu.array.remove(source, match) + * @param {Array} source 需要移除项的数组 + * @param {Any} match 要移除的项 + * @meta standard + * @see baidu.array.removeAt + * + * @returns {Array} 移除后的数组 + */ +baidu.array.remove = function (source, match) { + var len = source.length; + + while (len--) { + if (len in source && source[len] === match) { + source.splice(len, 1); + } + } + return source; +}; + +/** + * 判断目标参数是否Array对象 + * @name baidu.lang.isArray + * @function + * @grammar baidu.lang.isArray(source) + * @param {Any} source 目标参数 + * @meta standard + * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate + * + * @returns {boolean} 类型判断结果 + */ +baidu.lang.isArray = function (source) { + return '[object Array]' == Object.prototype.toString.call(source); +}; + + + +/** + * 将一个变量转换成array + * @name baidu.lang.toArray + * @function + * @grammar baidu.lang.toArray(source) + * @param {mix} source 需要转换成array的变量 + * @version 1.3 + * @meta standard + * @returns {array} 转换后的array + */ +baidu.lang.toArray = function (source) { + if (source === null || source === undefined) + return []; + if (baidu.lang.isArray(source)) + return source; + if (typeof source.length !== 'number' || typeof source === 'string' || baidu.lang.isFunction(source)) { + return [source]; + } + if (source.item) { + var l = source.length, array = new Array(l); + while (l--) + array[l] = source[l]; + return array; + } + + return [].slice.call(source); +}; + +/** + * 获得flash对象的实例 + * @name baidu.swf.getMovie + * @function + * @grammar baidu.swf.getMovie(name) + * @param {string} name flash对象的名称 + * @see baidu.swf.create + * @meta standard + * @returns {HTMLElement} flash对象的实例 + */ +baidu.swf.getMovie = function (name) { + var movie = document[name], ret; + return baidu.browser.ie == 9 ? + movie && movie.length ? + (ret = baidu.array.remove(baidu.lang.toArray(movie),function(item){ + return item.tagName.toLowerCase() != "embed"; + })).length == 1 ? ret[0] : ret + : movie + : movie || window[name]; +}; + + +baidu.flash._Base = (function(){ + + var prefix = 'bd__flash__'; + + /** + * 创建一个随机的字符串 + * @private + * @return {String} + */ + function _createString(){ + return prefix + Math.floor(Math.random() * 2147483648).toString(36); + }; + + /** + * 检查flash状态 + * @private + * @param {Object} target flash对象 + * @return {Boolean} + */ + function _checkReady(target){ + if(typeof target !== 'undefined' && typeof target.flashInit !== 'undefined' && target.flashInit()){ + return true; + }else{ + return false; + } + }; + + /** + * 调用之前进行压栈的函数 + * @private + * @param {Array} callQueue 调用队列 + * @param {Object} target flash对象 + * @return {Null} + */ + function _callFn(callQueue, target){ + var result = null; + + callQueue = callQueue.reverse(); + baidu.each(callQueue, function(item){ + result = target.call(item.fnName, item.params); + item.callBack(result); + }); + }; + + /** + * 为传入的匿名函数创建函数名 + * @private + * @param {String|Function} fun 传入的匿名函数或者函数名 + * @return {String} + */ + function _createFunName(fun){ + var name = ''; + + if(baidu.lang.isFunction(fun)){ + name = _createString(); + window[name] = function(){ + fun.apply(window, arguments); + }; + + return name; + }else if(baidu.lang.isString){ + return fun; + } + }; + + /** + * 绘制flash + * @private + * @param {Object} options 创建参数 + * @return {Object} + */ + function _render(options){ + if(!options.id){ + options.id = _createString(); + } + + var container = options.container || ''; + delete(options.container); + + baidu.swf.create(options, container); + + return baidu.swf.getMovie(options.id); + }; + + return function(options, callBack){ + var me = this, + autoRender = (typeof options.autoRender !== 'undefined' ? options.autoRender : true), + createOptions = options.createOptions || {}, + target = null, + isReady = false, + callQueue = [], + timeHandle = null, + callBack = callBack || []; + + /** + * 将flash文件绘制到页面上 + * @public + * @return {Null} + */ + me.render = function(){ + target = _render(createOptions); + + if(callBack.length > 0){ + baidu.each(callBack, function(funName, index){ + callBack[index] = _createFunName(options[funName] || new Function()); + }); + } + me.call('setJSFuncName', [callBack]); + }; + + /** + * 返回flash状态 + * @return {Boolean} + */ + me.isReady = function(){ + return isReady; + }; + + /** + * 调用flash接口的统一入口 + * @param {String} fnName 调用的函数名 + * @param {Array} params 传入的参数组成的数组,若不许要参数,需传入空数组 + * @param {Function} [callBack] 异步调用后将返回值作为参数的调用回调函数,如无返回值,可以不传入此参数 + * @return {Null} + */ + me.call = function(fnName, params, callBack){ + if(!fnName) return null; + callBack = callBack || new Function(); + + var result = null; + + if(isReady){ + result = target.call(fnName, params); + callBack(result); + }else{ + callQueue.push({ + fnName: fnName, + params: params, + callBack: callBack + }); + + (!timeHandle) && (timeHandle = setInterval(_check, 200)); + } + }; + + /** + * 为传入的匿名函数创建函数名 + * @public + * @param {String|Function} fun 传入的匿名函数或者函数名 + * @return {String} + */ + me.createFunName = function(fun){ + return _createFunName(fun); + }; + + /** + * 检查flash是否ready, 并进行调用 + * @private + * @return {Null} + */ + function _check(){ + if(_checkReady(target)){ + clearInterval(timeHandle); + timeHandle = null; + _call(); + + isReady = true; + } + }; + + /** + * 调用之前进行压栈的函数 + * @private + * @return {Null} + */ + function _call(){ + _callFn(callQueue, target); + callQueue = []; + } + + autoRender && me.render(); + }; +})(); + + + +/** + * 创建flash based imageUploader + * @class + * @grammar baidu.flash.imageUploader(options) + * @param {Object} createOptions 创建flash时需要的参数,请参照baidu.swf.create文档 + * @config {Object} vars 创建imageUploader时所需要的参数 + * @config {Number} vars.gridWidth 每一个预览图片所占的宽度,应该为flash寛的整除 + * @config {Number} vars.gridHeight 每一个预览图片所占的高度,应该为flash高的整除 + * @config {Number} vars.picWidth 单张预览图片的宽度 + * @config {Number} vars.picHeight 单张预览图片的高度 + * @config {String} vars.uploadDataFieldName POST请求中图片数据的key,默认值'picdata' + * @config {String} vars.picDescFieldName POST请求中图片描述的key,默认值'picDesc' + * @config {Number} vars.maxSize 文件的最大体积,单位'MB' + * @config {Number} vars.compressSize 上传前如果图片体积超过该值,会先压缩 + * @config {Number} vars.maxNum:32 最大上传多少个文件 + * @config {Number} vars.compressLength 能接受的最大边长,超过该值会等比压缩 + * @config {String} vars.url 上传的url地址 + * @config {Number} vars.mode mode == 0时,是使用滚动条,mode == 1时,拉伸flash, 默认值为0 + * @see baidu.swf.createHTML + * @param {String} backgroundUrl 背景图片路径 + * @param {String} listBacgroundkUrl 布局控件背景 + * @param {String} buttonUrl 按钮图片不背景 + * @param {String|Function} selectFileCallback 选择文件的回调 + * @param {String|Function} exceedFileCallback文件超出限制的最大体积时的回调 + * @param {String|Function} deleteFileCallback 删除文件的回调 + * @param {String|Function} startUploadCallback 开始上传某个文件时的回调 + * @param {String|Function} uploadCompleteCallback 某个文件上传完成的回调 + * @param {String|Function} uploadErrorCallback 某个文件上传失败的回调 + * @param {String|Function} allCompleteCallback 全部上传完成时的回调 + * @param {String|Function} changeFlashHeight 改变Flash的高度,mode==1的时候才有用 + */ +baidu.flash.imageUploader = baidu.flash.imageUploader || function(options){ + + var me = this, + options = options || {}, + _flash = new baidu.flash._Base(options, [ + 'selectFileCallback', + 'exceedFileCallback', + 'deleteFileCallback', + 'startUploadCallback', + 'uploadCompleteCallback', + 'uploadErrorCallback', + 'allCompleteCallback', + 'changeFlashHeight' + ]); + /** + * 开始或回复上传图片 + * @public + * @return {Null} + */ + me.upload = function(){ + _flash.call('upload'); + }; + + /** + * 暂停上传图片 + * @public + * @return {Null} + */ + me.pause = function(){ + _flash.call('pause'); + }; + me.addCustomizedParams = function(index,obj){ + _flash.call('addCustomizedParams',[index,obj]); + } +}; + +/** + * 操作原生对象的方法 + * @namespace baidu.object + */ +baidu.object = baidu.object || {}; + + +/** + * 将源对象的所有属性拷贝到目标对象中 + * @author erik + * @name baidu.object.extend + * @function + * @grammar baidu.object.extend(target, source) + * @param {Object} target 目标对象 + * @param {Object} source 源对象 + * @see baidu.array.merge + * @remark + * +1.目标对象中,与源对象key相同的成员将会被覆盖。
    +2.源对象的prototype成员不会拷贝。 + + * @shortcut extend + * @meta standard + * + * @returns {Object} 目标对象 + */ +baidu.extend = +baidu.object.extend = function (target, source) { + for (var p in source) { + if (source.hasOwnProperty(p)) { + target[p] = source[p]; + } + } + + return target; +}; + + + + + +/** + * 创建flash based fileUploader + * @class + * @grammar baidu.flash.fileUploader(options) + * @param {Object} options + * @config {Object} createOptions 创建flash时需要的参数,请参照baidu.swf.create文档 + * @config {String} createOptions.width + * @config {String} createOptions.height + * @config {Number} maxNum 最大可选文件数 + * @config {Function|String} selectFile + * @config {Function|String} exceedMaxSize + * @config {Function|String} deleteFile + * @config {Function|String} uploadStart + * @config {Function|String} uploadComplete + * @config {Function|String} uploadError + * @config {Function|String} uploadProgress + */ +baidu.flash.fileUploader = baidu.flash.fileUploader || function(options){ + var me = this, + options = options || {}; + + options.createOptions = baidu.extend({ + wmod: 'transparent' + },options.createOptions || {}); + + var _flash = new baidu.flash._Base(options, [ + 'selectFile', + 'exceedMaxSize', + 'deleteFile', + 'uploadStart', + 'uploadComplete', + 'uploadError', + 'uploadProgress' + ]); + + _flash.call('setMaxNum', options.maxNum ? [options.maxNum] : [1]); + + /** + * 设置当鼠标移动到flash上时,是否变成手型 + * @public + * @param {Boolean} isCursor + * @return {Null} + */ + me.setHandCursor = function(isCursor){ + _flash.call('setHandCursor', [isCursor || false]); + }; + + /** + * 设置鼠标相应函数名 + * @param {String|Function} fun + */ + me.setMSFunName = function(fun){ + _flash.call('setMSFunName',[_flash.createFunName(fun)]); + }; + + /** + * 执行上传操作 + * @param {String} url 上传的url + * @param {String} fieldName 上传的表单字段名 + * @param {Object} postData 键值对,上传的POST数据 + * @param {Number|Array|null|-1} [index]上传的文件序列 + * Int值上传该文件 + * Array一次串行上传该序列文件 + * -1/null上传所有文件 + * @return {Null} + */ + me.upload = function(url, fieldName, postData, index){ + + if(typeof url !== 'string' || typeof fieldName !== 'string') return null; + if(typeof index === 'undefined') index = -1; + + _flash.call('upload', [url, fieldName, postData, index]); + }; + + /** + * 取消上传操作 + * @public + * @param {Number|-1} index + */ + me.cancel = function(index){ + if(typeof index === 'undefined') index = -1; + _flash.call('cancel', [index]); + }; + + /** + * 删除文件 + * @public + * @param {Number|Array} [index] 要删除的index,不传则全部删除 + * @param {Function} callBack + * */ + me.deleteFile = function(index, callBack){ + + var callBackAll = function(list){ + callBack && callBack(list); + }; + + if(typeof index === 'undefined'){ + _flash.call('deleteFilesAll', [], callBackAll); + return; + }; + + if(typeof index === 'Number') index = [index]; + index.sort(function(a,b){ + return b-a; + }); + baidu.each(index, function(item){ + _flash.call('deleteFileBy', item, callBackAll); + }); + }; + + /** + * 添加文件类型,支持macType + * @public + * @param {Object|Array[Object]} type {description:String, extention:String} + * @return {Null}; + */ + me.addFileType = function(type){ + var type = type || [[]]; + + if(type instanceof Array) type = [type]; + else type = [[type]]; + _flash.call('addFileTypes', type); + }; + + /** + * 设置文件类型,支持macType + * @public + * @param {Object|Array[Object]} type {description:String, extention:String} + * @return {Null}; + */ + me.setFileType = function(type){ + var type = type || [[]]; + + if(type instanceof Array) type = [type]; + else type = [[type]]; + _flash.call('setFileTypes', type); + }; + + /** + * 设置可选文件的数量限制 + * @public + * @param {Number} num + * @return {Null} + */ + me.setMaxNum = function(num){ + _flash.call('setMaxNum', [num]); + }; + + /** + * 设置可选文件大小限制,以兆M为单位 + * @public + * @param {Number} num,0为无限制 + * @return {Null} + */ + me.setMaxSize = function(num){ + _flash.call('setMaxSize', [num]); + }; + + /** + * @public + */ + me.getFileAll = function(callBack){ + _flash.call('getFileAll', [], callBack); + }; + + /** + * @public + * @param {Number} index + * @param {Function} [callBack] + */ + me.getFileByIndex = function(index, callBack){ + _flash.call('getFileByIndex', [], callBack); + }; + + /** + * @public + * @param {Number} index + * @param {function} [callBack] + */ + me.getStatusByIndex = function(index, callBack){ + _flash.call('getStatusByIndex', [], callBack); + }; +}; + +/** + * 使用动态script标签请求服务器资源,包括由服务器端的回调和浏览器端的回调 + * @namespace baidu.sio + */ +baidu.sio = baidu.sio || {}; + +/** + * + * @param {HTMLElement} src script节点 + * @param {String} url script节点的地址 + * @param {String} [charset] 编码 + */ +baidu.sio._createScriptTag = function(scr, url, charset){ + scr.setAttribute('type', 'text/javascript'); + charset && scr.setAttribute('charset', charset); + scr.setAttribute('src', url); + document.getElementsByTagName('head')[0].appendChild(scr); +}; + +/** + * 删除script的属性,再删除script标签,以解决修复内存泄漏的问题 + * + * @param {HTMLElement} src script节点 + */ +baidu.sio._removeScriptTag = function(scr){ + if (scr.clearAttributes) { + scr.clearAttributes(); + } else { + for (var attr in scr) { + if (scr.hasOwnProperty(attr)) { + delete scr[attr]; + } + } + } + if(scr && scr.parentNode){ + scr.parentNode.removeChild(scr); + } + scr = null; +}; + + +/** + * 通过script标签加载数据,加载完成由浏览器端触发回调 + * @name baidu.sio.callByBrowser + * @function + * @grammar baidu.sio.callByBrowser(url, opt_callback, opt_options) + * @param {string} url 加载数据的url + * @param {Function|string} opt_callback 数据加载结束时调用的函数或函数名 + * @param {Object} opt_options 其他可选项 + * @config {String} [charset] script的字符集 + * @config {Integer} [timeOut] 超时时间,超过这个时间将不再响应本请求,并触发onfailure函数 + * @config {Function} [onfailure] timeOut设定后才生效,到达超时时间时触发本函数 + * @remark + * 1、与callByServer不同,callback参数只支持Function类型,不支持string。 + * 2、如果请求了一个不存在的页面,callback函数在IE/opera下也会被调用,因此使用者需要在onsuccess函数中判断数据是否正确加载。 + * @meta standard + * @see baidu.sio.callByServer + */ +baidu.sio.callByBrowser = function (url, opt_callback, opt_options) { + var scr = document.createElement("SCRIPT"), + scriptLoaded = 0, + options = opt_options || {}, + charset = options['charset'], + callback = opt_callback || function(){}, + timeOut = options['timeOut'] || 0, + timer; + scr.onload = scr.onreadystatechange = function () { + if (scriptLoaded) { + return; + } + + var readyState = scr.readyState; + if ('undefined' == typeof readyState + || readyState == "loaded" + || readyState == "complete") { + scriptLoaded = 1; + try { + callback(); + clearTimeout(timer); + } finally { + scr.onload = scr.onreadystatechange = null; + baidu.sio._removeScriptTag(scr); + } + } + }; + + if( timeOut ){ + timer = setTimeout(function(){ + scr.onload = scr.onreadystatechange = null; + baidu.sio._removeScriptTag(scr); + options.onfailure && options.onfailure(); + }, timeOut); + } + + baidu.sio._createScriptTag(scr, url, charset); +}; + +/** + * 通过script标签加载数据,加载完成由服务器端触发回调 + * @name baidu.sio.callByServer + * @function + * @grammar baidu.sio.callByServer(url, callback[, opt_options]) + * @param {string} url 加载数据的url. + * @param {Function|string} callback 服务器端调用的函数或函数名。如果没有指定本参数,将在URL中寻找options['queryField']做为callback的方法名. + * @param {Object} opt_options 加载数据时的选项. + * @config {string} [charset] script的字符集 + * @config {string} [queryField] 服务器端callback请求字段名,默认为callback + * @config {Integer} [timeOut] 超时时间(单位:ms),超过这个时间将不再响应本请求,并触发onfailure函数 + * @config {Function} [onfailure] timeOut设定后才生效,到达超时时间时触发本函数 + * @remark + * 如果url中已经包含key为“options['queryField']”的query项,将会被替换成callback中参数传递或自动生成的函数名。 + * @meta standard + * @see baidu.sio.callByBrowser + */ +baidu.sio.callByServer = /**@function*/function(url, callback, opt_options) { + var scr = document.createElement('SCRIPT'), + prefix = 'bd__cbs__', + callbackName, + callbackImpl, + options = opt_options || {}, + charset = options['charset'], + queryField = options['queryField'] || 'callback', + timeOut = options['timeOut'] || 0, + timer, + reg = new RegExp('(\\?|&)' + queryField + '=([^&]*)'), + matches; + + if (baidu.lang.isFunction(callback)) { + callbackName = prefix + Math.floor(Math.random() * 2147483648).toString(36); + window[callbackName] = getCallBack(0); + } else if(baidu.lang.isString(callback)){ + callbackName = callback; + } else { + if (matches = reg.exec(url)) { + callbackName = matches[2]; + } + } + + if( timeOut ){ + timer = setTimeout(getCallBack(1), timeOut); + } + url = url.replace(reg, '\x241' + queryField + '=' + callbackName); + + if (url.search(reg) < 0) { + url += (url.indexOf('?') < 0 ? '?' : '&') + queryField + '=' + callbackName; + } + baidu.sio._createScriptTag(scr, url, charset); + + /* + * 返回一个函数,用于立即(挂在window上)或者超时(挂在setTimeout中)时执行 + */ + function getCallBack(onTimeOut){ + /*global callbackName, callback, scr, options;*/ + return function(){ + try { + if( onTimeOut ){ + options.onfailure && options.onfailure(); + }else{ + callback.apply(window, arguments); + clearTimeout(timer); + } + window[callbackName] = null; + delete window[callbackName]; + } catch (exception) { + } finally { + baidu.sio._removeScriptTag(scr); + } + } + } +}; + +/** + * 通过请求一个图片的方式令服务器存储一条日志 + * @function + * @grammar baidu.sio.log(url) + * @param {string} url 要发送的地址. + * @author: int08h,leeight + */ +baidu.sio.log = function(url) { + var img = new Image(), + key = 'tangram_sio_log_' + Math.floor(Math.random() * + 2147483648).toString(36); + window[key] = img; + + img.onload = img.onerror = img.onabort = function() { + img.onload = img.onerror = img.onabort = null; + + window[key] = null; + img = null; + }; + img.src = url; +}; + + + +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/json.js + * author: erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + +/** + * 操作json对象的方法 + * @namespace baidu.json + */ +baidu.json = baidu.json || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/json/parse.js + * author: erik, berg + * version: 1.2 + * date: 2009/11/23 + */ + + + +/** + * 将字符串解析成json对象。注:不会自动祛除空格 + * @name baidu.json.parse + * @function + * @grammar baidu.json.parse(data) + * @param {string} source 需要解析的字符串 + * @remark + * 该方法的实现与ecma-262第五版中规定的JSON.parse不同,暂时只支持传入一个参数。后续会进行功能丰富。 + * @meta standard + * @see baidu.json.stringify,baidu.json.decode + * + * @returns {JSON} 解析结果json对象 + */ +baidu.json.parse = function (data) { + //2010/12/09:更新至不使用原生parse,不检测用户输入是否正确 + return (new Function("return (" + data + ")"))(); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/json/decode.js + * author: erik, cat + * version: 1.3.4 + * date: 2010/12/23 + */ + + + +/** + * 将字符串解析成json对象,为过时接口,今后会被baidu.json.parse代替 + * @name baidu.json.decode + * @function + * @grammar baidu.json.decode(source) + * @param {string} source 需要解析的字符串 + * @meta out + * @see baidu.json.encode,baidu.json.parse + * + * @returns {JSON} 解析结果json对象 + */ +baidu.json.decode = baidu.json.parse; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/json/stringify.js + * author: erik + * version: 1.1.0 + * date: 2010/01/11 + */ + + + +/** + * 将json对象序列化 + * @name baidu.json.stringify + * @function + * @grammar baidu.json.stringify(value) + * @param {JSON} value 需要序列化的json对象 + * @remark + * 该方法的实现与ecma-262第五版中规定的JSON.stringify不同,暂时只支持传入一个参数。后续会进行功能丰富。 + * @meta standard + * @see baidu.json.parse,baidu.json.encode + * + * @returns {string} 序列化后的字符串 + */ +baidu.json.stringify = (function () { + /** + * 字符串处理时需要转义的字符表 + * @private + */ + var escapeMap = { + "\b": '\\b', + "\t": '\\t', + "\n": '\\n', + "\f": '\\f', + "\r": '\\r', + '"' : '\\"', + "\\": '\\\\' + }; + + /** + * 字符串序列化 + * @private + */ + function encodeString(source) { + if (/["\\\x00-\x1f]/.test(source)) { + source = source.replace( + /["\\\x00-\x1f]/g, + function (match) { + var c = escapeMap[match]; + if (c) { + return c; + } + c = match.charCodeAt(); + return "\\u00" + + Math.floor(c / 16).toString(16) + + (c % 16).toString(16); + }); + } + return '"' + source + '"'; + } + + /** + * 数组序列化 + * @private + */ + function encodeArray(source) { + var result = ["["], + l = source.length, + preComma, i, item; + + for (i = 0; i < l; i++) { + item = source[i]; + + switch (typeof item) { + case "undefined": + case "function": + case "unknown": + break; + default: + if(preComma) { + result.push(','); + } + result.push(baidu.json.stringify(item)); + preComma = 1; + } + } + result.push("]"); + return result.join(""); + } + + /** + * 处理日期序列化时的补零 + * @private + */ + function pad(source) { + return source < 10 ? '0' + source : source; + } + + /** + * 日期序列化 + * @private + */ + function encodeDate(source){ + return '"' + source.getFullYear() + "-" + + pad(source.getMonth() + 1) + "-" + + pad(source.getDate()) + "T" + + pad(source.getHours()) + ":" + + pad(source.getMinutes()) + ":" + + pad(source.getSeconds()) + '"'; + } + + return function (value) { + switch (typeof value) { + case 'undefined': + return 'undefined'; + + case 'number': + return isFinite(value) ? String(value) : "null"; + + case 'string': + return encodeString(value); + + case 'boolean': + return String(value); + + default: + if (value === null) { + return 'null'; + } else if (value instanceof Array) { + return encodeArray(value); + } else if (value instanceof Date) { + return encodeDate(value); + } else { + var result = ['{'], + encode = baidu.json.stringify, + preComma, + item; + + for (var key in value) { + if (Object.prototype.hasOwnProperty.call(value, key)) { + item = value[key]; + switch (typeof item) { + case 'undefined': + case 'unknown': + case 'function': + break; + default: + if (preComma) { + result.push(','); + } + preComma = 1; + result.push(encode(key) + ':' + encode(item)); + } + } + } + result.push('}'); + return result.join(''); + } + } + }; +})(); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/json/encode.js + * author: erik, cat + * version: 1.3.4 + * date: 2010/12/23 + */ + + + +/** + * 将json对象序列化,为过时接口,今后会被baidu.json.stringify代替 + * @name baidu.json.encode + * @function + * @grammar baidu.json.encode(value) + * @param {JSON} value 需要序列化的json对象 + * @meta out + * @see baidu.json.decode,baidu.json.stringify + * + * @returns {string} 序列化后的字符串 + */ +baidu.json.encode = baidu.json.stringify; diff --git a/public/vendor/ueditor/dialogs/wordimage/wordimage.html b/public/vendor/ueditor/dialogs/wordimage/wordimage.html new file mode 100644 index 0000000..6cf6067 --- /dev/null +++ b/public/vendor/ueditor/dialogs/wordimage/wordimage.html @@ -0,0 +1,111 @@ + + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    + +
    + : +
    +
    +
    + + + + + + \ No newline at end of file diff --git a/public/vendor/ueditor/dialogs/wordimage/wordimage.js b/public/vendor/ueditor/dialogs/wordimage/wordimage.js new file mode 100644 index 0000000..98f3a22 --- /dev/null +++ b/public/vendor/ueditor/dialogs/wordimage/wordimage.js @@ -0,0 +1,157 @@ +/** + * Created by JetBrains PhpStorm. + * User: taoqili + * Date: 12-1-30 + * Time: 下午12:50 + * To change this template use File | Settings | File Templates. + */ + + + +var wordImage = {}; +//(function(){ +var g = baidu.g, + flashObj,flashContainer; + +wordImage.init = function(opt, callbacks) { + showLocalPath("localPath"); + //createCopyButton("clipboard","localPath"); + createFlashUploader(opt, callbacks); + addUploadListener(); + addOkListener(); +}; + +function hideFlash(){ + flashObj = null; + flashContainer.innerHTML = ""; +} +function addOkListener() { + dialog.onok = function() { + if (!imageUrls.length) return; + var urlPrefix = editor.getOpt('imageUrlPrefix'), + images = domUtils.getElementsByTagName(editor.document,"img"); + editor.fireEvent('saveScene'); + for (var i = 0,img; img = images[i++];) { + var src = img.getAttribute("word_img"); + if (!src) continue; + for (var j = 0,url; url = imageUrls[j++];) { + if (src.indexOf(url.original.replace(" ","")) != -1) { + img.src = urlPrefix + url.url; + img.setAttribute("_src", urlPrefix + url.url); //同时修改"_src"属性 + img.setAttribute("title",url.title); + domUtils.removeAttributes(img, ["word_img","style","width","height"]); + editor.fireEvent("selectionchange"); + break; + } + } + } + editor.fireEvent('saveScene'); + hideFlash(); + }; + dialog.oncancel = function(){ + hideFlash(); + } +} + +/** + * 绑定开始上传事件 + */ +function addUploadListener() { + g("upload").onclick = function () { + flashObj.upload(); + this.style.display = "none"; + }; +} + +function showLocalPath(id) { + //单张编辑 + var img = editor.selection.getRange().getClosedNode(); + var images = editor.execCommand('wordimage'); + if(images.length==1 || img && img.tagName == 'IMG'){ + g(id).value = images[0]; + return; + } + var path = images[0]; + var leftSlashIndex = path.lastIndexOf("/")||0, //不同版本的doc和浏览器都可能影响到这个符号,故直接判断两种 + rightSlashIndex = path.lastIndexOf("\\")||0, + separater = leftSlashIndex > rightSlashIndex ? "/":"\\" ; + + path = path.substring(0, path.lastIndexOf(separater)+1); + g(id).value = path; +} + +function createFlashUploader(opt, callbacks) { + //由于lang.flashI18n是静态属性,不可以直接进行修改,否则会影响到后续内容 + var i18n = utils.extend({},lang.flashI18n); + //处理图片资源地址的编码,补全等问题 + for(var i in i18n){ + if(!(i in {"lang":1,"uploadingTF":1,"imageTF":1,"textEncoding":1}) && i18n[i]){ + i18n[i] = encodeURIComponent(editor.options.langPath + editor.options.lang + "/images/" + i18n[i]); + } + } + opt = utils.extend(opt,i18n,false); + var option = { + createOptions:{ + id:'flash', + url:opt.flashUrl, + width:opt.width, + height:opt.height, + errorMessage:lang.flashError, + wmode:browser.safari ? 'transparent' : 'window', + ver:'10.0.0', + vars:opt, + container:opt.container + } + }; + + option = extendProperty(callbacks, option); + flashObj = new baidu.flash.imageUploader(option); + flashContainer = $G(opt.container); +} + +function extendProperty(fromObj, toObj) { + for (var i in fromObj) { + if (!toObj[i]) { + toObj[i] = fromObj[i]; + } + } + return toObj; +} + +//})(); + +function getPasteData(id) { + baidu.g("msg").innerHTML = lang.copySuccess + "
    "; + setTimeout(function() { + baidu.g("msg").innerHTML = ""; + }, 5000); + return baidu.g(id).value; +} + +function createCopyButton(id, dataFrom) { + baidu.swf.create({ + id:"copyFlash", + url:"fClipboard_ueditor.swf", + width:"58", + height:"25", + errorMessage:"", + bgColor:"#CBCBCB", + wmode:"transparent", + ver:"10.0.0", + vars:{ + tid:dataFrom + } + }, id + ); + + var clipboard = baidu.swf.getMovie("copyFlash"); + var clipinterval = setInterval(function() { + if (clipboard && clipboard.flashInit) { + clearInterval(clipinterval); + clipboard.setHandCursor(true); + clipboard.setContentFuncName("getPasteData"); + //clipboard.setMEFuncName("mouseEventHandler"); + } + }, 500); +} +createCopyButton("clipboard", "localPath"); \ No newline at end of file diff --git a/public/vendor/ueditor/index.html b/public/vendor/ueditor/index.html new file mode 100644 index 0000000..a416418 --- /dev/null +++ b/public/vendor/ueditor/index.html @@ -0,0 +1,175 @@ + + + + 完整demo + + + + + + + + + + +
    +

    完整demo

    + +
    +
    +
    + + + + + + + + + + + +
    +
    + + + + + + + +
    + +
    + + +
    + +
    +
    + + +
    + + + + \ No newline at end of file diff --git a/public/vendor/ueditor/lang/en/en.js b/public/vendor/ueditor/lang/en/en.js new file mode 100644 index 0000000..c7e22f5 --- /dev/null +++ b/public/vendor/ueditor/lang/en/en.js @@ -0,0 +1,684 @@ +/** + * Created with JetBrains PhpStorm. + * User: taoqili + * Date: 12-6-12 + * Time: 下午6:57 + * To change this template use File | Settings | File Templates. + */ +UE.I18N['en'] = { + 'labelMap':{ + 'anchor':'Anchor', 'undo':'Undo', 'redo':'Redo', 'bold':'Bold', 'indent':'Indent', 'snapscreen':'SnapScreen', + 'italic':'Italic', 'underline':'Underline', 'strikethrough':'Strikethrough', 'subscript':'SubScript','fontborder':'text border', + 'superscript':'SuperScript', 'formatmatch':'Format Match', 'source':'Source', 'blockquote':'BlockQuote', + 'pasteplain':'PastePlain', 'selectall':'SelectAll', 'print':'Print', 'preview':'Preview', + 'horizontal':'Horizontal', 'removeformat':'RemoveFormat', 'time':'Time', 'date':'Date', + 'unlink':'Unlink', 'insertrow':'InsertRow', 'insertcol':'InsertCol', 'mergeright':'MergeRight', 'mergedown':'MergeDown', + 'deleterow':'DeleteRow', 'deletecol':'DeleteCol', 'splittorows':'SplitToRows','insertcode':'insert code', + 'splittocols':'SplitToCols', 'splittocells':'SplitToCells','deletecaption':'DeleteCaption','inserttitle':'InsertTitle', + 'mergecells':'MergeCells', 'deletetable':'DeleteTable', 'cleardoc':'Clear', 'insertparagraphbeforetable':"InsertParagraphBeforeTable", + 'fontfamily':'FontFamily', 'fontsize':'FontSize', 'paragraph':'Paragraph','simpleupload':'Single Image','insertimage':'Multi Image','edittable':'Edit Table', 'edittd':'Edit Td','link':'Link', + 'emotion':'Emotion', 'spechars':'Spechars', 'searchreplace':'SearchReplace', 'map':'BaiduMap', 'gmap':'GoogleMap', + 'insertvideo':'Video', 'help':'Help', 'justifyleft':'JustifyLeft', 'justifyright':'JustifyRight', 'justifycenter':'JustifyCenter', + 'justifyjustify':'Justify', 'forecolor':'FontColor', 'backcolor':'BackColor', 'insertorderedlist':'OL', + 'insertunorderedlist':'UL', 'fullscreen':'FullScreen', 'directionalityltr':'EnterFromLeft', 'directionalityrtl':'EnterFromRight', + 'rowspacingtop':'RowSpacingTop', 'rowspacingbottom':'RowSpacingBottom', 'pagebreak':'PageBreak', 'insertframe':'Iframe', 'imagenone':'Default', + 'imageleft':'ImageLeft', 'imageright':'ImageRight', 'attachment':'Attachment', 'imagecenter':'ImageCenter', 'wordimage':'WordImage', + 'lineheight':'LineHeight','edittip':'EditTip','customstyle':'CustomStyle', 'scrawl':'Scrawl', 'autotypeset':'AutoTypeset', + 'webapp':'WebAPP', 'touppercase':'UpperCase', 'tolowercase':'LowerCase','template':'Template','background':'Background','inserttable':'InsertTable', + 'music':'Music', 'charts': 'charts','drafts': 'Load from Drafts' + }, + 'insertorderedlist':{ + 'num':'1,2,3...', + 'num1':'1),2),3)...', + 'num2':'(1),(2),(3)...', + 'cn':'一,二,三....', + 'cn1':'一),二),三)....', + 'cn2':'(一),(二),(三)....', + 'decimal':'1,2,3...', + 'lower-alpha':'a,b,c...', + 'lower-roman':'i,ii,iii...', + 'upper-alpha':'A,B,C...', + 'upper-roman':'I,II,III...' + }, + 'insertunorderedlist':{ + 'circle':'○ Circle', + 'disc':'● Circle dot', + 'square':'■ Rectangle ', + 'dash' :'- Dash', + 'dot' : '。dot' + }, + 'paragraph':{'p':'Paragraph', 'h1':'Title 1', 'h2':'Title 2', 'h3':'Title 3', 'h4':'Title 4', 'h5':'Title 5', 'h6':'Title 6'}, + 'fontfamily':{ + 'songti':'Sim Sun', + 'kaiti':'Sim Kai', + 'heiti':'Sim Hei', + 'lishu':'Sim Li', + 'yahei': 'Microsoft YaHei', + 'andaleMono':'Andale Mono', + 'arial': 'Arial', + 'arialBlack':'Arial Black', + 'comicSansMs':'Comic Sans MS', + 'impact':'Impact', + 'timesNewRoman':'Times New Roman' + }, + 'customstyle':{ + 'tc':'Title center', + 'tl':'Title left', + 'im':'Important', + 'hi':'Highlight' + }, + 'autoupload': { + 'exceedSizeError': 'File Size Exceed', + 'exceedTypeError': 'File Type Not Allow', + 'jsonEncodeError': 'Server Return Format Error', + 'loading':"loading...", + 'loadError':"load error", + 'errorLoadConfig': 'Server config not loaded, upload can not work.', + }, + 'simpleupload':{ + 'exceedSizeError': 'File Size Exceed', + 'exceedTypeError': 'File Type Not Allow', + 'jsonEncodeError': 'Server Return Format Error', + 'loading':"loading...", + 'loadError':"load error", + 'errorLoadConfig': 'Server config not loaded, upload can not work.', + }, + 'elementPathTip':"Path", + 'wordCountTip':"Word Count", + 'wordCountMsg':'{#count} characters entered,{#leave} left. ', + 'wordOverFlowMsg':'The number of characters has exceeded allowable maximum values, the server may refuse to save!', + 'ok':"OK", + 'cancel':"Cancel", + 'closeDialog':"closeDialog", + 'tableDrag':"You must import the file uiUtils.js before drag! ", + 'autofloatMsg':"The plugin AutoFloat depends on EditorUI!", + 'loadconfigError': 'Get server config error.', + 'loadconfigFormatError': 'Server config format error.', + 'loadconfigHttpError': 'Get server config http error.', + 'snapScreen_plugin':{ + 'browserMsg':"Only IE supported!", + 'callBackErrorMsg':"The callback data is wrong,please check the config!", + 'uploadErrorMsg':"Upload error,please check your server environment! " + }, + 'insertcode':{ + 'as3':'ActionScript 3', + 'bash':'Bash/Shell', + 'cpp':'C/C++', + 'css':'CSS', + 'cf':'ColdFusion', + 'c#':'C#', + 'delphi':'Delphi', + 'diff':'Diff', + 'erlang':'Erlang', + 'groovy':'Groovy', + 'html':'HTML', + 'java':'Java', + 'jfx':'JavaFX', + 'js':'JavaScript', + 'pl':'Perl', + 'php':'PHP', + 'plain':'Plain Text', + 'ps':'PowerShell', + 'python':'Python', + 'ruby':'Ruby', + 'scala':'Scala', + 'sql':'SQL', + 'vb':'Visual Basic', + 'xml':'XML' + }, + 'confirmClear':"Do you confirm to clear the Document?", + 'contextMenu':{ + 'delete':"Delete", + 'selectall':"Select all", + 'deletecode':"Delete Code", + 'cleardoc':"Clear Document", + 'confirmclear':"Do you confirm to clear the Document?", + 'unlink':"Unlink", + 'paragraph':"Paragraph", + 'edittable':"Table property", + 'aligncell':'Align cell', + 'aligntable':'Table alignment', + 'tableleft':'Left float', + 'tablecenter':'Center', + 'tableright':'Right float', + 'aligntd':'Cell alignment', + 'edittd':"Cell property", + 'setbordervisible':'set table edge visible', + 'table':"Table", + 'justifyleft':'Justify Left', + 'justifyright':'Justify Right', + 'justifycenter':'Justify Center', + 'justifyjustify':'Default', + 'deletetable':"Delete table", + 'insertparagraphbefore':"InsertedBeforeLine", + 'insertparagraphafter':'InsertedAfterLine', + 'inserttable':'Insert table', + 'insertcaption':'Insert caption', + 'deletecaption':'Delete Caption', + 'inserttitle':'Insert Title', + 'deletetitle':'Delete Title', + 'inserttitlecol':'Insert Title Col', + 'deletetitlecol':'Delete Title Col', + 'averageDiseRow':'AverageDise Row', + 'averageDisCol':'AverageDis Col', + 'deleterow':"Delete row", + 'deletecol':"Delete col", + 'insertrow':"Insert row", + 'insertcol':"Insert col", + 'insertrownext':'Insert Row Next', + 'insertcolnext':'Insert Col Next', + 'mergeright':"Merge right", + 'mergeleft':"Merge left", + 'mergedown':"Merge down", + 'mergecells':"Merge cells", + 'splittocells':"Split to cells", + 'splittocols':"Split to Cols", + 'splittorows':"Split to Rows", + 'tablesort':'Table sorting', + 'enablesort':'Sorting Enable', + 'disablesort':'Sorting Disable', + 'reversecurrent':'Reverse current', + 'orderbyasc':'Order By ASCII', + 'reversebyasc':'Reverse By ASCII', + 'orderbynum':'Order By Num', + 'reversebynum':'Reverse By Num', + 'borderbk':'Border shading', + 'setcolor':'interlaced color', + 'unsetcolor':'Cancel interlacedcolor', + 'setbackground':'Background interlaced', + 'unsetbackground':'Cancel Bk interlaced', + 'redandblue':'Blue and red', + 'threecolorgradient':'Three-color gradient', + 'copy':"Copy(Ctrl + c)", + 'copymsg':"Browser does not support. Please use 'Ctrl + c' instead!", + 'paste':"Paste(Ctrl + v)", + 'pastemsg':"Browser does not support. Please use 'Ctrl + v' instead!" + }, + 'copymsg': "Browser does not support. Please use 'Ctrl + c' instead!", + 'pastemsg': "Browser does not support. Please use 'Ctrl + v' instead!", + 'anthorMsg':"Link", + 'clearColor':'Clear', + 'standardColor':'Standard color', + 'themeColor':'Theme color', + 'property':'Property', + 'default':'Default', + 'modify':'Modify', + 'justifyleft':'Justify Left', + 'justifyright':'Justify Right', + 'justifycenter':'Justify Center', + 'justify':'Default', + 'clear':'Clear', + 'anchorMsg':'Anchor', + 'delete':'Delete', + 'clickToUpload':"Click to upload", + 'unset':'Language hasn\'t been set!', + 't_row':'row', + 't_col':'col', + 'pasteOpt':'Paste Option', + 'pasteSourceFormat':"Keep Source Formatting", + 'tagFormat':'Keep tag', + 'pasteTextFormat':'Keep Text only', + 'more':'More', + 'autoTypeSet':{ + 'mergeLine':"Merge empty line", + 'delLine':"Del empty line", + 'removeFormat':"Remove format", + 'indent':"Indent", + 'alignment':"Alignment", + 'imageFloat':"Image float", + 'removeFontsize':"Remove font size", + 'removeFontFamily':"Remove fontFamily", + 'removeHtml':"Remove redundant HTML code", + 'pasteFilter':"Paste filter", + 'run':"Done", + 'symbol':'Symbol Conversion', + 'bdc2sb':'Full-width to Half-width', + 'tobdc':'Half-width to Full-width' + }, + + 'background':{ + 'static':{ + 'lang_background_normal':'Normal', + 'lang_background_local':'Online', + 'lang_background_set':'Background Set', + 'lang_background_none':'No Background', + 'lang_background_colored':'Colored Background', + 'lang_background_color':'Color Set', + 'lang_background_netimg':'Net-Image', + 'lang_background_align':'Align Type', + 'lang_background_position':'Position', + 'repeatType':{'options':["Center", "Repeat-x", "Repeat-y", "Tile","Custom"]} + }, + 'noUploadImage':"No pictures has been uploaded!", + 'toggleSelect':'Change the active state by click!\n Image Size: ' + }, + //===============dialog i18N======================= + 'insertimage':{ + 'static':{ + 'lang_tab_remote':"Insert", + 'lang_tab_upload':"Local", + 'lang_tab_online':"Manager", + 'lang_tab_search':"Search", + 'lang_input_url':"Address:", + 'lang_input_size':"Size:", + 'lang_input_width':"Width", + 'lang_input_height':"Height", + 'lang_input_border':"Border:", + 'lang_input_vhspace':"Margins:", + 'lang_input_title':"Title:", + 'lang_input_align':'Image Float Style:', + 'lang_imgLoading':"Loading...", + 'lang_start_upload':"Start Upload", + 'lock':{'title':"Lock rate"}, + 'searchType':{'title':"ImageType", 'options':["News", "Wallpaper", "emotions", "photo"]}, + 'searchTxt':{'value':"Enter the search keyword!"}, + 'searchBtn':{'value':"Search"}, + 'searchReset':{'value':"Clear"}, + 'noneAlign':{'title':'None Float'}, + 'leftAlign':{'title':'Left Float'}, + 'rightAlign':{'title':'Right Float'}, + 'centerAlign':{'title':'Center In A Line'} + }, + 'uploadSelectFile':'Select File', + 'uploadAddFile':'Add File', + 'uploadStart':'Start Upload', + 'uploadPause':'Pause Upload', + 'uploadContinue':'Continue Upload', + 'uploadRetry':'Retry Upload', + 'uploadDelete':'Delete', + 'uploadTurnLeft':'Turn Left', + 'uploadTurnRight':'Turn Right', + 'uploadPreview':'Doing Preview', + 'uploadNoPreview':'Can Not Preview', + 'updateStatusReady': 'Selected _ pictures, total _KB.', + 'updateStatusConfirm': '_ uploaded successfully and _ upload failed', + 'updateStatusFinish': 'Total _ pictures (_KB), _ uploaded successfully', + 'updateStatusError': ' and _ upload failed', + 'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player', + 'errorLoadConfig': 'Server config not loaded, upload can not work.', + 'errorExceedSize':'File Size Exceed', + 'errorFileType':'File Type Not Allow', + 'errorInterrupt':'File Upload Interrupted', + 'errorUploadRetry':'Upload Error, Please Retry.', + 'errorHttp':'Http Error', + 'errorServerUpload':'Server Result Error.', + 'remoteLockError':"Cannot Lock the Proportion between width and height", + 'numError':"Please enter the correct Num. e.g 123,400", + 'imageUrlError':"The image format may be wrong!", + 'imageLoadError':"Error,please check the network or URL!", + 'searchRemind':"Enter the search keyword!", + 'searchLoading':"Image is loading,please wait...", + 'searchRetry':" Sorry,can't find the image,please try again!" + }, + 'attachment':{ + 'static':{ + 'lang_tab_upload': 'Upload', + 'lang_tab_online': 'Online', + 'lang_start_upload':"Start upload", + 'lang_drop_remind':"You can drop files here, a single maximum of 300 files" + }, + 'uploadSelectFile':'Select File', + 'uploadAddFile':'Add File', + 'uploadStart':'Start Upload', + 'uploadPause':'Pause Upload', + 'uploadContinue':'Continue Upload', + 'uploadRetry':'Retry Upload', + 'uploadDelete':'Delete', + 'uploadTurnLeft':'Turn Left', + 'uploadTurnRight':'Turn Right', + 'uploadPreview':'Doing Preview', + 'updateStatusReady': 'Selected _ files, total _KB.', + 'updateStatusConfirm': '_ uploaded successfully and _ upload failed', + 'updateStatusFinish': 'Total _ files (_KB), _ uploaded successfully', + 'updateStatusError': ' and _ upload failed', + 'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player', + 'errorLoadConfig': 'Server config not loaded, upload can not work.', + 'errorExceedSize':'File Size Exceed', + 'errorFileType':'File Type Not Allow', + 'errorInterrupt':'File Upload Interrupted', + 'errorUploadRetry':'Upload Error, Please Retry.', + 'errorHttp':'Http Error', + 'errorServerUpload':'Server Result Error.' + }, + + 'insertvideo':{ + 'static':{ + 'lang_tab_insertV':"Video", + 'lang_tab_searchV':"Search", + 'lang_tab_uploadV':"Upload", + 'lang_video_url':" URL ", + 'lang_video_size':"Video Size", + 'lang_videoW':"Width", + 'lang_videoH':"Height", + 'lang_alignment':"Alignment", + 'videoSearchTxt':{'value':"Enter the search keyword!"}, + 'videoType':{'options':["All", "Hot", "Entertainment", "Funny", "Sports", "Science", "variety"]}, + 'videoSearchBtn':{'value':"Search in Baidu"}, + 'videoSearchReset':{'value':"Clear result"}, + + 'lang_input_fileStatus':' No file uploaded!', + 'startUpload':{'style':"background:url(upload.png) no-repeat;"}, + + 'lang_upload_size':"Video Size", + 'lang_upload_width':"Width", + 'lang_upload_height':"Height", + 'lang_upload_alignment':"Alignment", + 'lang_format_advice':"Recommends mp4 format." + }, + 'numError':"Please enter the correct Num. e.g 123,400", + 'floatLeft':"Float left", + 'floatRight':"Float right", + 'default':"Default", + 'block':"Display in block", + 'urlError':"The video url format may be wrong!", + 'loading':"  The video is loading, please wait…", + 'clickToSelect':"Click to select", + 'goToSource':'Visit source video ', + 'noVideo':"    Sorry,can't find the video,please try again!", + + 'browseFiles':'Open files', + 'uploadSuccess':'Upload Successful!', + 'delSuccessFile':'Remove from the success of the queue', + 'delFailSaveFile':'Remove the save failed file', + 'statusPrompt':' file(s) uploaded! ', + 'flashVersionError':'The current Flash version is too low, please update FlashPlayer,then try again!', + 'flashLoadingError':'The Flash failed loading! Please check the path or network state', + 'fileUploadReady':'Wait for uploading...', + 'delUploadQueue':'Remove from the uploading queue ', + 'limitPrompt1':'Can not choose more than single', + 'limitPrompt2':'file(s)!Please choose again!', + 'delFailFile':'Remove failure file', + 'fileSizeLimit':'File size exceeds the limit!', + 'emptyFile':'Can not upload an empty file!', + 'fileTypeError':'File type error!', + 'unknownError':'Unknown error!', + 'fileUploading':'Uploading,please wait...', + 'cancelUpload':'Cancel upload', + 'netError':'Network error', + 'failUpload':'Upload failed', + 'serverIOError':'Server IO error!', + 'noAuthority':'No Permission!', + 'fileNumLimit':'Upload limit to the number', + 'failCheck':'Authentication fails, the upload is skipped!', + 'fileCanceling':'Cancel, please wait...', + 'stopUploading':'Upload has stopped...', + + 'uploadSelectFile':'Select File', + 'uploadAddFile':'Add File', + 'uploadStart':'Start Upload', + 'uploadPause':'Pause Upload', + 'uploadContinue':'Continue Upload', + 'uploadRetry':'Retry Upload', + 'uploadDelete':'Delete', + 'uploadTurnLeft':'Turn Left', + 'uploadTurnRight':'Turn Right', + 'uploadPreview':'Doing Preview', + 'updateStatusReady': 'Selected _ files, total _KB.', + 'updateStatusConfirm': '_ uploaded successfully and _ upload failed', + 'updateStatusFinish': 'Total _ files (_KB), _ uploaded successfully', + 'updateStatusError': ' and _ upload failed', + 'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player', + 'errorLoadConfig': 'Server config not loaded, upload can not work.', + 'errorExceedSize':'File Size Exceed', + 'errorFileType':'File Type Not Allow', + 'errorInterrupt':'File Upload Interrupted', + 'errorUploadRetry':'Upload Error, Please Retry.', + 'errorHttp':'Http Error', + 'errorServerUpload':'Server Result Error.' + }, + 'webapp':{ + 'tip1':"This function provided by Baidu APP,please apply for baidu APPKey webmaster first!", + 'tip2':"And then open the file ueditor.config.js to set it! ", + 'applyFor':"APPLY FOR", + 'anthorApi':"Baidu API" + }, + 'template':{ + 'static':{ + 'lang_template_bkcolor':'Background Color', + 'lang_template_clear' : 'Keep Content', + 'lang_template_select':'Select Template' + }, + 'blank':"Blank", + 'blog':"Blog", + 'resume':"Resume", + 'richText':"Rich Text", + 'scrPapers':"Scientific Papers" + }, + scrawl:{ + 'static':{ + 'lang_input_previousStep':"Previous", + 'lang_input_nextsStep':"Next", + 'lang_input_clear':'Clear', + 'lang_input_addPic':'AddImage', + 'lang_input_ScalePic':'ScaleImage', + 'lang_input_removePic':'RemoveImage', + 'J_imgTxt':{title:'Add background image'} + }, + 'noScarwl':"No paint, a white paper...", + 'scrawlUpLoading':"Image is uploading, please wait...", + 'continueBtn':"Try again", + 'imageError':"Image failed to load!", + 'backgroundUploading':'Image is uploading,please wait...' + }, + 'music':{ + 'static':{ + 'lang_input_tips':"Input singer/song/album, search you interested in music!", + 'J_searchBtn':{value:'Search songs'} + }, + 'emptyTxt':'Not search to the relevant music results, please change a keyword try.', + 'chapter':'Songs', + 'singer':'Singer', + 'special':'Album', + 'listenTest':'Audition' + }, + anchor:{ + 'static':{ + 'lang_input_anchorName':'Anchor Name:' + } + }, + 'charts':{ + 'static':{ + 'lang_data_source':'Data source:', + 'lang_chart_format': 'Chart format:', + 'lang_data_align': 'Align', + 'lang_chart_align_same': 'Consistent with the X-axis Y-axis', + 'lang_chart_align_reverse': 'X-axis Y-axis opposite', + 'lang_chart_title': 'Title', + 'lang_chart_main_title': 'main title:', + 'lang_chart_sub_title': 'sub title:', + 'lang_chart_x_title': 'X-axis title:', + 'lang_chart_y_title': 'Y-axis title:', + 'lang_chart_tip': 'Prompt', + 'lang_cahrt_tip_prefix': 'prefix:', + 'lang_cahrt_tip_description': '仅饼图有效, 当鼠标移动到饼图中相应的块上时,提示框内的文字的前缀', + 'lang_chart_data_unit': 'Unit', + 'lang_chart_data_unit_title': 'unit:', + 'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位, 比如: 温度的单位 ℃', + 'lang_chart_type': 'Chart type:', + 'lang_prev_btn': 'Previous', + 'lang_next_btn': 'Next' + } + }, + emotion:{ + 'static':{ + 'lang_input_choice':'Choice', + 'lang_input_Tuzki':'Tuzki', + 'lang_input_lvdouwa':'LvDouWa', + 'lang_input_BOBO':'BOBO', + 'lang_input_babyCat':'BabyCat', + 'lang_input_bubble':'Bubble', + 'lang_input_youa':'YouA' + } + }, + gmap:{ + 'static':{ + 'lang_input_address':'Address:', + 'lang_input_search':'Search', + 'address':{value:"Beijing"} + }, + searchError:'Unable to locate the address!' + }, + help:{ + 'static':{ + 'lang_input_about':'About', + 'lang_input_shortcuts':'Shortcuts', + 'lang_input_introduction':"UEditor is developed by Baidu Co.ltd. It is lightweight, customizable , focusing on user experience and etc. , UEditor is based on open source BSD license , allowing free use and redistribution.", + 'lang_Txt_shortcuts':'Shortcuts', + 'lang_Txt_func':'Function', + 'lang_Txt_bold':'Bold', + 'lang_Txt_copy':'Copy', + 'lang_Txt_cut':'Cut', + 'lang_Txt_Paste':'Paste', + 'lang_Txt_undo':'Undo', + 'lang_Txt_redo':'Redo', + 'lang_Txt_italic':'Italic', + 'lang_Txt_underline':'Underline', + 'lang_Txt_selectAll':'Select All', + 'lang_Txt_visualEnter':'Submit', + 'lang_Txt_fullscreen':'Fullscreen' + } + }, + insertframe:{ + 'static':{ + 'lang_input_address':'Address:', + 'lang_input_width':'Width:', + 'lang_input_height':'height:', + 'lang_input_isScroll':'Enable scrollbars:', + 'lang_input_frameborder':'Show frame border:', + 'lang_input_alignMode':'Alignment:', + 'align':{title:"Alignment", options:["Default", "Left", "Right", "Center"]} + }, + 'enterAddress':'Please enter an address!' + }, + link:{ + 'static':{ + 'lang_input_text':'Text:', + 'lang_input_url':'URL:', + 'lang_input_title':'Title:', + 'lang_input_target':'open in new window:' + }, + 'validLink':'Supports only effective when a link is selected', + 'httpPrompt':'The hyperlink you enter should start with "http|https|ftp://"!' + }, + map:{ + 'static':{ + lang_city:"City", + lang_address:"Address", + city:{value:"Beijing"}, + lang_search:"Search", + lang_dynamicmap:"Dynamic map" + }, + cityMsg:"Please enter the city name!", + errorMsg:"Can't find the place!" + }, + searchreplace:{ + 'static':{ + lang_tab_search:"Search", + lang_tab_replace:"Replace", + lang_search1:"Search", + lang_search2:"Search", + lang_replace:"Replace", + lang_searchReg:'Support regular expression ,which starts and ends with a slash ,for example "/expression/"', + lang_searchReg1:'Support regular expression ,which starts and ends with a slash ,for example "/expression/"', + lang_case_sensitive1:"Case sense", + lang_case_sensitive2:"Case sense", + nextFindBtn:{value:"Next"}, + preFindBtn:{value:"Preview"}, + nextReplaceBtn:{value:"Next"}, + preReplaceBtn:{value:"Preview"}, + repalceBtn:{value:"Replace"}, + repalceAllBtn:{value:"Replace all"} + }, + getEnd:"Has the search to the bottom!", + getStart:"Has the search to the top!", + countMsg:"Altogether replaced {#count} character(s)!" + }, + snapscreen:{ + 'static':{ + lang_showMsg:"You should install the UEditor screenshots program first!", + lang_download:"Download!", + lang_step1:"Step1:Download the program and then run it", + lang_step2:"Step2:After complete install,try to click the button again" + } + }, + spechars:{ + 'static':{}, + tsfh:"Special", + lmsz:"Roman", + szfh:"Numeral", + rwfh:"Japanese", + xlzm:"The Greek", + ewzm:"Russian", + pyzm:"Phonetic", + yyyb:"English", + zyzf:"Others" + }, + 'edittable':{ + 'static':{ + 'lang_tableStyle':'Table style', + 'lang_insertCaption':'Add table header row', + 'lang_insertTitle':'Add table title row', + 'lang_insertTitleCol':'Add table title col', + 'lang_tableSize':'Automatically adjust table size', + 'lang_autoSizeContent':'Adaptive by form text', + 'lang_orderbycontent':"Table of contents sortable", + 'lang_autoSizePage':'Page width adaptive', + 'lang_example':'Example', + 'lang_borderStyle':'Table Border', + 'lang_color':'Color:' + }, + captionName:'Caption', + titleName:'Title', + cellsName:'text', + errorMsg:'There are merged cells, can not sort.' + }, + 'edittip':{ + 'static':{ + lang_delRow:'Delete entire row', + lang_delCol:'Delete entire col' + } + }, + 'edittd':{ + 'static':{ + lang_tdBkColor:'Background Color:' + } + }, + 'formula':{ + 'static':{ + } + }, + wordimage:{ + 'static':{ + lang_resave:"The re-save step", + uploadBtn:{src:"upload.png", alt:"Upload"}, + clipboard:{style:"background: url(copy.png) -153px -1px no-repeat;"}, + lang_step:" 1. Click top button to copy the url and then open the dialog to paste it. 2. Open after choose photos uploaded process." + }, + fileType:"Image", + flashError:"Flash initialization failed!", + netError:"Network error! Please try again!", + copySuccess:"URL has been copied!", + + 'flashI18n':{ + lang:encodeURI( '{"UploadingState":"totalNum: ${a},uploadComplete: ${b}", "BeforeUpload":"waitingNum: ${a}", "ExceedSize":"Size exceed${a}", "ErrorInPreview":"Preview failed", "DefaultDescription":"Description", "LoadingImage":"Loading..."}' ), + uploadingTF:encodeURI( '{"font":"Arial", "size":12, "color":"0x000", "bold":"true", "italic":"false", "underline":"false"}' ), + imageTF:encodeURI( '{"font":"Arial", "size":11, "color":"red", "bold":"false", "italic":"false", "underline":"false"}' ), + textEncoding:"utf-8", + addImageSkinURL:"addImage.png", + allDeleteBtnUpSkinURL:"allDeleteBtnUpSkin.png", + allDeleteBtnHoverSkinURL:"allDeleteBtnHoverSkin.png", + rotateLeftBtnEnableSkinURL:"rotateLeftEnable.png", + rotateLeftBtnDisableSkinURL:"rotateLeftDisable.png", + rotateRightBtnEnableSkinURL:"rotateRightEnable.png", + rotateRightBtnDisableSkinURL:"rotateRightDisable.png", + deleteBtnEnableSkinURL:"deleteEnable.png", + deleteBtnDisableSkinURL:"deleteDisable.png", + backgroundURL:'', + listBackgroundURL:'', + buttonURL:'button.png' + } + }, + 'autosave': { + 'success':'Local conservation success' + } +}; diff --git a/public/vendor/ueditor/lang/en/images/addimage.png b/public/vendor/ueditor/lang/en/images/addimage.png new file mode 100644 index 0000000..3a2fd17 Binary files /dev/null and b/public/vendor/ueditor/lang/en/images/addimage.png differ diff --git a/public/vendor/ueditor/lang/en/images/alldeletebtnhoverskin.png b/public/vendor/ueditor/lang/en/images/alldeletebtnhoverskin.png new file mode 100644 index 0000000..355eeab Binary files /dev/null and b/public/vendor/ueditor/lang/en/images/alldeletebtnhoverskin.png differ diff --git a/public/vendor/ueditor/lang/en/images/alldeletebtnupskin.png b/public/vendor/ueditor/lang/en/images/alldeletebtnupskin.png new file mode 100644 index 0000000..61658ce Binary files /dev/null and b/public/vendor/ueditor/lang/en/images/alldeletebtnupskin.png differ diff --git a/public/vendor/ueditor/lang/en/images/background.png b/public/vendor/ueditor/lang/en/images/background.png new file mode 100644 index 0000000..d5bf5fd Binary files /dev/null and b/public/vendor/ueditor/lang/en/images/background.png differ diff --git a/public/vendor/ueditor/lang/en/images/button.png b/public/vendor/ueditor/lang/en/images/button.png new file mode 100644 index 0000000..098874c Binary files /dev/null and b/public/vendor/ueditor/lang/en/images/button.png differ diff --git a/public/vendor/ueditor/lang/en/images/copy.png b/public/vendor/ueditor/lang/en/images/copy.png new file mode 100644 index 0000000..f982e8b Binary files /dev/null and b/public/vendor/ueditor/lang/en/images/copy.png differ diff --git a/public/vendor/ueditor/lang/en/images/deletedisable.png b/public/vendor/ueditor/lang/en/images/deletedisable.png new file mode 100644 index 0000000..c8ee750 Binary files /dev/null and b/public/vendor/ueditor/lang/en/images/deletedisable.png differ diff --git a/public/vendor/ueditor/lang/en/images/deleteenable.png b/public/vendor/ueditor/lang/en/images/deleteenable.png new file mode 100644 index 0000000..26acc88 Binary files /dev/null and b/public/vendor/ueditor/lang/en/images/deleteenable.png differ diff --git a/public/vendor/ueditor/lang/en/images/listbackground.png b/public/vendor/ueditor/lang/en/images/listbackground.png new file mode 100644 index 0000000..4f82ccd Binary files /dev/null and b/public/vendor/ueditor/lang/en/images/listbackground.png differ diff --git a/public/vendor/ueditor/lang/en/images/localimage.png b/public/vendor/ueditor/lang/en/images/localimage.png new file mode 100644 index 0000000..12c8e6a Binary files /dev/null and b/public/vendor/ueditor/lang/en/images/localimage.png differ diff --git a/public/vendor/ueditor/lang/en/images/music.png b/public/vendor/ueditor/lang/en/images/music.png new file mode 100644 index 0000000..2f495fe Binary files /dev/null and b/public/vendor/ueditor/lang/en/images/music.png differ diff --git a/public/vendor/ueditor/lang/en/images/rotateleftdisable.png b/public/vendor/ueditor/lang/en/images/rotateleftdisable.png new file mode 100644 index 0000000..741526e Binary files /dev/null and b/public/vendor/ueditor/lang/en/images/rotateleftdisable.png differ diff --git a/public/vendor/ueditor/lang/en/images/rotateleftenable.png b/public/vendor/ueditor/lang/en/images/rotateleftenable.png new file mode 100644 index 0000000..e164ddb Binary files /dev/null and b/public/vendor/ueditor/lang/en/images/rotateleftenable.png differ diff --git a/public/vendor/ueditor/lang/en/images/rotaterightdisable.png b/public/vendor/ueditor/lang/en/images/rotaterightdisable.png new file mode 100644 index 0000000..5a78c26 Binary files /dev/null and b/public/vendor/ueditor/lang/en/images/rotaterightdisable.png differ diff --git a/public/vendor/ueditor/lang/en/images/rotaterightenable.png b/public/vendor/ueditor/lang/en/images/rotaterightenable.png new file mode 100644 index 0000000..d768531 Binary files /dev/null and b/public/vendor/ueditor/lang/en/images/rotaterightenable.png differ diff --git a/public/vendor/ueditor/lang/en/images/upload.png b/public/vendor/ueditor/lang/en/images/upload.png new file mode 100644 index 0000000..7bb15b3 Binary files /dev/null and b/public/vendor/ueditor/lang/en/images/upload.png differ diff --git a/public/vendor/ueditor/lang/zh-cn/images/copy.png b/public/vendor/ueditor/lang/zh-cn/images/copy.png new file mode 100644 index 0000000..b2536aa Binary files /dev/null and b/public/vendor/ueditor/lang/zh-cn/images/copy.png differ diff --git a/public/vendor/ueditor/lang/zh-cn/images/localimage.png b/public/vendor/ueditor/lang/zh-cn/images/localimage.png new file mode 100644 index 0000000..7303c36 Binary files /dev/null and b/public/vendor/ueditor/lang/zh-cn/images/localimage.png differ diff --git a/public/vendor/ueditor/lang/zh-cn/images/music.png b/public/vendor/ueditor/lang/zh-cn/images/music.png new file mode 100644 index 0000000..354edeb Binary files /dev/null and b/public/vendor/ueditor/lang/zh-cn/images/music.png differ diff --git a/public/vendor/ueditor/lang/zh-cn/images/upload.png b/public/vendor/ueditor/lang/zh-cn/images/upload.png new file mode 100644 index 0000000..08d4d92 Binary files /dev/null and b/public/vendor/ueditor/lang/zh-cn/images/upload.png differ diff --git a/public/vendor/ueditor/lang/zh-cn/zh-cn.js b/public/vendor/ueditor/lang/zh-cn/zh-cn.js new file mode 100644 index 0000000..4d5178f --- /dev/null +++ b/public/vendor/ueditor/lang/zh-cn/zh-cn.js @@ -0,0 +1,669 @@ +/** + * Created with JetBrains PhpStorm. + * User: taoqili + * Date: 12-6-12 + * Time: 下午5:02 + * To change this template use File | Settings | File Templates. + */ +UE.I18N['zh-cn'] = { + 'labelMap':{ + 'anchor':'锚点', 'undo':'撤销', 'redo':'重做', 'bold':'加粗', 'indent':'首行缩进', 'snapscreen':'截图', + 'italic':'斜体', 'underline':'下划线', 'strikethrough':'删除线', 'subscript':'下标','fontborder':'字符边框', + 'superscript':'上标', 'formatmatch':'格式刷', 'source':'源代码', 'blockquote':'引用', + 'pasteplain':'纯文本粘贴模式', 'selectall':'全选', 'print':'打印', 'preview':'预览', + 'horizontal':'分隔线', 'removeformat':'清除格式', 'time':'时间', 'date':'日期', + 'unlink':'取消链接', 'insertrow':'前插入行', 'insertcol':'前插入列', 'mergeright':'右合并单元格', 'mergedown':'下合并单元格', + 'deleterow':'删除行', 'deletecol':'删除列', 'splittorows':'拆分成行', + 'splittocols':'拆分成列', 'splittocells':'完全拆分单元格','deletecaption':'删除表格标题','inserttitle':'插入标题', + 'mergecells':'合并多个单元格', 'deletetable':'删除表格', 'cleardoc':'清空文档','insertparagraphbeforetable':"表格前插入行",'insertcode':'代码语言', + 'fontfamily':'字体', 'fontsize':'字号', 'paragraph':'段落格式', 'simpleupload':'单图上传', 'insertimage':'多图上传','edittable':'表格属性','edittd':'单元格属性', 'link':'超链接', + 'emotion':'表情', 'spechars':'特殊字符', 'searchreplace':'查询替换', 'map':'Baidu地图', 'gmap':'Google地图', + 'insertvideo':'视频', 'help':'帮助', 'justifyleft':'居左对齐', 'justifyright':'居右对齐', 'justifycenter':'居中对齐', + 'justifyjustify':'两端对齐', 'forecolor':'字体颜色', 'backcolor':'背景色', 'insertorderedlist':'有序列表', + 'insertunorderedlist':'无序列表', 'fullscreen':'全屏', 'directionalityltr':'从左向右输入', 'directionalityrtl':'从右向左输入', + 'rowspacingtop':'段前距', 'rowspacingbottom':'段后距', 'pagebreak':'分页', 'insertframe':'插入Iframe', 'imagenone':'默认', + 'imageleft':'左浮动', 'imageright':'右浮动', 'attachment':'附件', 'imagecenter':'居中', 'wordimage':'图片转存', + 'lineheight':'行间距','edittip' :'编辑提示','customstyle':'自定义标题', 'autotypeset':'自动排版', + 'webapp':'百度应用','touppercase':'字母大写', 'tolowercase':'字母小写','background':'背景','template':'模板','scrawl':'涂鸦', + 'music':'音乐','inserttable':'插入表格','drafts': '从草稿箱加载', 'charts': '图表' + }, + 'insertorderedlist':{ + 'num':'1,2,3...', + 'num1':'1),2),3)...', + 'num2':'(1),(2),(3)...', + 'cn':'一,二,三....', + 'cn1':'一),二),三)....', + 'cn2':'(一),(二),(三)....', + 'decimal':'1,2,3...', + 'lower-alpha':'a,b,c...', + 'lower-roman':'i,ii,iii...', + 'upper-alpha':'A,B,C...', + 'upper-roman':'I,II,III...' + }, + 'insertunorderedlist':{ + 'circle':'○ 大圆圈', + 'disc':'● 小黑点', + 'square':'■ 小方块 ', + 'dash' :'— 破折号', + 'dot':' 。 小圆圈' + }, + 'paragraph':{'p':'段落', 'h1':'标题 1', 'h2':'标题 2', 'h3':'标题 3', 'h4':'标题 4', 'h5':'标题 5', 'h6':'标题 6'}, + 'fontfamily':{ + 'songti':'宋体', + 'kaiti':'楷体', + 'heiti':'黑体', + 'lishu':'隶书', + 'yahei':'微软雅黑', + 'andaleMono':'andale mono', + 'arial': 'arial', + 'arialBlack':'arial black', + 'comicSansMs':'comic sans ms', + 'impact':'impact', + 'timesNewRoman':'times new roman' + }, + 'customstyle':{ + 'tc':'标题居中', + 'tl':'标题居左', + 'im':'强调', + 'hi':'明显强调' + }, + 'autoupload': { + 'exceedSizeError': '文件大小超出限制', + 'exceedTypeError': '文件格式不允许', + 'jsonEncodeError': '服务器返回格式错误', + 'loading':"正在上传...", + 'loadError':"上传错误", + 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!' + }, + 'simpleupload':{ + 'exceedSizeError': '文件大小超出限制', + 'exceedTypeError': '文件格式不允许', + 'jsonEncodeError': '服务器返回格式错误', + 'loading':"正在上传...", + 'loadError':"上传错误", + 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!' + }, + 'elementPathTip':"元素路径", + 'wordCountTip':"字数统计", + 'wordCountMsg':'当前已输入{#count}个字符, 您还可以输入{#leave}个字符。 ', + 'wordOverFlowMsg':'字数超出最大允许值,服务器可能拒绝保存!', + 'ok':"确认", + 'cancel':"取消", + 'closeDialog':"关闭对话框", + 'tableDrag':"表格拖动必须引入uiUtils.js文件!", + 'autofloatMsg':"工具栏浮动依赖编辑器UI,您首先需要引入UI文件!", + 'loadconfigError': '获取后台配置项请求出错,上传功能将不能正常使用!', + 'loadconfigFormatError': '后台配置项返回格式出错,上传功能将不能正常使用!', + 'loadconfigHttpError': '请求后台配置项http错误,上传功能将不能正常使用!', + 'snapScreen_plugin':{ + 'browserMsg':"仅支持IE浏览器!", + 'callBackErrorMsg':"服务器返回数据有误,请检查配置项之后重试。", + 'uploadErrorMsg':"截图上传失败,请检查服务器端环境! " + }, + 'insertcode':{ + 'as3':'ActionScript 3', + 'bash':'Bash/Shell', + 'cpp':'C/C++', + 'css':'CSS', + 'cf':'ColdFusion', + 'c#':'C#', + 'delphi':'Delphi', + 'diff':'Diff', + 'erlang':'Erlang', + 'groovy':'Groovy', + 'html':'HTML', + 'java':'Java', + 'jfx':'JavaFX', + 'js':'JavaScript', + 'pl':'Perl', + 'php':'PHP', + 'plain':'Plain Text', + 'ps':'PowerShell', + 'python':'Python', + 'ruby':'Ruby', + 'scala':'Scala', + 'sql':'SQL', + 'vb':'Visual Basic', + 'xml':'XML' + }, + 'confirmClear':"确定清空当前文档么?", + 'contextMenu':{ + 'delete':"删除", + 'selectall':"全选", + 'deletecode':"删除代码", + 'cleardoc':"清空文档", + 'confirmclear':"确定清空当前文档么?", + 'unlink':"删除超链接", + 'paragraph':"段落格式", + 'edittable':"表格属性", + 'aligntd':"单元格对齐方式", + 'aligntable':'表格对齐方式', + 'tableleft':'左浮动', + 'tablecenter':'居中显示', + 'tableright':'右浮动', + 'edittd':"单元格属性", + 'setbordervisible':'设置表格边线可见', + 'justifyleft':'左对齐', + 'justifyright':'右对齐', + 'justifycenter':'居中对齐', + 'justifyjustify':'两端对齐', + 'table':"表格", + 'inserttable':'插入表格', + 'deletetable':"删除表格", + 'insertparagraphbefore':"前插入段落", + 'insertparagraphafter':'后插入段落', + 'deleterow':"删除当前行", + 'deletecol':"删除当前列", + 'insertrow':"前插入行", + 'insertcol':"左插入列", + 'insertrownext':'后插入行', + 'insertcolnext':'右插入列', + 'insertcaption':'插入表格名称', + 'deletecaption':'删除表格名称', + 'inserttitle':'插入表格标题行', + 'deletetitle':'删除表格标题行', + 'inserttitlecol':'插入表格标题列', + 'deletetitlecol':'删除表格标题列', + 'averageDiseRow':'平均分布各行', + 'averageDisCol':'平均分布各列', + 'mergeright':"向右合并", + 'mergeleft':"向左合并", + 'mergedown':"向下合并", + 'mergecells':"合并单元格", + 'splittocells':"完全拆分单元格", + 'splittocols':"拆分成列", + 'splittorows':"拆分成行", + 'tablesort':'表格排序', + 'enablesort':'设置表格可排序', + 'disablesort':'取消表格可排序', + 'reversecurrent':'逆序当前', + 'orderbyasc':'按ASCII字符升序', + 'reversebyasc':'按ASCII字符降序', + 'orderbynum':'按数值大小升序', + 'reversebynum':'按数值大小降序', + 'borderbk':'边框底纹', + 'setcolor':'表格隔行变色', + 'unsetcolor':'取消表格隔行变色', + 'setbackground':'选区背景隔行', + 'unsetbackground':'取消选区背景', + 'redandblue':'红蓝相间', + 'threecolorgradient':'三色渐变', + 'copy':"复制(Ctrl + c)", + 'copymsg': "浏览器不支持,请使用 'Ctrl + c'", + 'paste':"粘贴(Ctrl + v)", + 'pastemsg': "浏览器不支持,请使用 'Ctrl + v'" + }, + 'copymsg': "浏览器不支持,请使用 'Ctrl + c'", + 'pastemsg': "浏览器不支持,请使用 'Ctrl + v'", + 'anthorMsg':"链接", + 'clearColor':'清空颜色', + 'standardColor':'标准颜色', + 'themeColor':'主题颜色', + 'property':'属性', + 'default':'默认', + 'modify':'修改', + 'justifyleft':'左对齐', + 'justifyright':'右对齐', + 'justifycenter':'居中', + 'justify':'默认', + 'clear':'清除', + 'anchorMsg':'锚点', + 'delete':'删除', + 'clickToUpload':"点击上传", + 'unset':'尚未设置语言文件', + 't_row':'行', + 't_col':'列', + 'more':'更多', + 'pasteOpt':'粘贴选项', + 'pasteSourceFormat':"保留源格式", + 'tagFormat':'只保留标签', + 'pasteTextFormat':'只保留文本', + 'autoTypeSet':{ + 'mergeLine':"合并空行", + 'delLine':"清除空行", + 'removeFormat':"清除格式", + 'indent':"首行缩进", + 'alignment':"对齐方式", + 'imageFloat':"图片浮动", + 'removeFontsize':"清除字号", + 'removeFontFamily':"清除字体", + 'removeHtml':"清除冗余HTML代码", + 'pasteFilter':"粘贴过滤", + 'run':"执行", + 'symbol':'符号转换', + 'bdc2sb':'全角转半角', + 'tobdc':'半角转全角' + }, + + 'background':{ + 'static':{ + 'lang_background_normal':'背景设置', + 'lang_background_local':'在线图片', + 'lang_background_set':'选项', + 'lang_background_none':'无背景色', + 'lang_background_colored':'有背景色', + 'lang_background_color':'颜色设置', + 'lang_background_netimg':'网络图片', + 'lang_background_align':'对齐方式', + 'lang_background_position':'精确定位', + 'repeatType':{'options':["居中", "横向重复", "纵向重复", "平铺","自定义"]} + + }, + 'noUploadImage':"当前未上传过任何图片!", + 'toggleSelect':"单击可切换选中状态\n原图尺寸: " + }, + //===============dialog i18N======================= + 'insertimage':{ + 'static':{ + 'lang_tab_remote':"插入图片", //节点 + 'lang_tab_upload':"本地上传", + 'lang_tab_online':"在线管理", + 'lang_tab_search':"图片搜索", + 'lang_input_url':"地 址:", + 'lang_input_size':"大 小:", + 'lang_input_width':"宽度", + 'lang_input_height':"高度", + 'lang_input_border':"边 框:", + 'lang_input_vhspace':"边 距:", + 'lang_input_title':"描 述:", + 'lang_input_align':'图片浮动方式:', + 'lang_imgLoading':" 图片加载中……", + 'lang_start_upload':"开始上传", + 'lock':{'title':"锁定宽高比例"}, //属性 + 'searchType':{'title':"图片类型", 'options':["新闻", "壁纸", "表情", "头像"]}, //select的option + 'searchTxt':{'value':"请输入搜索关键词"}, + 'searchBtn':{'value':"百度一下"}, + 'searchReset':{'value':"清空搜索"}, + 'noneAlign':{'title':'无浮动'}, + 'leftAlign':{'title':'左浮动'}, + 'rightAlign':{'title':'右浮动'}, + 'centerAlign':{'title':'居中独占一行'} + }, + 'uploadSelectFile':'点击选择图片', + 'uploadAddFile':'继续添加', + 'uploadStart':'开始上传', + 'uploadPause':'暂停上传', + 'uploadContinue':'继续上传', + 'uploadRetry':'重试上传', + 'uploadDelete':'删除', + 'uploadTurnLeft':'向左旋转', + 'uploadTurnRight':'向右旋转', + 'uploadPreview':'预览中', + 'uploadNoPreview':'不能预览', + 'updateStatusReady': '选中_张图片,共_KB。', + 'updateStatusConfirm': '已成功上传_张照片,_张照片上传失败', + 'updateStatusFinish': '共_张(_KB),_张上传成功', + 'updateStatusError': ',_张上传失败。', + 'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。', + 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!', + 'errorExceedSize':'文件大小超出', + 'errorFileType':'文件格式不允许', + 'errorInterrupt':'文件传输中断', + 'errorUploadRetry':'上传失败,请重试', + 'errorHttp':'http请求错误', + 'errorServerUpload':'服务器返回出错', + 'remoteLockError':"宽高不正确,不能所定比例", + 'numError':"请输入正确的长度或者宽度值!例如:123,400", + 'imageUrlError':"不允许的图片格式或者图片域!", + 'imageLoadError':"图片加载失败!请检查链接地址或网络状态!", + 'searchRemind':"请输入搜索关键词", + 'searchLoading':"图片加载中,请稍后……", + 'searchRetry':" :( ,抱歉,没有找到图片!请重试一次!" + }, + 'attachment':{ + 'static':{ + 'lang_tab_upload': '上传附件', + 'lang_tab_online': '在线附件', + 'lang_start_upload':"开始上传", + 'lang_drop_remind':"可以将文件拖到这里,单次最多可选100个文件" + }, + 'uploadSelectFile':'点击选择文件', + 'uploadAddFile':'继续添加', + 'uploadStart':'开始上传', + 'uploadPause':'暂停上传', + 'uploadContinue':'继续上传', + 'uploadRetry':'重试上传', + 'uploadDelete':'删除', + 'uploadTurnLeft':'向左旋转', + 'uploadTurnRight':'向右旋转', + 'uploadPreview':'预览中', + 'updateStatusReady': '选中_个文件,共_KB。', + 'updateStatusConfirm': '已成功上传_个文件,_个文件上传失败', + 'updateStatusFinish': '共_个(_KB),_个上传成功', + 'updateStatusError': ',_张上传失败。', + 'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。', + 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!', + 'errorExceedSize':'文件大小超出', + 'errorFileType':'文件格式不允许', + 'errorInterrupt':'文件传输中断', + 'errorUploadRetry':'上传失败,请重试', + 'errorHttp':'http请求错误', + 'errorServerUpload':'服务器返回出错' + }, + 'insertvideo':{ + 'static':{ + 'lang_tab_insertV':"插入视频", + 'lang_tab_searchV':"搜索视频", + 'lang_tab_uploadV':"上传视频", + 'lang_video_url':"视频网址", + 'lang_video_size':"视频尺寸", + 'lang_videoW':"宽度", + 'lang_videoH':"高度", + 'lang_alignment':"对齐方式", + 'videoSearchTxt':{'value':"请输入搜索关键字!"}, + 'videoType':{'options':["全部", "热门", "娱乐", "搞笑", "体育", "科技", "综艺"]}, + 'videoSearchBtn':{'value':"百度一下"}, + 'videoSearchReset':{'value':"清空结果"}, + + 'lang_input_fileStatus':' 当前未上传文件', + 'startUpload':{'style':"background:url(upload.png) no-repeat;"}, + + 'lang_upload_size':"视频尺寸", + 'lang_upload_width':"宽度", + 'lang_upload_height':"高度", + 'lang_upload_alignment':"对齐方式", + 'lang_format_advice':"建议使用mp4格式." + + }, + 'numError':"请输入正确的数值,如123,400", + 'floatLeft':"左浮动", + 'floatRight':"右浮动", + '"default"':"默认", + 'block':"独占一行", + 'urlError':"输入的视频地址有误,请检查后再试!", + 'loading':"  视频加载中,请等待……", + 'clickToSelect':"点击选中", + 'goToSource':'访问源视频', + 'noVideo':"    抱歉,找不到对应的视频,请重试!", + + 'browseFiles':'浏览文件', + 'uploadSuccess':'上传成功!', + 'delSuccessFile':'从成功队列中移除', + 'delFailSaveFile':'移除保存失败文件', + 'statusPrompt':' 个文件已上传! ', + 'flashVersionError':'当前Flash版本过低,请更新FlashPlayer后重试!', + 'flashLoadingError':'Flash加载失败!请检查路径或网络状态', + 'fileUploadReady':'等待上传……', + 'delUploadQueue':'从上传队列中移除', + 'limitPrompt1':'单次不能选择超过', + 'limitPrompt2':'个文件!请重新选择!', + 'delFailFile':'移除失败文件', + 'fileSizeLimit':'文件大小超出限制!', + 'emptyFile':'空文件无法上传!', + 'fileTypeError':'文件类型不允许!', + 'unknownError':'未知错误!', + 'fileUploading':'上传中,请等待……', + 'cancelUpload':'取消上传', + 'netError':'网络错误', + 'failUpload':'上传失败!', + 'serverIOError':'服务器IO错误!', + 'noAuthority':'无权限!', + 'fileNumLimit':'上传个数限制', + 'failCheck':'验证失败,本次上传被跳过!', + 'fileCanceling':'取消中,请等待……', + 'stopUploading':'上传已停止……', + + 'uploadSelectFile':'点击选择文件', + 'uploadAddFile':'继续添加', + 'uploadStart':'开始上传', + 'uploadPause':'暂停上传', + 'uploadContinue':'继续上传', + 'uploadRetry':'重试上传', + 'uploadDelete':'删除', + 'uploadTurnLeft':'向左旋转', + 'uploadTurnRight':'向右旋转', + 'uploadPreview':'预览中', + 'updateStatusReady': '选中_个文件,共_KB。', + 'updateStatusConfirm': '成功上传_个,_个失败', + 'updateStatusFinish': '共_个(_KB),_个成功上传', + 'updateStatusError': ',_张上传失败。', + 'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。', + 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!', + 'errorExceedSize':'文件大小超出', + 'errorFileType':'文件格式不允许', + 'errorInterrupt':'文件传输中断', + 'errorUploadRetry':'上传失败,请重试', + 'errorHttp':'http请求错误', + 'errorServerUpload':'服务器返回出错' + }, + 'webapp':{ + 'tip1':"本功能由百度APP提供,如看到此页面,请各位站长首先申请百度APPKey!", + 'tip2':"申请完成之后请至ueditor.config.js中配置获得的appkey! ", + 'applyFor':"点此申请", + 'anthorApi':"百度API" + }, + 'template':{ + 'static':{ + 'lang_template_bkcolor':'背景颜色', + 'lang_template_clear' : '保留原有内容', + 'lang_template_select' : '选择模板' + }, + 'blank':"空白文档", + 'blog':"博客文章", + 'resume':"个人简历", + 'richText':"图文混排", + 'sciPapers':"科技论文" + + + }, + 'scrawl':{ + 'static':{ + 'lang_input_previousStep':"上一步", + 'lang_input_nextsStep':"下一步", + 'lang_input_clear':'清空', + 'lang_input_addPic':'添加背景', + 'lang_input_ScalePic':'缩放背景', + 'lang_input_removePic':'删除背景', + 'J_imgTxt':{title:'添加背景图片'} + }, + 'noScarwl':"尚未作画,白纸一张~", + 'scrawlUpLoading':"涂鸦上传中,别急哦~", + 'continueBtn':"继续", + 'imageError':"糟糕,图片读取失败了!", + 'backgroundUploading':'背景图片上传中,别急哦~' + }, + 'music':{ + 'static':{ + 'lang_input_tips':"输入歌手/歌曲/专辑,搜索您感兴趣的音乐!", + 'J_searchBtn':{value:'搜索歌曲'} + }, + 'emptyTxt':'未搜索到相关音乐结果,请换一个关键词试试。', + 'chapter':'歌曲', + 'singer':'歌手', + 'special':'专辑', + 'listenTest':'试听' + }, + 'anchor':{ + 'static':{ + 'lang_input_anchorName':'锚点名字:' + } + }, + 'charts':{ + 'static':{ + 'lang_data_source':'数据源:', + 'lang_chart_format': '图表格式:', + 'lang_data_align': '数据对齐方式', + 'lang_chart_align_same': '数据源与图表X轴Y轴一致', + 'lang_chart_align_reverse': '数据源与图表X轴Y轴相反', + 'lang_chart_title': '图表标题', + 'lang_chart_main_title': '主标题:', + 'lang_chart_sub_title': '子标题:', + 'lang_chart_x_title': 'X轴标题:', + 'lang_chart_y_title': 'Y轴标题:', + 'lang_chart_tip': '提示文字', + 'lang_cahrt_tip_prefix': '提示文字前缀:', + 'lang_cahrt_tip_description': '仅饼图有效, 当鼠标移动到饼图中相应的块上时,提示框内的文字的前缀', + 'lang_chart_data_unit': '数据单位', + 'lang_chart_data_unit_title': '单位:', + 'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位, 比如: 温度的单位 ℃', + 'lang_chart_type': '图表类型:', + 'lang_prev_btn': '上一个', + 'lang_next_btn': '下一个' + } + }, + 'emotion':{ + 'static':{ + 'lang_input_choice':'精选', + 'lang_input_Tuzki':'兔斯基', + 'lang_input_BOBO':'BOBO', + 'lang_input_lvdouwa':'绿豆蛙', + 'lang_input_babyCat':'baby猫', + 'lang_input_bubble':'泡泡', + 'lang_input_youa':'有啊' + } + }, + 'gmap':{ + 'static':{ + 'lang_input_address':'地址', + 'lang_input_search':'搜索', + 'address':{value:"北京"} + }, + searchError:'无法定位到该地址!' + }, + 'help':{ + 'static':{ + 'lang_input_about':'关于UEditor', + 'lang_input_shortcuts':'快捷键', + 'lang_input_introduction':'UEditor是由百度web前端研发部开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点。开源基于BSD协议,允许自由使用和修改代码。', + 'lang_Txt_shortcuts':'快捷键', + 'lang_Txt_func':'功能', + 'lang_Txt_bold':'给选中字设置为加粗', + 'lang_Txt_copy':'复制选中内容', + 'lang_Txt_cut':'剪切选中内容', + 'lang_Txt_Paste':'粘贴', + 'lang_Txt_undo':'重新执行上次操作', + 'lang_Txt_redo':'撤销上一次操作', + 'lang_Txt_italic':'给选中字设置为斜体', + 'lang_Txt_underline':'给选中字加下划线', + 'lang_Txt_selectAll':'全部选中', + 'lang_Txt_visualEnter':'软回车', + 'lang_Txt_fullscreen':'全屏' + } + }, + 'insertframe':{ + 'static':{ + 'lang_input_address':'地址:', + 'lang_input_width':'宽度:', + 'lang_input_height':'高度:', + 'lang_input_isScroll':'允许滚动条:', + 'lang_input_frameborder':'显示框架边框:', + 'lang_input_alignMode':'对齐方式:', + 'align':{title:"对齐方式", options:["默认", "左对齐", "右对齐", "居中"]} + }, + 'enterAddress':'请输入地址!' + }, + 'link':{ + 'static':{ + 'lang_input_text':'文本内容:', + 'lang_input_url':'链接地址:', + 'lang_input_title':'标题:', + 'lang_input_target':'是否在新窗口打开:' + }, + 'validLink':'只支持选中一个链接时生效', + 'httpPrompt':'您输入的超链接中不包含http等协议名称,默认将为您添加http://前缀' + }, + 'map':{ + 'static':{ + lang_city:"城市", + lang_address:"地址", + city:{value:"北京"}, + lang_search:"搜索", + lang_dynamicmap:"插入动态地图" + }, + cityMsg:"请选择城市", + errorMsg:"抱歉,找不到该位置!" + }, + 'searchreplace':{ + 'static':{ + lang_tab_search:"查找", + lang_tab_replace:"替换", + lang_search1:"查找", + lang_search2:"查找", + lang_replace:"替换", + lang_searchReg:'支持正则表达式,添加前后斜杠标示为正则表达式,例如“/表达式/”', + lang_searchReg1:'支持正则表达式,添加前后斜杠标示为正则表达式,例如“/表达式/”', + lang_case_sensitive1:"区分大小写", + lang_case_sensitive2:"区分大小写", + nextFindBtn:{value:"下一个"}, + preFindBtn:{value:"上一个"}, + nextReplaceBtn:{value:"下一个"}, + preReplaceBtn:{value:"上一个"}, + repalceBtn:{value:"替换"}, + repalceAllBtn:{value:"全部替换"} + }, + getEnd:"已经搜索到文章末尾!", + getStart:"已经搜索到文章头部", + countMsg:"总共替换了{#count}处!" + }, + 'snapscreen':{ + 'static':{ + lang_showMsg:"截图功能需要首先安装UEditor截图插件! ", + lang_download:"点此下载", + lang_step1:"第一步,下载UEditor截图插件并运行安装。", + lang_step2:"第二步,插件安装完成后即可使用,如不生效,请重启浏览器后再试!" + } + }, + 'spechars':{ + 'static':{}, + tsfh:"特殊字符", + lmsz:"罗马字符", + szfh:"数学字符", + rwfh:"日文字符", + xlzm:"希腊字母", + ewzm:"俄文字符", + pyzm:"拼音字母", + yyyb:"英语音标", + zyzf:"其他" + }, + 'edittable':{ + 'static':{ + 'lang_tableStyle':'表格样式', + 'lang_insertCaption':'添加表格名称行', + 'lang_insertTitle':'添加表格标题行', + 'lang_insertTitleCol':'添加表格标题列', + 'lang_orderbycontent':"使表格内容可排序", + 'lang_tableSize':'自动调整表格尺寸', + 'lang_autoSizeContent':'按表格文字自适应', + 'lang_autoSizePage':'按页面宽度自适应', + 'lang_example':'示例', + 'lang_borderStyle':'表格边框', + 'lang_color':'颜色:' + }, + captionName:'表格名称', + titleName:'标题', + cellsName:'内容', + errorMsg:'有合并单元格,不可排序' + }, + 'edittip':{ + 'static':{ + lang_delRow:'删除整行', + lang_delCol:'删除整列' + } + }, + 'edittd':{ + 'static':{ + lang_tdBkColor:'背景颜色:' + } + }, + 'formula':{ + 'static':{ + } + }, + 'wordimage':{ + 'static':{ + lang_resave:"转存步骤", + uploadBtn:{src:"upload.png",alt:"上传"}, + clipboard:{style:"background: url(copy.png) -153px -1px no-repeat;"}, + lang_step:"1、点击顶部复制按钮,将地址复制到剪贴板;2、点击添加照片按钮,在弹出的对话框中使用Ctrl+V粘贴地址;3、点击打开后选择图片上传流程。" + }, + 'fileType':"图片", + 'flashError':"FLASH初始化失败,请检查FLASH插件是否正确安装!", + 'netError':"网络连接错误,请重试!", + 'copySuccess':"图片地址已经复制!", + 'flashI18n':{} //留空默认中文 + }, + 'autosave': { + 'saving':'保存中...', + 'success':'本地保存成功' + } +}; diff --git a/public/vendor/ueditor/themes/default/css/ueditor.css b/public/vendor/ueditor/themes/default/css/ueditor.css new file mode 100644 index 0000000..44ae805 --- /dev/null +++ b/public/vendor/ueditor/themes/default/css/ueditor.css @@ -0,0 +1,1903 @@ +/*基础UI构建 +*/ +/* common layer */ +.edui-default .edui-box { + border: none; + padding: 0; + margin: 0; + overflow: hidden; +} + +.edui-default a.edui-box { + display: block; + text-decoration: none; + color: black; +} + +.edui-default a.edui-box:hover { + text-decoration: none; +} + +.edui-default a.edui-box:active { + text-decoration: none; +} + +.edui-default table.edui-box { + border-collapse: collapse; +} + +.edui-default ul.edui-box { + list-style-type: none; +} + +div.edui-box { + position: relative; + display: -moz-inline-box !important; + display: inline-block !important; + vertical-align: top; +} + +.edui-default .edui-clearfix { + zoom: 1 +} + +.edui-default .edui-clearfix:after { + content: '\20'; + display: block; + clear: both; +} + + * html div.edui-box { + display: inline !important; +} + +*:first-child+html div.edui-box { + display: inline !important; +} + +/* control layout */ +.edui-default .edui-button-body, .edui-splitbutton-body, .edui-menubutton-body, .edui-combox-body { + position: relative; +} + +.edui-default .edui-popup { + position: absolute; + -webkit-user-select: none; + -moz-user-select: none; +} + +.edui-default .edui-popup .edui-shadow { + position: absolute; + z-index: -1; +} + +.edui-default .edui-popup .edui-bordereraser { + position: absolute; + overflow: hidden; +} + +.edui-default .edui-tablepicker .edui-canvas { + position: relative; +} + +.edui-default .edui-tablepicker .edui-canvas .edui-overlay { + position: absolute; +} + +.edui-default .edui-dialog-modalmask, .edui-dialog-dragmask { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; +} + +.edui-default .edui-toolbar { + position: relative; +} + +/* + * default theme + */ +.edui-default .edui-label { + cursor: default; +} + +.edui-default span.edui-clickable { + color: blue; + cursor: pointer; + text-decoration: underline; +} + +.edui-default span.edui-unclickable { + color: gray; + cursor: default; +} +/* 工具栏 */ +.edui-default .edui-toolbar { + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + padding: 1px; + overflow: hidden; /*全屏下单独一行不占位*/ + zoom: 1; + width:auto; + height:auto; +} + +.edui-default .edui-toolbar .edui-button, +.edui-default .edui-toolbar .edui-splitbutton, +.edui-default .edui-toolbar .edui-menubutton, +.edui-default .edui-toolbar .edui-combox { + margin: 1px; +} +/*UI工具栏、编辑区域、底部*/ +.edui-default .edui-editor { + border: 1px solid #d4d4d4; + background-color: white; + position: relative; + overflow: visible; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.edui-editor div{ + width:auto; + height:auto; +} +.edui-default .edui-editor-toolbarbox { + position: relative; + zoom: 1; + -webkit-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6); + -moz-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6); + box-shadow:0 1px 4px rgba(204, 204, 204, 0.6); + border-top-left-radius:2px; + border-top-right-radius:2px; +} + +.edui-default .edui-editor-toolbarboxouter { + border-bottom: 1px solid #d4d4d4; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + /*border: 1px solid #d4d4d4;*/ + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + *zoom: 1; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); +} + +.edui-default .edui-editor-toolbarboxinner { + padding: 2px; +} + +.edui-default .edui-editor-iframeholder { + position: relative; + /*for fix ie6 toolbarmsg under iframe bug. relative -> static */ + /*_position: static !important;* +} + +.edui-default .edui-editor-iframeholder textarea { + font-family: consolas, "Courier New", "lucida console", monospace; + font-size: 12px; + line-height: 18px; +} + +.edui-default .edui-editor-bottombar { + /*border-top: 1px solid #ccc;*/ + /*height: 20px;*/ + /*width: 40%;*/ + /*float: left;*/ + /*overflow: hidden;*/ +} + +.edui-default .edui-editor-bottomContainer { + overflow: hidden; +} + +.edui-default .edui-editor-bottomContainer table { + width: 100%; + height: 0; + overflow: hidden; + border-spacing: 0; +} + +.edui-default .edui-editor-bottomContainer td { + white-space: nowrap; + border-top: 1px solid #ccc; + line-height: 20px; + font-size: 12px; + font-family: Arial, Helvetica, Tahoma, Verdana, Sans-Serif; +} + +.edui-default .edui-editor-wordcount { + text-align: right; + margin-right: 5px; + color: #aaa; +} +.edui-default .edui-editor-scale { + width: 12px; +} +.edui-default .edui-editor-scale .edui-editor-icon { + float: right; + width: 100%; + height: 12px; + margin-top: 10px; + background: url(../images/scale.png) no-repeat; + cursor: se-resize; +} +.edui-default .edui-editor-breadcrumb { + margin: 2px 0 0 3px; +} + +.edui-default .edui-editor-breadcrumb span { + cursor: pointer; + text-decoration: underline; + color: blue; +} + +.edui-default .edui-toolbar .edui-for-fullscreen { + float: right; +} + +.edui-default .edui-bubble .edui-popup-content { + border: 1px solid #DCAC6C; + background-color: #fff6d9; + padding: 5px; + font-size: 10pt; + font-family: "宋体"; +} + +.edui-default .edui-bubble .edui-shadow { + /*box-shadow: 1px 1px 3px #818181;*/ + /*-webkit-box-shadow: 2px 2px 3px #818181;*/ + /*-moz-box-shadow: 2px 2px 3px #818181;*/ + /*filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius = '2', MakeShadow = 'true', ShadowOpacity = '0.5');*/ +} + +.edui-default .edui-editor-toolbarmsg { + background-color: #FFF6D9; + border-bottom: 1px solid #ccc; + position: absolute; + bottom: -25px; + left: 0; + z-index: 1009; + width: 99.9%; +} + +.edui-default .edui-editor-toolbarmsg-upload { + font-size: 14px; + color: blue; + width: 100px; + height: 16px; + line-height: 16px; + cursor: pointer; + position: absolute; + top: 5px; + left: 350px; +} + +.edui-default .edui-editor-toolbarmsg-label { + font-size: 12px; + line-height: 16px; + padding: 4px; +} + +.edui-default .edui-editor-toolbarmsg-close { + float: right; + width: 20px; + height: 16px; + line-height: 16px; + cursor: pointer; + color: red; +} +/*可选中菜单按钮*/ +.edui-default .edui-list .edui-bordereraser { + display: none; +} + +.edui-default .edui-listitem { + padding: 1px; + white-space: nowrap; +} + +.edui-default .edui-list .edui-state-hover { + position: relative; + background-color: #fff5d4; + border: 1px solid #dcac6c; + padding: 0; +} + +.edui-default .edui-for-fontfamily .edui-listitem-label { + min-width: 130px; + _width: 120px; + font-size: 12px; + height: 22px; + line-height: 22px; + padding-left: 5px; +} +.edui-default .edui-for-insertcode .edui-listitem-label { + min-width: 120px; + _width: 120px; + font-size: 12px; + height: 22px; + line-height: 22px; + padding-left: 5px; +} +.edui-default .edui-for-underline .edui-listitem-label { + min-width: 120px; + _width: 120px; + padding: 3px 5px; + font-size: 12px; +} + +.edui-default .edui-for-fontsize .edui-listitem-label { + min-width: 120px; + _width: 120px; + padding: 3px 5px; + +} + +.edui-default .edui-for-paragraph .edui-listitem-label { + min-width: 200px; + _width: 200px; + padding: 2px 5px; +} + +.edui-default .edui-for-rowspacingtop .edui-listitem-label, +.edui-default .edui-for-rowspacingbottom .edui-listitem-label { + min-width: 53px; + _width: 53px; + padding: 2px 5px; +} + +.edui-default .edui-for-lineheight .edui-listitem-label { + min-width: 53px; + _width: 53px; + padding: 2px 5px; +} + +.edui-default .edui-for-customstyle .edui-listitem-label { + min-width: 200px; + _width: 200px; + width: 200px !important; + padding: 2px 5px; +} +/* 可选中按钮弹出菜单*/ +.edui-default .edui-menu { + z-index: 3000; +} + +.edui-default .edui-menu .edui-popup-content { + padding: 3px; +} + +.edui-default .edui-menu-body { + _width: 150px; + min-width: 170px; + background: url("../images/sparator_v.png") repeat-y 25px; +} + +.edui-default .edui-menuitem-body { +} + +.edui-default .edui-menuitem { + height: 20px; + cursor: default; + vertical-align: top; +} + +.edui-default .edui-menuitem .edui-icon { + width: 20px !important; + height: 20px !important; + background: url(../images/icons.png) 0 -4000px; + background: url(../images/icons.gif) 0 -4000px\9; +} + +.edui-default .edui-menuitem .edui-label { + font-size: 12px; + line-height: 20px; + height: 20px; + padding-left: 10px; +} + +.edui-default .edui-state-checked .edui-menuitem-body { + background: url("../images/icons-all.gif") no-repeat 6px -205px; +} + +.edui-default .edui-state-disabled .edui-menuitem-label { + color: gray; +} + + +/*不可选中菜单按钮 */ +.edui-default .edui-toolbar .edui-combox-body .edui-button-body { + width: 60px; + font-size: 12px; + height: 20px; + line-height: 20px; + padding-left: 5px; + white-space: nowrap; + margin: 0 3px 0 0; +} + +.edui-default .edui-toolbar .edui-combox-body .edui-arrow { + background: url(../images/icons.png) -741px 0; + _background: url(../images/icons.gif) -741px 0; + height: 20px; + width: 9px; +} + +.edui-default .edui-toolbar .edui-combox .edui-combox-body { + border: 1px solid #CCC; + background-color: white; + border-radius: 2px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; +} + +.edui-default .edui-toolbar .edui-combox-body .edui-splitborder { + display: none; +} + +.edui-default .edui-toolbar .edui-combox-body .edui-arrow { + border-left: 1px solid #CCC; +} + +.edui-default .edui-toolbar .edui-state-hover .edui-combox-body { + background-color: #fff5d4; + border: 1px solid #dcac6c; +} + +.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow { + border-left: 1px solid #dcac6c; +} + +.edui-default .edui-toolbar .edui-state-checked .edui-combox-body { + background-color: #FFE69F; + border: 1px solid #DCAC6C; +} + +.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow { + border-left: 1px solid #DCAC6C; +} + +.edui-toolbar .edui-state-disabled .edui-combox-body { + background-color: #F0F0EE; + opacity: 0.3; + filter: alpha(opacity = 30); +} + +.edui-toolbar .edui-state-opened .edui-combox-body { + background-color: white; + border: 1px solid gray; +} +/*普通按钮样式及状态*/ +.edui-default .edui-toolbar .edui-button .edui-icon, +.edui-default .edui-toolbar .edui-menubutton .edui-icon, +.edui-default .edui-toolbar .edui-splitbutton .edui-icon { + height: 20px !important; + width: 20px !important; + background-image: url(../images/icons.png); + background-image: url(../images/icons.gif) \9; +} + +.edui-default .edui-toolbar .edui-button .edui-button-wrap { + padding: 1px; + position: relative; +} + +.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap { + background-color: #fff5d4; + padding: 0; + border: 1px solid #dcac6c; +} + +.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap { + background-color: #ffe69f; + padding: 0; + border: 1px solid #dcac6c; + border-radius: 2px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; +} + +.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap { + background-color: #ffffff; + padding: 0; + border: 1px solid gray; +} +.edui-default .edui-toolbar .edui-state-disabled .edui-label { + color: #ccc; +} +.edui-default .edui-toolbar .edui-state-disabled .edui-icon { + opacity: 0.3; + filter: alpha(opacity = 30); +} + +/* toolbar icons */ +.edui-default .edui-for-undo .edui-icon { + background-position: -160px 0; +} + +.edui-default .edui-for-redo .edui-icon { + background-position: -100px 0; +} + +.edui-default .edui-for-bold .edui-icon { + background-position: 0 0; +} + +.edui-default .edui-for-italic .edui-icon { + background-position: -60px 0; +} + +.edui-default .edui-for-fontborder .edui-icon { + background-position:-160px -40px; +} +.edui-default .edui-for-underline .edui-icon { + background-position: -140px 0; +} + +.edui-default .edui-for-strikethrough .edui-icon { + background-position: -120px 0; +} + +.edui-default .edui-for-subscript .edui-icon { + background-position: -600px 0; +} + +.edui-default .edui-for-superscript .edui-icon { + background-position: -620px 0; +} + +.edui-default .edui-for-blockquote .edui-icon { + background-position: -220px 0; +} + +.edui-default .edui-for-forecolor .edui-icon { + background-position: -720px 0; +} + +.edui-default .edui-for-backcolor .edui-icon { + background-position: -760px 0; +} + +.edui-default .edui-for-inserttable .edui-icon { + background-position: -580px -20px; +} + +.edui-default .edui-for-autotypeset .edui-icon { + background-position: -640px -40px; +} + +.edui-default .edui-for-justifyleft .edui-icon { + background-position: -460px 0; +} + +.edui-default .edui-for-justifycenter .edui-icon { + background-position: -420px 0; +} + +.edui-default .edui-for-justifyright .edui-icon { + background-position: -480px 0; +} + +.edui-default .edui-for-justifyjustify .edui-icon { + background-position: -440px 0; +} + +.edui-default .edui-for-insertorderedlist .edui-icon { + background-position: -80px 0; +} + +.edui-default .edui-for-insertunorderedlist .edui-icon { + background-position: -20px 0; +} + +.edui-default .edui-for-lineheight .edui-icon { + background-position: -725px -40px; +} + +.edui-default .edui-for-rowspacingbottom .edui-icon { + background-position: -745px -40px; +} + +.edui-default .edui-for-rowspacingtop .edui-icon { + background-position: -765px -40px; +} + +.edui-default .edui-for-horizontal .edui-icon { + background-position: -360px 0; +} + +.edui-default .edui-for-link .edui-icon { + background-position: -500px 0; +} + +.edui-default .edui-for-code .edui-icon { + background-position: -440px -40px; +} + +.edui-default .edui-for-insertimage .edui-icon { + background-position: -726px -77px; +} + +.edui-default .edui-for-insertframe .edui-icon { + background-position: -240px -40px; +} + +.edui-default .edui-for-emoticon .edui-icon { + background-position: -60px -20px; +} + +.edui-default .edui-for-spechars .edui-icon { + background-position: -240px 0; +} + +.edui-default .edui-for-help .edui-icon { + background-position: -340px 0; +} + +.edui-default .edui-for-print .edui-icon { + background-position: -440px -20px; +} + +.edui-default .edui-for-preview .edui-icon { + background-position: -420px -20px; +} + +.edui-default .edui-for-selectall .edui-icon { + background-position: -400px -20px; +} + +.edui-default .edui-for-searchreplace .edui-icon { + background-position: -520px -20px; +} + +.edui-default .edui-for-map .edui-icon { + background-position: -40px -40px; +} + +.edui-default .edui-for-gmap .edui-icon { + background-position: -260px -40px; +} + +.edui-default .edui-for-insertvideo .edui-icon { + background-position: -320px -20px; +} + +.edui-default .edui-for-time .edui-icon { + background-position: -160px -20px; +} + +.edui-default .edui-for-date .edui-icon { + background-position: -140px -20px; +} + +.edui-default .edui-for-cut .edui-icon { + background-position: -680px 0; +} + +.edui-default .edui-for-copy .edui-icon { + background-position: -700px 0; +} + +.edui-default .edui-for-paste .edui-icon { + background-position: -560px 0; +} + +.edui-default .edui-for-formatmatch .edui-icon { + background-position: -40px 0; +} + +.edui-default .edui-for-pasteplain .edui-icon { + background-position: -360px -20px; +} + +.edui-default .edui-for-directionalityltr .edui-icon { + background-position: -20px -20px; +} + +.edui-default .edui-for-directionalityrtl .edui-icon { + background-position: -40px -20px; +} + +.edui-default .edui-for-source .edui-icon { + background-position: -261px -0px; +} + +.edui-default .edui-for-removeformat .edui-icon { + background-position: -580px 0; +} + +.edui-default .edui-for-unlink .edui-icon { + background-position: -640px 0; +} + +.edui-default .edui-for-touppercase .edui-icon { + background-position: -786px 0; +} + +.edui-default .edui-for-tolowercase .edui-icon { + background-position: -806px 0; +} + +.edui-default .edui-for-insertrow .edui-icon { + background-position: -478px -76px; +} + +.edui-default .edui-for-insertrownext .edui-icon { + background-position: -498px -76px; +} + +.edui-default .edui-for-insertcol .edui-icon { + background-position: -455px -76px; +} + +.edui-default .edui-for-insertcolnext .edui-icon { + background-position: -429px -76px; +} + +.edui-default .edui-for-mergeright .edui-icon { + background-position: -60px -40px; +} + +.edui-default .edui-for-mergedown .edui-icon { + background-position: -80px -40px; +} + +.edui-default .edui-for-splittorows .edui-icon { + background-position: -100px -40px; +} + +.edui-default .edui-for-splittocols .edui-icon { + background-position: -120px -40px; +} + +.edui-default .edui-for-insertparagraphbeforetable .edui-icon { + background-position: -140px -40px; +} + +.edui-default .edui-for-deleterow .edui-icon { + background-position: -660px -20px; +} + +.edui-default .edui-for-deletecol .edui-icon { + background-position: -640px -20px; +} + +.edui-default .edui-for-splittocells .edui-icon { + background-position: -800px -20px; +} + +.edui-default .edui-for-mergecells .edui-icon { + background-position: -760px -20px; +} + +.edui-default .edui-for-deletetable .edui-icon { + background-position: -620px -20px; +} + +.edui-default .edui-for-cleardoc .edui-icon { + background-position: -520px 0; +} + +.edui-default .edui-for-fullscreen .edui-icon { + background-position: -100px -20px; +} + +.edui-default .edui-for-anchor .edui-icon { + background-position: -200px 0; +} + +.edui-default .edui-for-pagebreak .edui-icon { + background-position: -460px -40px; +} + +.edui-default .edui-for-imagenone .edui-icon { + background-position: -480px -40px; +} + +.edui-default .edui-for-imageleft .edui-icon { + background-position: -500px -40px; +} + +.edui-default .edui-for-wordimage .edui-icon { + background-position: -660px -40px; +} + +.edui-default .edui-for-imageright .edui-icon { + background-position: -520px -40px; +} + +.edui-default .edui-for-imagecenter .edui-icon { + background-position: -540px -40px; +} + +.edui-default .edui-for-indent .edui-icon { + background-position: -400px 0; +} + +.edui-default .edui-for-outdent .edui-icon { + background-position: -540px 0; +} + +.edui-default .edui-for-webapp .edui-icon { + background-position: -601px -40px +} + +.edui-default .edui-for-table .edui-icon { + background-position: -580px -20px; +} + +.edui-default .edui-for-edittable .edui-icon { + background-position: -420px -40px; +} + +.edui-default .edui-for-template .edui-icon { + background-position: -339px -40px; +} + +.edui-default .edui-for-delete .edui-icon { + background-position: -360px -40px; +} + +.edui-default .edui-for-attachment .edui-icon { + background-position: -620px -40px; +} + +.edui-default .edui-for-edittd .edui-icon { + background-position: -700px -40px; +} + +.edui-default .edui-for-snapscreen .edui-icon { + background-position: -581px -40px +} + +.edui-default .edui-for-scrawl .edui-icon { + background-position: -801px -41px +} + +.edui-default .edui-for-background .edui-icon { + background-position: -680px -40px; +} + +.edui-default .edui-for-music .edui-icon { + background-position: -18px -40px +} + +.edui-default .edui-for-formula .edui-icon { + background-position: -200px -40px +} + +.edui-default .edui-for-aligntd .edui-icon { + background-position: -236px -76px; +} + +.edui-default .edui-for-insertparagraphtrue .edui-icon { + background-position: -625px -76px; +} + +.edui-default .edui-for-insertparagraph .edui-icon { + background-position: -602px -76px; +} + +.edui-default .edui-for-insertcaption .edui-icon { + background-position: -336px -76px; +} + +.edui-default .edui-for-deletecaption .edui-icon { + background-position: -362px -76px; +} + +.edui-default .edui-for-inserttitle .edui-icon { + background-position: -286px -76px; +} + +.edui-default .edui-for-deletetitle .edui-icon { + background-position: -311px -76px; +} + +.edui-default .edui-for-aligntable .edui-icon { + background-position: -440px 0; +} + +.edui-default .edui-for-tablealignment-left .edui-icon { + background-position: -460px 0; +} + +.edui-default .edui-for-tablealignment-center .edui-icon { + background-position: -420px 0; +} + +.edui-default .edui-for-tablealignment-right .edui-icon { + background-position: -480px 0; +} + +.edui-default .edui-for-drafts .edui-icon { + background-position: -560px 0; +} + +.edui-default .edui-for-charts .edui-icon { + background: url( ../images/charts.png ) no-repeat 2px 3px!important; +} + +.edui-default .edui-for-inserttitlecol .edui-icon { + background-position: -673px -76px; +} + +.edui-default .edui-for-deletetitlecol .edui-icon { + background-position: -698px -76px; +} + +.edui-default .edui-for-simpleupload .edui-icon { + background-position: -380px 0px; +} +/*splitbutton*/ +.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow, +.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow { + background: url(../images/icons.png) -741px 0; + _background: url(../images/icons.gif) -741px 0; + height: 20px; + width: 9px; +} + +.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body, +.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body { + padding: 1px; +} + +.edui-default .edui-toolbar .edui-splitborder { + width: 1px; + height: 20px; +} + +.edui-default .edui-toolbar .edui-state-hover .edui-splitborder { + width: 1px; + border-left: 0px solid #dcac6c; +} + +.edui-default .edui-toolbar .edui-state-active .edui-splitborder { + width: 0; + border-left: 1px solid gray; +} + +.edui-default .edui-toolbar .edui-state-opened .edui-splitborder { + width: 1px; + border: 0; +} + +.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body, +.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body { + background-color: #fff5d4; + border: 1px solid #dcac6c; + padding: 0; +} + +.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body, +.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body { + background-color: #FFE69F; + border: 1px solid #DCAC6C; + padding: 0; +} + +.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body, +.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body { + background-color: #ffffff; + border: 1px solid gray; + padding: 0; +} + +.edui-default .edui-state-disabled .edui-arrow { + opacity: 0.3; + _filter: alpha(opacity = 30); +} + +.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body, +.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body { + background-color: white; + border: 1px solid gray; + padding: 0; +} + +.edui-default .edui-for-insertorderedlist .edui-bordereraser, +.edui-default .edui-for-lineheight .edui-bordereraser, +.edui-default .edui-for-rowspacingtop .edui-bordereraser, +.edui-default .edui-for-rowspacingbottom .edui-bordereraser, +.edui-default .edui-for-insertunorderedlist .edui-bordereraser { + background-color: white; +} + +/* 解决嵌套导致的图标问题 */ +.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon, +.edui-default .edui-for-lineheight .edui-popup-body .edui-icon, +.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon, +.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon, +.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon { + /*background-position: 0 -40px;*/ + background-image: none ; +} + +/* 弹出菜单 */ +.edui-default .edui-popup { + z-index: 3000; + background-color: #ffffff; + width:auto; + height:auto; + +} + +.edui-default .edui-popup .edui-shadow { + left: 0; + top: 0; + width: 100%; + height: 100%; +} + +.edui-default .edui-popup-content { + border:1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2); + box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; + padding: 5px; + background:#ffffff; +} + +.edui-default .edui-popup .edui-bordereraser { + background-color: white; + height: 3px; +} + +.edui-default .edui-menu .edui-bordereraser { + height: 3px; +} + +.edui-default .edui-anchor-topleft .edui-bordereraser { + left: 1px; + top: -2px; +} + +.edui-default .edui-anchor-topright .edui-bordereraser { + right: 1px; + top: -2px; +} + +.edui-default .edui-anchor-bottomleft .edui-bordereraser { + left: 0; + bottom: -6px; + height: 7px; + border-left: 1px solid gray; + border-right: 1px solid gray; +} + +.edui-default .edui-anchor-bottomright .edui-bordereraser { + right: 0; + bottom: -6px; + height: 7px; + border-left: 1px solid gray; + border-right: 1px solid gray; +} + +.edui-popup div{ + width:auto; + height:auto; +} +.edui-default .edui-editor-messageholder { + display: block; + width: 150px; + height: auto; + border: 0; + margin: 0; + padding: 0; + position: absolute; + top: 28px; + right: 3px; +} + +.edui-default .edui-message{ + min-height: 10px; + text-shadow: 0 1px 0 rgba(255,255,255,0.5); + padding: 0; + margin-bottom: 3px; + position: relative; +} +.edui-default .edui-message-body{ + border-radius: 3px; + padding: 8px 15px 8px 8px; + color: #c09853; + background-color: #fcf8e3; + border: 1px solid #fbeed5; +} +.edui-default .edui-message-type-info{ + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1 +} +.edui-default .edui-message-type-success{ + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6 +} +.edui-default .edui-message-type-danger, +.edui-default .edui-message-type-error{ + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7 +} +.edui-default .edui-message .edui-message-closer { + display: block; + width: 16px; + height: 16px; + line-height: 16px; + position: absolute; + top: 0; + right: 0; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + float: right; + font-size: 20px; + font-weight: bold; + color: #999; + text-shadow: 0 1px 0 #fff; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +} +.edui-default .edui-message .edui-message-content { + font-size: 10pt; + word-wrap: break-word; + word-break: normal; +} +/* 弹出对话框按钮和对话框大小 */ +.edui-default .edui-dialog { + z-index: 2000; + position: absolute; + +} + +.edui-dialog div{ + width:auto; +} + +.edui-default .edui-dialog-wrap { + margin-right: 6px; + margin-bottom: 6px; +} + +.edui-default .edui-dialog-fullscreen-flag { + margin-right: 0; + margin-bottom: 0; +} + +.edui-default .edui-dialog-body { + position: relative; + padding:2px 0 0 2px; + _zoom: 1; +} + +.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body { + padding: 0; +} + +.edui-default .edui-dialog-shadow { + position: absolute; + z-index: -1; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.edui-default .edui-dialog-foot { + background-color: white; +} + +.edui-default .edui-dialog-titlebar { + height: 26px; + border-bottom: 1px solid #c6c6c6; + background: url(../images/dialog-title-bg.png) repeat-x bottom; + position: relative; + cursor: move; +} +.edui-default .edui-dialog-caption { + font-weight: bold; + font-size: 12px; + line-height: 26px; + padding-left: 5px; +} + +.edui-default .edui-dialog-draghandle { + height: 26px; +} + +.edui-default .edui-dialog-closebutton { + position: absolute !important; + right: 5px; + top: 3px; +} + +.edui-default .edui-dialog-closebutton .edui-button-body { + height: 20px; + width: 20px; + cursor: pointer; + background: url("../images/icons-all.gif") no-repeat 0 -59px; +} + +.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body { + background: url("../images/icons-all.gif") no-repeat 0 -89px; +} + +.edui-default .edui-dialog-foot { + height: 40px; +} + +.edui-default .edui-dialog-buttons { + position: absolute; + right: 0; +} + +.edui-default .edui-dialog-buttons .edui-button { + margin-right: 10px; +} + +.edui-default .edui-dialog-buttons .edui-button .edui-button-body { + background: url("../images/icons-all.gif") no-repeat; + height: 24px; + width: 96px; + font-size: 12px; + line-height: 24px; + text-align: center; + cursor: default; +} + +.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body { + background: url("../images/icons-all.gif") no-repeat 0 -30px; +} + +.edui-default .edui-dialog iframe { + border: 0; + padding: 0; + margin: 0; + vertical-align: top; +} + +.edui-default .edui-dialog-modalmask { + opacity: 0.3; + filter: alpha(opacity = 30); + background-color: #ccc; + position: absolute; + /*z-index: 1999;*/ +} + +.edui-default .edui-dialog-dragmask { + position: absolute; + /*z-index: 2001;*/ + background-color: transparent; + cursor: move; +} + +.edui-default .edui-dialog-content { + position: relative; +} + +.edui-default .dialogcontmask { + cursor: move; + visibility: hidden; + display: block; + position: absolute; + width: 100%; + height: 100%; + opacity: 0; + filter: alpha(opacity = 0); +} + +/*link-dialog*/ +.edui-default .edui-for-link .edui-dialog-content { + width: 420px; + height: 200px; + overflow: hidden; +} +/*background-dialog*/ +.edui-default .edui-for-background .edui-dialog-content { + width: 440px; + height: 280px; + overflow: hidden; +} + +/*template-dialog*/ +.edui-default .edui-for-template .edui-dialog-content { + width: 630px; + height: 390px; + overflow: hidden; +} + +/*scrawl-dialog*/ +.edui-default .edui-for-scrawl .edui-dialog-content { + width: 515px; + *width: 506px; + height: 360px; +} + +/*spechars-dialog*/ +.edui-default .edui-for-spechars .edui-dialog-content { + width: 620px; + height: 500px; + *width: 630px; + *height: 570px; +} + +/*image-dialog*/ +.edui-default .edui-for-insertimage .edui-dialog-content { + width: 650px; + height: 400px; + overflow: hidden; +} +/*webapp-dialog*/ +.edui-default .edui-for-webapp .edui-dialog-content { + width: 560px; + _width: 565px; + height: 450px; + overflow: hidden; +} + +/*image-insertframe*/ +.edui-default .edui-for-insertframe .edui-dialog-content { + width: 350px; + height: 200px; + overflow: hidden; +} + +/*wordImage-dialog*/ +.edui-default .edui-for-wordimage .edui-dialog-content { + width: 620px; + height: 380px; + overflow: hidden; +} + +/*attachment-dialog*/ +.edui-default .edui-for-attachment .edui-dialog-content { + width: 650px; + height: 400px; + overflow: hidden; +} + + +/*map-dialog*/ +.edui-default .edui-for-map .edui-dialog-content { + width: 550px; + height: 400px; +} + +/*gmap-dialog*/ +.edui-default .edui-for-gmap .edui-dialog-content { + width: 550px; + height: 400px; +} + +/*video-dialog*/ +.edui-default .edui-for-insertvideo .edui-dialog-content { + width: 590px; + height: 390px; +} + +/*anchor-dialog*/ +.edui-default .edui-for-anchor .edui-dialog-content { + width: 320px; + height: 60px; + overflow: hidden; +} + +/*searchreplace-dialog*/ +.edui-default .edui-for-searchreplace .edui-dialog-content { + width: 400px; + height: 220px; +} + +/*help-dialog*/ +.edui-default .edui-for-help .edui-dialog-content { + width: 400px; + height: 420px; +} + +/*edittable-dialog*/ +.edui-default .edui-for-edittable .edui-dialog-content { + width: 540px; + _width:590px; + height: 335px; +} + +/*edittip-dialog*/ +.edui-default .edui-for-edittip .edui-dialog-content { + width: 225px; + height: 60px; +} + +/*edittd-dialog*/ +.edui-default .edui-for-edittd .edui-dialog-content { + width: 240px; + height: 50px; +} +/*snapscreen-dialog*/ +.edui-default .edui-for-snapscreen .edui-dialog-content { + width: 400px; + height: 220px; +} + +/*music-dialog*/ +.edui-default .edui-for-music .edui-dialog-content { + width: 515px; + height: 360px; +} + +/*段落弹出菜单*/ +.edui-default .edui-for-paragraph .edui-listitem-label { + font-family: Tahoma, Verdana, Arial, Helvetica; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p { + font-size: 22px; + line-height: 27px; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1 { + font-weight: bolder; + font-size: 32px; + line-height: 36px; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2 { + font-weight: bolder; + font-size: 27px; + line-height: 29px; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3 { + font-weight: bolder; + font-size: 19px; + line-height: 23px; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4 { + font-weight: bolder; + font-size: 16px; + line-height: 19px +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5 { + font-weight: bolder; + font-size: 13px; + line-height: 16px; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6 { + font-weight: bolder; + font-size: 12px; + line-height: 14px; +} +/* 表格弹出菜单 */ +.edui-default .edui-for-inserttable .edui-splitborder { + display: none +} +.edui-default .edui-for-inserttable .edui-splitbutton-body .edui-arrow { + width: 0 +} +.edui-default .edui-toolbar .edui-for-inserttable .edui-state-active .edui-splitborder{ + border-left: 1px solid transparent; +} +.edui-default .edui-tablepicker .edui-infoarea { + height: 14px; + line-height: 14px; + font-size: 12px; + width: 220px; + margin-bottom: 3px; + clear: both; +} + +.edui-default .edui-tablepicker .edui-infoarea .edui-label { + float: left; +} + +.edui-default .edui-dialog-buttons .edui-label { + line-height: 24px; +} + +.edui-default .edui-tablepicker .edui-infoarea .edui-clickable { + float: right; +} + +.edui-default .edui-tablepicker .edui-pickarea { + background: url("../images/unhighlighted.gif") repeat; + height: 220px; + width: 220px; +} + +.edui-default .edui-tablepicker .edui-pickarea .edui-overlay { + background: url("../images/highlighted.gif") repeat; +} + +/* 颜色弹出菜单 */ +.edui-default .edui-colorpicker-topbar { + height: 27px; + width: 200px; + /*border-bottom: 1px gray dashed;*/ +} + +.edui-default .edui-colorpicker-preview { + height: 20px; + border: 1px inset black; + margin-left: 1px; + width: 128px; + float: left; +} + +.edui-default .edui-colorpicker-nocolor { + float: right; + margin-right: 1px; + font-size: 12px; + line-height: 14px; + height: 14px; + border: 1px solid #333; + padding: 3px 5px; + cursor: pointer; +} + +.edui-default .edui-colorpicker-tablefirstrow { + height: 30px; +} + +.edui-default .edui-colorpicker-colorcell { + width: 14px; + height: 14px; + display: block; + margin: 0; + cursor: pointer; +} + +.edui-default .edui-colorpicker-colorcell:hover { + width: 14px; + height: 14px; + margin: 0; +} +.edui-default .edui-colorpicker-advbtn{ + display: block; + text-align: center; + cursor: pointer; + height:20px; +} +.arrow_down{ + background: white url('../images/arrow_down.png') no-repeat center; +} +.arrow_up{ + background: white url('../images/arrow_up.png') no-repeat center; +} +/*高级的样式*/ +.edui-colorpicker-adv{ + position: relative; + overflow: hidden; + height: 180px; + display: none; +} +.edui-colorpicker-plant, .edui-colorpicker-hue { + border: solid 1px #666; +} +.edui-colorpicker-pad { + width: 150px; + height: 150px; + left: 14px; + top: 13px; + position: absolute; + background: red; + overflow: hidden; + cursor: crosshair; +} +.edui-colorpicker-cover{ + position: absolute; + top: 0; + left: 0; + width: 150px; + height: 150px; + background: url("../images/tangram-colorpicker.png") -160px -200px; +} +.edui-colorpicker-padDot{ + position: absolute; + top: 0; + left: 0; + width: 11px; + height: 11px; + overflow: hidden; + background: url(../images/tangram-colorpicker.png) 0px -200px repeat-x; + z-index: 1000; + +} +.edui-colorpicker-sliderMain { + position: absolute; + left: 171px; + top: 13px; + width: 19px; + height: 152px; + background: url(../images/tangram-colorpicker.png) -179px -12px no-repeat; + +} +.edui-colorpicker-slider { + width: 100%; + height: 100%; + cursor: pointer; +} +.edui-colorpicker-thumb{ + position: absolute; + top: 0; + cursor: pointer; + height: 3px; + left: -1px; + right: -1px; + border: 1px solid black; + background: white; + opacity: .8; +} +/*自动排版弹出菜单*/ +.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body { + font-size: 12px; + margin-bottom: 3px; + clear: both; +} + +.edui-default .edui-autotypesetpicker-body table { + border-collapse: separate; + border-spacing: 2px; +} + +.edui-default .edui-autotypesetpicker-body td { + font-size: 12px; + word-wrap:break-word; +} + +.edui-default .edui-autotypesetpicker-body td input { + margin: 3px 3px 3px 4px; + *margin: 1px 0 0 0; +} +/*自动排版弹出菜单*/ +.edui-default .edui-cellalignpicker .edui-cellalignpicker-body { + width: 70px; + font-size: 12px; + cursor: default; +} + +.edui-default .edui-cellalignpicker-body table { + border-collapse: separate; + border-spacing: 0; +} +.edui-default .edui-cellalignpicker-body td{ + padding: 1px; +} +.edui-default .edui-cellalignpicker-body .edui-icon{ + height: 20px; + width: 20px; + padding: 1px; + background-image: url(../images/table-cell-align.png); +} + +.edui-default .edui-cellalignpicker-body .edui-left{ + background-position: 0 0; +} + +.edui-default .edui-cellalignpicker-body .edui-center{ + background-position: -25px 0; +} +.edui-default .edui-cellalignpicker-body .edui-right{ + background-position: -51px 0; +} + +.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{ + background-position: -73px 0; +} + +.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{ + background-position: -98px 0; +} + +.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{ + background-position: -124px 0; +} + +.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left { + background-position: -146px 0; + background-color: #f1f4f5; +} + +.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center { + background-position: -245px 0; +} + +.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right { + background-position: -271px 0; +} +/*分隔线*/ +.edui-default .edui-toolbar .edui-separator { + width: 2px; + height: 20px; + margin: 2px 4px 2px 3px; + background: url(../images/icons.png) -181px 0; + background: url(../images/icons.gif) -181px 0 \9; +} + +/*颜色按钮 */ +.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump { + position: absolute; + overflow: hidden; + bottom: 1px; + left: 1px; + width: 18px; + height: 4px; +} +/*表情按钮及弹出菜单*/ +/*去除了表情的下拉箭头*/ +.edui-default .edui-for-emotion .edui-icon { + background-position: -60px -20px; +} +.edui-default .edui-for-emotion .edui-popup-content iframe +{ + width: 514px; + height: 380px; + overflow: hidden; +} +.edui-default .edui-for-emotion .edui-popup-content +{ + position: relative; + z-index: 555 +} + +.edui-default .edui-for-emotion .edui-splitborder { + display: none +} + +.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow +{ + width: 0 +} +.edui-default .edui-toolbar .edui-for-emotion .edui-state-active .edui-splitborder +{ + border-left: 1px solid transparent; +} +/*contextmenu*/ +.edui-default .edui-hassubmenu .edui-arrow { + height: 20px; + width: 20px; + float: right; + background: url("../images/icons-all.gif") no-repeat 10px -233px; +} + +.edui-default .edui-menu-body .edui-menuitem { + padding: 1px; +} + +.edui-default .edui-menuseparator { + margin: 2px 0; + height: 1px; + overflow: hidden; +} + +.edui-default .edui-menuseparator-inner { + border-bottom: 1px solid #e2e3e3; + margin-left: 29px; + margin-right: 1px; +} + +.edui-default .edui-menu-body .edui-state-hover { + padding: 0 !important; + background-color: #fff5d4; + border: 1px solid #dcac6c; +} +/*弹出菜单*/ +.edui-default .edui-shortcutmenu { + padding: 2px; + width: 190px; + height: 50px; + background-color: #fff; + border: 1px solid #ccc; + border-radius: 5px; +} + +/*粘贴弹出菜单*/ +.edui-default .edui-wordpastepop .edui-popup-content{ + border: none; + padding: 0; + width: 54px; + height: 21px; +} +.edui-default .edui-pasteicon { + width: 100%; + height: 100%; + background-image: url('../images/wordpaste.png'); + background-position: 0 0; +} + +.edui-default .edui-pasteicon.edui-state-opened { + background-position: 0 -34px; +} + +.edui-default .edui-pastecontainer { + position: relative; + visibility: hidden; + width: 97px; + background: #fff; + border: 1px solid #ccc; +} + +.edui-default .edui-pastecontainer .edui-title { + font-weight: bold; + background: #F8F8FF; + height: 25px; + line-height: 25px; + font-size: 12px; + padding-left: 5px; +} + +.edui-default .edui-pastecontainer .edui-button { + overflow: hidden; + margin: 3px 0; +} + +.edui-default .edui-pastecontainer .edui-button .edui-richtxticon, +.edui-default .edui-pastecontainer .edui-button .edui-tagicon, +.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{ + float: left; + cursor: pointer; + width: 29px; + height: 29px; + margin-left: 5px; + background-image: url('../images/wordpaste.png'); + background-repeat: no-repeat; +} +.edui-default .edui-pastecontainer .edui-button .edui-richtxticon { + margin-left: 0; + background-position: -109px 0; +} +.edui-default .edui-pastecontainer .edui-button .edui-tagicon { + background-position: -148px 1px; +} + +.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon { + background-position: -72px 0; +} + +.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon { + background-position: -109px -34px; +} +.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{ + background-position: -148px -34px; +} +.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-plaintxticon{ + background-position: -72px -34px; +} \ No newline at end of file diff --git a/public/vendor/ueditor/themes/default/css/ueditor.min.css b/public/vendor/ueditor/themes/default/css/ueditor.min.css new file mode 100644 index 0000000..63d297c --- /dev/null +++ b/public/vendor/ueditor/themes/default/css/ueditor.min.css @@ -0,0 +1,8 @@ +/*! + * UEditor + * version: ueditor + * build: Tue Aug 25 2015 15:23:01 GMT+0800 (CST) + */ + + +.edui-default .edui-box{border:0;padding:0;margin:0;overflow:hidden}.edui-default a.edui-box{display:block;text-decoration:none;color:#000}.edui-default a.edui-box:hover{text-decoration:none}.edui-default a.edui-box:active{text-decoration:none}.edui-default table.edui-box{border-collapse:collapse}.edui-default ul.edui-box{list-style-type:none}div.edui-box{position:relative;display:-moz-inline-box!important;display:inline-block!important;vertical-align:top}.edui-default .edui-clearfix{zoom:1}.edui-default .edui-clearfix:after{content:'\20';display:block;clear:both}* html div.edui-box{display:inline!important}:first-child+html div.edui-box{display:inline!important}.edui-default .edui-button-body,.edui-splitbutton-body,.edui-menubutton-body,.edui-combox-body{position:relative}.edui-default .edui-popup{position:absolute;-webkit-user-select:none;-moz-user-select:none}.edui-default .edui-popup .edui-shadow{position:absolute;z-index:-1}.edui-default .edui-popup .edui-bordereraser{position:absolute;overflow:hidden}.edui-default .edui-tablepicker .edui-canvas{position:relative}.edui-default .edui-tablepicker .edui-canvas .edui-overlay{position:absolute}.edui-default .edui-dialog-modalmask,.edui-dialog-dragmask{position:absolute;left:0;top:0;width:100%;height:100%}.edui-default .edui-toolbar{position:relative}.edui-default .edui-label{cursor:default}.edui-default span.edui-clickable{color:#00f;cursor:pointer;text-decoration:underline}.edui-default span.edui-unclickable{color:gray;cursor:default}.edui-default .edui-toolbar{cursor:default;-webkit-user-select:none;-moz-user-select:none;padding:1px;overflow:hidden;zoom:1;width:auto;height:auto}.edui-default .edui-toolbar .edui-button,.edui-default .edui-toolbar .edui-splitbutton,.edui-default .edui-toolbar .edui-menubutton,.edui-default .edui-toolbar .edui-combox{margin:1px}.edui-default .edui-editor{border:1px solid #d4d4d4;background-color:#fff;position:relative;overflow:visible;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.edui-editor div{width:auto;height:auto}.edui-default .edui-editor-toolbarbox{position:relative;zoom:1;-webkit-box-shadow:0 1px 4px rgba(204,204,204,.6);-moz-box-shadow:0 1px 4px rgba(204,204,204,.6);box-shadow:0 1px 4px rgba(204,204,204,.6);border-top-left-radius:2px;border-top-right-radius:2px}.edui-default .edui-editor-toolbarboxouter{border-bottom:1px solid #d4d4d4;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,.065);box-shadow:0 1px 4px rgba(0,0,0,.065)}.edui-default .edui-editor-toolbarboxinner{padding:2px}.edui-default .edui-editor-iframeholder{position:relative}.edui-default .edui-editor-bottomContainer{overflow:hidden}.edui-default .edui-editor-bottomContainer table{width:100%;height:0;overflow:hidden;border-spacing:0}.edui-default .edui-editor-bottomContainer td{white-space:nowrap;border-top:1px solid #ccc;line-height:20px;font-size:12px;font-family:Arial,Helvetica,Tahoma,Verdana,Sans-Serif}.edui-default .edui-editor-wordcount{text-align:right;margin-right:5px;color:#aaa}.edui-default .edui-editor-scale{width:12px}.edui-default .edui-editor-scale .edui-editor-icon{float:right;width:100%;height:12px;margin-top:10px;background:url(../images/scale.png) no-repeat;cursor:se-resize}.edui-default .edui-editor-breadcrumb{margin:2px 0 0 3px}.edui-default .edui-editor-breadcrumb span{cursor:pointer;text-decoration:underline;color:#00f}.edui-default .edui-toolbar .edui-for-fullscreen{float:right}.edui-default .edui-bubble .edui-popup-content{border:1px solid #DCAC6C;background-color:#fff6d9;padding:5px;font-size:10pt;font-family:"宋体"}.edui-default .edui-bubble .edui-shadow{}.edui-default .edui-editor-toolbarmsg{background-color:#FFF6D9;border-bottom:1px solid #ccc;position:absolute;bottom:-25px;left:0;z-index:1009;width:99.9%}.edui-default .edui-editor-toolbarmsg-upload{font-size:14px;color:#00f;width:100px;height:16px;line-height:16px;cursor:pointer;position:absolute;top:5px;left:350px}.edui-default .edui-editor-toolbarmsg-label{font-size:12px;line-height:16px;padding:4px}.edui-default .edui-editor-toolbarmsg-close{float:right;width:20px;height:16px;line-height:16px;cursor:pointer;color:red}.edui-default .edui-list .edui-bordereraser{display:none}.edui-default .edui-listitem{padding:1px;white-space:nowrap}.edui-default .edui-list .edui-state-hover{position:relative;background-color:#fff5d4;border:1px solid #dcac6c;padding:0}.edui-default .edui-for-fontfamily .edui-listitem-label{min-width:130px;_width:120px;font-size:12px;height:22px;line-height:22px;padding-left:5px}.edui-default .edui-for-insertcode .edui-listitem-label{min-width:120px;_width:120px;font-size:12px;height:22px;line-height:22px;padding-left:5px}.edui-default .edui-for-underline .edui-listitem-label{min-width:120px;_width:120px;padding:3px 5px;font-size:12px}.edui-default .edui-for-fontsize .edui-listitem-label{min-width:120px;_width:120px;padding:3px 5px}.edui-default .edui-for-paragraph .edui-listitem-label{min-width:200px;_width:200px;padding:2px 5px}.edui-default .edui-for-rowspacingtop .edui-listitem-label,.edui-default .edui-for-rowspacingbottom .edui-listitem-label{min-width:53px;_width:53px;padding:2px 5px}.edui-default .edui-for-lineheight .edui-listitem-label{min-width:53px;_width:53px;padding:2px 5px}.edui-default .edui-for-customstyle .edui-listitem-label{min-width:200px;_width:200px;width:200px!important;padding:2px 5px}.edui-default .edui-menu{z-index:3000}.edui-default .edui-menu .edui-popup-content{padding:3px}.edui-default .edui-menu-body{_width:150px;min-width:170px;background:url(../images/sparator_v.png) repeat-y 25px}.edui-default .edui-menuitem-body{}.edui-default .edui-menuitem{height:20px;cursor:default;vertical-align:top}.edui-default .edui-menuitem .edui-icon{width:20px!important;height:20px!important;background:url(../images/icons.png) 0 -4000px;background:url(../images/icons.gif) 0 -4000px\9}.edui-default .edui-menuitem .edui-label{font-size:12px;line-height:20px;height:20px;padding-left:10px}.edui-default .edui-state-checked .edui-menuitem-body{background:url(../images/icons-all.gif) no-repeat 6px -205px}.edui-default .edui-state-disabled .edui-menuitem-label{color:gray}.edui-default .edui-toolbar .edui-combox-body .edui-button-body{width:60px;font-size:12px;height:20px;line-height:20px;padding-left:5px;white-space:nowrap;margin:0 3px 0 0}.edui-default .edui-toolbar .edui-combox-body .edui-arrow{background:url(../images/icons.png) -741px 0;_background:url(../images/icons.gif) -741px 0;height:20px;width:9px}.edui-default .edui-toolbar .edui-combox .edui-combox-body{border:1px solid #CCC;background-color:#fff;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.edui-default .edui-toolbar .edui-combox-body .edui-splitborder{display:none}.edui-default .edui-toolbar .edui-combox-body .edui-arrow{border-left:1px solid #CCC}.edui-default .edui-toolbar .edui-state-hover .edui-combox-body{background-color:#fff5d4;border:1px solid #dcac6c}.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow{border-left:1px solid #dcac6c}.edui-default .edui-toolbar .edui-state-checked .edui-combox-body{background-color:#FFE69F;border:1px solid #DCAC6C}.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow{border-left:1px solid #DCAC6C}.edui-toolbar .edui-state-disabled .edui-combox-body{background-color:#F0F0EE;opacity:.3;filter:alpha(opacity=30)}.edui-toolbar .edui-state-opened .edui-combox-body{background-color:#fff;border:1px solid gray}.edui-default .edui-toolbar .edui-button .edui-icon,.edui-default .edui-toolbar .edui-menubutton .edui-icon,.edui-default .edui-toolbar .edui-splitbutton .edui-icon{height:20px!important;width:20px!important;background-image:url(../images/icons.png);background-image:url(../images/icons.gif) \9}.edui-default .edui-toolbar .edui-button .edui-button-wrap{padding:1px;position:relative}.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap{background-color:#fff5d4;padding:0;border:1px solid #dcac6c}.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap{background-color:#ffe69f;padding:0;border:1px solid #dcac6c;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap{background-color:#fff;padding:0;border:1px solid gray}.edui-default .edui-toolbar .edui-state-disabled .edui-label{color:#ccc}.edui-default .edui-toolbar .edui-state-disabled .edui-icon{opacity:.3;filter:alpha(opacity=30)}.edui-default .edui-for-undo .edui-icon{background-position:-160px 0}.edui-default .edui-for-redo .edui-icon{background-position:-100px 0}.edui-default .edui-for-bold .edui-icon{background-position:0 0}.edui-default .edui-for-italic .edui-icon{background-position:-60px 0}.edui-default .edui-for-fontborder .edui-icon{background-position:-160px -40px}.edui-default .edui-for-underline .edui-icon{background-position:-140px 0}.edui-default .edui-for-strikethrough .edui-icon{background-position:-120px 0}.edui-default .edui-for-subscript .edui-icon{background-position:-600px 0}.edui-default .edui-for-superscript .edui-icon{background-position:-620px 0}.edui-default .edui-for-blockquote .edui-icon{background-position:-220px 0}.edui-default .edui-for-forecolor .edui-icon{background-position:-720px 0}.edui-default .edui-for-backcolor .edui-icon{background-position:-760px 0}.edui-default .edui-for-inserttable .edui-icon{background-position:-580px -20px}.edui-default .edui-for-autotypeset .edui-icon{background-position:-640px -40px}.edui-default .edui-for-justifyleft .edui-icon{background-position:-460px 0}.edui-default .edui-for-justifycenter .edui-icon{background-position:-420px 0}.edui-default .edui-for-justifyright .edui-icon{background-position:-480px 0}.edui-default .edui-for-justifyjustify .edui-icon{background-position:-440px 0}.edui-default .edui-for-insertorderedlist .edui-icon{background-position:-80px 0}.edui-default .edui-for-insertunorderedlist .edui-icon{background-position:-20px 0}.edui-default .edui-for-lineheight .edui-icon{background-position:-725px -40px}.edui-default .edui-for-rowspacingbottom .edui-icon{background-position:-745px -40px}.edui-default .edui-for-rowspacingtop .edui-icon{background-position:-765px -40px}.edui-default .edui-for-horizontal .edui-icon{background-position:-360px 0}.edui-default .edui-for-link .edui-icon{background-position:-500px 0}.edui-default .edui-for-code .edui-icon{background-position:-440px -40px}.edui-default .edui-for-insertimage .edui-icon{background-position:-726px -77px}.edui-default .edui-for-insertframe .edui-icon{background-position:-240px -40px}.edui-default .edui-for-emoticon .edui-icon{background-position:-60px -20px}.edui-default .edui-for-spechars .edui-icon{background-position:-240px 0}.edui-default .edui-for-help .edui-icon{background-position:-340px 0}.edui-default .edui-for-print .edui-icon{background-position:-440px -20px}.edui-default .edui-for-preview .edui-icon{background-position:-420px -20px}.edui-default .edui-for-selectall .edui-icon{background-position:-400px -20px}.edui-default .edui-for-searchreplace .edui-icon{background-position:-520px -20px}.edui-default .edui-for-map .edui-icon{background-position:-40px -40px}.edui-default .edui-for-gmap .edui-icon{background-position:-260px -40px}.edui-default .edui-for-insertvideo .edui-icon{background-position:-320px -20px}.edui-default .edui-for-time .edui-icon{background-position:-160px -20px}.edui-default .edui-for-date .edui-icon{background-position:-140px -20px}.edui-default .edui-for-cut .edui-icon{background-position:-680px 0}.edui-default .edui-for-copy .edui-icon{background-position:-700px 0}.edui-default .edui-for-paste .edui-icon{background-position:-560px 0}.edui-default .edui-for-formatmatch .edui-icon{background-position:-40px 0}.edui-default .edui-for-pasteplain .edui-icon{background-position:-360px -20px}.edui-default .edui-for-directionalityltr .edui-icon{background-position:-20px -20px}.edui-default .edui-for-directionalityrtl .edui-icon{background-position:-40px -20px}.edui-default .edui-for-source .edui-icon{background-position:-261px -0px}.edui-default .edui-for-removeformat .edui-icon{background-position:-580px 0}.edui-default .edui-for-unlink .edui-icon{background-position:-640px 0}.edui-default .edui-for-touppercase .edui-icon{background-position:-786px 0}.edui-default .edui-for-tolowercase .edui-icon{background-position:-806px 0}.edui-default .edui-for-insertrow .edui-icon{background-position:-478px -76px}.edui-default .edui-for-insertrownext .edui-icon{background-position:-498px -76px}.edui-default .edui-for-insertcol .edui-icon{background-position:-455px -76px}.edui-default .edui-for-insertcolnext .edui-icon{background-position:-429px -76px}.edui-default .edui-for-mergeright .edui-icon{background-position:-60px -40px}.edui-default .edui-for-mergedown .edui-icon{background-position:-80px -40px}.edui-default .edui-for-splittorows .edui-icon{background-position:-100px -40px}.edui-default .edui-for-splittocols .edui-icon{background-position:-120px -40px}.edui-default .edui-for-insertparagraphbeforetable .edui-icon{background-position:-140px -40px}.edui-default .edui-for-deleterow .edui-icon{background-position:-660px -20px}.edui-default .edui-for-deletecol .edui-icon{background-position:-640px -20px}.edui-default .edui-for-splittocells .edui-icon{background-position:-800px -20px}.edui-default .edui-for-mergecells .edui-icon{background-position:-760px -20px}.edui-default .edui-for-deletetable .edui-icon{background-position:-620px -20px}.edui-default .edui-for-cleardoc .edui-icon{background-position:-520px 0}.edui-default .edui-for-fullscreen .edui-icon{background-position:-100px -20px}.edui-default .edui-for-anchor .edui-icon{background-position:-200px 0}.edui-default .edui-for-pagebreak .edui-icon{background-position:-460px -40px}.edui-default .edui-for-imagenone .edui-icon{background-position:-480px -40px}.edui-default .edui-for-imageleft .edui-icon{background-position:-500px -40px}.edui-default .edui-for-wordimage .edui-icon{background-position:-660px -40px}.edui-default .edui-for-imageright .edui-icon{background-position:-520px -40px}.edui-default .edui-for-imagecenter .edui-icon{background-position:-540px -40px}.edui-default .edui-for-indent .edui-icon{background-position:-400px 0}.edui-default .edui-for-outdent .edui-icon{background-position:-540px 0}.edui-default .edui-for-webapp .edui-icon{background-position:-601px -40px}.edui-default .edui-for-table .edui-icon{background-position:-580px -20px}.edui-default .edui-for-edittable .edui-icon{background-position:-420px -40px}.edui-default .edui-for-template .edui-icon{background-position:-339px -40px}.edui-default .edui-for-delete .edui-icon{background-position:-360px -40px}.edui-default .edui-for-attachment .edui-icon{background-position:-620px -40px}.edui-default .edui-for-edittd .edui-icon{background-position:-700px -40px}.edui-default .edui-for-snapscreen .edui-icon{background-position:-581px -40px}.edui-default .edui-for-scrawl .edui-icon{background-position:-801px -41px}.edui-default .edui-for-background .edui-icon{background-position:-680px -40px}.edui-default .edui-for-music .edui-icon{background-position:-18px -40px}.edui-default .edui-for-formula .edui-icon{background-position:-200px -40px}.edui-default .edui-for-aligntd .edui-icon{background-position:-236px -76px}.edui-default .edui-for-insertparagraphtrue .edui-icon{background-position:-625px -76px}.edui-default .edui-for-insertparagraph .edui-icon{background-position:-602px -76px}.edui-default .edui-for-insertcaption .edui-icon{background-position:-336px -76px}.edui-default .edui-for-deletecaption .edui-icon{background-position:-362px -76px}.edui-default .edui-for-inserttitle .edui-icon{background-position:-286px -76px}.edui-default .edui-for-deletetitle .edui-icon{background-position:-311px -76px}.edui-default .edui-for-aligntable .edui-icon{background-position:-440px 0}.edui-default .edui-for-tablealignment-left .edui-icon{background-position:-460px 0}.edui-default .edui-for-tablealignment-center .edui-icon{background-position:-420px 0}.edui-default .edui-for-tablealignment-right .edui-icon{background-position:-480px 0}.edui-default .edui-for-drafts .edui-icon{background-position:-560px 0}.edui-default .edui-for-charts .edui-icon{background:url( ../images/charts.png ) no-repeat 2px 3px!important}.edui-default .edui-for-inserttitlecol .edui-icon{background-position:-673px -76px}.edui-default .edui-for-deletetitlecol .edui-icon{background-position:-698px -76px}.edui-default .edui-for-simpleupload .edui-icon{background-position:-380px 0}.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow,.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow{background:url(../images/icons.png) -741px 0;_background:url(../images/icons.gif) -741px 0;height:20px;width:9px}.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body{padding:1px}.edui-default .edui-toolbar .edui-splitborder{width:1px;height:20px}.edui-default .edui-toolbar .edui-state-hover .edui-splitborder{width:1px;border-left:0 solid #dcac6c}.edui-default .edui-toolbar .edui-state-active .edui-splitborder{width:0;border-left:1px solid gray}.edui-default .edui-toolbar .edui-state-opened .edui-splitborder{width:1px;border:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body{background-color:#fff5d4;border:1px solid #dcac6c;padding:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body{background-color:#FFE69F;border:1px solid #DCAC6C;padding:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body{background-color:#fff;border:1px solid gray;padding:0}.edui-default .edui-state-disabled .edui-arrow{opacity:.3;_filter:alpha(opacity=30)}.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body{background-color:#fff;border:1px solid gray;padding:0}.edui-default .edui-for-insertorderedlist .edui-bordereraser,.edui-default .edui-for-lineheight .edui-bordereraser,.edui-default .edui-for-rowspacingtop .edui-bordereraser,.edui-default .edui-for-rowspacingbottom .edui-bordereraser,.edui-default .edui-for-insertunorderedlist .edui-bordereraser{background-color:#fff}.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon,.edui-default .edui-for-lineheight .edui-popup-body .edui-icon,.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon,.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon,.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon{background-image:none}.edui-default .edui-popup{z-index:3000;background-color:#fff;width:auto;height:auto}.edui-default .edui-popup .edui-shadow{left:0;top:0;width:100%;height:100%}.edui-default .edui-popup-content{border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 4px rgba(0,0,0,.2);-moz-box-shadow:0 3px 4px rgba(0,0,0,.2);box-shadow:0 3px 4px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;padding:5px;background:#fff}.edui-default .edui-popup .edui-bordereraser{background-color:#fff;height:3px}.edui-default .edui-menu .edui-bordereraser{height:3px}.edui-default .edui-anchor-topleft .edui-bordereraser{left:1px;top:-2px}.edui-default .edui-anchor-topright .edui-bordereraser{right:1px;top:-2px}.edui-default .edui-anchor-bottomleft .edui-bordereraser{left:0;bottom:-6px;height:7px;border-left:1px solid gray;border-right:1px solid gray}.edui-default .edui-anchor-bottomright .edui-bordereraser{right:0;bottom:-6px;height:7px;border-left:1px solid gray;border-right:1px solid gray}.edui-popup div{width:auto;height:auto}.edui-default .edui-editor-messageholder{display:block;width:150px;height:auto;border:0;margin:0;padding:0;position:absolute;top:28px;right:3px}.edui-default .edui-message{min-height:10px;text-shadow:0 1px 0 rgba(255,255,255,.5);padding:0;margin-bottom:3px;position:relative}.edui-default .edui-message-body{border-radius:3px;padding:8px 15px 8px 8px;color:#c09853;background-color:#fcf8e3;border:1px solid #fbeed5}.edui-default .edui-message-type-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.edui-default .edui-message-type-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.edui-default .edui-message-type-danger,.edui-default .edui-message-type-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.edui-default .edui-message .edui-message-closer{display:block;width:16px;height:16px;line-height:16px;position:absolute;top:0;right:0;padding:0;cursor:pointer;background:transparent;border:0;float:right;font-size:20px;font-weight:700;color:#999;text-shadow:0 1px 0 #fff;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.edui-default .edui-message .edui-message-content{font-size:10pt;word-wrap:break-word;word-break:normal}.edui-default .edui-dialog{z-index:2000;position:absolute}.edui-dialog div{width:auto}.edui-default .edui-dialog-wrap{margin-right:6px;margin-bottom:6px}.edui-default .edui-dialog-fullscreen-flag{margin-right:0;margin-bottom:0}.edui-default .edui-dialog-body{position:relative;padding:2px 0 0 2px;_zoom:1}.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body{padding:0}.edui-default .edui-dialog-shadow{position:absolute;z-index:-1;left:0;top:0;width:100%;height:100%;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.edui-default .edui-dialog-foot{background-color:#fff}.edui-default .edui-dialog-titlebar{height:26px;border-bottom:1px solid #c6c6c6;background:url(../images/dialog-title-bg.png) repeat-x bottom;position:relative;cursor:move}.edui-default .edui-dialog-caption{font-weight:700;font-size:12px;line-height:26px;padding-left:5px}.edui-default .edui-dialog-draghandle{height:26px}.edui-default .edui-dialog-closebutton{position:absolute!important;right:5px;top:3px}.edui-default .edui-dialog-closebutton .edui-button-body{height:20px;width:20px;cursor:pointer;background:url(../images/icons-all.gif) no-repeat 0 -59px}.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body{background:url(../images/icons-all.gif) no-repeat 0 -89px}.edui-default .edui-dialog-foot{height:40px}.edui-default .edui-dialog-buttons{position:absolute;right:0}.edui-default .edui-dialog-buttons .edui-button{margin-right:10px}.edui-default .edui-dialog-buttons .edui-button .edui-button-body{background:url(../images/icons-all.gif) no-repeat;height:24px;width:96px;font-size:12px;line-height:24px;text-align:center;cursor:default}.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body{background:url(../images/icons-all.gif) no-repeat 0 -30px}.edui-default .edui-dialog iframe{border:0;padding:0;margin:0;vertical-align:top}.edui-default .edui-dialog-modalmask{opacity:.3;filter:alpha(opacity=30);background-color:#ccc;position:absolute}.edui-default .edui-dialog-dragmask{position:absolute;background-color:transparent;cursor:move}.edui-default .edui-dialog-content{position:relative}.edui-default .dialogcontmask{cursor:move;visibility:hidden;display:block;position:absolute;width:100%;height:100%;opacity:0;filter:alpha(opacity=0)}.edui-default .edui-for-link .edui-dialog-content{width:420px;height:200px;overflow:hidden}.edui-default .edui-for-background .edui-dialog-content{width:440px;height:280px;overflow:hidden}.edui-default .edui-for-template .edui-dialog-content{width:630px;height:390px;overflow:hidden}.edui-default .edui-for-scrawl .edui-dialog-content{width:515px;*width:506px;height:360px}.edui-default .edui-for-spechars .edui-dialog-content{width:620px;height:500px;*width:630px;*height:570px}.edui-default .edui-for-insertimage .edui-dialog-content{width:650px;height:400px;overflow:hidden}.edui-default .edui-for-webapp .edui-dialog-content{width:560px;_width:565px;height:450px;overflow:hidden}.edui-default .edui-for-insertframe .edui-dialog-content{width:350px;height:200px;overflow:hidden}.edui-default .edui-for-wordimage .edui-dialog-content{width:620px;height:380px;overflow:hidden}.edui-default .edui-for-attachment .edui-dialog-content{width:650px;height:400px;overflow:hidden}.edui-default .edui-for-map .edui-dialog-content{width:550px;height:400px}.edui-default .edui-for-gmap .edui-dialog-content{width:550px;height:400px}.edui-default .edui-for-insertvideo .edui-dialog-content{width:590px;height:390px}.edui-default .edui-for-anchor .edui-dialog-content{width:320px;height:60px;overflow:hidden}.edui-default .edui-for-searchreplace .edui-dialog-content{width:400px;height:220px}.edui-default .edui-for-help .edui-dialog-content{width:400px;height:420px}.edui-default .edui-for-edittable .edui-dialog-content{width:540px;_width:590px;height:335px}.edui-default .edui-for-edittip .edui-dialog-content{width:225px;height:60px}.edui-default .edui-for-edittd .edui-dialog-content{width:240px;height:50px}.edui-default .edui-for-snapscreen .edui-dialog-content{width:400px;height:220px}.edui-default .edui-for-music .edui-dialog-content{width:515px;height:360px}.edui-default .edui-for-paragraph .edui-listitem-label{font-family:Tahoma,Verdana,Arial,Helvetica}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p{font-size:22px;line-height:27px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1{font-weight:bolder;font-size:32px;line-height:36px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2{font-weight:bolder;font-size:27px;line-height:29px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3{font-weight:bolder;font-size:19px;line-height:23px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4{font-weight:bolder;font-size:16px;line-height:19px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5{font-weight:bolder;font-size:13px;line-height:16px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6{font-weight:bolder;font-size:12px;line-height:14px}.edui-default .edui-for-inserttable .edui-splitborder{display:none}.edui-default .edui-for-inserttable .edui-splitbutton-body .edui-arrow{width:0}.edui-default .edui-toolbar .edui-for-inserttable .edui-state-active .edui-splitborder{border-left:1px solid transparent}.edui-default .edui-tablepicker .edui-infoarea{height:14px;line-height:14px;font-size:12px;width:220px;margin-bottom:3px;clear:both}.edui-default .edui-tablepicker .edui-infoarea .edui-label{float:left}.edui-default .edui-dialog-buttons .edui-label{line-height:24px}.edui-default .edui-tablepicker .edui-infoarea .edui-clickable{float:right}.edui-default .edui-tablepicker .edui-pickarea{background:url(../images/unhighlighted.gif) repeat;height:220px;width:220px}.edui-default .edui-tablepicker .edui-pickarea .edui-overlay{background:url(../images/highlighted.gif) repeat}.edui-default .edui-colorpicker-topbar{height:27px;width:200px}.edui-default .edui-colorpicker-preview{height:20px;border:1px inset #000;margin-left:1px;width:128px;float:left}.edui-default .edui-colorpicker-nocolor{float:right;margin-right:1px;font-size:12px;line-height:14px;height:14px;border:1px solid #333;padding:3px 5px;cursor:pointer}.edui-default .edui-colorpicker-tablefirstrow{height:30px}.edui-default .edui-colorpicker-colorcell{width:14px;height:14px;display:block;margin:0;cursor:pointer}.edui-default .edui-colorpicker-colorcell:hover{width:14px;height:14px;margin:0}.edui-default .edui-colorpicker-advbtn{display:block;text-align:center;cursor:pointer;height:20px}.arrow_down{background:#fff url(../images/arrow_down.png) no-repeat center}.arrow_up{background:#fff url(../images/arrow_up.png) no-repeat center}.edui-colorpicker-adv{position:relative;overflow:hidden;height:180px;display:none}.edui-colorpicker-plant,.edui-colorpicker-hue{border:solid 1px #666}.edui-colorpicker-pad{width:150px;height:150px;left:14px;top:13px;position:absolute;background:red;overflow:hidden;cursor:crosshair}.edui-colorpicker-cover{position:absolute;top:0;left:0;width:150px;height:150px;background:url(../images/tangram-colorpicker.png) -160px -200px}.edui-colorpicker-padDot{position:absolute;top:0;left:0;width:11px;height:11px;overflow:hidden;background:url(../images/tangram-colorpicker.png) 0 -200px repeat-x;z-index:1000}.edui-colorpicker-sliderMain{position:absolute;left:171px;top:13px;width:19px;height:152px;background:url(../images/tangram-colorpicker.png) -179px -12px no-repeat}.edui-colorpicker-slider{width:100%;height:100%;cursor:pointer}.edui-colorpicker-thumb{position:absolute;top:0;cursor:pointer;height:3px;left:-1px;right:-1px;border:1px solid #000;background:#fff;opacity:.8}.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body{font-size:12px;margin-bottom:3px;clear:both}.edui-default .edui-autotypesetpicker-body table{border-collapse:separate;border-spacing:2px}.edui-default .edui-autotypesetpicker-body td{font-size:12px;word-wrap:break-word}.edui-default .edui-autotypesetpicker-body td input{margin:3px 3px 3px 4px;*margin:1px 0 0}.edui-default .edui-cellalignpicker .edui-cellalignpicker-body{width:70px;font-size:12px;cursor:default}.edui-default .edui-cellalignpicker-body table{border-collapse:separate;border-spacing:0}.edui-default .edui-cellalignpicker-body td{padding:1px}.edui-default .edui-cellalignpicker-body .edui-icon{height:20px;width:20px;padding:1px;background-image:url(../images/table-cell-align.png)}.edui-default .edui-cellalignpicker-body .edui-left{background-position:0 0}.edui-default .edui-cellalignpicker-body .edui-center{background-position:-25px 0}.edui-default .edui-cellalignpicker-body .edui-right{background-position:-51px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{background-position:-73px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{background-position:-98px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{background-position:-124px 0}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left{background-position:-146px 0;background-color:#f1f4f5}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center{background-position:-245px 0}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right{background-position:-271px 0}.edui-default .edui-toolbar .edui-separator{width:2px;height:20px;margin:2px 4px 2px 3px;background:url(../images/icons.png) -181px 0;background:url(../images/icons.gif) -181px 0 \9}.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump{position:absolute;overflow:hidden;bottom:1px;left:1px;width:18px;height:4px}.edui-default .edui-for-emotion .edui-icon{background-position:-60px -20px}.edui-default .edui-for-emotion .edui-popup-content iframe{width:514px;height:380px;overflow:hidden}.edui-default .edui-for-emotion .edui-popup-content{position:relative;z-index:555}.edui-default .edui-for-emotion .edui-splitborder{display:none}.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow{width:0}.edui-default .edui-toolbar .edui-for-emotion .edui-state-active .edui-splitborder{border-left:1px solid transparent}.edui-default .edui-hassubmenu .edui-arrow{height:20px;width:20px;float:right;background:url(../images/icons-all.gif) no-repeat 10px -233px}.edui-default .edui-menu-body .edui-menuitem{padding:1px}.edui-default .edui-menuseparator{margin:2px 0;height:1px;overflow:hidden}.edui-default .edui-menuseparator-inner{border-bottom:1px solid #e2e3e3;margin-left:29px;margin-right:1px}.edui-default .edui-menu-body .edui-state-hover{padding:0!important;background-color:#fff5d4;border:1px solid #dcac6c}.edui-default .edui-shortcutmenu{padding:2px;width:190px;height:50px;background-color:#fff;border:1px solid #ccc;border-radius:5px}.edui-default .edui-wordpastepop .edui-popup-content{border:0;padding:0;width:54px;height:21px}.edui-default .edui-pasteicon{width:100%;height:100%;background-image:url(../images/wordpaste.png);background-position:0 0}.edui-default .edui-pasteicon.edui-state-opened{background-position:0 -34px}.edui-default .edui-pastecontainer{position:relative;visibility:hidden;width:97px;background:#fff;border:1px solid #ccc}.edui-default .edui-pastecontainer .edui-title{font-weight:700;background:#F8F8FF;height:25px;line-height:25px;font-size:12px;padding-left:5px}.edui-default .edui-pastecontainer .edui-button{overflow:hidden;margin:3px 0}.edui-default .edui-pastecontainer .edui-button .edui-richtxticon,.edui-default .edui-pastecontainer .edui-button .edui-tagicon,.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{float:left;cursor:pointer;width:29px;height:29px;margin-left:5px;background-image:url(../images/wordpaste.png);background-repeat:no-repeat}.edui-default .edui-pastecontainer .edui-button .edui-richtxticon{margin-left:0;background-position:-109px 0}.edui-default .edui-pastecontainer .edui-button .edui-tagicon{background-position:-148px 1px}.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{background-position:-72px 0}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon{background-position:-109px -34px}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{background-position:-148px -34px}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-plaintxticon{background-position:-72px -34px} \ No newline at end of file diff --git a/public/vendor/ueditor/themes/default/dialogbase.css b/public/vendor/ueditor/themes/default/dialogbase.css new file mode 100644 index 0000000..cd663d5 --- /dev/null +++ b/public/vendor/ueditor/themes/default/dialogbase.css @@ -0,0 +1,100 @@ +/*弹出对话框页面样式组件 +*/ + +/*reset +*/ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + outline: 0; + font-size: 100%; +} + +body { + line-height: 1; +} + +ol, ul { + list-style: none; +} + +blockquote, q { + quotes: none; +} + +ins { + text-decoration: none; +} + +del { + text-decoration: line-through; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +/*module +*/ +body { + background-color: #fff; + font: 12px/1.5 sans-serif, "宋体", "Arial Narrow", HELVETICA; + color: #646464; +} + +/*tab*/ +.tabhead { + position: relative; + z-index: 10; +} + +.tabhead span { + display: inline-block; + padding: 0 5px; + height: 30px; + border: 1px solid #ccc; + background: url("images/dialog-title-bg.png") repeat-x; + text-align: center; + line-height: 30px; + cursor: pointer; + *margin-right: 5px; +} + +.tabhead span.focus { + height: 31px; + border-bottom: none; + background: #fff; +} + +.tabbody { + position: relative; + top: -1px; + margin: 0 auto; + border: 1px solid #ccc; +} + +/*button*/ +a.button { + display: block; + text-align: center; + line-height: 24px; + text-decoration: none; + height: 24px; + width: 95px; + border: 0; + color: #838383; + background: url(../../themes/default/images/icons-all.gif) no-repeat; +} + +a.button:hover { + background-position: 0 -30px; +} \ No newline at end of file diff --git a/public/vendor/ueditor/themes/default/images/anchor.gif b/public/vendor/ueditor/themes/default/images/anchor.gif new file mode 100644 index 0000000..5aa797b Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/anchor.gif differ diff --git a/public/vendor/ueditor/themes/default/images/arrow.png b/public/vendor/ueditor/themes/default/images/arrow.png new file mode 100644 index 0000000..d900886 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/arrow.png differ diff --git a/public/vendor/ueditor/themes/default/images/arrow_down.png b/public/vendor/ueditor/themes/default/images/arrow_down.png new file mode 100644 index 0000000..e9257e8 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/arrow_down.png differ diff --git a/public/vendor/ueditor/themes/default/images/arrow_up.png b/public/vendor/ueditor/themes/default/images/arrow_up.png new file mode 100644 index 0000000..74277af Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/arrow_up.png differ diff --git a/public/vendor/ueditor/themes/default/images/button-bg.gif b/public/vendor/ueditor/themes/default/images/button-bg.gif new file mode 100644 index 0000000..ec7fa2e Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/button-bg.gif differ diff --git a/public/vendor/ueditor/themes/default/images/cancelbutton.gif b/public/vendor/ueditor/themes/default/images/cancelbutton.gif new file mode 100644 index 0000000..df4bc2c Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/cancelbutton.gif differ diff --git a/public/vendor/ueditor/themes/default/images/charts.png b/public/vendor/ueditor/themes/default/images/charts.png new file mode 100644 index 0000000..713965c Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/charts.png differ diff --git a/public/vendor/ueditor/themes/default/images/cursor_h.gif b/public/vendor/ueditor/themes/default/images/cursor_h.gif new file mode 100644 index 0000000..d7c3e7e Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/cursor_h.gif differ diff --git a/public/vendor/ueditor/themes/default/images/cursor_h.png b/public/vendor/ueditor/themes/default/images/cursor_h.png new file mode 100644 index 0000000..2088fc2 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/cursor_h.png differ diff --git a/public/vendor/ueditor/themes/default/images/cursor_v.gif b/public/vendor/ueditor/themes/default/images/cursor_v.gif new file mode 100644 index 0000000..bb508db Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/cursor_v.gif differ diff --git a/public/vendor/ueditor/themes/default/images/cursor_v.png b/public/vendor/ueditor/themes/default/images/cursor_v.png new file mode 100644 index 0000000..6f39ca3 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/cursor_v.png differ diff --git a/public/vendor/ueditor/themes/default/images/dialog-title-bg.png b/public/vendor/ueditor/themes/default/images/dialog-title-bg.png new file mode 100644 index 0000000..f744f26 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/dialog-title-bg.png differ diff --git a/public/vendor/ueditor/themes/default/images/filescan.png b/public/vendor/ueditor/themes/default/images/filescan.png new file mode 100644 index 0000000..1d27158 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/filescan.png differ diff --git a/public/vendor/ueditor/themes/default/images/highlighted.gif b/public/vendor/ueditor/themes/default/images/highlighted.gif new file mode 100644 index 0000000..9272b49 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/highlighted.gif differ diff --git a/public/vendor/ueditor/themes/default/images/icons-all.gif b/public/vendor/ueditor/themes/default/images/icons-all.gif new file mode 100644 index 0000000..21915e5 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/icons-all.gif differ diff --git a/public/vendor/ueditor/themes/default/images/icons.gif b/public/vendor/ueditor/themes/default/images/icons.gif new file mode 100644 index 0000000..7abd30a Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/icons.gif differ diff --git a/public/vendor/ueditor/themes/default/images/icons.png b/public/vendor/ueditor/themes/default/images/icons.png new file mode 100644 index 0000000..c015e3a Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/icons.png differ diff --git a/public/vendor/ueditor/themes/default/images/loaderror.png b/public/vendor/ueditor/themes/default/images/loaderror.png new file mode 100644 index 0000000..35ff333 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/loaderror.png differ diff --git a/public/vendor/ueditor/themes/default/images/loading.gif b/public/vendor/ueditor/themes/default/images/loading.gif new file mode 100644 index 0000000..b713e27 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/loading.gif differ diff --git a/public/vendor/ueditor/themes/default/images/lock.gif b/public/vendor/ueditor/themes/default/images/lock.gif new file mode 100644 index 0000000..b4e6d78 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/lock.gif differ diff --git a/public/vendor/ueditor/themes/default/images/neweditor-tab-bg.png b/public/vendor/ueditor/themes/default/images/neweditor-tab-bg.png new file mode 100644 index 0000000..8f398b0 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/neweditor-tab-bg.png differ diff --git a/public/vendor/ueditor/themes/default/images/pagebreak.gif b/public/vendor/ueditor/themes/default/images/pagebreak.gif new file mode 100644 index 0000000..8d1cffd Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/pagebreak.gif differ diff --git a/public/vendor/ueditor/themes/default/images/scale.png b/public/vendor/ueditor/themes/default/images/scale.png new file mode 100644 index 0000000..f45adb5 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/scale.png differ diff --git a/public/vendor/ueditor/themes/default/images/sortable.png b/public/vendor/ueditor/themes/default/images/sortable.png new file mode 100644 index 0000000..1bca649 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/sortable.png differ diff --git a/public/vendor/ueditor/themes/default/images/spacer.gif b/public/vendor/ueditor/themes/default/images/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/spacer.gif differ diff --git a/public/vendor/ueditor/themes/default/images/sparator_v.png b/public/vendor/ueditor/themes/default/images/sparator_v.png new file mode 100644 index 0000000..8cf5662 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/sparator_v.png differ diff --git a/public/vendor/ueditor/themes/default/images/table-cell-align.png b/public/vendor/ueditor/themes/default/images/table-cell-align.png new file mode 100644 index 0000000..ddf4285 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/table-cell-align.png differ diff --git a/public/vendor/ueditor/themes/default/images/tangram-colorpicker.png b/public/vendor/ueditor/themes/default/images/tangram-colorpicker.png new file mode 100644 index 0000000..738e500 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/tangram-colorpicker.png differ diff --git a/public/vendor/ueditor/themes/default/images/toolbar_bg.png b/public/vendor/ueditor/themes/default/images/toolbar_bg.png new file mode 100644 index 0000000..7ab685f Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/toolbar_bg.png differ diff --git a/public/vendor/ueditor/themes/default/images/unhighlighted.gif b/public/vendor/ueditor/themes/default/images/unhighlighted.gif new file mode 100644 index 0000000..7ad0b67 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/unhighlighted.gif differ diff --git a/public/vendor/ueditor/themes/default/images/upload.png b/public/vendor/ueditor/themes/default/images/upload.png new file mode 100644 index 0000000..08d4d92 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/upload.png differ diff --git a/public/vendor/ueditor/themes/default/images/videologo.gif b/public/vendor/ueditor/themes/default/images/videologo.gif new file mode 100644 index 0000000..555af74 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/videologo.gif differ diff --git a/public/vendor/ueditor/themes/default/images/word.gif b/public/vendor/ueditor/themes/default/images/word.gif new file mode 100644 index 0000000..9ef5d09 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/word.gif differ diff --git a/public/vendor/ueditor/themes/default/images/wordpaste.png b/public/vendor/ueditor/themes/default/images/wordpaste.png new file mode 100644 index 0000000..9367758 Binary files /dev/null and b/public/vendor/ueditor/themes/default/images/wordpaste.png differ diff --git a/public/vendor/ueditor/themes/iframe.css b/public/vendor/ueditor/themes/iframe.css new file mode 100644 index 0000000..774013a --- /dev/null +++ b/public/vendor/ueditor/themes/iframe.css @@ -0,0 +1 @@ +/*可以在这里添加你自己的css*/ diff --git a/public/vendor/ueditor/third-party/SyntaxHighlighter/shCore.js b/public/vendor/ueditor/third-party/SyntaxHighlighter/shCore.js new file mode 100644 index 0000000..3249184 --- /dev/null +++ b/public/vendor/ueditor/third-party/SyntaxHighlighter/shCore.js @@ -0,0 +1,3655 @@ +// XRegExp 1.5.1 +// (c) 2007-2012 Steven Levithan +// MIT License +// +// Provides an augmented, extensible, cross-browser implementation of regular expressions, +// including support for additional syntax, flags, and methods + +var XRegExp; + +if (XRegExp) { + // Avoid running twice, since that would break references to native globals + throw Error("can't load XRegExp twice in the same frame"); +} + +// Run within an anonymous function to protect variables and avoid new globals +(function (undefined) { + + //--------------------------------- + // Constructor + //--------------------------------- + + // Accepts a pattern and flags; returns a new, extended `RegExp` object. Differs from a native + // regular expression in that additional syntax and flags are supported and cross-browser + // syntax inconsistencies are ameliorated. `XRegExp(/regex/)` clones an existing regex and + // converts to type XRegExp + XRegExp = function (pattern, flags) { + var output = [], + currScope = XRegExp.OUTSIDE_CLASS, + pos = 0, + context, tokenResult, match, chr, regex; + + if (XRegExp.isRegExp(pattern)) { + if (flags !== undefined) + throw TypeError("can't supply flags when constructing one RegExp from another"); + return clone(pattern); + } + // Tokens become part of the regex construction process, so protect against infinite + // recursion when an XRegExp is constructed within a token handler or trigger + if (isInsideConstructor) + throw Error("can't call the XRegExp constructor within token definition functions"); + + flags = flags || ""; + context = { // `this` object for custom tokens + hasNamedCapture: false, + captureNames: [], + hasFlag: function (flag) {return flags.indexOf(flag) > -1;}, + setFlag: function (flag) {flags += flag;} + }; + + while (pos < pattern.length) { + // Check for custom tokens at the current position + tokenResult = runTokens(pattern, pos, currScope, context); + + if (tokenResult) { + output.push(tokenResult.output); + pos += (tokenResult.match[0].length || 1); + } else { + // Check for native multicharacter metasequences (excluding character classes) at + // the current position + if (match = nativ.exec.call(nativeTokens[currScope], pattern.slice(pos))) { + output.push(match[0]); + pos += match[0].length; + } else { + chr = pattern.charAt(pos); + if (chr === "[") + currScope = XRegExp.INSIDE_CLASS; + else if (chr === "]") + currScope = XRegExp.OUTSIDE_CLASS; + // Advance position one character + output.push(chr); + pos++; + } + } + } + + regex = RegExp(output.join(""), nativ.replace.call(flags, flagClip, "")); + regex._xregexp = { + source: pattern, + captureNames: context.hasNamedCapture ? context.captureNames : null + }; + return regex; + }; + + + //--------------------------------- + // Public properties + //--------------------------------- + + XRegExp.version = "1.5.1"; + + // Token scope bitflags + XRegExp.INSIDE_CLASS = 1; + XRegExp.OUTSIDE_CLASS = 2; + + + //--------------------------------- + // Private variables + //--------------------------------- + + var replacementToken = /\$(?:(\d\d?|[$&`'])|{([$\w]+)})/g, + flagClip = /[^gimy]+|([\s\S])(?=[\s\S]*\1)/g, // Nonnative and duplicate flags + quantifier = /^(?:[?*+]|{\d+(?:,\d*)?})\??/, + isInsideConstructor = false, + tokens = [], + // Copy native globals for reference ("native" is an ES3 reserved keyword) + nativ = { + exec: RegExp.prototype.exec, + test: RegExp.prototype.test, + match: String.prototype.match, + replace: String.prototype.replace, + split: String.prototype.split + }, + compliantExecNpcg = nativ.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups + compliantLastIndexIncrement = function () { + var x = /^/g; + nativ.test.call(x, ""); + return !x.lastIndex; + }(), + hasNativeY = RegExp.prototype.sticky !== undefined, + nativeTokens = {}; + + // `nativeTokens` match native multicharacter metasequences only (including deprecated octals, + // excluding character classes) + nativeTokens[XRegExp.INSIDE_CLASS] = /^(?:\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S]))/; + nativeTokens[XRegExp.OUTSIDE_CLASS] = /^(?:\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??)/; + + + //--------------------------------- + // Public methods + //--------------------------------- + + // Lets you extend or change XRegExp syntax and create custom flags. This is used internally by + // the XRegExp library and can be used to create XRegExp plugins. This function is intended for + // users with advanced knowledge of JavaScript's regular expression syntax and behavior. It can + // be disabled by `XRegExp.freezeTokens` + XRegExp.addToken = function (regex, handler, scope, trigger) { + tokens.push({ + pattern: clone(regex, "g" + (hasNativeY ? "y" : "")), + handler: handler, + scope: scope || XRegExp.OUTSIDE_CLASS, + trigger: trigger || null + }); + }; + + // Accepts a pattern and flags; returns an extended `RegExp` object. If the pattern and flag + // combination has previously been cached, the cached copy is returned; otherwise the newly + // created regex is cached + XRegExp.cache = function (pattern, flags) { + var key = pattern + "/" + (flags || ""); + return XRegExp.cache[key] || (XRegExp.cache[key] = XRegExp(pattern, flags)); + }; + + // Accepts a `RegExp` instance; returns a copy with the `/g` flag set. The copy has a fresh + // `lastIndex` (set to zero). If you want to copy a regex without forcing the `global` + // property, use `XRegExp(regex)`. Do not use `RegExp(regex)` because it will not preserve + // special properties required for named capture + XRegExp.copyAsGlobal = function (regex) { + return clone(regex, "g"); + }; + + // Accepts a string; returns the string with regex metacharacters escaped. The returned string + // can safely be used at any point within a regex to match the provided literal string. Escaped + // characters are [ ] { } ( ) * + ? - . , \ ^ $ | # and whitespace + XRegExp.escape = function (str) { + return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + }; + + // Accepts a string to search, regex to search with, position to start the search within the + // string (default: 0), and an optional Boolean indicating whether matches must start at-or- + // after the position or at the specified position only. This function ignores the `lastIndex` + // of the provided regex in its own handling, but updates the property for compatibility + XRegExp.execAt = function (str, regex, pos, anchored) { + var r2 = clone(regex, "g" + ((anchored && hasNativeY) ? "y" : "")), + match; + r2.lastIndex = pos = pos || 0; + match = r2.exec(str); // Run the altered `exec` (required for `lastIndex` fix, etc.) + if (anchored && match && match.index !== pos) + match = null; + if (regex.global) + regex.lastIndex = match ? r2.lastIndex : 0; + return match; + }; + + // Breaks the unrestorable link to XRegExp's private list of tokens, thereby preventing + // syntax and flag changes. Should be run after XRegExp and any plugins are loaded + XRegExp.freezeTokens = function () { + XRegExp.addToken = function () { + throw Error("can't run addToken after freezeTokens"); + }; + }; + + // Accepts any value; returns a Boolean indicating whether the argument is a `RegExp` object. + // Note that this is also `true` for regex literals and regexes created by the `XRegExp` + // constructor. This works correctly for variables created in another frame, when `instanceof` + // and `constructor` checks would fail to work as intended + XRegExp.isRegExp = function (o) { + return Object.prototype.toString.call(o) === "[object RegExp]"; + }; + + // Executes `callback` once per match within `str`. Provides a simpler and cleaner way to + // iterate over regex matches compared to the traditional approaches of subverting + // `String.prototype.replace` or repeatedly calling `exec` within a `while` loop + XRegExp.iterate = function (str, regex, callback, context) { + var r2 = clone(regex, "g"), + i = -1, match; + while (match = r2.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.) + if (regex.global) + regex.lastIndex = r2.lastIndex; // Doing this to follow expectations if `lastIndex` is checked within `callback` + callback.call(context, match, ++i, str, regex); + if (r2.lastIndex === match.index) + r2.lastIndex++; + } + if (regex.global) + regex.lastIndex = 0; + }; + + // Accepts a string and an array of regexes; returns the result of using each successive regex + // to search within the matches of the previous regex. The array of regexes can also contain + // objects with `regex` and `backref` properties, in which case the named or numbered back- + // references specified are passed forward to the next regex or returned. E.g.: + // var xregexpImgFileNames = XRegExp.matchChain(html, [ + // {regex: /]+)>/i, backref: 1}, // tag attributes + // {regex: XRegExp('(?ix) \\s src=" (? [^"]+ )'), backref: "src"}, // src attribute values + // {regex: XRegExp("^http://xregexp\\.com(/[^#?]+)", "i"), backref: 1}, // xregexp.com paths + // /[^\/]+$/ // filenames (strip directory paths) + // ]); + XRegExp.matchChain = function (str, chain) { + return function recurseChain (values, level) { + var item = chain[level].regex ? chain[level] : {regex: chain[level]}, + regex = clone(item.regex, "g"), + matches = [], i; + for (i = 0; i < values.length; i++) { + XRegExp.iterate(values[i], regex, function (match) { + matches.push(item.backref ? (match[item.backref] || "") : match[0]); + }); + } + return ((level === chain.length - 1) || !matches.length) ? + matches : recurseChain(matches, level + 1); + }([str], 0); + }; + + + //--------------------------------- + // New RegExp prototype methods + //--------------------------------- + + // Accepts a context object and arguments array; returns the result of calling `exec` with the + // first value in the arguments array. the context is ignored but is accepted for congruity + // with `Function.prototype.apply` + RegExp.prototype.apply = function (context, args) { + return this.exec(args[0]); + }; + + // Accepts a context object and string; returns the result of calling `exec` with the provided + // string. the context is ignored but is accepted for congruity with `Function.prototype.call` + RegExp.prototype.call = function (context, str) { + return this.exec(str); + }; + + + //--------------------------------- + // Overriden native methods + //--------------------------------- + + // Adds named capture support (with backreferences returned as `result.name`), and fixes two + // cross-browser issues per ES3: + // - Captured values for nonparticipating capturing groups should be returned as `undefined`, + // rather than the empty string. + // - `lastIndex` should not be incremented after zero-length matches. + RegExp.prototype.exec = function (str) { + var match, name, r2, origLastIndex; + if (!this.global) + origLastIndex = this.lastIndex; + match = nativ.exec.apply(this, arguments); + if (match) { + // Fix browsers whose `exec` methods don't consistently return `undefined` for + // nonparticipating capturing groups + if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) { + r2 = RegExp(this.source, nativ.replace.call(getNativeFlags(this), "g", "")); + // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed + // matching due to characters outside the match + nativ.replace.call((str + "").slice(match.index), r2, function () { + for (var i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) + match[i] = undefined; + } + }); + } + // Attach named capture properties + if (this._xregexp && this._xregexp.captureNames) { + for (var i = 1; i < match.length; i++) { + name = this._xregexp.captureNames[i - 1]; + if (name) + match[name] = match[i]; + } + } + // Fix browsers that increment `lastIndex` after zero-length matches + if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) + this.lastIndex--; + } + if (!this.global) + this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) + return match; + }; + + // Fix browser bugs in native method + RegExp.prototype.test = function (str) { + // Use the native `exec` to skip some processing overhead, even though the altered + // `exec` would take care of the `lastIndex` fixes + var match, origLastIndex; + if (!this.global) + origLastIndex = this.lastIndex; + match = nativ.exec.call(this, str); + // Fix browsers that increment `lastIndex` after zero-length matches + if (match && !compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) + this.lastIndex--; + if (!this.global) + this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) + return !!match; + }; + + // Adds named capture support and fixes browser bugs in native method + String.prototype.match = function (regex) { + if (!XRegExp.isRegExp(regex)) + regex = RegExp(regex); // Native `RegExp` + if (regex.global) { + var result = nativ.match.apply(this, arguments); + regex.lastIndex = 0; // Fix IE bug + return result; + } + return regex.exec(this); // Run the altered `exec` + }; + + // Adds support for `${n}` tokens for named and numbered backreferences in replacement text, + // and provides named backreferences to replacement functions as `arguments[0].name`. Also + // fixes cross-browser differences in replacement text syntax when performing a replacement + // using a nonregex search value, and the value of replacement regexes' `lastIndex` property + // during replacement iterations. Note that this doesn't support SpiderMonkey's proprietary + // third (`flags`) parameter + String.prototype.replace = function (search, replacement) { + var isRegex = XRegExp.isRegExp(search), + captureNames, result, str, origLastIndex; + + // There are too many combinations of search/replacement types/values and browser bugs that + // preclude passing to native `replace`, so don't try + //if (...) + // return nativ.replace.apply(this, arguments); + + if (isRegex) { + if (search._xregexp) + captureNames = search._xregexp.captureNames; // Array or `null` + if (!search.global) + origLastIndex = search.lastIndex; + } else { + search = search + ""; // Type conversion + } + + if (Object.prototype.toString.call(replacement) === "[object Function]") { + result = nativ.replace.call(this + "", search, function () { + if (captureNames) { + // Change the `arguments[0]` string primitive to a String object which can store properties + arguments[0] = new String(arguments[0]); + // Store named backreferences on `arguments[0]` + for (var i = 0; i < captureNames.length; i++) { + if (captureNames[i]) + arguments[0][captureNames[i]] = arguments[i + 1]; + } + } + // Update `lastIndex` before calling `replacement` (fix browsers) + if (isRegex && search.global) + search.lastIndex = arguments[arguments.length - 2] + arguments[0].length; + return replacement.apply(null, arguments); + }); + } else { + str = this + ""; // Type conversion, so `args[args.length - 1]` will be a string (given nonstring `this`) + result = nativ.replace.call(str, search, function () { + var args = arguments; // Keep this function's `arguments` available through closure + return nativ.replace.call(replacement + "", replacementToken, function ($0, $1, $2) { + // Numbered backreference (without delimiters) or special variable + if ($1) { + switch ($1) { + case "$": return "$"; + case "&": return args[0]; + case "`": return args[args.length - 1].slice(0, args[args.length - 2]); + case "'": return args[args.length - 1].slice(args[args.length - 2] + args[0].length); + // Numbered backreference + default: + // What does "$10" mean? + // - Backreference 10, if 10 or more capturing groups exist + // - Backreference 1 followed by "0", if 1-9 capturing groups exist + // - Otherwise, it's the string "$10" + // Also note: + // - Backreferences cannot be more than two digits (enforced by `replacementToken`) + // - "$01" is equivalent to "$1" if a capturing group exists, otherwise it's the string "$01" + // - There is no "$0" token ("$&" is the entire match) + var literalNumbers = ""; + $1 = +$1; // Type conversion; drop leading zero + if (!$1) // `$1` was "0" or "00" + return $0; + while ($1 > args.length - 3) { + literalNumbers = String.prototype.slice.call($1, -1) + literalNumbers; + $1 = Math.floor($1 / 10); // Drop the last digit + } + return ($1 ? args[$1] || "" : "$") + literalNumbers; + } + // Named backreference or delimited numbered backreference + } else { + // What does "${n}" mean? + // - Backreference to numbered capture n. Two differences from "$n": + // - n can be more than two digits + // - Backreference 0 is allowed, and is the entire match + // - Backreference to named capture n, if it exists and is not a number overridden by numbered capture + // - Otherwise, it's the string "${n}" + var n = +$2; // Type conversion; drop leading zeros + if (n <= args.length - 3) + return args[n]; + n = captureNames ? indexOf(captureNames, $2) : -1; + return n > -1 ? args[n + 1] : $0; + } + }); + }); + } + + if (isRegex) { + if (search.global) + search.lastIndex = 0; // Fix IE, Safari bug (last tested IE 9.0.5, Safari 5.1.2 on Windows) + else + search.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) + } + + return result; + }; + + // A consistent cross-browser, ES3 compliant `split` + String.prototype.split = function (s /* separator */, limit) { + // If separator `s` is not a regex, use the native `split` + if (!XRegExp.isRegExp(s)) + return nativ.split.apply(this, arguments); + + var str = this + "", // Type conversion + output = [], + lastLastIndex = 0, + match, lastLength; + + // Behavior for `limit`: if it's... + // - `undefined`: No limit + // - `NaN` or zero: Return an empty array + // - A positive number: Use `Math.floor(limit)` + // - A negative number: No limit + // - Other: Type-convert, then use the above rules + if (limit === undefined || +limit < 0) { + limit = Infinity; + } else { + limit = Math.floor(+limit); + if (!limit) + return []; + } + + // This is required if not `s.global`, and it avoids needing to set `s.lastIndex` to zero + // and restore it to its original value when we're done using the regex + s = XRegExp.copyAsGlobal(s); + + while (match = s.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.) + if (s.lastIndex > lastLastIndex) { + output.push(str.slice(lastLastIndex, match.index)); + + if (match.length > 1 && match.index < str.length) + Array.prototype.push.apply(output, match.slice(1)); + + lastLength = match[0].length; + lastLastIndex = s.lastIndex; + + if (output.length >= limit) + break; + } + + if (s.lastIndex === match.index) + s.lastIndex++; + } + + if (lastLastIndex === str.length) { + if (!nativ.test.call(s, "") || lastLength) + output.push(""); + } else { + output.push(str.slice(lastLastIndex)); + } + + return output.length > limit ? output.slice(0, limit) : output; + }; + + + //--------------------------------- + // Private helper functions + //--------------------------------- + + // Supporting function for `XRegExp`, `XRegExp.copyAsGlobal`, etc. Returns a copy of a `RegExp` + // instance with a fresh `lastIndex` (set to zero), preserving properties required for named + // capture. Also allows adding new flags in the process of copying the regex + function clone (regex, additionalFlags) { + if (!XRegExp.isRegExp(regex)) + throw TypeError("type RegExp expected"); + var x = regex._xregexp; + regex = XRegExp(regex.source, getNativeFlags(regex) + (additionalFlags || "")); + if (x) { + regex._xregexp = { + source: x.source, + captureNames: x.captureNames ? x.captureNames.slice(0) : null + }; + } + return regex; + } + + function getNativeFlags (regex) { + return (regex.global ? "g" : "") + + (regex.ignoreCase ? "i" : "") + + (regex.multiline ? "m" : "") + + (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3 + (regex.sticky ? "y" : ""); + } + + function runTokens (pattern, index, scope, context) { + var i = tokens.length, + result, match, t; + // Protect against constructing XRegExps within token handler and trigger functions + isInsideConstructor = true; + // Must reset `isInsideConstructor`, even if a `trigger` or `handler` throws + try { + while (i--) { // Run in reverse order + t = tokens[i]; + if ((scope & t.scope) && (!t.trigger || t.trigger.call(context))) { + t.pattern.lastIndex = index; + match = t.pattern.exec(pattern); // Running the altered `exec` here allows use of named backreferences, etc. + if (match && match.index === index) { + result = { + output: t.handler.call(context, match, scope), + match: match + }; + break; + } + } + } + } catch (err) { + throw err; + } finally { + isInsideConstructor = false; + } + return result; + } + + function indexOf (array, item, from) { + if (Array.prototype.indexOf) // Use the native array method if available + return array.indexOf(item, from); + for (var i = from || 0; i < array.length; i++) { + if (array[i] === item) + return i; + } + return -1; + } + + + //--------------------------------- + // Built-in tokens + //--------------------------------- + + // Augment XRegExp's regular expression syntax and flags. Note that when adding tokens, the + // third (`scope`) argument defaults to `XRegExp.OUTSIDE_CLASS` + + // Comment pattern: (?# ) + XRegExp.addToken( + /\(\?#[^)]*\)/, + function (match) { + // Keep tokens separated unless the following token is a quantifier + return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)"; + } + ); + + // Capturing group (match the opening parenthesis only). + // Required for support of named capturing groups + XRegExp.addToken( + /\((?!\?)/, + function () { + this.captureNames.push(null); + return "("; + } + ); + + // Named capturing group (match the opening delimiter only): (? + XRegExp.addToken( + /\(\?<([$\w]+)>/, + function (match) { + this.captureNames.push(match[1]); + this.hasNamedCapture = true; + return "("; + } + ); + + // Named backreference: \k + XRegExp.addToken( + /\\k<([\w$]+)>/, + function (match) { + var index = indexOf(this.captureNames, match[1]); + // Keep backreferences separate from subsequent literal numbers. Preserve back- + // references to named groups that are undefined at this point as literal strings + return index > -1 ? + "\\" + (index + 1) + (isNaN(match.input.charAt(match.index + match[0].length)) ? "" : "(?:)") : + match[0]; + } + ); + + // Empty character class: [] or [^] + XRegExp.addToken( + /\[\^?]/, + function (match) { + // For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S]. + // (?!) should work like \b\B, but is unreliable in Firefox + return match[0] === "[]" ? "\\b\\B" : "[\\s\\S]"; + } + ); + + // Mode modifier at the start of the pattern only, with any combination of flags imsx: (?imsx) + // Does not support x(?i), (?-i), (?i-m), (?i: ), (?i)(?m), etc. + XRegExp.addToken( + /^\(\?([imsx]+)\)/, + function (match) { + this.setFlag(match[1]); + return ""; + } + ); + + // Whitespace and comments, in free-spacing (aka extended) mode only + XRegExp.addToken( + /(?:\s+|#.*)+/, + function (match) { + // Keep tokens separated unless the following token is a quantifier + return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)"; + }, + XRegExp.OUTSIDE_CLASS, + function () {return this.hasFlag("x");} + ); + + // Dot, in dotall (aka singleline) mode only + XRegExp.addToken( + /\./, + function () {return "[\\s\\S]";}, + XRegExp.OUTSIDE_CLASS, + function () {return this.hasFlag("s");} + ); + + + //--------------------------------- + // Backward compatibility + //--------------------------------- + + // Uncomment the following block for compatibility with XRegExp 1.0-1.2: + /* + XRegExp.matchWithinChain = XRegExp.matchChain; + RegExp.prototype.addFlags = function (s) {return clone(this, s);}; + RegExp.prototype.execAll = function (s) {var r = []; XRegExp.iterate(s, this, function (m) {r.push(m);}); return r;}; + RegExp.prototype.forEachExec = function (s, f, c) {return XRegExp.iterate(s, this, f, c);}; + RegExp.prototype.validate = function (s) {var r = RegExp("^(?:" + this.source + ")$(?!\\s)", getNativeFlags(this)); if (this.global) this.lastIndex = 0; return s.search(r) === 0;}; + */ + +})(); + +// +// Begin anonymous function. This is used to contain local scope variables without polutting global scope. +// +if (typeof(SyntaxHighlighter) == 'undefined') var SyntaxHighlighter = function() { + +// CommonJS + if (typeof(require) != 'undefined' && typeof(XRegExp) == 'undefined') + { + XRegExp = require('XRegExp').XRegExp; + } + +// Shortcut object which will be assigned to the SyntaxHighlighter variable. +// This is a shorthand for local reference in order to avoid long namespace +// references to SyntaxHighlighter.whatever... + var sh = { + defaults : { + /** Additional CSS class names to be added to highlighter elements. */ + 'class-name' : '', + + /** First line number. */ + 'first-line' : 1, + + /** + * Pads line numbers. Possible values are: + * + * false - don't pad line numbers. + * true - automaticaly pad numbers with minimum required number of leading zeroes. + * [int] - length up to which pad line numbers. + */ + 'pad-line-numbers' : false, + + /** Lines to highlight. */ + 'highlight' : false, + + /** Title to be displayed above the code block. */ + 'title' : null, + + /** Enables or disables smart tabs. */ + 'smart-tabs' : true, + + /** Gets or sets tab size. */ + 'tab-size' : 4, + + /** Enables or disables gutter. */ + 'gutter' : true, + + /** Enables or disables toolbar. */ + 'toolbar' : true, + + /** Enables quick code copy and paste from double click. */ + 'quick-code' : true, + + /** Forces code view to be collapsed. */ + 'collapse' : false, + + /** Enables or disables automatic links. */ + 'auto-links' : false, + + /** Gets or sets light mode. Equavalent to turning off gutter and toolbar. */ + 'light' : false, + + 'unindent' : true, + + 'html-script' : false + }, + + config : { + space : ' ', + + /** Enables use of + * + * ``` + */ + findParent:function (node, filterFn, includeSelf) { + if (node && !domUtils.isBody(node)) { + node = includeSelf ? node : node.parentNode; + while (node) { + if (!filterFn || filterFn(node) || domUtils.isBody(node)) { + return filterFn && !filterFn(node) && domUtils.isBody(node) ? null : node; + } + node = node.parentNode; + } + } + return null; + }, + /** + * 查找node的节点名为tagName的第一个祖先节点, 查找的起点是node节点的父节点。 + * @method findParentByTagName + * @param { Node } node 需要查找的节点对象 + * @param { Array } tagNames 需要查找的父节点的名称数组 + * @warning 查找的终点是到body节点为止 + * @return { Node | NULL } 如果找到符合条件的节点, 则返回该节点, 否则返回NULL + * @example + * ```javascript + * var node = UE.dom.domUtils.findParentByTagName( document.getElementsByTagName("div")[0], [ "BODY" ] ); + * //output: BODY + * console.log( node.tagName ); + * ``` + */ + + /** + * 查找node的节点名为tagName的祖先节点, 如果includeSelf的值为true,则查找的起点是给定的节点node, + * 否则, 起点是node的父节点。 + * @method findParentByTagName + * @param { Node } node 需要查找的节点对象 + * @param { Array } tagNames 需要查找的父节点的名称数组 + * @param { Boolean } includeSelf 查找过程是否包含node节点自身 + * @warning 查找的终点是到body节点为止 + * @return { Node | NULL } 如果找到符合条件的节点, 则返回该节点, 否则返回NULL + * @example + * ```javascript + * var queryTarget = document.getElementsByTagName("div")[0]; + * var node = UE.dom.domUtils.findParentByTagName( queryTarget, [ "DIV" ], true ); + * //output: true + * console.log( queryTarget === node ); + * ``` + */ + findParentByTagName:function (node, tagNames, includeSelf, excludeFn) { + tagNames = utils.listToMap(utils.isArray(tagNames) ? tagNames : [tagNames]); + return domUtils.findParent(node, function (node) { + return tagNames[node.tagName] && !(excludeFn && excludeFn(node)); + }, includeSelf); + }, + /** + * 查找节点node的祖先节点集合, 查找的起点是给定节点的父节点,结果集中不包含给定的节点。 + * @method findParents + * @param { Node } node 需要查找的节点对象 + * @return { Array } 给定节点的祖先节点数组 + * @grammar UE.dom.domUtils.findParents(node) => Array //返回一个祖先节点数组集合,不包含自身 + * @grammar UE.dom.domUtils.findParents(node,includeSelf) => Array //返回一个祖先节点数组集合,includeSelf指定是否包含自身 + * @grammar UE.dom.domUtils.findParents(node,includeSelf,filterFn) => Array //返回一个祖先节点数组集合,filterFn指定过滤条件,返回true的node将被选取 + * @grammar UE.dom.domUtils.findParents(node,includeSelf,filterFn,closerFirst) => Array //返回一个祖先节点数组集合,closerFirst为true的话,node的直接父亲节点是数组的第0个 + */ + + /** + * 查找节点node的祖先节点集合, 如果includeSelf的值为true, + * 则返回的结果集中允许出现当前给定的节点, 否则, 该节点不会出现在其结果集中。 + * @method findParents + * @param { Node } node 需要查找的节点对象 + * @param { Boolean } includeSelf 查找的结果中是否允许包含当前查找的节点对象 + * @return { Array } 给定节点的祖先节点数组 + */ + findParents:function (node, includeSelf, filterFn, closerFirst) { + var parents = includeSelf && ( filterFn && filterFn(node) || !filterFn ) ? [node] : []; + while (node = domUtils.findParent(node, filterFn)) { + parents.push(node); + } + return closerFirst ? parents : parents.reverse(); + }, + + /** + * 在节点node后面插入新节点newNode + * @method insertAfter + * @param { Node } node 目标节点 + * @param { Node } newNode 新插入的节点, 该节点将置于目标节点之后 + * @return { Node } 新插入的节点 + */ + insertAfter:function (node, newNode) { + return node.nextSibling ? node.parentNode.insertBefore(newNode, node.nextSibling): + node.parentNode.appendChild(newNode); + }, + + /** + * 删除节点node及其下属的所有节点 + * @method remove + * @param { Node } node 需要删除的节点对象 + * @return { Node } 返回刚删除的节点对象 + * @example + * ```html + *
    + *
    你好
    + *
    + * + * ``` + */ + + /** + * 删除节点node,并根据keepChildren的值决定是否保留子节点 + * @method remove + * @param { Node } node 需要删除的节点对象 + * @param { Boolean } keepChildren 是否需要保留子节点 + * @return { Node } 返回刚删除的节点对象 + * @example + * ```html + *
    + *
    你好
    + *
    + * + * ``` + */ + remove:function (node, keepChildren) { + var parent = node.parentNode, + child; + if (parent) { + if (keepChildren && node.hasChildNodes()) { + while (child = node.firstChild) { + parent.insertBefore(child, node); + } + } + parent.removeChild(node); + } + return node; + }, + + /** + * 取得node节点的下一个兄弟节点, 如果该节点其后没有兄弟节点, 则递归查找其父节点之后的第一个兄弟节点, + * 直到找到满足条件的节点或者递归到BODY节点之后才会结束。 + * @method getNextDomNode + * @param { Node } node 需要获取其后的兄弟节点的节点对象 + * @return { Node | NULL } 如果找满足条件的节点, 则返回该节点, 否则返回NULL + * @example + * ```html + * + *
    + * + *
    + * xxx + * + * + * ``` + * @example + * ```html + * + *
    + * + * xxx + *
    + * xxx + * + * + * ``` + */ + + /** + * 取得node节点的下一个兄弟节点, 如果startFromChild的值为ture,则先获取其子节点, + * 如果有子节点则直接返回第一个子节点;如果没有子节点或者startFromChild的值为false, + * 则执行getNextDomNode(Node node)的查找过程。 + * @method getNextDomNode + * @param { Node } node 需要获取其后的兄弟节点的节点对象 + * @param { Boolean } startFromChild 查找过程是否从其子节点开始 + * @return { Node | NULL } 如果找满足条件的节点, 则返回该节点, 否则返回NULL + * @see UE.dom.domUtils.getNextDomNode(Node) + */ + getNextDomNode:function (node, startFromChild, filterFn, guard) { + return getDomNode(node, 'firstChild', 'nextSibling', startFromChild, filterFn, guard); + }, + getPreDomNode:function (node, startFromChild, filterFn, guard) { + return getDomNode(node, 'lastChild', 'previousSibling', startFromChild, filterFn, guard); + }, + /** + * 检测节点node是否属是UEditor定义的bookmark节点 + * @method isBookmarkNode + * @private + * @param { Node } node 需要检测的节点对象 + * @return { Boolean } 是否是bookmark节点 + * @example + * ```html + * + * + * ``` + */ + isBookmarkNode:function (node) { + return node.nodeType == 1 && node.id && /^_baidu_bookmark_/i.test(node.id); + }, + /** + * 获取节点node所属的window对象 + * @method getWindow + * @param { Node } node 节点对象 + * @return { Window } 当前节点所属的window对象 + * @example + * ```javascript + * //output: true + * console.log( UE.dom.domUtils.getWindow( document.body ) === window ); + * ``` + */ + getWindow:function (node) { + var doc = node.ownerDocument || node; + return doc.defaultView || doc.parentWindow; + }, + /** + * 获取离nodeA与nodeB最近的公共的祖先节点 + * @method getCommonAncestor + * @param { Node } nodeA 第一个节点 + * @param { Node } nodeB 第二个节点 + * @remind 如果给定的两个节点是同一个节点, 将直接返回该节点。 + * @return { Node | NULL } 如果未找到公共节点, 返回NULL, 否则返回最近的公共祖先节点。 + * @example + * ```javascript + * var commonAncestor = UE.dom.domUtils.getCommonAncestor( document.body, document.body.firstChild ); + * //output: true + * console.log( commonAncestor.tagName.toLowerCase() === 'body' ); + * ``` + */ + getCommonAncestor:function (nodeA, nodeB) { + if (nodeA === nodeB) + return nodeA; + var parentsA = [nodeA] , parentsB = [nodeB], parent = nodeA, i = -1; + while (parent = parent.parentNode) { + if (parent === nodeB) { + return parent; + } + parentsA.push(parent); + } + parent = nodeB; + while (parent = parent.parentNode) { + if (parent === nodeA) + return parent; + parentsB.push(parent); + } + parentsA.reverse(); + parentsB.reverse(); + while (i++, parentsA[i] === parentsB[i]) { + } + return i == 0 ? null : parentsA[i - 1]; + + }, + /** + * 清除node节点左右连续为空的兄弟inline节点 + * @method clearEmptySibling + * @param { Node } node 执行的节点对象, 如果该节点的左右连续的兄弟节点是空的inline节点, + * 则这些兄弟节点将被删除 + * @grammar UE.dom.domUtils.clearEmptySibling(node,ignoreNext) //ignoreNext指定是否忽略右边空节点 + * @grammar UE.dom.domUtils.clearEmptySibling(node,ignoreNext,ignorePre) //ignorePre指定是否忽略左边空节点 + * @example + * ```html + * + *
    + * + * + * + * xxx + * + * + * + * ``` + */ + + /** + * 清除node节点左右连续为空的兄弟inline节点, 如果ignoreNext的值为true, + * 则忽略对右边兄弟节点的操作。 + * @method clearEmptySibling + * @param { Node } node 执行的节点对象, 如果该节点的左右连续的兄弟节点是空的inline节点, + * @param { Boolean } ignoreNext 是否忽略忽略对右边的兄弟节点的操作 + * 则这些兄弟节点将被删除 + * @see UE.dom.domUtils.clearEmptySibling(Node) + */ + + /** + * 清除node节点左右连续为空的兄弟inline节点, 如果ignoreNext的值为true, + * 则忽略对右边兄弟节点的操作, 如果ignorePre的值为true,则忽略对左边兄弟节点的操作。 + * @method clearEmptySibling + * @param { Node } node 执行的节点对象, 如果该节点的左右连续的兄弟节点是空的inline节点, + * @param { Boolean } ignoreNext 是否忽略忽略对右边的兄弟节点的操作 + * @param { Boolean } ignorePre 是否忽略忽略对左边的兄弟节点的操作 + * 则这些兄弟节点将被删除 + * @see UE.dom.domUtils.clearEmptySibling(Node) + */ + clearEmptySibling:function (node, ignoreNext, ignorePre) { + function clear(next, dir) { + var tmpNode; + while (next && !domUtils.isBookmarkNode(next) && (domUtils.isEmptyInlineElement(next) + //这里不能把空格算进来会吧空格干掉,出现文字间的空格丢掉了 + || !new RegExp('[^\t\n\r' + domUtils.fillChar + ']').test(next.nodeValue) )) { + tmpNode = next[dir]; + domUtils.remove(next); + next = tmpNode; + } + } + !ignoreNext && clear(node.nextSibling, 'nextSibling'); + !ignorePre && clear(node.previousSibling, 'previousSibling'); + }, + /** + * 将一个文本节点textNode拆分成两个文本节点,offset指定拆分位置 + * @method split + * @param { Node } textNode 需要拆分的文本节点对象 + * @param { int } offset 需要拆分的位置, 位置计算从0开始 + * @return { Node } 拆分后形成的新节点 + * @example + * ```html + *
    abcdef
    + * + * ``` + */ + split:function (node, offset) { + var doc = node.ownerDocument; + if (browser.ie && offset == node.nodeValue.length) { + var next = doc.createTextNode(''); + return domUtils.insertAfter(node, next); + } + var retval = node.splitText(offset); + //ie8下splitText不会跟新childNodes,我们手动触发他的更新 + if (browser.ie8) { + var tmpNode = doc.createTextNode(''); + domUtils.insertAfter(retval, tmpNode); + domUtils.remove(tmpNode); + } + return retval; + }, + + /** + * 检测文本节点textNode是否为空节点(包括空格、换行、占位符等字符) + * @method isWhitespace + * @param { Node } node 需要检测的节点对象 + * @return { Boolean } 检测的节点是否为空 + * @example + * ```html + *
    + * + *
    + * + * ``` + */ + isWhitespace:function (node) { + return !new RegExp('[^ \t\n\r' + domUtils.fillChar + ']').test(node.nodeValue); + }, + /** + * 获取元素element相对于viewport的位置坐标 + * @method getXY + * @param { Node } element 需要计算位置的节点对象 + * @return { Object } 返回形如{x:left,y:top}的一个key-value映射对象, 其中键x代表水平偏移距离, + * y代表垂直偏移距离。 + * + * @example + * ```javascript + * var location = UE.dom.domUtils.getXY( document.getElementById("test") ); + * //output: test的坐标为: 12, 24 + * console.log( 'test的坐标为: ', location.x, ',', location.y ); + * ``` + */ + getXY:function (element) { + var x = 0, y = 0; + while (element.offsetParent) { + y += element.offsetTop; + x += element.offsetLeft; + element = element.offsetParent; + } + return { 'x':x, 'y':y}; + }, + /** + * 为元素element绑定原生DOM事件,type为事件类型,handler为处理函数 + * @method on + * @param { Node } element 需要绑定事件的节点对象 + * @param { String } type 绑定的事件类型 + * @param { Function } handler 事件处理器 + * @example + * ```javascript + * UE.dom.domUtils.on(document.body,"click",function(e){ + * //e为事件对象,this为被点击元素对戏那个 + * }); + * ``` + */ + + /** + * 为元素element绑定原生DOM事件,type为事件类型,handler为处理函数 + * @method on + * @param { Node } element 需要绑定事件的节点对象 + * @param { Array } type 绑定的事件类型数组 + * @param { Function } handler 事件处理器 + * @example + * ```javascript + * UE.dom.domUtils.on(document.body,["click","mousedown"],function(evt){ + * //evt为事件对象,this为被点击元素对象 + * }); + * ``` + */ + on:function (element, type, handler) { + + var types = utils.isArray(type) ? type : utils.trim(type).split(/\s+/), + k = types.length; + if (k) while (k--) { + type = types[k]; + if (element.addEventListener) { + element.addEventListener(type, handler, false); + } else { + if (!handler._d) { + handler._d = { + els : [] + }; + } + var key = type + handler.toString(),index = utils.indexOf(handler._d.els,element); + if (!handler._d[key] || index == -1) { + if(index == -1){ + handler._d.els.push(element); + } + if(!handler._d[key]){ + handler._d[key] = function (evt) { + return handler.call(evt.srcElement, evt || window.event); + }; + } + + + element.attachEvent('on' + type, handler._d[key]); + } + } + } + element = null; + }, + /** + * 解除DOM事件绑定 + * @method un + * @param { Node } element 需要解除事件绑定的节点对象 + * @param { String } type 需要接触绑定的事件类型 + * @param { Function } handler 对应的事件处理器 + * @example + * ```javascript + * UE.dom.domUtils.un(document.body,"click",function(evt){ + * //evt为事件对象,this为被点击元素对象 + * }); + * ``` + */ + + /** + * 解除DOM事件绑定 + * @method un + * @param { Node } element 需要解除事件绑定的节点对象 + * @param { Array } type 需要接触绑定的事件类型数组 + * @param { Function } handler 对应的事件处理器 + * @example + * ```javascript + * UE.dom.domUtils.un(document.body, ["click","mousedown"],function(evt){ + * //evt为事件对象,this为被点击元素对象 + * }); + * ``` + */ + un:function (element, type, handler) { + var types = utils.isArray(type) ? type : utils.trim(type).split(/\s+/), + k = types.length; + if (k) while (k--) { + type = types[k]; + if (element.removeEventListener) { + element.removeEventListener(type, handler, false); + } else { + var key = type + handler.toString(); + try{ + element.detachEvent('on' + type, handler._d ? handler._d[key] : handler); + }catch(e){} + if (handler._d && handler._d[key]) { + var index = utils.indexOf(handler._d.els,element); + if(index!=-1){ + handler._d.els.splice(index,1); + } + handler._d.els.length == 0 && delete handler._d[key]; + } + } + } + }, + + /** + * 比较节点nodeA与节点nodeB是否具有相同的标签名、属性名以及属性值 + * @method isSameElement + * @param { Node } nodeA 需要比较的节点 + * @param { Node } nodeB 需要比较的节点 + * @return { Boolean } 两个节点是否具有相同的标签名、属性名以及属性值 + * @example + * ```html + * ssss + * bbbbb + * ssss + * bbbbb + * + * + * ``` + */ + isSameElement:function (nodeA, nodeB) { + if (nodeA.tagName != nodeB.tagName) { + return false; + } + var thisAttrs = nodeA.attributes, + otherAttrs = nodeB.attributes; + if (!ie && thisAttrs.length != otherAttrs.length) { + return false; + } + var attrA, attrB, al = 0, bl = 0; + for (var i = 0; attrA = thisAttrs[i++];) { + if (attrA.nodeName == 'style') { + if (attrA.specified) { + al++; + } + if (domUtils.isSameStyle(nodeA, nodeB)) { + continue; + } else { + return false; + } + } + if (ie) { + if (attrA.specified) { + al++; + attrB = otherAttrs.getNamedItem(attrA.nodeName); + } else { + continue; + } + } else { + attrB = nodeB.attributes[attrA.nodeName]; + } + if (!attrB.specified || attrA.nodeValue != attrB.nodeValue) { + return false; + } + } + // 有可能attrB的属性包含了attrA的属性之外还有自己的属性 + if (ie) { + for (i = 0; attrB = otherAttrs[i++];) { + if (attrB.specified) { + bl++; + } + } + if (al != bl) { + return false; + } + } + return true; + }, + + /** + * 判断节点nodeA与节点nodeB的元素的style属性是否一致 + * @method isSameStyle + * @param { Node } nodeA 需要比较的节点 + * @param { Node } nodeB 需要比较的节点 + * @return { Boolean } 两个节点是否具有相同的style属性值 + * @example + * ```html + * ssss + * bbbbb + * ssss + * bbbbb + * + * + * ``` + */ + isSameStyle:function (nodeA, nodeB) { + var styleA = nodeA.style.cssText.replace(/( ?; ?)/g, ';').replace(/( ?: ?)/g, ':'), + styleB = nodeB.style.cssText.replace(/( ?; ?)/g, ';').replace(/( ?: ?)/g, ':'); + if (browser.opera) { + styleA = nodeA.style; + styleB = nodeB.style; + if (styleA.length != styleB.length) + return false; + for (var p in styleA) { + if (/^(\d+|csstext)$/i.test(p)) { + continue; + } + if (styleA[p] != styleB[p]) { + return false; + } + } + return true; + } + if (!styleA || !styleB) { + return styleA == styleB; + } + styleA = styleA.split(';'); + styleB = styleB.split(';'); + if (styleA.length != styleB.length) { + return false; + } + for (var i = 0, ci; ci = styleA[i++];) { + if (utils.indexOf(styleB, ci) == -1) { + return false; + } + } + return true; + }, + /** + * 检查节点node是否为block元素 + * @method isBlockElm + * @param { Node } node 需要检测的节点对象 + * @return { Boolean } 是否是block元素节点 + * @warning 该方法的判断规则如下: 如果该元素原本是block元素, 则不论该元素当前的css样式是什么都会返回true; + * 否则,检测该元素的css样式, 如果该元素当前是block元素, 则返回true。 其余情况下都返回false。 + * @example + * ```html + * + * + *
    + * + * + * ``` + */ + isBlockElm:function (node) { + return node.nodeType == 1 && (dtd.$block[node.tagName] || styleBlock[domUtils.getComputedStyle(node, 'display')]) && !dtd.$nonChild[node.tagName]; + }, + /** + * 检测node节点是否为body节点 + * @method isBody + * @param { Element } node 需要检测的dom元素 + * @return { Boolean } 给定的元素是否是body元素 + * @example + * ```javascript + * //output: true + * console.log( UE.dom.domUtils.isBody( document.body ) ); + * ``` + */ + isBody:function (node) { + return node && node.nodeType == 1 && node.tagName.toLowerCase() == 'body'; + }, + /** + * 以node节点为分界,将该节点的指定祖先节点parent拆分成两个独立的节点, + * 拆分形成的两个节点之间是node节点 + * @method breakParent + * @param { Node } node 作为分界的节点对象 + * @param { Node } parent 该节点必须是node节点的祖先节点, 且是block节点。 + * @return { Node } 给定的node分界节点 + * @example + * ```javascript + * + * var node = document.createElement("span"), + * wrapNode = document.createElement( "div" ), + * parent = document.createElement("p"); + * + * parent.appendChild( node ); + * wrapNode.appendChild( parent ); + * + * //拆分前 + * //output:

    + * console.log( wrapNode.innerHTML ); + * + * + * UE.dom.domUtils.breakParent( node, parent ); + * //拆分后 + * //output:

    + * console.log( wrapNode.innerHTML ); + * + * ``` + */ + breakParent:function (node, parent) { + var tmpNode, + parentClone = node, + clone = node, + leftNodes, + rightNodes; + do { + parentClone = parentClone.parentNode; + if (leftNodes) { + tmpNode = parentClone.cloneNode(false); + tmpNode.appendChild(leftNodes); + leftNodes = tmpNode; + tmpNode = parentClone.cloneNode(false); + tmpNode.appendChild(rightNodes); + rightNodes = tmpNode; + } else { + leftNodes = parentClone.cloneNode(false); + rightNodes = leftNodes.cloneNode(false); + } + while (tmpNode = clone.previousSibling) { + leftNodes.insertBefore(tmpNode, leftNodes.firstChild); + } + while (tmpNode = clone.nextSibling) { + rightNodes.appendChild(tmpNode); + } + clone = parentClone; + } while (parent !== parentClone); + tmpNode = parent.parentNode; + tmpNode.insertBefore(leftNodes, parent); + tmpNode.insertBefore(rightNodes, parent); + tmpNode.insertBefore(node, rightNodes); + domUtils.remove(parent); + return node; + }, + /** + * 检查节点node是否是空inline节点 + * @method isEmptyInlineElement + * @param { Node } node 需要检测的节点对象 + * @return { Number } 如果给定的节点是空的inline节点, 则返回1, 否则返回0。 + * @example + * ```html + * => 1 + * => 1 + * => 1 + * xx => 0 + * ``` + */ + isEmptyInlineElement:function (node) { + if (node.nodeType != 1 || !dtd.$removeEmpty[ node.tagName ]) { + return 0; + } + node = node.firstChild; + while (node) { + //如果是创建的bookmark就跳过 + if (domUtils.isBookmarkNode(node)) { + return 0; + } + if (node.nodeType == 1 && !domUtils.isEmptyInlineElement(node) || + node.nodeType == 3 && !domUtils.isWhitespace(node) + ) { + return 0; + } + node = node.nextSibling; + } + return 1; + + }, + + /** + * 删除node节点下首尾两端的空白文本子节点 + * @method trimWhiteTextNode + * @param { Element } node 需要执行删除操作的元素对象 + * @example + * ```javascript + * var node = document.createElement("div"); + * + * node.appendChild( document.createTextNode( "" ) ); + * + * node.appendChild( document.createElement("div") ); + * + * node.appendChild( document.createTextNode( "" ) ); + * + * //3 + * console.log( node.childNodes.length ); + * + * UE.dom.domUtils.trimWhiteTextNode( node ); + * + * //1 + * console.log( node.childNodes.length ); + * ``` + */ + trimWhiteTextNode:function (node) { + function remove(dir) { + var child; + while ((child = node[dir]) && child.nodeType == 3 && domUtils.isWhitespace(child)) { + node.removeChild(child); + } + } + remove('firstChild'); + remove('lastChild'); + }, + + /** + * 合并node节点下相同的子节点 + * @name mergeChild + * @desc + * UE.dom.domUtils.mergeChild(node,tagName) //tagName要合并的子节点的标签 + * @example + *

    xxaaxx

    + * ==> UE.dom.domUtils.mergeChild(node,'span') + *

    xxaaxx

    + */ + mergeChild:function (node, tagName, attrs) { + var list = domUtils.getElementsByTagName(node, node.tagName.toLowerCase()); + for (var i = 0, ci; ci = list[i++];) { + if (!ci.parentNode || domUtils.isBookmarkNode(ci)) { + continue; + } + //span单独处理 + if (ci.tagName.toLowerCase() == 'span') { + if (node === ci.parentNode) { + domUtils.trimWhiteTextNode(node); + if (node.childNodes.length == 1) { + node.style.cssText = ci.style.cssText + ";" + node.style.cssText; + domUtils.remove(ci, true); + continue; + } + } + ci.style.cssText = node.style.cssText + ';' + ci.style.cssText; + if (attrs) { + var style = attrs.style; + if (style) { + style = style.split(';'); + for (var j = 0, s; s = style[j++];) { + ci.style[utils.cssStyleToDomStyle(s.split(':')[0])] = s.split(':')[1]; + } + } + } + if (domUtils.isSameStyle(ci, node)) { + domUtils.remove(ci, true); + } + continue; + } + if (domUtils.isSameElement(node, ci)) { + domUtils.remove(ci, true); + } + } + }, + + /** + * 原生方法getElementsByTagName的封装 + * @method getElementsByTagName + * @param { Node } node 目标节点对象 + * @param { String } tagName 需要查找的节点的tagName, 多个tagName以空格分割 + * @return { Array } 符合条件的节点集合 + */ + getElementsByTagName:function (node, name,filter) { + if(filter && utils.isString(filter)){ + var className = filter; + filter = function(node){return domUtils.hasClass(node,className)} + } + name = utils.trim(name).replace(/[ ]{2,}/g,' ').split(' '); + var arr = []; + for(var n = 0,ni;ni=name[n++];){ + var list = node.getElementsByTagName(ni); + for (var i = 0, ci; ci = list[i++];) { + if(!filter || filter(ci)) + arr.push(ci); + } + } + + return arr; + }, + /** + * 将节点node提取到父节点上 + * @method mergeToParent + * @param { Element } node 需要提取的元素对象 + * @example + * ```html + *
    + *
    + * + *
    + *
    + * + * + * ``` + */ + mergeToParent:function (node) { + var parent = node.parentNode; + while (parent && dtd.$removeEmpty[parent.tagName]) { + if (parent.tagName == node.tagName || parent.tagName == 'A') {//针对a标签单独处理 + domUtils.trimWhiteTextNode(parent); + //span需要特殊处理 不处理这样的情况 xxxxxxxxx + if (parent.tagName == 'SPAN' && !domUtils.isSameStyle(parent, node) + || (parent.tagName == 'A' && node.tagName == 'SPAN')) { + if (parent.childNodes.length > 1 || parent !== node.parentNode) { + node.style.cssText = parent.style.cssText + ";" + node.style.cssText; + parent = parent.parentNode; + continue; + } else { + parent.style.cssText += ";" + node.style.cssText; + //trace:952 a标签要保持下划线 + if (parent.tagName == 'A') { + parent.style.textDecoration = 'underline'; + } + } + } + if (parent.tagName != 'A') { + parent === node.parentNode && domUtils.remove(node, true); + break; + } + } + parent = parent.parentNode; + } + }, + /** + * 合并节点node的左右兄弟节点 + * @method mergeSibling + * @param { Element } node 需要合并的目标节点 + * @example + * ```html + * xxxxoooxxxx + * + * + * ``` + */ + + /** + * 合并节点node的左右兄弟节点, 可以根据给定的条件选择是否忽略合并左节点。 + * @method mergeSibling + * @param { Element } node 需要合并的目标节点 + * @param { Boolean } ignorePre 是否忽略合并左节点 + * @example + * ```html + * xxxxoooxxxx + * + * + * ``` + */ + + /** + * 合并节点node的左右兄弟节点,可以根据给定的条件选择是否忽略合并左右节点。 + * @method mergeSibling + * @param { Element } node 需要合并的目标节点 + * @param { Boolean } ignorePre 是否忽略合并左节点 + * @param { Boolean } ignoreNext 是否忽略合并右节点 + * @remind 如果同时忽略左右节点, 则该操作什么也不会做 + * @example + * ```html + * xxxxoooxxxx + * + * + * ``` + */ + mergeSibling:function (node, ignorePre, ignoreNext) { + function merge(rtl, start, node) { + var next; + if ((next = node[rtl]) && !domUtils.isBookmarkNode(next) && next.nodeType == 1 && domUtils.isSameElement(node, next)) { + while (next.firstChild) { + if (start == 'firstChild') { + node.insertBefore(next.lastChild, node.firstChild); + } else { + node.appendChild(next.firstChild); + } + } + domUtils.remove(next); + } + } + !ignorePre && merge('previousSibling', 'firstChild', node); + !ignoreNext && merge('nextSibling', 'lastChild', node); + }, + + /** + * 设置节点node及其子节点不会被选中 + * @method unSelectable + * @param { Element } node 需要执行操作的dom元素 + * @remind 执行该操作后的节点, 将不能被鼠标选中 + * @example + * ```javascript + * UE.dom.domUtils.unSelectable( document.body ); + * ``` + */ + unSelectable:ie && browser.ie9below || browser.opera ? function (node) { + //for ie9 + node.onselectstart = function () { + return false; + }; + node.onclick = node.onkeyup = node.onkeydown = function () { + return false; + }; + node.unselectable = 'on'; + node.setAttribute("unselectable", "on"); + for (var i = 0, ci; ci = node.all[i++];) { + switch (ci.tagName.toLowerCase()) { + case 'iframe' : + case 'textarea' : + case 'input' : + case 'select' : + break; + default : + ci.unselectable = 'on'; + node.setAttribute("unselectable", "on"); + } + } + } : function (node) { + node.style.MozUserSelect = + node.style.webkitUserSelect = + node.style.msUserSelect = + node.style.KhtmlUserSelect = 'none'; + }, + /** + * 删除节点node上的指定属性名称的属性 + * @method removeAttributes + * @param { Node } node 需要删除属性的节点对象 + * @param { String } attrNames 可以是空格隔开的多个属性名称,该操作将会依次删除相应的属性 + * @example + * ```html + *
    + * xxxxx + *
    + * + * + * ``` + */ + + /** + * 删除节点node上的指定属性名称的属性 + * @method removeAttributes + * @param { Node } node 需要删除属性的节点对象 + * @param { Array } attrNames 需要删除的属性名数组 + * @example + * ```html + *
    + * xxxxx + *
    + * + * + * ``` + */ + removeAttributes:function (node, attrNames) { + attrNames = utils.isArray(attrNames) ? attrNames : utils.trim(attrNames).replace(/[ ]{2,}/g,' ').split(' '); + for (var i = 0, ci; ci = attrNames[i++];) { + ci = attrFix[ci] || ci; + switch (ci) { + case 'className': + node[ci] = ''; + break; + case 'style': + node.style.cssText = ''; + var val = node.getAttributeNode('style'); + !browser.ie && val && node.removeAttributeNode(val); + } + node.removeAttribute(ci); + } + }, + /** + * 在doc下创建一个标签名为tag,属性为attrs的元素 + * @method createElement + * @param { DomDocument } doc 新创建的元素属于该document节点创建 + * @param { String } tagName 需要创建的元素的标签名 + * @param { Object } attrs 新创建的元素的属性key-value集合 + * @return { Element } 新创建的元素对象 + * @example + * ```javascript + * var ele = UE.dom.domUtils.createElement( document, 'div', { + * id: 'test' + * } ); + * + * //output: DIV + * console.log( ele.tagName ); + * + * //output: test + * console.log( ele.id ); + * + * ``` + */ + createElement:function (doc, tag, attrs) { + return domUtils.setAttributes(doc.createElement(tag), attrs) + }, + /** + * 为节点node添加属性attrs,attrs为属性键值对 + * @method setAttributes + * @param { Element } node 需要设置属性的元素对象 + * @param { Object } attrs 需要设置的属性名-值对 + * @return { Element } 设置属性的元素对象 + * @example + * ```html + * + * + * + * + */ + setAttributes:function (node, attrs) { + for (var attr in attrs) { + if(attrs.hasOwnProperty(attr)){ + var value = attrs[attr]; + switch (attr) { + case 'class': + //ie下要这样赋值,setAttribute不起作用 + node.className = value; + break; + case 'style' : + node.style.cssText = node.style.cssText + ";" + value; + break; + case 'innerHTML': + node[attr] = value; + break; + case 'value': + node.value = value; + break; + default: + node.setAttribute(attrFix[attr] || attr, value); + } + } + } + return node; + }, + + /** + * 获取元素element经过计算后的样式值 + * @method getComputedStyle + * @param { Element } element 需要获取样式的元素对象 + * @param { String } styleName 需要获取的样式名 + * @return { String } 获取到的样式值 + * @example + * ```html + * + * + * + * + * + * ``` + */ + getComputedStyle:function (element, styleName) { + //一下的属性单独处理 + var pros = 'width height top left'; + + if(pros.indexOf(styleName) > -1){ + return element['offset' + styleName.replace(/^\w/,function(s){return s.toUpperCase()})] + 'px'; + } + //忽略文本节点 + if (element.nodeType == 3) { + element = element.parentNode; + } + //ie下font-size若body下定义了font-size,则从currentStyle里会取到这个font-size. 取不到实际值,故此修改. + if (browser.ie && browser.version < 9 && styleName == 'font-size' && !element.style.fontSize && + !dtd.$empty[element.tagName] && !dtd.$nonChild[element.tagName]) { + var span = element.ownerDocument.createElement('span'); + span.style.cssText = 'padding:0;border:0;font-family:simsun;'; + span.innerHTML = '.'; + element.appendChild(span); + var result = span.offsetHeight; + element.removeChild(span); + span = null; + return result + 'px'; + } + try { + var value = domUtils.getStyle(element, styleName) || + (window.getComputedStyle ? domUtils.getWindow(element).getComputedStyle(element, '').getPropertyValue(styleName) : + ( element.currentStyle || element.style )[utils.cssStyleToDomStyle(styleName)]); + + } catch (e) { + return ""; + } + return utils.transUnitToPx(utils.fixColor(styleName, value)); + }, + /** + * 删除元素element指定的className + * @method removeClasses + * @param { Element } ele 需要删除class的元素节点 + * @param { String } classNames 需要删除的className, 多个className之间以空格分开 + * @example + * ```html + * xxx + * + * + * ``` + */ + + /** + * 删除元素element指定的className + * @method removeClasses + * @param { Element } ele 需要删除class的元素节点 + * @param { Array } classNames 需要删除的className数组 + * @example + * ```html + * xxx + * + * + * ``` + */ + removeClasses:function (elm, classNames) { + classNames = utils.isArray(classNames) ? classNames : + utils.trim(classNames).replace(/[ ]{2,}/g,' ').split(' '); + for(var i = 0,ci,cls = elm.className;ci=classNames[i++];){ + cls = cls.replace(new RegExp('\\b' + ci + '\\b'),'') + } + cls = utils.trim(cls).replace(/[ ]{2,}/g,' '); + if(cls){ + elm.className = cls; + }else{ + domUtils.removeAttributes(elm,['class']); + } + }, + /** + * 给元素element添加className + * @method addClass + * @param { Node } ele 需要增加className的元素 + * @param { String } classNames 需要添加的className, 多个className之间以空格分割 + * @remind 相同的类名不会被重复添加 + * @example + * ```html + * + * + * + * ``` + */ + + /** + * 判断元素element是否包含给定的样式类名className + * @method hasClass + * @param { Node } ele 需要检测的元素 + * @param { Array } classNames 需要检测的className数组 + * @return { Boolean } 元素是否包含所有给定的className + * @example + * ```html + * + * + * + * ``` + */ + hasClass:function (element, className) { + if(utils.isRegExp(className)){ + return className.test(element.className) + } + className = utils.trim(className).replace(/[ ]{2,}/g,' ').split(' '); + for(var i = 0,ci,cls = element.className;ci=className[i++];){ + if(!new RegExp('\\b' + ci + '\\b','i').test(cls)){ + return false; + } + } + return i - 1 == className.length; + }, + + /** + * 阻止事件默认行为 + * @method preventDefault + * @param { Event } evt 需要阻止默认行为的事件对象 + * @example + * ```javascript + * UE.dom.domUtils.preventDefault( evt ); + * ``` + */ + preventDefault:function (evt) { + evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false); + }, + /** + * 删除元素element指定的样式 + * @method removeStyle + * @param { Element } element 需要删除样式的元素 + * @param { String } styleName 需要删除的样式名 + * @example + * ```html + * + * + * + * ``` + */ + removeStyle:function (element, name) { + if(browser.ie ){ + //针对color先单独处理一下 + if(name == 'color'){ + name = '(^|;)' + name; + } + element.style.cssText = element.style.cssText.replace(new RegExp(name + '[^:]*:[^;]+;?','ig'),'') + }else{ + if (element.style.removeProperty) { + element.style.removeProperty (name); + }else { + element.style.removeAttribute (utils.cssStyleToDomStyle(name)); + } + } + + + if (!element.style.cssText) { + domUtils.removeAttributes(element, ['style']); + } + }, + /** + * 获取元素element的style属性的指定值 + * @method getStyle + * @param { Element } element 需要获取属性值的元素 + * @param { String } styleName 需要获取的style的名称 + * @warning 该方法仅获取元素style属性中所标明的值 + * @return { String } 该元素包含指定的style属性值 + * @example + * ```html + *
    + * + * + * ``` + */ + getStyle:function (element, name) { + var value = element.style[ utils.cssStyleToDomStyle(name) ]; + return utils.fixColor(name, value); + }, + /** + * 为元素element设置样式属性值 + * @method setStyle + * @param { Element } element 需要设置样式的元素 + * @param { String } styleName 样式名 + * @param { String } styleValue 样式值 + * @example + * ```html + *
    + * + * + * ``` + */ + setStyle:function (element, name, value) { + element.style[utils.cssStyleToDomStyle(name)] = value; + if(!utils.trim(element.style.cssText)){ + this.removeAttributes(element,'style') + } + }, + /** + * 为元素element设置多个样式属性值 + * @method setStyles + * @param { Element } element 需要设置样式的元素 + * @param { Object } styles 样式名值对 + * @example + * ```html + *
    + * + * + * ``` + */ + setStyles:function (element, styles) { + for (var name in styles) { + if (styles.hasOwnProperty(name)) { + domUtils.setStyle(element, name, styles[name]); + } + } + }, + /** + * 删除_moz_dirty属性 + * @private + * @method removeDirtyAttr + */ + removeDirtyAttr:function (node) { + for (var i = 0, ci, nodes = node.getElementsByTagName('*'); ci = nodes[i++];) { + ci.removeAttribute('_moz_dirty'); + } + node.removeAttribute('_moz_dirty'); + }, + /** + * 获取子节点的数量 + * @method getChildCount + * @param { Element } node 需要检测的元素 + * @return { Number } 给定的node元素的子节点数量 + * @example + * ```html + *
    + * + *
    + * + * + * ``` + */ + + /** + * 根据给定的过滤规则, 获取符合条件的子节点的数量 + * @method getChildCount + * @param { Element } node 需要检测的元素 + * @param { Function } fn 过滤器, 要求对符合条件的子节点返回true, 反之则要求返回false + * @return { Number } 符合过滤条件的node元素的子节点数量 + * @example + * ```html + *
    + * + *
    + * + * + * ``` + */ + getChildCount:function (node, fn) { + var count = 0, first = node.firstChild; + fn = fn || function () { + return 1; + }; + while (first) { + if (fn(first)) { + count++; + } + first = first.nextSibling; + } + return count; + }, + + /** + * 判断给定节点是否为空节点 + * @method isEmptyNode + * @param { Node } node 需要检测的节点对象 + * @return { Boolean } 节点是否为空 + * @example + * ```javascript + * UE.dom.domUtils.isEmptyNode( document.body ); + * ``` + */ + isEmptyNode:function (node) { + return !node.firstChild || domUtils.getChildCount(node, function (node) { + return !domUtils.isBr(node) && !domUtils.isBookmarkNode(node) && !domUtils.isWhitespace(node) + }) == 0 + }, + clearSelectedArr:function (nodes) { + var node; + while (node = nodes.pop()) { + domUtils.removeAttributes(node, ['class']); + } + }, + /** + * 将显示区域滚动到指定节点的位置 + * @method scrollToView + * @param {Node} node 节点 + * @param {window} win window对象 + * @param {Number} offsetTop 距离上方的偏移量 + */ + scrollToView:function (node, win, offsetTop) { + var getViewPaneSize = function () { + var doc = win.document, + mode = doc.compatMode == 'CSS1Compat'; + return { + width:( mode ? doc.documentElement.clientWidth : doc.body.clientWidth ) || 0, + height:( mode ? doc.documentElement.clientHeight : doc.body.clientHeight ) || 0 + }; + }, + getScrollPosition = function (win) { + if ('pageXOffset' in win) { + return { + x:win.pageXOffset || 0, + y:win.pageYOffset || 0 + }; + } + else { + var doc = win.document; + return { + x:doc.documentElement.scrollLeft || doc.body.scrollLeft || 0, + y:doc.documentElement.scrollTop || doc.body.scrollTop || 0 + }; + } + }; + var winHeight = getViewPaneSize().height, offset = winHeight * -1 + offsetTop; + offset += (node.offsetHeight || 0); + var elementPosition = domUtils.getXY(node); + offset += elementPosition.y; + var currentScroll = getScrollPosition(win).y; + // offset += 50; + if (offset > currentScroll || offset < currentScroll - winHeight) { + win.scrollTo(0, offset + (offset < 0 ? -20 : 20)); + } + }, + /** + * 判断给定节点是否为br + * @method isBr + * @param { Node } node 需要判断的节点对象 + * @return { Boolean } 给定的节点是否是br节点 + */ + isBr:function (node) { + return node.nodeType == 1 && node.tagName == 'BR'; + }, + /** + * 判断给定的节点是否是一个“填充”节点 + * @private + * @method isFillChar + * @param { Node } node 需要判断的节点 + * @param { Boolean } isInStart 是否从节点内容的开始位置匹配 + * @returns { Boolean } 节点是否是填充节点 + */ + isFillChar:function (node,isInStart) { + if(node.nodeType != 3) + return false; + var text = node.nodeValue; + if(isInStart){ + return new RegExp('^' + domUtils.fillChar).test(text) + } + return !text.replace(new RegExp(domUtils.fillChar,'g'), '').length + }, + isStartInblock:function (range) { + var tmpRange = range.cloneRange(), + flag = 0, + start = tmpRange.startContainer, + tmp; + if(start.nodeType == 1 && start.childNodes[tmpRange.startOffset]){ + start = start.childNodes[tmpRange.startOffset]; + var pre = start.previousSibling; + while(pre && domUtils.isFillChar(pre)){ + start = pre; + pre = pre.previousSibling; + } + } + if(this.isFillChar(start,true) && tmpRange.startOffset == 1){ + tmpRange.setStartBefore(start); + start = tmpRange.startContainer; + } + + while (start && domUtils.isFillChar(start)) { + tmp = start; + start = start.previousSibling + } + if (tmp) { + tmpRange.setStartBefore(tmp); + start = tmpRange.startContainer; + } + if (start.nodeType == 1 && domUtils.isEmptyNode(start) && tmpRange.startOffset == 1) { + tmpRange.setStart(start, 0).collapse(true); + } + while (!tmpRange.startOffset) { + start = tmpRange.startContainer; + if (domUtils.isBlockElm(start) || domUtils.isBody(start)) { + flag = 1; + break; + } + var pre = tmpRange.startContainer.previousSibling, + tmpNode; + if (!pre) { + tmpRange.setStartBefore(tmpRange.startContainer); + } else { + while (pre && domUtils.isFillChar(pre)) { + tmpNode = pre; + pre = pre.previousSibling; + } + if (tmpNode) { + tmpRange.setStartBefore(tmpNode); + } else { + tmpRange.setStartBefore(tmpRange.startContainer); + } + } + } + return flag && !domUtils.isBody(tmpRange.startContainer) ? 1 : 0; + }, + + /** + * 判断给定的元素是否是一个空元素 + * @method isEmptyBlock + * @param { Element } node 需要判断的元素 + * @return { Boolean } 是否是空元素 + * @example + * ```html + *
    + * + * + * ``` + */ + + /** + * 根据指定的判断规则判断给定的元素是否是一个空元素 + * @method isEmptyBlock + * @param { Element } node 需要判断的元素 + * @param { RegExp } reg 对内容执行判断的正则表达式对象 + * @return { Boolean } 是否是空元素 + */ + isEmptyBlock:function (node,reg) { + if(node.nodeType != 1) + return 0; + reg = reg || new RegExp('[ \xa0\t\r\n' + domUtils.fillChar + ']', 'g'); + + if (node[browser.ie ? 'innerText' : 'textContent'].replace(reg, '').length > 0) { + return 0; + } + for (var n in dtd.$isNotEmpty) { + if (node.getElementsByTagName(n).length) { + return 0; + } + } + return 1; + }, + + /** + * 移动元素使得该元素的位置移动指定的偏移量的距离 + * @method setViewportOffset + * @param { Element } element 需要设置偏移量的元素 + * @param { Object } offset 偏移量, 形如{ left: 100, top: 50 }的一个键值对, 表示该元素将在 + * 现有的位置上向水平方向偏移offset.left的距离, 在竖直方向上偏移 + * offset.top的距离 + * @example + * ```html + *
    + * + * + * ``` + */ + setViewportOffset:function (element, offset) { + var left = parseInt(element.style.left) | 0; + var top = parseInt(element.style.top) | 0; + var rect = element.getBoundingClientRect(); + var offsetLeft = offset.left - rect.left; + var offsetTop = offset.top - rect.top; + if (offsetLeft) { + element.style.left = left + offsetLeft + 'px'; + } + if (offsetTop) { + element.style.top = top + offsetTop + 'px'; + } + }, + + /** + * 用“填充字符”填充节点 + * @method fillNode + * @private + * @param { DomDocument } doc 填充的节点所在的docment对象 + * @param { Node } node 需要填充的节点对象 + * @example + * ```html + *
    + * + * + * ``` + */ + fillNode:function (doc, node) { + var tmpNode = browser.ie ? doc.createTextNode(domUtils.fillChar) : doc.createElement('br'); + node.innerHTML = ''; + node.appendChild(tmpNode); + }, + + /** + * 把节点src的所有子节点追加到另一个节点tag上去 + * @method moveChild + * @param { Node } src 源节点, 该节点下的所有子节点将被移除 + * @param { Node } tag 目标节点, 从源节点移除的子节点将被追加到该节点下 + * @example + * ```html + *
    + * + *
    + *
    + *
    + *
    + * + * + * ``` + */ + + /** + * 把节点src的所有子节点移动到另一个节点tag上去, 可以通过dir参数控制附加的行为是“追加”还是“插入顶部” + * @method moveChild + * @param { Node } src 源节点, 该节点下的所有子节点将被移除 + * @param { Node } tag 目标节点, 从源节点移除的子节点将被附加到该节点下 + * @param { Boolean } dir 附加方式, 如果为true, 则附加进去的节点将被放到目标节点的顶部, 反之,则放到末尾 + * @example + * ```html + *
    + * + *
    + *
    + *
    + *
    + * + * + * ``` + */ + moveChild:function (src, tag, dir) { + while (src.firstChild) { + if (dir && tag.firstChild) { + tag.insertBefore(src.lastChild, tag.firstChild); + } else { + tag.appendChild(src.firstChild); + } + } + }, + + /** + * 判断节点的标签上是否不存在任何属性 + * @method hasNoAttributes + * @private + * @param { Node } node 需要检测的节点对象 + * @return { Boolean } 节点是否不包含任何属性 + * @example + * ```html + *
    xxxx
    + * + * + * ``` + */ + hasNoAttributes:function (node) { + return browser.ie ? /^<\w+\s*?>/.test(node.outerHTML) : node.attributes.length == 0; + }, + + /** + * 检测节点是否是UEditor所使用的辅助节点 + * @method isCustomeNode + * @private + * @param { Node } node 需要检测的节点 + * @remind 辅助节点是指编辑器要完成工作临时添加的节点, 在输出的时候将会从编辑器内移除, 不会影响最终的结果。 + * @return { Boolean } 给定的节点是否是一个辅助节点 + */ + isCustomeNode:function (node) { + return node.nodeType == 1 && node.getAttribute('_ue_custom_node_'); + }, + + /** + * 检测节点的标签是否是给定的标签 + * @method isTagNode + * @param { Node } node 需要检测的节点对象 + * @param { String } tagName 标签 + * @return { Boolean } 节点的标签是否是给定的标签 + * @example + * ```html + *
    + * + * + * ``` + */ + isTagNode:function (node, tagNames) { + return node.nodeType == 1 && new RegExp('\\b' + node.tagName + '\\b','i').test(tagNames) + }, + + /** + * 给定一个节点数组,在通过指定的过滤器过滤后, 获取其中满足过滤条件的第一个节点 + * @method filterNodeList + * @param { Array } nodeList 需要过滤的节点数组 + * @param { Function } fn 过滤器, 对符合条件的节点, 执行结果返回true, 反之则返回false + * @return { Node | NULL } 如果找到符合过滤条件的节点, 则返回该节点, 否则返回NULL + * @example + * ```javascript + * var divNodes = document.getElementsByTagName("div"); + * divNodes = [].slice.call( divNodes, 0 ); + * + * //output: null + * console.log( UE.dom.domUtils.filterNodeList( divNodes, function ( node ) { + * return node.tagName.toLowerCase() !== 'div'; + * } ) ); + * ``` + */ + + /** + * 给定一个节点数组nodeList和一组标签名tagNames, 获取其中能够匹配标签名的节点集合中的第一个节点 + * @method filterNodeList + * @param { Array } nodeList 需要过滤的节点数组 + * @param { String } tagNames 需要匹配的标签名, 多个标签名之间用空格分割 + * @return { Node | NULL } 如果找到标签名匹配的节点, 则返回该节点, 否则返回NULL + * @example + * ```javascript + * var divNodes = document.getElementsByTagName("div"); + * divNodes = [].slice.call( divNodes, 0 ); + * + * //output: null + * console.log( UE.dom.domUtils.filterNodeList( divNodes, 'a span' ) ); + * ``` + */ + + /** + * 给定一个节点数组,在通过指定的过滤器过滤后, 如果参数forAll为true, 则会返回所有满足过滤 + * 条件的节点集合, 否则, 返回满足条件的节点集合中的第一个节点 + * @method filterNodeList + * @param { Array } nodeList 需要过滤的节点数组 + * @param { Function } fn 过滤器, 对符合条件的节点, 执行结果返回true, 反之则返回false + * @param { Boolean } forAll 是否返回整个节点数组, 如果该参数为false, 则返回节点集合中的第一个节点 + * @return { Array | Node | NULL } 如果找到符合过滤条件的节点, 则根据参数forAll的值决定返回满足 + * 过滤条件的节点数组或第一个节点, 否则返回NULL + * @example + * ```javascript + * var divNodes = document.getElementsByTagName("div"); + * divNodes = [].slice.call( divNodes, 0 ); + * + * //output: 3(假定有3个div) + * console.log( divNodes.length ); + * + * var nodes = UE.dom.domUtils.filterNodeList( divNodes, function ( node ) { + * return node.tagName.toLowerCase() === 'div'; + * }, true ); + * + * //output: 3 + * console.log( nodes.length ); + * + * var node = UE.dom.domUtils.filterNodeList( divNodes, function ( node ) { + * return node.tagName.toLowerCase() === 'div'; + * }, false ); + * + * //output: div + * console.log( node.nodeName ); + * ``` + */ + filterNodeList : function(nodelist,filter,forAll){ + var results = []; + if(!utils .isFunction(filter)){ + var str = filter; + filter = function(n){ + return utils.indexOf(utils.isArray(str) ? str:str.split(' '), n.tagName.toLowerCase()) != -1 + }; + } + utils.each(nodelist,function(n){ + filter(n) && results.push(n) + }); + return results.length == 0 ? null : results.length == 1 || !forAll ? results[0] : results + }, + + /** + * 查询给定的range选区是否在给定的node节点内,且在该节点的最末尾 + * @method isInNodeEndBoundary + * @param { UE.dom.Range } rng 需要判断的range对象, 该对象的startContainer不能为NULL + * @param node 需要检测的节点对象 + * @return { Number } 如果给定的选取range对象是在node内部的最末端, 则返回1, 否则返回0 + */ + isInNodeEndBoundary : function (rng,node){ + var start = rng.startContainer; + if(start.nodeType == 3 && rng.startOffset != start.nodeValue.length){ + return 0; + } + if(start.nodeType == 1 && rng.startOffset != start.childNodes.length){ + return 0; + } + while(start !== node){ + if(start.nextSibling){ + return 0 + }; + start = start.parentNode; + } + return 1; + }, + isBoundaryNode : function (node,dir){ + var tmp; + while(!domUtils.isBody(node)){ + tmp = node; + node = node.parentNode; + if(tmp !== node[dir]){ + return false; + } + } + return true; + }, + fillHtml : browser.ie11below ? ' ' : '
    ' +}; +var fillCharReg = new RegExp(domUtils.fillChar, 'g'); + +// core/Range.js +/** + * Range封装 + * @file + * @module UE.dom + * @class Range + * @since 1.2.6.1 + */ + +/** + * dom操作封装 + * @unfile + * @module UE.dom + */ + +/** + * Range实现类,本类是UEditor底层核心类,封装不同浏览器之间的Range操作。 + * @unfile + * @module UE.dom + * @class Range + */ + + +(function () { + var guid = 0, + fillChar = domUtils.fillChar, + fillData; + + /** + * 更新range的collapse状态 + * @param {Range} range range对象 + */ + function updateCollapse(range) { + range.collapsed = + range.startContainer && range.endContainer && + range.startContainer === range.endContainer && + range.startOffset == range.endOffset; + } + + function selectOneNode(rng){ + return !rng.collapsed && rng.startContainer.nodeType == 1 && rng.startContainer === rng.endContainer && rng.endOffset - rng.startOffset == 1 + } + function setEndPoint(toStart, node, offset, range) { + //如果node是自闭合标签要处理 + if (node.nodeType == 1 && (dtd.$empty[node.tagName] || dtd.$nonChild[node.tagName])) { + offset = domUtils.getNodeIndex(node) + (toStart ? 0 : 1); + node = node.parentNode; + } + if (toStart) { + range.startContainer = node; + range.startOffset = offset; + if (!range.endContainer) { + range.collapse(true); + } + } else { + range.endContainer = node; + range.endOffset = offset; + if (!range.startContainer) { + range.collapse(false); + } + } + updateCollapse(range); + return range; + } + + function execContentsAction(range, action) { + //调整边界 + //range.includeBookmark(); + var start = range.startContainer, + end = range.endContainer, + startOffset = range.startOffset, + endOffset = range.endOffset, + doc = range.document, + frag = doc.createDocumentFragment(), + tmpStart, tmpEnd; + if (start.nodeType == 1) { + start = start.childNodes[startOffset] || (tmpStart = start.appendChild(doc.createTextNode(''))); + } + if (end.nodeType == 1) { + end = end.childNodes[endOffset] || (tmpEnd = end.appendChild(doc.createTextNode(''))); + } + if (start === end && start.nodeType == 3) { + frag.appendChild(doc.createTextNode(start.substringData(startOffset, endOffset - startOffset))); + //is not clone + if (action) { + start.deleteData(startOffset, endOffset - startOffset); + range.collapse(true); + } + return frag; + } + var current, currentLevel, clone = frag, + startParents = domUtils.findParents(start, true), endParents = domUtils.findParents(end, true); + for (var i = 0; startParents[i] == endParents[i];) { + i++; + } + for (var j = i, si; si = startParents[j]; j++) { + current = si.nextSibling; + if (si == start) { + if (!tmpStart) { + if (range.startContainer.nodeType == 3) { + clone.appendChild(doc.createTextNode(start.nodeValue.slice(startOffset))); + //is not clone + if (action) { + start.deleteData(startOffset, start.nodeValue.length - startOffset); + } + } else { + clone.appendChild(!action ? start.cloneNode(true) : start); + } + } + } else { + currentLevel = si.cloneNode(false); + clone.appendChild(currentLevel); + } + while (current) { + if (current === end || current === endParents[j]) { + break; + } + si = current.nextSibling; + clone.appendChild(!action ? current.cloneNode(true) : current); + current = si; + } + clone = currentLevel; + } + clone = frag; + if (!startParents[i]) { + clone.appendChild(startParents[i - 1].cloneNode(false)); + clone = clone.firstChild; + } + for (var j = i, ei; ei = endParents[j]; j++) { + current = ei.previousSibling; + if (ei == end) { + if (!tmpEnd && range.endContainer.nodeType == 3) { + clone.appendChild(doc.createTextNode(end.substringData(0, endOffset))); + //is not clone + if (action) { + end.deleteData(0, endOffset); + } + } + } else { + currentLevel = ei.cloneNode(false); + clone.appendChild(currentLevel); + } + //如果两端同级,右边第一次已经被开始做了 + if (j != i || !startParents[i]) { + while (current) { + if (current === start) { + break; + } + ei = current.previousSibling; + clone.insertBefore(!action ? current.cloneNode(true) : current, clone.firstChild); + current = ei; + } + } + clone = currentLevel; + } + if (action) { + range.setStartBefore(!endParents[i] ? endParents[i - 1] : !startParents[i] ? startParents[i - 1] : endParents[i]).collapse(true); + } + tmpStart && domUtils.remove(tmpStart); + tmpEnd && domUtils.remove(tmpEnd); + return frag; + } + + /** + * 创建一个跟document绑定的空的Range实例 + * @constructor + * @param { Document } document 新建的选区所属的文档对象 + */ + + /** + * @property { Node } startContainer 当前Range的开始边界的容器节点, 可以是一个元素节点或者是文本节点 + */ + + /** + * @property { Node } startOffset 当前Range的开始边界容器节点的偏移量, 如果是元素节点, + * 该值就是childNodes中的第几个节点, 如果是文本节点就是文本内容的第几个字符 + */ + + /** + * @property { Node } endContainer 当前Range的结束边界的容器节点, 可以是一个元素节点或者是文本节点 + */ + + /** + * @property { Node } endOffset 当前Range的结束边界容器节点的偏移量, 如果是元素节点, + * 该值就是childNodes中的第几个节点, 如果是文本节点就是文本内容的第几个字符 + */ + + /** + * @property { Boolean } collapsed 当前Range是否闭合 + * @default true + * @remind Range是闭合的时候, startContainer === endContainer && startOffset === endOffset + */ + + /** + * @property { Document } document 当前Range所属的Document对象 + * @remind 不同range的的document属性可以是不同的 + */ + var Range = dom.Range = function (document) { + var me = this; + me.startContainer = + me.startOffset = + me.endContainer = + me.endOffset = null; + me.document = document; + me.collapsed = true; + }; + + /** + * 删除fillData + * @param doc + * @param excludeNode + */ + function removeFillData(doc, excludeNode) { + try { + if (fillData && domUtils.inDoc(fillData, doc)) { + if (!fillData.nodeValue.replace(fillCharReg, '').length) { + var tmpNode = fillData.parentNode; + domUtils.remove(fillData); + while (tmpNode && domUtils.isEmptyInlineElement(tmpNode) && + //safari的contains有bug + (browser.safari ? !(domUtils.getPosition(tmpNode,excludeNode) & domUtils.POSITION_CONTAINS) : !tmpNode.contains(excludeNode)) + ) { + fillData = tmpNode.parentNode; + domUtils.remove(tmpNode); + tmpNode = fillData; + } + } else { + fillData.nodeValue = fillData.nodeValue.replace(fillCharReg, ''); + } + } + } catch (e) { + } + } + + /** + * @param node + * @param dir + */ + function mergeSibling(node, dir) { + var tmpNode; + node = node[dir]; + while (node && domUtils.isFillChar(node)) { + tmpNode = node[dir]; + domUtils.remove(node); + node = tmpNode; + } + } + + Range.prototype = { + + /** + * 克隆选区的内容到一个DocumentFragment里 + * @method cloneContents + * @return { DocumentFragment | NULL } 如果选区是闭合的将返回null, 否则, 返回包含所clone内容的DocumentFragment元素 + * @example + * ```html + * + * + * xx[xxx]x + * + * + * + * ``` + */ + cloneContents:function () { + return this.collapsed ? null : execContentsAction(this, 0); + }, + + /** + * 删除当前选区范围中的所有内容 + * @method deleteContents + * @remind 执行完该操作后, 当前Range对象变成了闭合状态 + * @return { UE.dom.Range } 当前操作的Range对象 + * @example + * ```html + * + * + * xx[xxx]x + * + * + * + * ``` + */ + deleteContents:function () { + var txt; + if (!this.collapsed) { + execContentsAction(this, 1); + } + if (browser.webkit) { + txt = this.startContainer; + if (txt.nodeType == 3 && !txt.nodeValue.length) { + this.setStartBefore(txt).collapse(true); + domUtils.remove(txt); + } + } + return this; + }, + + /** + * 将当前选区的内容提取到一个DocumentFragment里 + * @method extractContents + * @remind 执行该操作后, 选区将变成闭合状态 + * @warning 执行该操作后, 原来选区所选中的内容将从dom树上剥离出来 + * @return { DocumentFragment } 返回包含所提取内容的DocumentFragment对象 + * @example + * ```html + * + * + * xx[xxx]x + * + * + * + */ + extractContents:function () { + return this.collapsed ? null : execContentsAction(this, 2); + }, + + /** + * 设置Range的开始容器节点和偏移量 + * @method setStart + * @remind 如果给定的节点是元素节点,那么offset指的是其子元素中索引为offset的元素, + * 如果是文本节点,那么offset指的是其文本内容的第offset个字符 + * @remind 如果提供的容器节点是一个不能包含子元素的节点, 则该选区的开始容器将被设置 + * 为该节点的父节点, 此时, 其距离开始容器的偏移量也变成了该节点在其父节点 + * 中的索引 + * @param { Node } node 将被设为当前选区开始边界容器的节点对象 + * @param { int } offset 选区的开始位置偏移量 + * @return { UE.dom.Range } 当前range对象 + * @example + * ```html + * + * xxxxxxxxxxxxx[xxx] + * + * + * ``` + * @example + * ```html + * + * xxx[xx]x + * + * + * ``` + */ + setStart:function (node, offset) { + return setEndPoint(true, node, offset, this); + }, + + /** + * 设置Range的结束容器和偏移量 + * @method setEnd + * @param { Node } node 作为当前选区结束边界容器的节点对象 + * @param { int } offset 结束边界的偏移量 + * @see UE.dom.Range:setStart(Node,int) + * @return { UE.dom.Range } 当前range对象 + */ + setEnd:function (node, offset) { + return setEndPoint(false, node, offset, this); + }, + + /** + * 将Range开始位置设置到node节点之后 + * @method setStartAfter + * @remind 该操作将会把给定节点的父节点作为range的开始容器, 且偏移量是该节点在其父节点中的位置索引+1 + * @param { Node } node 选区的开始边界将紧接着该节点之后 + * @return { UE.dom.Range } 当前range对象 + * @example + * ```html + * + * xxxxxxx[xxxx] + * + * + * ``` + */ + setStartAfter:function (node) { + return this.setStart(node.parentNode, domUtils.getNodeIndex(node) + 1); + }, + + /** + * 将Range开始位置设置到node节点之前 + * @method setStartBefore + * @remind 该操作将会把给定节点的父节点作为range的开始容器, 且偏移量是该节点在其父节点中的位置索引 + * @param { Node } node 新的选区开始位置在该节点之前 + * @see UE.dom.Range:setStartAfter(Node) + * @return { UE.dom.Range } 当前range对象 + */ + setStartBefore:function (node) { + return this.setStart(node.parentNode, domUtils.getNodeIndex(node)); + }, + + /** + * 将Range结束位置设置到node节点之后 + * @method setEndAfter + * @remind 该操作将会把给定节点的父节点作为range的结束容器, 且偏移量是该节点在其父节点中的位置索引+1 + * @param { Node } node 目标节点 + * @see UE.dom.Range:setStartAfter(Node) + * @return { UE.dom.Range } 当前range对象 + * @example + * ```html + * + * [xxxxxxx]xxxx + * + * + * ``` + */ + setEndAfter:function (node) { + return this.setEnd(node.parentNode, domUtils.getNodeIndex(node) + 1); + }, + + /** + * 将Range结束位置设置到node节点之前 + * @method setEndBefore + * @remind 该操作将会把给定节点的父节点作为range的结束容器, 且偏移量是该节点在其父节点中的位置索引 + * @param { Node } node 目标节点 + * @see UE.dom.Range:setEndAfter(Node) + * @return { UE.dom.Range } 当前range对象 + */ + setEndBefore:function (node) { + return this.setEnd(node.parentNode, domUtils.getNodeIndex(node)); + }, + + /** + * 设置Range的开始位置到node节点内的第一个子节点之前 + * @method setStartAtFirst + * @remind 选区的开始容器将变成给定的节点, 且偏移量为0 + * @remind 如果给定的节点是元素节点, 则该节点必须是允许包含子节点的元素。 + * @param { Node } node 目标节点 + * @see UE.dom.Range:setStartBefore(Node) + * @return { UE.dom.Range } 当前range对象 + * @example + * ```html + * + * xxxxx[xx]xxxx + * + * + * ``` + */ + setStartAtFirst:function (node) { + return this.setStart(node, 0); + }, + + /** + * 设置Range的开始位置到node节点内的最后一个节点之后 + * @method setStartAtLast + * @remind 选区的开始容器将变成给定的节点, 且偏移量为该节点的子节点数 + * @remind 如果给定的节点是元素节点, 则该节点必须是允许包含子节点的元素。 + * @param { Node } node 目标节点 + * @see UE.dom.Range:setStartAtFirst(Node) + * @return { UE.dom.Range } 当前range对象 + */ + setStartAtLast:function (node) { + return this.setStart(node, node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length); + }, + + /** + * 设置Range的结束位置到node节点内的第一个节点之前 + * @method setEndAtFirst + * @param { Node } node 目标节点 + * @remind 选区的结束容器将变成给定的节点, 且偏移量为0 + * @remind node必须是一个元素节点, 且必须是允许包含子节点的元素。 + * @see UE.dom.Range:setStartAtFirst(Node) + * @return { UE.dom.Range } 当前range对象 + */ + setEndAtFirst:function (node) { + return this.setEnd(node, 0); + }, + + /** + * 设置Range的结束位置到node节点内的最后一个节点之后 + * @method setEndAtLast + * @param { Node } node 目标节点 + * @remind 选区的结束容器将变成给定的节点, 且偏移量为该节点的子节点数量 + * @remind node必须是一个元素节点, 且必须是允许包含子节点的元素。 + * @see UE.dom.Range:setStartAtFirst(Node) + * @return { UE.dom.Range } 当前range对象 + */ + setEndAtLast:function (node) { + return this.setEnd(node, node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length); + }, + + /** + * 选中给定节点 + * @method selectNode + * @remind 此时, 选区的开始容器和结束容器都是该节点的父节点, 其startOffset是该节点在父节点中的位置索引, + * 而endOffset为startOffset+1 + * @param { Node } node 需要选中的节点 + * @return { UE.dom.Range } 当前range对象,此时的range仅包含当前给定的节点对象 + * @example + * ```html + * + * xxxxx[xx]xxxx + * + * + * ``` + */ + selectNode:function (node) { + return this.setStartBefore(node).setEndAfter(node); + }, + + /** + * 选中给定节点内部的所有节点 + * @method selectNodeContents + * @remind 此时, 选区的开始容器和结束容器都是该节点, 其startOffset为0, + * 而endOffset是该节点的子节点数。 + * @param { Node } node 目标节点, 当前range将包含该节点内的所有节点 + * @return { UE.dom.Range } 当前range对象, 此时range仅包含给定节点的所有子节点 + * @example + * ```html + * + * xxxxx[xx]xxxx + * + * + * ``` + */ + selectNodeContents:function (node) { + return this.setStart(node, 0).setEndAtLast(node); + }, + + /** + * clone当前Range对象 + * @method cloneRange + * @remind 返回的range是一个全新的range对象, 其内部所有属性与当前被clone的range相同。 + * @return { UE.dom.Range } 当前range对象的一个副本 + */ + cloneRange:function () { + var me = this; + return new Range(me.document).setStart(me.startContainer, me.startOffset).setEnd(me.endContainer, me.endOffset); + + }, + + /** + * 向当前选区的结束处闭合选区 + * @method collapse + * @return { UE.dom.Range } 当前range对象 + * @example + * ```html + * + * xxxxx[xx]xxxx + * + * + * ``` + */ + + /** + * 闭合当前选区,根据给定的toStart参数项决定是向当前选区开始处闭合还是向结束处闭合, + * 如果toStart的值为true,则向开始位置闭合, 反之,向结束位置闭合。 + * @method collapse + * @param { Boolean } toStart 是否向选区开始处闭合 + * @return { UE.dom.Range } 当前range对象,此时range对象处于闭合状态 + * @see UE.dom.Range:collapse() + * @example + * ```html + * + * xxxxx[xx]xxxx + * + * + * ``` + */ + collapse:function (toStart) { + var me = this; + if (toStart) { + me.endContainer = me.startContainer; + me.endOffset = me.startOffset; + } else { + me.startContainer = me.endContainer; + me.startOffset = me.endOffset; + } + me.collapsed = true; + return me; + }, + + /** + * 调整range的开始位置和结束位置,使其"收缩"到最小的位置 + * @method shrinkBoundary + * @return { UE.dom.Range } 当前range对象 + * @example + * ```html + * xxxx[xxxxx] => xxxx[xxxxx] + * ``` + * + * @example + * ```html + * + * x[xx]xxx + * + * + * ``` + * + * @example + * ```html + * [xxxxxxxxxxx] => [xxxxxxxxxxx] + * ``` + */ + + /** + * 调整range的开始位置和结束位置,使其"收缩"到最小的位置, + * 如果ignoreEnd的值为true,则忽略对结束位置的调整 + * @method shrinkBoundary + * @param { Boolean } ignoreEnd 是否忽略对结束位置的调整 + * @return { UE.dom.Range } 当前range对象 + * @see UE.dom.domUtils.Range:shrinkBoundary() + */ + shrinkBoundary:function (ignoreEnd) { + var me = this, child, + collapsed = me.collapsed; + function check(node){ + return node.nodeType == 1 && !domUtils.isBookmarkNode(node) && !dtd.$empty[node.tagName] && !dtd.$nonChild[node.tagName] + } + while (me.startContainer.nodeType == 1 //是element + && (child = me.startContainer.childNodes[me.startOffset]) //子节点也是element + && check(child)) { + me.setStart(child, 0); + } + if (collapsed) { + return me.collapse(true); + } + if (!ignoreEnd) { + while (me.endContainer.nodeType == 1//是element + && me.endOffset > 0 //如果是空元素就退出 endOffset=0那么endOffst-1为负值,childNodes[endOffset]报错 + && (child = me.endContainer.childNodes[me.endOffset - 1]) //子节点也是element + && check(child)) { + me.setEnd(child, child.childNodes.length); + } + } + return me; + }, + + /** + * 获取离当前选区内包含的所有节点最近的公共祖先节点, + * @method getCommonAncestor + * @remind 返回的公共祖先节点一定不是range自身的容器节点, 但有可能是一个文本节点 + * @return { Node } 当前range对象内所有节点的公共祖先节点 + * @example + * ```html + * //选区示例 + * xxxx[xxx]xxxxxx + * + * ``` + */ + + /** + * 获取当前选区所包含的所有节点的公共祖先节点, 可以根据给定的参数 includeSelf 决定获取到 + * 的公共祖先节点是否可以是当前选区的startContainer或endContainer节点, 如果 includeSelf + * 的取值为true, 则返回的节点可以是自身的容器节点, 否则, 则不能是容器节点 + * @method getCommonAncestor + * @param { Boolean } includeSelf 是否允许获取到的公共祖先节点是当前range对象的容器节点 + * @return { Node } 当前range对象内所有节点的公共祖先节点 + * @see UE.dom.Range:getCommonAncestor() + * @example + * ```html + * + * + * + * xxxxxxxxx[xxx]xxxxxxxx + * + * + * + * + * ``` + */ + + /** + * 获取当前选区所包含的所有节点的公共祖先节点, 可以根据给定的参数 includeSelf 决定获取到 + * 的公共祖先节点是否可以是当前选区的startContainer或endContainer节点, 如果 includeSelf + * 的取值为true, 则返回的节点可以是自身的容器节点, 否则, 则不能是容器节点; 同时可以根据 + * ignoreTextNode 参数的取值决定是否忽略类型为文本节点的祖先节点。 + * @method getCommonAncestor + * @param { Boolean } includeSelf 是否允许获取到的公共祖先节点是当前range对象的容器节点 + * @param { Boolean } ignoreTextNode 获取祖先节点的过程中是否忽略类型为文本节点的祖先节点 + * @return { Node } 当前range对象内所有节点的公共祖先节点 + * @see UE.dom.Range:getCommonAncestor() + * @see UE.dom.Range:getCommonAncestor(Boolean) + * @example + * ```html + * + * + * + * xxxxxxxx[x]xxxxxxxxxxx + * + * + * + * + * ``` + */ + getCommonAncestor:function (includeSelf, ignoreTextNode) { + var me = this, + start = me.startContainer, + end = me.endContainer; + if (start === end) { + if (includeSelf && selectOneNode(this)) { + start = start.childNodes[me.startOffset]; + if(start.nodeType == 1) + return start; + } + //只有在上来就相等的情况下才会出现是文本的情况 + return ignoreTextNode && start.nodeType == 3 ? start.parentNode : start; + } + return domUtils.getCommonAncestor(start, end); + }, + + /** + * 调整当前Range的开始和结束边界容器,如果是容器节点是文本节点,就调整到包含该文本节点的父节点上 + * @method trimBoundary + * @remind 该操作有可能会引起文本节点被切开 + * @return { UE.dom.Range } 当前range对象 + * @example + * ```html + * + * //选区示例 + * xxx[xxxxx]xxx + * + * + * ``` + */ + + /** + * 调整当前Range的开始和结束边界容器,如果是容器节点是文本节点,就调整到包含该文本节点的父节点上, + * 可以根据 ignoreEnd 参数的值决定是否调整对结束边界的调整 + * @method trimBoundary + * @param { Boolean } ignoreEnd 是否忽略对结束边界的调整 + * @return { UE.dom.Range } 当前range对象 + * @example + * ```html + * + * //选区示例 + * xxx[xxxxx]xxx + * + * + * ``` + */ + trimBoundary:function (ignoreEnd) { + this.txtToElmBoundary(); + var start = this.startContainer, + offset = this.startOffset, + collapsed = this.collapsed, + end = this.endContainer; + if (start.nodeType == 3) { + if (offset == 0) { + this.setStartBefore(start); + } else { + if (offset >= start.nodeValue.length) { + this.setStartAfter(start); + } else { + var textNode = domUtils.split(start, offset); + //跟新结束边界 + if (start === end) { + this.setEnd(textNode, this.endOffset - offset); + } else if (start.parentNode === end) { + this.endOffset += 1; + } + this.setStartBefore(textNode); + } + } + if (collapsed) { + return this.collapse(true); + } + } + if (!ignoreEnd) { + offset = this.endOffset; + end = this.endContainer; + if (end.nodeType == 3) { + if (offset == 0) { + this.setEndBefore(end); + } else { + offset < end.nodeValue.length && domUtils.split(end, offset); + this.setEndAfter(end); + } + } + } + return this; + }, + + /** + * 如果选区在文本的边界上,就扩展选区到文本的父节点上, 如果当前选区是闭合的, 则什么也不做 + * @method txtToElmBoundary + * @remind 该操作不会修改dom节点 + * @return { UE.dom.Range } 当前range对象 + */ + + /** + * 如果选区在文本的边界上,就扩展选区到文本的父节点上, 如果当前选区是闭合的, 则根据参数项 + * ignoreCollapsed 的值决定是否执行该调整 + * @method txtToElmBoundary + * @param { Boolean } ignoreCollapsed 是否忽略选区的闭合状态, 如果该参数取值为true, 则 + * 不论选区是否闭合, 都会执行该操作, 反之, 则不会对闭合的选区执行该操作 + * @return { UE.dom.Range } 当前range对象 + */ + txtToElmBoundary:function (ignoreCollapsed) { + function adjust(r, c) { + var container = r[c + 'Container'], + offset = r[c + 'Offset']; + if (container.nodeType == 3) { + if (!offset) { + r['set' + c.replace(/(\w)/, function (a) { + return a.toUpperCase(); + }) + 'Before'](container); + } else if (offset >= container.nodeValue.length) { + r['set' + c.replace(/(\w)/, function (a) { + return a.toUpperCase(); + }) + 'After' ](container); + } + } + } + + if (ignoreCollapsed || !this.collapsed) { + adjust(this, 'start'); + adjust(this, 'end'); + } + return this; + }, + + /** + * 在当前选区的开始位置前插入节点,新插入的节点会被该range包含 + * @method insertNode + * @param { Node } node 需要插入的节点 + * @remind 插入的节点可以是一个DocumentFragment依次插入多个节点 + * @return { UE.dom.Range } 当前range对象 + */ + insertNode:function (node) { + var first = node, length = 1; + if (node.nodeType == 11) { + first = node.firstChild; + length = node.childNodes.length; + } + this.trimBoundary(true); + var start = this.startContainer, + offset = this.startOffset; + var nextNode = start.childNodes[ offset ]; + if (nextNode) { + start.insertBefore(node, nextNode); + } else { + start.appendChild(node); + } + if (first.parentNode === this.endContainer) { + this.endOffset = this.endOffset + length; + } + return this.setStartBefore(first); + }, + + /** + * 闭合选区到当前选区的开始位置, 并且定位光标到闭合后的位置 + * @method setCursor + * @return { UE.dom.Range } 当前range对象 + * @see UE.dom.Range:collapse() + */ + + /** + * 闭合选区,可以根据参数toEnd的值控制选区是向前闭合还是向后闭合, 并且定位光标到闭合后的位置。 + * @method setCursor + * @param { Boolean } toEnd 是否向后闭合, 如果为true, 则闭合选区时, 将向结束容器方向闭合, + * 反之,则向开始容器方向闭合 + * @return { UE.dom.Range } 当前range对象 + * @see UE.dom.Range:collapse(Boolean) + */ + setCursor:function (toEnd, noFillData) { + return this.collapse(!toEnd).select(noFillData); + }, + + /** + * 创建当前range的一个书签,记录下当前range的位置,方便当dom树改变时,还能找回原来的选区位置 + * @method createBookmark + * @param { Boolean } serialize 控制返回的标记位置是对当前位置的引用还是ID,如果该值为true,则 + * 返回标记位置的ID, 反之则返回标记位置节点的引用 + * @return { Object } 返回一个书签记录键值对, 其包含的key有: start => 开始标记的ID或者引用, + * end => 结束标记的ID或引用, id => 当前标记的类型, 如果为true,则表示 + * 返回的记录的类型为ID, 反之则为引用 + */ + createBookmark:function (serialize, same) { + var endNode, + startNode = this.document.createElement('span'); + startNode.style.cssText = 'display:none;line-height:0px;'; + startNode.appendChild(this.document.createTextNode('\u200D')); + startNode.id = '_baidu_bookmark_start_' + (same ? '' : guid++); + + if (!this.collapsed) { + endNode = startNode.cloneNode(true); + endNode.id = '_baidu_bookmark_end_' + (same ? '' : guid++); + } + this.insertNode(startNode); + if (endNode) { + this.collapse().insertNode(endNode).setEndBefore(endNode); + } + this.setStartAfter(startNode); + return { + start:serialize ? startNode.id : startNode, + end:endNode ? serialize ? endNode.id : endNode : null, + id:serialize + } + }, + + /** + * 调整当前range的边界到书签位置,并删除该书签对象所标记的位置内的节点 + * @method moveToBookmark + * @param { BookMark } bookmark createBookmark所创建的标签对象 + * @return { UE.dom.Range } 当前range对象 + * @see UE.dom.Range:createBookmark(Boolean) + */ + moveToBookmark:function (bookmark) { + var start = bookmark.id ? this.document.getElementById(bookmark.start) : bookmark.start, + end = bookmark.end && bookmark.id ? this.document.getElementById(bookmark.end) : bookmark.end; + this.setStartBefore(start); + domUtils.remove(start); + if (end) { + this.setEndBefore(end); + domUtils.remove(end); + } else { + this.collapse(true); + } + return this; + }, + + /** + * 调整range的边界,使其"放大"到最近的父节点 + * @method enlarge + * @remind 会引起选区的变化 + * @return { UE.dom.Range } 当前range对象 + */ + + /** + * 调整range的边界,使其"放大"到最近的父节点,根据参数 toBlock 的取值, 可以 + * 要求扩大之后的父节点是block节点 + * @method enlarge + * @param { Boolean } toBlock 是否要求扩大之后的父节点必须是block节点 + * @return { UE.dom.Range } 当前range对象 + */ + enlarge:function (toBlock, stopFn) { + var isBody = domUtils.isBody, + pre, node, tmp = this.document.createTextNode(''); + if (toBlock) { + node = this.startContainer; + if (node.nodeType == 1) { + if (node.childNodes[this.startOffset]) { + pre = node = node.childNodes[this.startOffset] + } else { + node.appendChild(tmp); + pre = node = tmp; + } + } else { + pre = node; + } + while (1) { + if (domUtils.isBlockElm(node)) { + node = pre; + while ((pre = node.previousSibling) && !domUtils.isBlockElm(pre)) { + node = pre; + } + this.setStartBefore(node); + break; + } + pre = node; + node = node.parentNode; + } + node = this.endContainer; + if (node.nodeType == 1) { + if (pre = node.childNodes[this.endOffset]) { + node.insertBefore(tmp, pre); + } else { + node.appendChild(tmp); + } + pre = node = tmp; + } else { + pre = node; + } + while (1) { + if (domUtils.isBlockElm(node)) { + node = pre; + while ((pre = node.nextSibling) && !domUtils.isBlockElm(pre)) { + node = pre; + } + this.setEndAfter(node); + break; + } + pre = node; + node = node.parentNode; + } + if (tmp.parentNode === this.endContainer) { + this.endOffset--; + } + domUtils.remove(tmp); + } + + // 扩展边界到最大 + if (!this.collapsed) { + while (this.startOffset == 0) { + if (stopFn && stopFn(this.startContainer)) { + break; + } + if (isBody(this.startContainer)) { + break; + } + this.setStartBefore(this.startContainer); + } + while (this.endOffset == (this.endContainer.nodeType == 1 ? this.endContainer.childNodes.length : this.endContainer.nodeValue.length)) { + if (stopFn && stopFn(this.endContainer)) { + break; + } + if (isBody(this.endContainer)) { + break; + } + this.setEndAfter(this.endContainer); + } + } + return this; + }, + enlargeToBlockElm:function(ignoreEnd){ + while(!domUtils.isBlockElm(this.startContainer)){ + this.setStartBefore(this.startContainer); + } + if(!ignoreEnd){ + while(!domUtils.isBlockElm(this.endContainer)){ + this.setEndAfter(this.endContainer); + } + } + return this; + }, + /** + * 调整Range的边界,使其"缩小"到最合适的位置 + * @method adjustmentBoundary + * @return { UE.dom.Range } 当前range对象 + * @see UE.dom.Range:shrinkBoundary() + */ + adjustmentBoundary:function () { + if (!this.collapsed) { + while (!domUtils.isBody(this.startContainer) && + this.startOffset == this.startContainer[this.startContainer.nodeType == 3 ? 'nodeValue' : 'childNodes'].length && + this.startContainer[this.startContainer.nodeType == 3 ? 'nodeValue' : 'childNodes'].length + ) { + + this.setStartAfter(this.startContainer); + } + while (!domUtils.isBody(this.endContainer) && !this.endOffset && + this.endContainer[this.endContainer.nodeType == 3 ? 'nodeValue' : 'childNodes'].length + ) { + this.setEndBefore(this.endContainer); + } + } + return this; + }, + + /** + * 给range选区中的内容添加给定的inline标签 + * @method applyInlineStyle + * @param { String } tagName 需要添加的标签名 + * @example + * ```html + *

    xxxx[xxxx]x

    ==> range.applyInlineStyle("strong") ==>

    xxxx[xxxx]x

    + * ``` + */ + + /** + * 给range选区中的内容添加给定的inline标签, 并且为标签附加上一些初始化属性。 + * @method applyInlineStyle + * @param { String } tagName 需要添加的标签名 + * @param { Object } attrs 跟随新添加的标签的属性 + * @return { UE.dom.Range } 当前选区 + * @example + * ```html + *

    xxxx[xxxx]x

    + * + * ==> + * + * + * range.applyInlineStyle("strong",{"style":"font-size:12px"}) + * + * ==> + * + *

    xxxx[xxxx]x

    + * ``` + */ + applyInlineStyle:function (tagName, attrs, list) { + if (this.collapsed)return this; + this.trimBoundary().enlarge(false, + function (node) { + return node.nodeType == 1 && domUtils.isBlockElm(node) + }).adjustmentBoundary(); + var bookmark = this.createBookmark(), + end = bookmark.end, + filterFn = function (node) { + return node.nodeType == 1 ? node.tagName.toLowerCase() != 'br' : !domUtils.isWhitespace(node); + }, + current = domUtils.getNextDomNode(bookmark.start, false, filterFn), + node, + pre, + range = this.cloneRange(); + while (current && (domUtils.getPosition(current, end) & domUtils.POSITION_PRECEDING)) { + if (current.nodeType == 3 || dtd[tagName][current.tagName]) { + range.setStartBefore(current); + node = current; + while (node && (node.nodeType == 3 || dtd[tagName][node.tagName]) && node !== end) { + pre = node; + node = domUtils.getNextDomNode(node, node.nodeType == 1, null, function (parent) { + return dtd[tagName][parent.tagName]; + }); + } + var frag = range.setEndAfter(pre).extractContents(), elm; + if (list && list.length > 0) { + var level, top; + top = level = list[0].cloneNode(false); + for (var i = 1, ci; ci = list[i++];) { + level.appendChild(ci.cloneNode(false)); + level = level.firstChild; + } + elm = level; + } else { + elm = range.document.createElement(tagName); + } + if (attrs) { + domUtils.setAttributes(elm, attrs); + } + elm.appendChild(frag); + range.insertNode(list ? top : elm); + //处理下滑线在a上的情况 + var aNode; + if (tagName == 'span' && attrs.style && /text\-decoration/.test(attrs.style) && (aNode = domUtils.findParentByTagName(elm, 'a', true))) { + domUtils.setAttributes(aNode, attrs); + domUtils.remove(elm, true); + elm = aNode; + } else { + domUtils.mergeSibling(elm); + domUtils.clearEmptySibling(elm); + } + //去除子节点相同的 + domUtils.mergeChild(elm, attrs); + current = domUtils.getNextDomNode(elm, false, filterFn); + domUtils.mergeToParent(elm); + if (node === end) { + break; + } + } else { + current = domUtils.getNextDomNode(current, true, filterFn); + } + } + return this.moveToBookmark(bookmark); + }, + + /** + * 移除当前选区内指定的inline标签,但保留其中的内容 + * @method removeInlineStyle + * @param { String } tagName 需要移除的标签名 + * @return { UE.dom.Range } 当前的range对象 + * @example + * ```html + * xx[xxxxyyyzz]z => range.removeInlineStyle(["em"]) => xx[xxxxyyyzz]z + * ``` + */ + + /** + * 移除当前选区内指定的一组inline标签,但保留其中的内容 + * @method removeInlineStyle + * @param { Array } tagNameArr 需要移除的标签名的数组 + * @return { UE.dom.Range } 当前的range对象 + * @see UE.dom.Range:removeInlineStyle(String) + */ + removeInlineStyle:function (tagNames) { + if (this.collapsed)return this; + tagNames = utils.isArray(tagNames) ? tagNames : [tagNames]; + this.shrinkBoundary().adjustmentBoundary(); + var start = this.startContainer, end = this.endContainer; + while (1) { + if (start.nodeType == 1) { + if (utils.indexOf(tagNames, start.tagName.toLowerCase()) > -1) { + break; + } + if (start.tagName.toLowerCase() == 'body') { + start = null; + break; + } + } + start = start.parentNode; + } + while (1) { + if (end.nodeType == 1) { + if (utils.indexOf(tagNames, end.tagName.toLowerCase()) > -1) { + break; + } + if (end.tagName.toLowerCase() == 'body') { + end = null; + break; + } + } + end = end.parentNode; + } + var bookmark = this.createBookmark(), + frag, + tmpRange; + if (start) { + tmpRange = this.cloneRange().setEndBefore(bookmark.start).setStartBefore(start); + frag = tmpRange.extractContents(); + tmpRange.insertNode(frag); + domUtils.clearEmptySibling(start, true); + start.parentNode.insertBefore(bookmark.start, start); + } + if (end) { + tmpRange = this.cloneRange().setStartAfter(bookmark.end).setEndAfter(end); + frag = tmpRange.extractContents(); + tmpRange.insertNode(frag); + domUtils.clearEmptySibling(end, false, true); + end.parentNode.insertBefore(bookmark.end, end.nextSibling); + } + var current = domUtils.getNextDomNode(bookmark.start, false, function (node) { + return node.nodeType == 1; + }), next; + while (current && current !== bookmark.end) { + next = domUtils.getNextDomNode(current, true, function (node) { + return node.nodeType == 1; + }); + if (utils.indexOf(tagNames, current.tagName.toLowerCase()) > -1) { + domUtils.remove(current, true); + } + current = next; + } + return this.moveToBookmark(bookmark); + }, + + /** + * 获取当前选中的自闭合的节点 + * @method getClosedNode + * @return { Node | NULL } 如果当前选中的是自闭合节点, 则返回该节点, 否则返回NULL + */ + getClosedNode:function () { + var node; + if (!this.collapsed) { + var range = this.cloneRange().adjustmentBoundary().shrinkBoundary(); + if (selectOneNode(range)) { + var child = range.startContainer.childNodes[range.startOffset]; + if (child && child.nodeType == 1 && (dtd.$empty[child.tagName] || dtd.$nonChild[child.tagName])) { + node = child; + } + } + } + return node; + }, + + /** + * 在页面上高亮range所表示的选区 + * @method select + * @return { UE.dom.Range } 返回当前Range对象 + */ + //这里不区分ie9以上,trace:3824 + select:browser.ie ? function (noFillData, textRange) { + var nativeRange; + if (!this.collapsed) + this.shrinkBoundary(); + var node = this.getClosedNode(); + if (node && !textRange) { + try { + nativeRange = this.document.body.createControlRange(); + nativeRange.addElement(node); + nativeRange.select(); + } catch (e) {} + return this; + } + var bookmark = this.createBookmark(), + start = bookmark.start, + end; + nativeRange = this.document.body.createTextRange(); + nativeRange.moveToElementText(start); + nativeRange.moveStart('character', 1); + if (!this.collapsed) { + var nativeRangeEnd = this.document.body.createTextRange(); + end = bookmark.end; + nativeRangeEnd.moveToElementText(end); + nativeRange.setEndPoint('EndToEnd', nativeRangeEnd); + } else { + if (!noFillData && this.startContainer.nodeType != 3) { + //使用|x固定住光标 + var tmpText = this.document.createTextNode(fillChar), + tmp = this.document.createElement('span'); + tmp.appendChild(this.document.createTextNode(fillChar)); + start.parentNode.insertBefore(tmp, start); + start.parentNode.insertBefore(tmpText, start); + //当点b,i,u时,不能清除i上边的b + removeFillData(this.document, tmpText); + fillData = tmpText; + mergeSibling(tmp, 'previousSibling'); + mergeSibling(start, 'nextSibling'); + nativeRange.moveStart('character', -1); + nativeRange.collapse(true); + } + } + this.moveToBookmark(bookmark); + tmp && domUtils.remove(tmp); + //IE在隐藏状态下不支持range操作,catch一下 + try { + nativeRange.select(); + } catch (e) { + } + return this; + } : function (notInsertFillData) { + function checkOffset(rng){ + + function check(node,offset,dir){ + if(node.nodeType == 3 && node.nodeValue.length < offset){ + rng[dir + 'Offset'] = node.nodeValue.length + } + } + check(rng.startContainer,rng.startOffset,'start'); + check(rng.endContainer,rng.endOffset,'end'); + } + var win = domUtils.getWindow(this.document), + sel = win.getSelection(), + txtNode; + //FF下关闭自动长高时滚动条在关闭dialog时会跳 + //ff下如果不body.focus将不能定位闭合光标到编辑器内 + browser.gecko ? this.document.body.focus() : win.focus(); + if (sel) { + sel.removeAllRanges(); + // trace:870 chrome/safari后边是br对于闭合得range不能定位 所以去掉了判断 + // this.startContainer.nodeType != 3 &&! ((child = this.startContainer.childNodes[this.startOffset]) && child.nodeType == 1 && child.tagName == 'BR' + if (this.collapsed && !notInsertFillData) { +// //opear如果没有节点接着,原生的不能够定位,不能在body的第一级插入空白节点 +// if (notInsertFillData && browser.opera && !domUtils.isBody(this.startContainer) && this.startContainer.nodeType == 1) { +// var tmp = this.document.createTextNode(''); +// this.insertNode(tmp).setStart(tmp, 0).collapse(true); +// } +// + //处理光标落在文本节点的情况 + //处理以下的情况 + //|xxxx + //xxxx|xxxx + //xxxx| + var start = this.startContainer,child = start; + if(start.nodeType == 1){ + child = start.childNodes[this.startOffset]; + + } + if( !(start.nodeType == 3 && this.startOffset) && + (child ? + (!child.previousSibling || child.previousSibling.nodeType != 3) + : + (!start.lastChild || start.lastChild.nodeType != 3) + ) + ){ + txtNode = this.document.createTextNode(fillChar); + //跟着前边走 + this.insertNode(txtNode); + removeFillData(this.document, txtNode); + mergeSibling(txtNode, 'previousSibling'); + mergeSibling(txtNode, 'nextSibling'); + fillData = txtNode; + this.setStart(txtNode, browser.webkit ? 1 : 0).collapse(true); + } + } + var nativeRange = this.document.createRange(); + if(this.collapsed && browser.opera && this.startContainer.nodeType == 1){ + var child = this.startContainer.childNodes[this.startOffset]; + if(!child){ + //往前靠拢 + child = this.startContainer.lastChild; + if( child && domUtils.isBr(child)){ + this.setStartBefore(child).collapse(true); + } + }else{ + //向后靠拢 + while(child && domUtils.isBlockElm(child)){ + if(child.nodeType == 1 && child.childNodes[0]){ + child = child.childNodes[0] + }else{ + break; + } + } + child && this.setStartBefore(child).collapse(true) + } + + } + //是createAddress最后一位算的不准,现在这里进行微调 + checkOffset(this); + nativeRange.setStart(this.startContainer, this.startOffset); + nativeRange.setEnd(this.endContainer, this.endOffset); + sel.addRange(nativeRange); + } + return this; + }, + + /** + * 滚动到当前range开始的位置 + * @method scrollToView + * @param { Window } win 当前range对象所属的window对象 + * @return { UE.dom.Range } 当前Range对象 + */ + + /** + * 滚动到距离当前range开始位置 offset 的位置处 + * @method scrollToView + * @param { Window } win 当前range对象所属的window对象 + * @param { Number } offset 距离range开始位置处的偏移量, 如果为正数, 则向下偏移, 反之, 则向上偏移 + * @return { UE.dom.Range } 当前Range对象 + */ + scrollToView:function (win, offset) { + win = win ? window : domUtils.getWindow(this.document); + var me = this, + span = me.document.createElement('span'); + //trace:717 + span.innerHTML = ' '; + me.cloneRange().insertNode(span); + domUtils.scrollToView(span, win, offset); + domUtils.remove(span); + return me; + }, + + /** + * 判断当前选区内容是否占位符 + * @private + * @method inFillChar + * @return { Boolean } 如果是占位符返回true,否则返回false + */ + inFillChar : function(){ + var start = this.startContainer; + if(this.collapsed && start.nodeType == 3 + && start.nodeValue.replace(new RegExp('^' + domUtils.fillChar),'').length + 1 == start.nodeValue.length + ){ + return true; + } + return false; + }, + + /** + * 保存 + * @method createAddress + * @private + * @return { Boolean } 返回开始和结束的位置 + * @example + * ```html + * + *

    + * aaaa + * + * + * bbbb + * + * + *

    + * + * + * + * ``` + */ + createAddress : function(ignoreEnd,ignoreTxt){ + var addr = {},me = this; + + function getAddress(isStart){ + var node = isStart ? me.startContainer : me.endContainer; + var parents = domUtils.findParents(node,true,function(node){return !domUtils.isBody(node)}), + addrs = []; + for(var i = 0,ci;ci = parents[i++];){ + addrs.push(domUtils.getNodeIndex(ci,ignoreTxt)); + } + var firstIndex = 0; + + if(ignoreTxt){ + if(node.nodeType == 3){ + var tmpNode = node.previousSibling; + while(tmpNode && tmpNode.nodeType == 3){ + firstIndex += tmpNode.nodeValue.replace(fillCharReg,'').length; + tmpNode = tmpNode.previousSibling; + } + firstIndex += (isStart ? me.startOffset : me.endOffset)// - (fillCharReg.test(node.nodeValue) ? 1 : 0 ) + }else{ + node = node.childNodes[ isStart ? me.startOffset : me.endOffset]; + if(node){ + firstIndex = domUtils.getNodeIndex(node,ignoreTxt); + }else{ + node = isStart ? me.startContainer : me.endContainer; + var first = node.firstChild; + while(first){ + if(domUtils.isFillChar(first)){ + first = first.nextSibling; + continue; + } + firstIndex++; + if(first.nodeType == 3){ + while( first && first.nodeType == 3){ + first = first.nextSibling; + } + }else{ + first = first.nextSibling; + } + } + } + } + + }else{ + firstIndex = isStart ? domUtils.isFillChar(node) ? 0 : me.startOffset : me.endOffset + } + if(firstIndex < 0){ + firstIndex = 0; + } + addrs.push(firstIndex); + return addrs; + } + addr.startAddress = getAddress(true); + if(!ignoreEnd){ + addr.endAddress = me.collapsed ? [].concat(addr.startAddress) : getAddress(); + } + return addr; + }, + + /** + * 保存 + * @method createAddress + * @private + * @return { Boolean } 返回开始和结束的位置 + * @example + * ```html + * + *

    + * aaaa + * + * + * bbbb + * + * + *

    + * + * + * + * ``` + */ + moveToAddress : function(addr,ignoreEnd){ + var me = this; + function getNode(address,isStart){ + var tmpNode = me.document.body, + parentNode,offset; + for(var i= 0,ci,l=address.length;i + * + * + * + * + * + * + * + * + * ``` + */ + + /** + * 遍历range内的节点。 + * 每当遍历一个节点时, 都会执行参数项 doFn 指定的函数, 该函数的接受当前遍历的节点 + * 作为其参数。 + * 可以通过参数项 filterFn 来指定一个过滤器, 只有符合该过滤器过滤规则的节点才会触 + * 发doFn函数的执行 + * @method traversal + * @param { Function } doFn 对每个遍历的节点要执行的方法, 该方法接受当前遍历的节点作为其参数 + * @param { Function } filterFn 过滤器, 该函数接受当前遍历的节点作为参数, 如果该节点满足过滤 + * 规则, 请返回true, 该节点会触发doFn, 否则, 请返回false, 则该节点不 + * 会触发doFn。 + * @return { UE.dom.Range } 当前range对象 + * @see UE.dom.Range:traversal(Function) + * @example + * ```html + * + * + * + * + * + * + * + * + * + * + * ``` + */ + traversal:function(doFn,filterFn){ + if (this.collapsed) + return this; + var bookmark = this.createBookmark(), + end = bookmark.end, + current = domUtils.getNextDomNode(bookmark.start, false, filterFn); + while (current && current !== end && (domUtils.getPosition(current, end) & domUtils.POSITION_PRECEDING)) { + var tmpNode = domUtils.getNextDomNode(current,false,filterFn); + doFn(current); + current = tmpNode; + } + return this.moveToBookmark(bookmark); + } + }; +})(); + +// core/Selection.js +/** + * 选集 + * @file + * @module UE.dom + * @class Selection + * @since 1.2.6.1 + */ + +/** + * 选区集合 + * @unfile + * @module UE.dom + * @class Selection + */ +(function () { + + function getBoundaryInformation( range, start ) { + var getIndex = domUtils.getNodeIndex; + range = range.duplicate(); + range.collapse( start ); + var parent = range.parentElement(); + //如果节点里没有子节点,直接退出 + if ( !parent.hasChildNodes() ) { + return {container:parent, offset:0}; + } + var siblings = parent.children, + child, + testRange = range.duplicate(), + startIndex = 0, endIndex = siblings.length - 1, index = -1, + distance; + while ( startIndex <= endIndex ) { + index = Math.floor( (startIndex + endIndex) / 2 ); + child = siblings[index]; + testRange.moveToElementText( child ); + var position = testRange.compareEndPoints( 'StartToStart', range ); + if ( position > 0 ) { + endIndex = index - 1; + } else if ( position < 0 ) { + startIndex = index + 1; + } else { + //trace:1043 + return {container:parent, offset:getIndex( child )}; + } + } + if ( index == -1 ) { + testRange.moveToElementText( parent ); + testRange.setEndPoint( 'StartToStart', range ); + distance = testRange.text.replace( /(\r\n|\r)/g, '\n' ).length; + siblings = parent.childNodes; + if ( !distance ) { + child = siblings[siblings.length - 1]; + return {container:child, offset:child.nodeValue.length}; + } + + var i = siblings.length; + while ( distance > 0 ){ + distance -= siblings[ --i ].nodeValue.length; + } + return {container:siblings[i], offset:-distance}; + } + testRange.collapse( position > 0 ); + testRange.setEndPoint( position > 0 ? 'StartToStart' : 'EndToStart', range ); + distance = testRange.text.replace( /(\r\n|\r)/g, '\n' ).length; + if ( !distance ) { + return dtd.$empty[child.tagName] || dtd.$nonChild[child.tagName] ? + {container:parent, offset:getIndex( child ) + (position > 0 ? 0 : 1)} : + {container:child, offset:position > 0 ? 0 : child.childNodes.length} + } + while ( distance > 0 ) { + try { + var pre = child; + child = child[position > 0 ? 'previousSibling' : 'nextSibling']; + distance -= child.nodeValue.length; + } catch ( e ) { + return {container:parent, offset:getIndex( pre )}; + } + } + return {container:child, offset:position > 0 ? -distance : child.nodeValue.length + distance} + } + + /** + * 将ieRange转换为Range对象 + * @param {Range} ieRange ieRange对象 + * @param {Range} range Range对象 + * @return {Range} range 返回转换后的Range对象 + */ + function transformIERangeToRange( ieRange, range ) { + if ( ieRange.item ) { + range.selectNode( ieRange.item( 0 ) ); + } else { + var bi = getBoundaryInformation( ieRange, true ); + range.setStart( bi.container, bi.offset ); + if ( ieRange.compareEndPoints( 'StartToEnd', ieRange ) != 0 ) { + bi = getBoundaryInformation( ieRange, false ); + range.setEnd( bi.container, bi.offset ); + } + } + return range; + } + + /** + * 获得ieRange + * @param {Selection} sel Selection对象 + * @return {ieRange} 得到ieRange + */ + function _getIERange( sel ) { + var ieRange; + //ie下有可能报错 + try { + ieRange = sel.getNative().createRange(); + } catch ( e ) { + return null; + } + var el = ieRange.item ? ieRange.item( 0 ) : ieRange.parentElement(); + if ( ( el.ownerDocument || el ) === sel.document ) { + return ieRange; + } + return null; + } + + var Selection = dom.Selection = function ( doc ) { + var me = this, iframe; + me.document = doc; + if ( browser.ie9below ) { + iframe = domUtils.getWindow( doc ).frameElement; + domUtils.on( iframe, 'beforedeactivate', function () { + me._bakIERange = me.getIERange(); + } ); + domUtils.on( iframe, 'activate', function () { + try { + if ( !_getIERange( me ) && me._bakIERange ) { + me._bakIERange.select(); + } + } catch ( ex ) { + } + me._bakIERange = null; + } ); + } + iframe = doc = null; + }; + + Selection.prototype = { + + rangeInBody : function(rng,txtRange){ + var node = browser.ie9below || txtRange ? rng.item ? rng.item() : rng.parentElement() : rng.startContainer; + + return node === this.document.body || domUtils.inDoc(node,this.document); + }, + + /** + * 获取原生seleciton对象 + * @method getNative + * @return { Object } 获得selection对象 + * @example + * ```javascript + * editor.selection.getNative(); + * ``` + */ + getNative:function () { + var doc = this.document; + try { + return !doc ? null : browser.ie9below ? doc.selection : domUtils.getWindow( doc ).getSelection(); + } catch ( e ) { + return null; + } + }, + + /** + * 获得ieRange + * @method getIERange + * @return { Object } 返回ie原生的Range + * @example + * ```javascript + * editor.selection.getIERange(); + * ``` + */ + getIERange:function () { + var ieRange = _getIERange( this ); + if ( !ieRange ) { + if ( this._bakIERange ) { + return this._bakIERange; + } + } + return ieRange; + }, + + /** + * 缓存当前选区的range和选区的开始节点 + * @method cache + */ + cache:function () { + this.clear(); + this._cachedRange = this.getRange(); + this._cachedStartElement = this.getStart(); + this._cachedStartElementPath = this.getStartElementPath(); + }, + + /** + * 获取选区开始位置的父节点到body + * @method getStartElementPath + * @return { Array } 返回父节点集合 + * @example + * ```javascript + * editor.selection.getStartElementPath(); + * ``` + */ + getStartElementPath:function () { + if ( this._cachedStartElementPath ) { + return this._cachedStartElementPath; + } + var start = this.getStart(); + if ( start ) { + return domUtils.findParents( start, true, null, true ) + } + return []; + }, + + /** + * 清空缓存 + * @method clear + */ + clear:function () { + this._cachedStartElementPath = this._cachedRange = this._cachedStartElement = null; + }, + + /** + * 编辑器是否得到了选区 + * @method isFocus + */ + isFocus:function () { + try { + if(browser.ie9below){ + + var nativeRange = _getIERange(this); + return !!(nativeRange && this.rangeInBody(nativeRange)); + }else{ + return !!this.getNative().rangeCount; + } + } catch ( e ) { + return false; + } + + }, + + /** + * 获取选区对应的Range + * @method getRange + * @return { Object } 得到Range对象 + * @example + * ```javascript + * editor.selection.getRange(); + * ``` + */ + getRange:function () { + var me = this; + function optimze( range ) { + var child = me.document.body.firstChild, + collapsed = range.collapsed; + while ( child && child.firstChild ) { + range.setStart( child, 0 ); + child = child.firstChild; + } + if ( !range.startContainer ) { + range.setStart( me.document.body, 0 ) + } + if ( collapsed ) { + range.collapse( true ); + } + } + + if ( me._cachedRange != null ) { + return this._cachedRange; + } + var range = new baidu.editor.dom.Range( me.document ); + + if ( browser.ie9below ) { + var nativeRange = me.getIERange(); + if ( nativeRange ) { + //备份的_bakIERange可能已经实效了,dom树发生了变化比如从源码模式切回来,所以try一下,实效就放到body开始位置 + try{ + transformIERangeToRange( nativeRange, range ); + }catch(e){ + optimze( range ); + } + + } else { + optimze( range ); + } + } else { + var sel = me.getNative(); + if ( sel && sel.rangeCount ) { + var firstRange = sel.getRangeAt( 0 ); + var lastRange = sel.getRangeAt( sel.rangeCount - 1 ); + range.setStart( firstRange.startContainer, firstRange.startOffset ).setEnd( lastRange.endContainer, lastRange.endOffset ); + if ( range.collapsed && domUtils.isBody( range.startContainer ) && !range.startOffset ) { + optimze( range ); + } + } else { + //trace:1734 有可能已经不在dom树上了,标识的节点 + if ( this._bakRange && domUtils.inDoc( this._bakRange.startContainer, this.document ) ){ + return this._bakRange; + } + optimze( range ); + } + } + return this._bakRange = range; + }, + + /** + * 获取开始元素,用于状态反射 + * @method getStart + * @return { Element } 获得开始元素 + * @example + * ```javascript + * editor.selection.getStart(); + * ``` + */ + getStart:function () { + if ( this._cachedStartElement ) { + return this._cachedStartElement; + } + var range = browser.ie9below ? this.getIERange() : this.getRange(), + tmpRange, + start, tmp, parent; + if ( browser.ie9below ) { + if ( !range ) { + //todo 给第一个值可能会有问题 + return this.document.body.firstChild; + } + //control元素 + if ( range.item ){ + return range.item( 0 ); + } + tmpRange = range.duplicate(); + //修正ie下x[xx] 闭合后 x|xx + tmpRange.text.length > 0 && tmpRange.moveStart( 'character', 1 ); + tmpRange.collapse( 1 ); + start = tmpRange.parentElement(); + parent = tmp = range.parentElement(); + while ( tmp = tmp.parentNode ) { + if ( tmp == start ) { + start = parent; + break; + } + } + } else { + range.shrinkBoundary(); + start = range.startContainer; + if ( start.nodeType == 1 && start.hasChildNodes() ){ + start = start.childNodes[Math.min( start.childNodes.length - 1, range.startOffset )]; + } + if ( start.nodeType == 3 ){ + return start.parentNode; + } + } + return start; + }, + + /** + * 得到选区中的文本 + * @method getText + * @return { String } 选区中包含的文本 + * @example + * ```javascript + * editor.selection.getText(); + * ``` + */ + getText:function () { + var nativeSel, nativeRange; + if ( this.isFocus() && (nativeSel = this.getNative()) ) { + nativeRange = browser.ie9below ? nativeSel.createRange() : nativeSel.getRangeAt( 0 ); + return browser.ie9below ? nativeRange.text : nativeRange.toString(); + } + return ''; + }, + + /** + * 清除选区 + * @method clearRange + * @example + * ```javascript + * editor.selection.clearRange(); + * ``` + */ + clearRange : function(){ + this.getNative()[browser.ie9below ? 'empty' : 'removeAllRanges'](); + } + }; +})(); + +// core/Editor.js +/** + * 编辑器主类,包含编辑器提供的大部分公用接口 + * @file + * @module UE + * @class Editor + * @since 1.2.6.1 + */ + +/** + * UEditor公用空间,UEditor所有的功能都挂载在该空间下 + * @unfile + * @module UE + */ + +/** + * UEditor的核心类,为用户提供与编辑器交互的接口。 + * @unfile + * @module UE + * @class Editor + */ + +(function () { + var uid = 0, _selectionChangeTimer; + + /** + * 获取编辑器的html内容,赋值到编辑器所在表单的textarea文本域里面 + * @private + * @method setValue + * @param { UE.Editor } editor 编辑器事例 + */ + function setValue(form, editor) { + var textarea; + if (editor.textarea) { + if (utils.isString(editor.textarea)) { + for (var i = 0, ti, tis = domUtils.getElementsByTagName(form, 'textarea'); ti = tis[i++];) { + if (ti.id == 'ueditor_textarea_' + editor.options.textarea) { + textarea = ti; + break; + } + } + } else { + textarea = editor.textarea; + } + } + if (!textarea) { + form.appendChild(textarea = domUtils.createElement(document, 'textarea', { + 'name': editor.options.textarea, + 'id': 'ueditor_textarea_' + editor.options.textarea, + 'style': "display:none" + })); + //不要产生多个textarea + editor.textarea = textarea; + } + !textarea.getAttribute('name') && textarea.setAttribute('name', editor.options.textarea ); + textarea.value = editor.hasContents() ? + (editor.options.allHtmlEnabled ? editor.getAllHtml() : editor.getContent(null, null, true)) : + '' + } + function loadPlugins(me){ + //初始化插件 + for (var pi in UE.plugins) { + UE.plugins[pi].call(me); + } + + } + function checkCurLang(I18N){ + for(var lang in I18N){ + return lang + } + } + + function langReadied(me){ + me.langIsReady = true; + + me.fireEvent("langReady"); + } + + /** + * 编辑器准备就绪后会触发该事件 + * @module UE + * @class Editor + * @event ready + * @remind render方法执行完成之后,会触发该事件 + * @remind + * @example + * ```javascript + * editor.addListener( 'ready', function( editor ) { + * editor.execCommand( 'focus' ); //编辑器家在完成后,让编辑器拿到焦点 + * } ); + * ``` + */ + /** + * 执行destroy方法,会触发该事件 + * @module UE + * @class Editor + * @event destroy + * @see UE.Editor:destroy() + */ + /** + * 执行reset方法,会触发该事件 + * @module UE + * @class Editor + * @event reset + * @see UE.Editor:reset() + */ + /** + * 执行focus方法,会触发该事件 + * @module UE + * @class Editor + * @event focus + * @see UE.Editor:focus(Boolean) + */ + /** + * 语言加载完成会触发该事件 + * @module UE + * @class Editor + * @event langReady + */ + /** + * 运行命令之后会触发该命令 + * @module UE + * @class Editor + * @event beforeExecCommand + */ + /** + * 运行命令之后会触发该命令 + * @module UE + * @class Editor + * @event afterExecCommand + */ + /** + * 运行命令之前会触发该命令 + * @module UE + * @class Editor + * @event firstBeforeExecCommand + */ + /** + * 在getContent方法执行之前会触发该事件 + * @module UE + * @class Editor + * @event beforeGetContent + * @see UE.Editor:getContent() + */ + /** + * 在getContent方法执行之后会触发该事件 + * @module UE + * @class Editor + * @event afterGetContent + * @see UE.Editor:getContent() + */ + /** + * 在getAllHtml方法执行时会触发该事件 + * @module UE + * @class Editor + * @event getAllHtml + * @see UE.Editor:getAllHtml() + */ + /** + * 在setContent方法执行之前会触发该事件 + * @module UE + * @class Editor + * @event beforeSetContent + * @see UE.Editor:setContent(String) + */ + /** + * 在setContent方法执行之后会触发该事件 + * @module UE + * @class Editor + * @event afterSetContent + * @see UE.Editor:setContent(String) + */ + /** + * 每当编辑器内部选区发生改变时,将触发该事件 + * @event selectionchange + * @warning 该事件的触发非常频繁,不建议在该事件的处理过程中做重量级的处理 + * @example + * ```javascript + * editor.addListener( 'selectionchange', function( editor ) { + * console.log('选区发生改变'); + * } + */ + /** + * 在所有selectionchange的监听函数执行之前,会触发该事件 + * @module UE + * @class Editor + * @event beforeSelectionChange + * @see UE.Editor:selectionchange + */ + /** + * 在所有selectionchange的监听函数执行完之后,会触发该事件 + * @module UE + * @class Editor + * @event afterSelectionChange + * @see UE.Editor:selectionchange + */ + /** + * 编辑器内容发生改变时会触发该事件 + * @module UE + * @class Editor + * @event contentChange + */ + + + /** + * 以默认参数构建一个编辑器实例 + * @constructor + * @remind 通过 改构造方法实例化的编辑器,不带ui层.需要render到一个容器,编辑器实例才能正常渲染到页面 + * @example + * ```javascript + * var editor = new UE.Editor(); + * editor.execCommand('blod'); + * ``` + * @see UE.Config + */ + + /** + * 以给定的参数集合创建一个编辑器实例,对于未指定的参数,将应用默认参数。 + * @constructor + * @remind 通过 改构造方法实例化的编辑器,不带ui层.需要render到一个容器,编辑器实例才能正常渲染到页面 + * @param { Object } setting 创建编辑器的参数 + * @example + * ```javascript + * var editor = new UE.Editor(); + * editor.execCommand('blod'); + * ``` + * @see UE.Config + */ + var Editor = UE.Editor = function (options) { + var me = this; + me.uid = uid++; + EventBase.call(me); + me.commands = {}; + me.options = utils.extend(utils.clone(options || {}), UEDITOR_CONFIG, true); + me.shortcutkeys = {}; + me.inputRules = []; + me.outputRules = []; + //设置默认的常用属性 + me.setOpt(Editor.defaultOptions(me)); + + /* 尝试异步加载后台配置 */ + me.loadServerConfig(); + + if(!utils.isEmptyObject(UE.I18N)){ + //修改默认的语言类型 + me.options.lang = checkCurLang(UE.I18N); + UE.plugin.load(me); + langReadied(me); + + }else{ + utils.loadFile(document, { + src: me.options.langPath + me.options.lang + "/" + me.options.lang + ".js", + tag: "script", + type: "text/javascript", + defer: "defer" + }, function () { + UE.plugin.load(me); + langReadied(me); + }); + } + + UE.instants['ueditorInstant' + me.uid] = me; + }; + Editor.prototype = { + registerCommand : function(name,obj){ + this.commands[name] = obj; + }, + /** + * 编辑器对外提供的监听ready事件的接口, 通过调用该方法,达到的效果与监听ready事件是一致的 + * @method ready + * @param { Function } fn 编辑器ready之后所执行的回调, 如果在注册事件之前编辑器已经ready,将会 + * 立即触发该回调。 + * @remind 需要等待编辑器加载完成后才能执行的代码,可以使用该方法传入 + * @example + * ```javascript + * editor.ready( function( editor ) { + * editor.setContent('初始化完毕'); + * } ); + * ``` + * @see UE.Editor.event:ready + */ + ready: function (fn) { + var me = this; + if (fn) { + me.isReady ? fn.apply(me) : me.addListener('ready', fn); + } + }, + + /** + * 该方法是提供给插件里面使用,设置配置项默认值 + * @method setOpt + * @warning 三处设置配置项的优先级: 实例化时传入参数 > setOpt()设置 > config文件里设置 + * @warning 该方法仅供编辑器插件内部和编辑器初始化时调用,其他地方不能调用。 + * @param { String } key 编辑器的可接受的选项名称 + * @param { * } val 该选项可接受的值 + * @example + * ```javascript + * editor.setOpt( 'initContent', '欢迎使用编辑器' ); + * ``` + */ + + /** + * 该方法是提供给插件里面使用,以{key:value}集合的方式设置插件内用到的配置项默认值 + * @method setOpt + * @warning 三处设置配置项的优先级: 实例化时传入参数 > setOpt()设置 > config文件里设置 + * @warning 该方法仅供编辑器插件内部和编辑器初始化时调用,其他地方不能调用。 + * @param { Object } options 将要设置的选项的键值对对象 + * @example + * ```javascript + * editor.setOpt( { + * 'initContent': '欢迎使用编辑器' + * } ); + * ``` + */ + setOpt: function (key, val) { + var obj = {}; + if (utils.isString(key)) { + obj[key] = val + } else { + obj = key; + } + utils.extend(this.options, obj, true); + }, + getOpt:function(key){ + return this.options[key] + }, + /** + * 销毁编辑器实例,使用textarea代替 + * @method destroy + * @example + * ```javascript + * editor.destroy(); + * ``` + */ + destroy: function () { + + var me = this; + me.fireEvent('destroy'); + var container = me.container.parentNode; + var textarea = me.textarea; + if (!textarea) { + textarea = document.createElement('textarea'); + container.parentNode.insertBefore(textarea, container); + } else { + textarea.style.display = '' + } + + textarea.style.width = me.iframe.offsetWidth + 'px'; + textarea.style.height = me.iframe.offsetHeight + 'px'; + textarea.value = me.getContent(); + textarea.id = me.key; + container.innerHTML = ''; + domUtils.remove(container); + var key = me.key; + //trace:2004 + for (var p in me) { + if (me.hasOwnProperty(p)) { + delete this[p]; + } + } + UE.delEditor(key); + }, + + /** + * 渲染编辑器的DOM到指定容器 + * @method render + * @param { String } containerId 指定一个容器ID + * @remind 执行该方法,会触发ready事件 + * @warning 必须且只能调用一次 + */ + + /** + * 渲染编辑器的DOM到指定容器 + * @method render + * @param { Element } containerDom 直接指定容器对象 + * @remind 执行该方法,会触发ready事件 + * @warning 必须且只能调用一次 + */ + render: function (container) { + var me = this, + options = me.options, + getStyleValue=function(attr){ + return parseInt(domUtils.getComputedStyle(container,attr)); + }; + if (utils.isString(container)) { + container = document.getElementById(container); + } + if (container) { + if(options.initialFrameWidth){ + options.minFrameWidth = options.initialFrameWidth + }else{ + options.minFrameWidth = options.initialFrameWidth = container.offsetWidth; + } + if(options.initialFrameHeight){ + options.minFrameHeight = options.initialFrameHeight + }else{ + options.initialFrameHeight = options.minFrameHeight = container.offsetHeight; + } + + container.style.width = /%$/.test(options.initialFrameWidth) ? '100%' : options.initialFrameWidth- + getStyleValue("padding-left")- getStyleValue("padding-right") +'px'; + container.style.height = /%$/.test(options.initialFrameHeight) ? '100%' : options.initialFrameHeight - + getStyleValue("padding-top")- getStyleValue("padding-bottom") +'px'; + + container.style.zIndex = options.zIndex; + + var html = ( ie && browser.version < 9 ? '' : '') + + '' + + '' + + ( options.iframeCssUrl ? '' : '' ) + + (options.initialStyle ? '' : '') + + '' + + ''; + container.appendChild(domUtils.createElement(document, 'iframe', { + id: 'ueditor_' + me.uid, + width: "100%", + height: "100%", + frameborder: "0", + //先注释掉了,加的原因忘记了,但开启会直接导致全屏模式下内容多时不会出现滚动条 +// scrolling :'no', + src: 'javascript:void(function(){document.open();' + (options.customDomain && document.domain != location.hostname ? 'document.domain="' + document.domain + '";' : '') + + 'document.write("' + html + '");document.close();}())' + })); + container.style.overflow = 'hidden'; + //解决如果是给定的百分比,会导致高度算不对的问题 + setTimeout(function(){ + if( /%$/.test(options.initialFrameWidth)){ + options.minFrameWidth = options.initialFrameWidth = container.offsetWidth; + //如果这里给定宽度,会导致ie在拖动窗口大小时,编辑区域不随着变化 +// container.style.width = options.initialFrameWidth + 'px'; + } + if(/%$/.test(options.initialFrameHeight)){ + options.minFrameHeight = options.initialFrameHeight = container.offsetHeight; + container.style.height = options.initialFrameHeight + 'px'; + } + }) + } + }, + + /** + * 编辑器初始化 + * @method _setup + * @private + * @param { Element } doc 编辑器Iframe中的文档对象 + */ + _setup: function (doc) { + + var me = this, + options = me.options; + if (ie) { + doc.body.disabled = true; + doc.body.contentEditable = true; + doc.body.disabled = false; + } else { + doc.body.contentEditable = true; + } + doc.body.spellcheck = false; + me.document = doc; + me.window = doc.defaultView || doc.parentWindow; + me.iframe = me.window.frameElement; + me.body = doc.body; + me.selection = new dom.Selection(doc); + //gecko初始化就能得到range,无法判断isFocus了 + var geckoSel; + if (browser.gecko && (geckoSel = this.selection.getNative())) { + geckoSel.removeAllRanges(); + } + this._initEvents(); + //为form提交提供一个隐藏的textarea + for (var form = this.iframe.parentNode; !domUtils.isBody(form); form = form.parentNode) { + if (form.tagName == 'FORM') { + me.form = form; + if(me.options.autoSyncData){ + domUtils.on(me.window,'blur',function(){ + setValue(form,me); + }); + }else{ + domUtils.on(form, 'submit', function () { + setValue(this, me); + }); + } + break; + } + } + if (options.initialContent) { + if (options.autoClearinitialContent) { + var oldExecCommand = me.execCommand; + me.execCommand = function () { + me.fireEvent('firstBeforeExecCommand'); + return oldExecCommand.apply(me, arguments); + }; + this._setDefaultContent(options.initialContent); + } else + this.setContent(options.initialContent, false, true); + } + + //编辑器不能为空内容 + + if (domUtils.isEmptyNode(me.body)) { + me.body.innerHTML = '

    ' + (browser.ie ? '' : '
    ') + '

    '; + } + //如果要求focus, 就把光标定位到内容开始 + if (options.focus) { + setTimeout(function () { + me.focus(me.options.focusInEnd); + //如果自动清除开着,就不需要做selectionchange; + !me.options.autoClearinitialContent && me._selectionChange(); + }, 0); + } + if (!me.container) { + me.container = this.iframe.parentNode; + } + if (options.fullscreen && me.ui) { + me.ui.setFullScreen(true); + } + + try { + me.document.execCommand('2D-position', false, false); + } catch (e) { + } + try { + me.document.execCommand('enableInlineTableEditing', false, false); + } catch (e) { + } + try { + me.document.execCommand('enableObjectResizing', false, false); + } catch (e) { + } + + //挂接快捷键 + me._bindshortcutKeys(); + me.isReady = 1; + me.fireEvent('ready'); + options.onready && options.onready.call(me); + if (!browser.ie9below) { + domUtils.on(me.window, ['blur', 'focus'], function (e) { + //chrome下会出现alt+tab切换时,导致选区位置不对 + if (e.type == 'blur') { + me._bakRange = me.selection.getRange(); + try { + me._bakNativeRange = me.selection.getNative().getRangeAt(0); + me.selection.getNative().removeAllRanges(); + } catch (e) { + me._bakNativeRange = null; + } + + } else { + try { + me._bakRange && me._bakRange.select(); + } catch (e) { + } + } + }); + } + //trace:1518 ff3.6body不够寛,会导致点击空白处无法获得焦点 + if (browser.gecko && browser.version <= 10902) { + //修复ff3.6初始化进来,不能点击获得焦点 + me.body.contentEditable = false; + setTimeout(function () { + me.body.contentEditable = true; + }, 100); + setInterval(function () { + me.body.style.height = me.iframe.offsetHeight - 20 + 'px' + }, 100) + } + + !options.isShow && me.setHide(); + options.readonly && me.setDisabled(); + }, + + /** + * 同步数据到编辑器所在的form + * 从编辑器的容器节点向上查找form元素,若找到,就同步编辑内容到找到的form里,为提交数据做准备,主要用于是手动提交的情况 + * 后台取得数据的键值,使用你容器上的name属性,如果没有就使用参数里的textarea项 + * @method sync + * @example + * ```javascript + * editor.sync(); + * form.sumbit(); //form变量已经指向了form元素 + * ``` + */ + + /** + * 根据传入的formId,在页面上查找要同步数据的表单,若找到,就同步编辑内容到找到的form里,为提交数据做准备 + * 后台取得数据的键值,该键值默认使用给定的编辑器容器的name属性,如果没有name属性则使用参数项里给定的“textarea”项 + * @method sync + * @param { String } formID 指定一个要同步数据的form的id,编辑器的数据会同步到你指定form下 + */ + sync: function (formId) { + var me = this, + form = formId ? document.getElementById(formId) : + domUtils.findParent(me.iframe.parentNode, function (node) { + return node.tagName == 'FORM' + }, true); + form && setValue(form, me); + }, + + /** + * 设置编辑器高度 + * @method setHeight + * @remind 当配置项autoHeightEnabled为真时,该方法无效 + * @param { Number } number 设置的高度值,纯数值,不带单位 + * @example + * ```javascript + * editor.setHeight(number); + * ``` + */ + setHeight: function (height,notSetHeight) { + if (height !== parseInt(this.iframe.parentNode.style.height)) { + this.iframe.parentNode.style.height = height + 'px'; + } + !notSetHeight && (this.options.minFrameHeight = this.options.initialFrameHeight = height); + this.body.style.height = height + 'px'; + !notSetHeight && this.trigger('setHeight') + }, + + /** + * 为编辑器的编辑命令提供快捷键 + * 这个接口是为插件扩展提供的接口,主要是为新添加的插件,如果需要添加快捷键,所提供的接口 + * @method addshortcutkey + * @param { Object } keyset 命令名和快捷键键值对对象,多个按钮的快捷键用“+”分隔 + * @example + * ```javascript + * editor.addshortcutkey({ + * "Bold" : "ctrl+66",//^B + * "Italic" : "ctrl+73", //^I + * }); + * ``` + */ + /** + * 这个接口是为插件扩展提供的接口,主要是为新添加的插件,如果需要添加快捷键,所提供的接口 + * @method addshortcutkey + * @param { String } cmd 触发快捷键时,响应的命令 + * @param { String } keys 快捷键的字符串,多个按钮用“+”分隔 + * @example + * ```javascript + * editor.addshortcutkey("Underline", "ctrl+85"); //^U + * ``` + */ + addshortcutkey: function (cmd, keys) { + var obj = {}; + if (keys) { + obj[cmd] = keys + } else { + obj = cmd; + } + utils.extend(this.shortcutkeys, obj) + }, + + /** + * 对编辑器设置keydown事件监听,绑定快捷键和命令,当快捷键组合触发成功,会响应对应的命令 + * @method _bindshortcutKeys + * @private + */ + _bindshortcutKeys: function () { + var me = this, shortcutkeys = this.shortcutkeys; + me.addListener('keydown', function (type, e) { + var keyCode = e.keyCode || e.which; + for (var i in shortcutkeys) { + var tmp = shortcutkeys[i].split(','); + for (var t = 0, ti; ti = tmp[t++];) { + ti = ti.split(':'); + var key = ti[0], param = ti[1]; + if (/^(ctrl)(\+shift)?\+(\d+)$/.test(key.toLowerCase()) || /^(\d+)$/.test(key)) { + if (( (RegExp.$1 == 'ctrl' ? (e.ctrlKey || e.metaKey) : 0) + && (RegExp.$2 != "" ? e[RegExp.$2.slice(1) + "Key"] : 1) + && keyCode == RegExp.$3 + ) || + keyCode == RegExp.$1 + ) { + if (me.queryCommandState(i,param) != -1) + me.execCommand(i, param); + domUtils.preventDefault(e); + } + } + } + + } + }); + }, + + /** + * 获取编辑器的内容 + * @method getContent + * @warning 该方法获取到的是经过编辑器内置的过滤规则进行过滤后得到的内容 + * @return { String } 编辑器的内容字符串, 如果编辑器的内容为空,或者是空的标签内容(如:”<p><br/></p>“), 则返回空字符串 + * @example + * ```javascript + * //编辑器html内容:

    123456

    + * var content = editor.getContent(); //返回值:

    123456

    + * ``` + */ + + /** + * 获取编辑器的内容。 可以通过参数定义编辑器内置的判空规则 + * @method getContent + * @param { Function } fn 自定的判空规则, 要求该方法返回一个boolean类型的值, + * 代表当前编辑器的内容是否空, + * 如果返回true, 则该方法将直接返回空字符串;如果返回false,则编辑器将返回 + * 经过内置过滤规则处理后的内容。 + * @remind 该方法在处理包含有初始化内容的时候能起到很好的作用。 + * @warning 该方法获取到的是经过编辑器内置的过滤规则进行过滤后得到的内容 + * @return { String } 编辑器的内容字符串 + * @example + * ```javascript + * // editor 是一个编辑器的实例 + * var content = editor.getContent( function ( editor ) { + * return editor.body.innerHTML === '欢迎使用UEditor'; //返回空字符串 + * } ); + * ``` + */ + getContent: function (cmd, fn,notSetCursor,ignoreBlank,formatter) { + var me = this; + if (cmd && utils.isFunction(cmd)) { + fn = cmd; + cmd = ''; + } + if (fn ? !fn() : !this.hasContents()) { + return ''; + } + me.fireEvent('beforegetcontent'); + var root = UE.htmlparser(me.body.innerHTML,ignoreBlank); + me.filterOutputRule(root); + me.fireEvent('aftergetcontent', cmd,root); + return root.toHtml(formatter); + }, + + /** + * 取得完整的html代码,可以直接显示成完整的html文档 + * @method getAllHtml + * @return { String } 编辑器的内容html文档字符串 + * @eaxmple + * ```javascript + * editor.getAllHtml(); //返回格式大致是: ...... + * ``` + */ + getAllHtml: function () { + var me = this, + headHtml = [], + html = ''; + me.fireEvent('getAllHtml', headHtml); + if (browser.ie && browser.version > 8) { + var headHtmlForIE9 = ''; + utils.each(me.document.styleSheets, function (si) { + headHtmlForIE9 += ( si.href ? '' : ''); + }); + utils.each(me.document.getElementsByTagName('script'), function (si) { + headHtmlForIE9 += si.outerHTML; + }); + + } + return '' + (me.options.charset ? '' : '') + + (headHtmlForIE9 || me.document.getElementsByTagName('head')[0].innerHTML) + headHtml.join('\n') + '' + + '' + me.getContent(null, null, true) + ''; + }, + + /** + * 得到编辑器的纯文本内容,但会保留段落格式 + * @method getPlainTxt + * @return { String } 编辑器带段落格式的纯文本内容字符串 + * @example + * ```javascript + * //编辑器html内容:

    1

    2

    + * console.log(editor.getPlainTxt()); //输出:"1\n2\n + * ``` + */ + getPlainTxt: function () { + var reg = new RegExp(domUtils.fillChar, 'g'), + html = this.body.innerHTML.replace(/[\n\r]/g, '');//ie要先去了\n在处理 + html = html.replace(/<(p|div)[^>]*>(| )<\/\1>/gi, '\n') + .replace(//gi, '\n') + .replace(/<[^>/]+>/g, '') + .replace(/(\n)?<\/([^>]+)>/g, function (a, b, c) { + return dtd.$block[c] ? '\n' : b ? b : ''; + }); + //取出来的空格会有c2a0会变成乱码,处理这种情况\u00a0 + return html.replace(reg, '').replace(/\u00a0/g, ' ').replace(/ /g, ' '); + }, + + /** + * 获取编辑器中的纯文本内容,没有段落格式 + * @method getContentTxt + * @return { String } 编辑器不带段落格式的纯文本内容字符串 + * @example + * ```javascript + * //编辑器html内容:

    1

    2

    + * console.log(editor.getPlainTxt()); //输出:"12 + * ``` + */ + getContentTxt: function () { + var reg = new RegExp(domUtils.fillChar, 'g'); + //取出来的空格会有c2a0会变成乱码,处理这种情况\u00a0 + return this.body[browser.ie ? 'innerText' : 'textContent'].replace(reg, '').replace(/\u00a0/g, ' '); + }, + + /** + * 设置编辑器的内容,可修改编辑器当前的html内容 + * @method setContent + * @warning 通过该方法插入的内容,是经过编辑器内置的过滤规则进行过滤后得到的内容 + * @warning 该方法会触发selectionchange事件 + * @param { String } html 要插入的html内容 + * @example + * ```javascript + * editor.getContent('

    test

    '); + * ``` + */ + + /** + * 设置编辑器的内容,可修改编辑器当前的html内容 + * @method setContent + * @warning 通过该方法插入的内容,是经过编辑器内置的过滤规则进行过滤后得到的内容 + * @warning 该方法会触发selectionchange事件 + * @param { String } html 要插入的html内容 + * @param { Boolean } isAppendTo 若传入true,不清空原来的内容,在最后插入内容,否则,清空内容再插入 + * @example + * ```javascript + * //假设设置前的编辑器内容是

    old text

    + * editor.setContent('

    new text

    ', true); //插入的结果是

    old text

    new text

    + * ``` + */ + setContent: function (html, isAppendTo, notFireSelectionchange) { + var me = this; + + me.fireEvent('beforesetcontent', html); + var root = UE.htmlparser(html); + me.filterInputRule(root); + html = root.toHtml(); + + me.body.innerHTML = (isAppendTo ? me.body.innerHTML : '') + html; + + + function isCdataDiv(node){ + return node.tagName == 'DIV' && node.getAttribute('cdata_tag'); + } + //给文本或者inline节点套p标签 + if (me.options.enterTag == 'p') { + + var child = this.body.firstChild, tmpNode; + if (!child || child.nodeType == 1 && + (dtd.$cdata[child.tagName] || isCdataDiv(child) || + domUtils.isCustomeNode(child) + ) + && child === this.body.lastChild) { + this.body.innerHTML = '

    ' + (browser.ie ? ' ' : '
    ') + '

    ' + this.body.innerHTML; + + } else { + var p = me.document.createElement('p'); + while (child) { + while (child && (child.nodeType == 3 || child.nodeType == 1 && dtd.p[child.tagName] && !dtd.$cdata[child.tagName])) { + tmpNode = child.nextSibling; + p.appendChild(child); + child = tmpNode; + } + if (p.firstChild) { + if (!child) { + me.body.appendChild(p); + break; + } else { + child.parentNode.insertBefore(p, child); + p = me.document.createElement('p'); + } + } + child = child.nextSibling; + } + } + } + me.fireEvent('aftersetcontent'); + me.fireEvent('contentchange'); + + !notFireSelectionchange && me._selectionChange(); + //清除保存的选区 + me._bakRange = me._bakIERange = me._bakNativeRange = null; + //trace:1742 setContent后gecko能得到焦点问题 + var geckoSel; + if (browser.gecko && (geckoSel = this.selection.getNative())) { + geckoSel.removeAllRanges(); + } + if(me.options.autoSyncData){ + me.form && setValue(me.form,me); + } + }, + + /** + * 让编辑器获得焦点,默认focus到编辑器头部 + * @method focus + * @example + * ```javascript + * editor.focus() + * ``` + */ + + /** + * 让编辑器获得焦点,toEnd确定focus位置 + * @method focus + * @param { Boolean } toEnd 默认focus到编辑器头部,toEnd为true时focus到内容尾部 + * @example + * ```javascript + * editor.focus(true) + * ``` + */ + focus: function (toEnd) { + try { + var me = this, + rng = me.selection.getRange(); + if (toEnd) { + var node = me.body.lastChild; + if(node && node.nodeType == 1 && !dtd.$empty[node.tagName]){ + if(domUtils.isEmptyBlock(node)){ + rng.setStartAtFirst(node) + }else{ + rng.setStartAtLast(node) + } + rng.collapse(true); + } + rng.setCursor(true); + } else { + if(!rng.collapsed && domUtils.isBody(rng.startContainer) && rng.startOffset == 0){ + + var node = me.body.firstChild; + if(node && node.nodeType == 1 && !dtd.$empty[node.tagName]){ + rng.setStartAtFirst(node).collapse(true); + } + } + + rng.select(true); + + } + this.fireEvent('focus selectionchange'); + } catch (e) { + } + + }, + isFocus:function(){ + return this.selection.isFocus(); + }, + blur:function(){ + var sel = this.selection.getNative(); + if(sel.empty && browser.ie){ + var nativeRng = document.body.createTextRange(); + nativeRng.moveToElementText(document.body); + nativeRng.collapse(true); + nativeRng.select(); + sel.empty() + }else{ + sel.removeAllRanges() + } + + //this.fireEvent('blur selectionchange'); + }, + /** + * 初始化UE事件及部分事件代理 + * @method _initEvents + * @private + */ + _initEvents: function () { + var me = this, + doc = me.document, + win = me.window; + me._proxyDomEvent = utils.bind(me._proxyDomEvent, me); + domUtils.on(doc, ['click', 'contextmenu', 'mousedown', 'keydown', 'keyup', 'keypress', 'mouseup', 'mouseover', 'mouseout', 'selectstart'], me._proxyDomEvent); + domUtils.on(win, ['focus', 'blur'], me._proxyDomEvent); + domUtils.on(me.body,'drop',function(e){ + //阻止ff下默认的弹出新页面打开图片 + if(browser.gecko && e.stopPropagation) { e.stopPropagation(); } + me.fireEvent('contentchange') + }); + domUtils.on(doc, ['mouseup', 'keydown'], function (evt) { + //特殊键不触发selectionchange + if (evt.type == 'keydown' && (evt.ctrlKey || evt.metaKey || evt.shiftKey || evt.altKey)) { + return; + } + if (evt.button == 2)return; + me._selectionChange(250, evt); + }); + }, + /** + * 触发事件代理 + * @method _proxyDomEvent + * @private + * @return { * } fireEvent的返回值 + * @see UE.EventBase:fireEvent(String) + */ + _proxyDomEvent: function (evt) { + if(this.fireEvent('before' + evt.type.replace(/^on/, '').toLowerCase()) === false){ + return false; + } + if(this.fireEvent(evt.type.replace(/^on/, ''), evt) === false){ + return false; + } + return this.fireEvent('after' + evt.type.replace(/^on/, '').toLowerCase()) + }, + /** + * 变化选区 + * @method _selectionChange + * @private + */ + _selectionChange: function (delay, evt) { + var me = this; + //有光标才做selectionchange 为了解决未focus时点击source不能触发更改工具栏状态的问题(source命令notNeedUndo=1) +// if ( !me.selection.isFocus() ){ +// return; +// } + + + var hackForMouseUp = false; + var mouseX, mouseY; + if (browser.ie && browser.version < 9 && evt && evt.type == 'mouseup') { + var range = this.selection.getRange(); + if (!range.collapsed) { + hackForMouseUp = true; + mouseX = evt.clientX; + mouseY = evt.clientY; + } + } + clearTimeout(_selectionChangeTimer); + _selectionChangeTimer = setTimeout(function () { + if (!me.selection || !me.selection.getNative()) { + return; + } + //修复一个IE下的bug: 鼠标点击一段已选择的文本中间时,可能在mouseup后的一段时间内取到的range是在selection的type为None下的错误值. + //IE下如果用户是拖拽一段已选择文本,则不会触发mouseup事件,所以这里的特殊处理不会对其有影响 + var ieRange; + if (hackForMouseUp && me.selection.getNative().type == 'None') { + ieRange = me.document.body.createTextRange(); + try { + ieRange.moveToPoint(mouseX, mouseY); + } catch (ex) { + ieRange = null; + } + } + var bakGetIERange; + if (ieRange) { + bakGetIERange = me.selection.getIERange; + me.selection.getIERange = function () { + return ieRange; + }; + } + me.selection.cache(); + if (bakGetIERange) { + me.selection.getIERange = bakGetIERange; + } + if (me.selection._cachedRange && me.selection._cachedStartElement) { + me.fireEvent('beforeselectionchange'); + // 第二个参数causeByUi为true代表由用户交互造成的selectionchange. + me.fireEvent('selectionchange', !!evt); + me.fireEvent('afterselectionchange'); + me.selection.clear(); + } + }, delay || 50); + }, + + /** + * 执行编辑命令 + * @method _callCmdFn + * @private + * @param { String } fnName 函数名称 + * @param { * } args 传给命令函数的参数 + * @return { * } 返回命令函数运行的返回值 + */ + _callCmdFn: function (fnName, args) { + var cmdName = args[0].toLowerCase(), + cmd, cmdFn; + cmd = this.commands[cmdName] || UE.commands[cmdName]; + cmdFn = cmd && cmd[fnName]; + //没有querycommandstate或者没有command的都默认返回0 + if ((!cmd || !cmdFn) && fnName == 'queryCommandState') { + return 0; + } else if (cmdFn) { + return cmdFn.apply(this, args); + } + }, + + /** + * 执行编辑命令cmdName,完成富文本编辑效果 + * @method execCommand + * @param { String } cmdName 需要执行的命令 + * @remind 具体命令的使用请参考命令列表 + * @return { * } 返回命令函数运行的返回值 + * @example + * ```javascript + * editor.execCommand(cmdName); + * ``` + */ + execCommand: function (cmdName) { + cmdName = cmdName.toLowerCase(); + var me = this, + result, + cmd = me.commands[cmdName] || UE.commands[cmdName]; + if (!cmd || !cmd.execCommand) { + return null; + } + if (!cmd.notNeedUndo && !me.__hasEnterExecCommand) { + me.__hasEnterExecCommand = true; + if (me.queryCommandState.apply(me,arguments) != -1) { + me.fireEvent('saveScene'); + me.fireEvent.apply(me, ['beforeexeccommand', cmdName].concat(arguments)); + result = this._callCmdFn('execCommand', arguments); + //保存场景时,做了内容对比,再看是否进行contentchange触发,这里多触发了一次,去掉 +// (!cmd.ignoreContentChange && !me._ignoreContentChange) && me.fireEvent('contentchange'); + me.fireEvent.apply(me, ['afterexeccommand', cmdName].concat(arguments)); + me.fireEvent('saveScene'); + } + me.__hasEnterExecCommand = false; + } else { + result = this._callCmdFn('execCommand', arguments); + (!me.__hasEnterExecCommand && !cmd.ignoreContentChange && !me._ignoreContentChange) && me.fireEvent('contentchange') + } + (!me.__hasEnterExecCommand && !cmd.ignoreContentChange && !me._ignoreContentChange) && me._selectionChange(); + return result; + }, + + /** + * 根据传入的command命令,查选编辑器当前的选区,返回命令的状态 + * @method queryCommandState + * @param { String } cmdName 需要查询的命令名称 + * @remind 具体命令的使用请参考命令列表 + * @return { Number } number 返回放前命令的状态,返回值三种情况:(-1|0|1) + * @example + * ```javascript + * editor.queryCommandState(cmdName) => (-1|0|1) + * ``` + * @see COMMAND.LIST + */ + queryCommandState: function (cmdName) { + return this._callCmdFn('queryCommandState', arguments); + }, + + /** + * 根据传入的command命令,查选编辑器当前的选区,根据命令返回相关的值 + * @method queryCommandValue + * @param { String } cmdName 需要查询的命令名称 + * @remind 具体命令的使用请参考命令列表 + * @remind 只有部分插件有此方法 + * @return { * } 返回每个命令特定的当前状态值 + * @grammar editor.queryCommandValue(cmdName) => {*} + * @see COMMAND.LIST + */ + queryCommandValue: function (cmdName) { + return this._callCmdFn('queryCommandValue', arguments); + }, + + /** + * 检查编辑区域中是否有内容 + * @method hasContents + * @remind 默认有文本内容,或者有以下节点都不认为是空 + * table,ul,ol,dl,iframe,area,base,col,hr,img,embed,input,link,meta,param + * @return { Boolean } 检查有内容返回true,否则返回false + * @example + * ```javascript + * editor.hasContents() + * ``` + */ + + /** + * 检查编辑区域中是否有内容,若包含参数tags中的节点类型,直接返回true + * @method hasContents + * @param { Array } tags 传入数组判断时用到的节点类型 + * @return { Boolean } 若文档中包含tags数组里对应的tag,返回true,否则返回false + * @example + * ```javascript + * editor.hasContents(['span']); + * ``` + */ + hasContents: function (tags) { + if (tags) { + for (var i = 0, ci; ci = tags[i++];) { + if (this.document.getElementsByTagName(ci).length > 0) { + return true; + } + } + } + if (!domUtils.isEmptyBlock(this.body)) { + return true + } + //随时添加,定义的特殊标签如果存在,不能认为是空 + tags = ['div']; + for (i = 0; ci = tags[i++];) { + var nodes = domUtils.getElementsByTagName(this.document, ci); + for (var n = 0, cn; cn = nodes[n++];) { + if (domUtils.isCustomeNode(cn)) { + return true; + } + } + } + return false; + }, + + /** + * 重置编辑器,可用来做多个tab使用同一个编辑器实例 + * @method reset + * @remind 此方法会清空编辑器内容,清空回退列表,会触发reset事件 + * @example + * ```javascript + * editor.reset() + * ``` + */ + reset: function () { + this.fireEvent('reset'); + }, + + /** + * 设置当前编辑区域可以编辑 + * @method setEnabled + * @example + * ```javascript + * editor.setEnabled() + * ``` + */ + setEnabled: function () { + var me = this, range; + if (me.body.contentEditable == 'false') { + me.body.contentEditable = true; + range = me.selection.getRange(); + //有可能内容丢失了 + try { + range.moveToBookmark(me.lastBk); + delete me.lastBk + } catch (e) { + range.setStartAtFirst(me.body).collapse(true) + } + range.select(true); + if (me.bkqueryCommandState) { + me.queryCommandState = me.bkqueryCommandState; + delete me.bkqueryCommandState; + } + if (me.bkqueryCommandValue) { + me.queryCommandValue = me.bkqueryCommandValue; + delete me.bkqueryCommandValue; + } + me.fireEvent('selectionchange'); + } + }, + enable: function () { + return this.setEnabled(); + }, + + /** 设置当前编辑区域不可编辑 + * @method setDisabled + */ + + /** 设置当前编辑区域不可编辑,except中的命令除外 + * @method setDisabled + * @param { String } except 例外命令的字符串 + * @remind 即使设置了disable,此处配置的例外命令仍然可以执行 + * @example + * ```javascript + * editor.setDisabled('bold'); //禁用工具栏中除加粗之外的所有功能 + * ``` + */ + + /** 设置当前编辑区域不可编辑,except中的命令除外 + * @method setDisabled + * @param { Array } except 例外命令的字符串数组,数组中的命令仍然可以执行 + * @remind 即使设置了disable,此处配置的例外命令仍然可以执行 + * @example + * ```javascript + * editor.setDisabled(['bold','insertimage']); //禁用工具栏中除加粗和插入图片之外的所有功能 + * ``` + */ + setDisabled: function (except) { + var me = this; + except = except ? utils.isArray(except) ? except : [except] : []; + if (me.body.contentEditable == 'true') { + if (!me.lastBk) { + me.lastBk = me.selection.getRange().createBookmark(true); + } + me.body.contentEditable = false; + me.bkqueryCommandState = me.queryCommandState; + me.bkqueryCommandValue = me.queryCommandValue; + me.queryCommandState = function (type) { + if (utils.indexOf(except, type) != -1) { + return me.bkqueryCommandState.apply(me, arguments); + } + return -1; + }; + me.queryCommandValue = function (type) { + if (utils.indexOf(except, type) != -1) { + return me.bkqueryCommandValue.apply(me, arguments); + } + return null; + }; + me.fireEvent('selectionchange'); + } + }, + disable: function (except) { + return this.setDisabled(except); + }, + + /** + * 设置默认内容 + * @method _setDefaultContent + * @private + * @param { String } cont 要存入的内容 + */ + _setDefaultContent: function () { + function clear() { + var me = this; + if (me.document.getElementById('initContent')) { + me.body.innerHTML = '

    ' + (ie ? '' : '
    ') + '

    '; + me.removeListener('firstBeforeExecCommand focus', clear); + setTimeout(function () { + me.focus(); + me._selectionChange(); + }, 0) + } + } + + return function (cont) { + var me = this; + me.body.innerHTML = '

    ' + cont + '

    '; + + me.addListener('firstBeforeExecCommand focus', clear); + } + }(), + + /** + * 显示编辑器 + * @method setShow + * @example + * ```javascript + * editor.setShow() + * ``` + */ + setShow: function () { + var me = this, range = me.selection.getRange(); + if (me.container.style.display == 'none') { + //有可能内容丢失了 + try { + range.moveToBookmark(me.lastBk); + delete me.lastBk + } catch (e) { + range.setStartAtFirst(me.body).collapse(true) + } + //ie下focus实效,所以做了个延迟 + setTimeout(function () { + range.select(true); + }, 100); + me.container.style.display = ''; + } + + }, + show: function () { + return this.setShow(); + }, + /** + * 隐藏编辑器 + * @method setHide + * @example + * ```javascript + * editor.setHide() + * ``` + */ + setHide: function () { + var me = this; + if (!me.lastBk) { + me.lastBk = me.selection.getRange().createBookmark(true); + } + me.container.style.display = 'none' + }, + hide: function () { + return this.setHide(); + }, + + /** + * 根据指定的路径,获取对应的语言资源 + * @method getLang + * @param { String } path 路径根据的是lang目录下的语言文件的路径结构 + * @return { Object | String } 根据路径返回语言资源的Json格式对象或者语言字符串 + * @example + * ```javascript + * editor.getLang('contextMenu.delete'); //如果当前是中文,那返回是的是'删除' + * ``` + */ + getLang: function (path) { + var lang = UE.I18N[this.options.lang]; + if (!lang) { + throw Error("not import language file"); + } + path = (path || "").split("."); + for (var i = 0, ci; ci = path[i++];) { + lang = lang[ci]; + if (!lang)break; + } + return lang; + }, + + /** + * 计算编辑器html内容字符串的长度 + * @method getContentLength + * @return { Number } 返回计算的长度 + * @example + * ```javascript + * //编辑器html内容

    132

    + * editor.getContentLength() //返回27 + * ``` + */ + /** + * 计算编辑器当前纯文本内容的长度 + * @method getContentLength + * @param { Boolean } ingoneHtml 传入true时,只按照纯文本来计算 + * @return { Number } 返回计算的长度,内容中有hr/img/iframe标签,长度加1 + * @example + * ```javascript + * //编辑器html内容

    132

    + * editor.getContentLength() //返回3 + * ``` + */ + getContentLength: function (ingoneHtml, tagNames) { + var count = this.getContent(false,false,true).length; + if (ingoneHtml) { + tagNames = (tagNames || []).concat([ 'hr', 'img', 'iframe']); + count = this.getContentTxt().replace(/[\t\r\n]+/g, '').length; + for (var i = 0, ci; ci = tagNames[i++];) { + count += this.document.getElementsByTagName(ci).length; + } + } + return count; + }, + + /** + * 注册输入过滤规则 + * @method addInputRule + * @param { Function } rule 要添加的过滤规则 + * @example + * ```javascript + * editor.addInputRule(function(root){ + * $.each(root.getNodesByTagName('div'),function(i,node){ + * node.tagName="p"; + * }); + * }); + * ``` + */ + addInputRule: function (rule) { + this.inputRules.push(rule); + }, + + /** + * 执行注册的过滤规则 + * @method filterInputRule + * @param { UE.uNode } root 要过滤的uNode节点 + * @remind 执行editor.setContent方法和执行'inserthtml'命令后,会运行该过滤函数 + * @example + * ```javascript + * editor.filterInputRule(editor.body); + * ``` + * @see UE.Editor:addInputRule + */ + filterInputRule: function (root) { + for (var i = 0, ci; ci = this.inputRules[i++];) { + ci.call(this, root) + } + }, + + /** + * 注册输出过滤规则 + * @method addOutputRule + * @param { Function } rule 要添加的过滤规则 + * @example + * ```javascript + * editor.addOutputRule(function(root){ + * $.each(root.getNodesByTagName('p'),function(i,node){ + * node.tagName="div"; + * }); + * }); + * ``` + */ + addOutputRule: function (rule) { + this.outputRules.push(rule) + }, + + /** + * 根据输出过滤规则,过滤编辑器内容 + * @method filterOutputRule + * @remind 执行editor.getContent方法的时候,会先运行该过滤函数 + * @param { UE.uNode } root 要过滤的uNode节点 + * @example + * ```javascript + * editor.filterOutputRule(editor.body); + * ``` + * @see UE.Editor:addOutputRule + */ + filterOutputRule: function (root) { + for (var i = 0, ci; ci = this.outputRules[i++];) { + ci.call(this, root) + } + }, + + /** + * 根据action名称获取请求的路径 + * @method getActionUrl + * @remind 假如没有设置serverUrl,会根据imageUrl设置默认的controller路径 + * @param { String } action action名称 + * @example + * ```javascript + * editor.getActionUrl('config'); //返回 "/ueditor/php/controller.php?action=config" + * editor.getActionUrl('image'); //返回 "/ueditor/php/controller.php?action=uplaodimage" + * editor.getActionUrl('scrawl'); //返回 "/ueditor/php/controller.php?action=uplaodscrawl" + * editor.getActionUrl('imageManager'); //返回 "/ueditor/php/controller.php?action=listimage" + * ``` + */ + getActionUrl: function(action){ + var actionName = this.getOpt(action) || action, + imageUrl = this.getOpt('imageUrl'), + serverUrl = this.getOpt('serverUrl'); + + if(!serverUrl && imageUrl) { + serverUrl = imageUrl.replace(/^(.*[\/]).+([\.].+)$/, '$1controller$2'); + } + + if(serverUrl) { + serverUrl = serverUrl + (serverUrl.indexOf('?') == -1 ? '?':'&') + 'action=' + (actionName || ''); + return utils.formatUrl(serverUrl); + } else { + return ''; + } + } + }; + utils.inherits(Editor, EventBase); +})(); + + +// core/Editor.defaultoptions.js +//维护编辑器一下默认的不在插件中的配置项 +UE.Editor.defaultOptions = function(editor){ + + var _url = editor.options.UEDITOR_HOME_URL; + return { + isShow: true, + initialContent: '', + initialStyle:'', + autoClearinitialContent: false, + iframeCssUrl: _url + 'themes/iframe.css', + textarea: 'editorValue', + focus: false, + focusInEnd: true, + autoClearEmptyNode: true, + fullscreen: false, + readonly: false, + zIndex: 999, + imagePopup: true, + enterTag: 'p', + customDomain: false, + lang: 'zh-cn', + langPath: _url + 'lang/', + theme: 'default', + themePath: _url + 'themes/', + allHtmlEnabled: false, + scaleEnabled: false, + tableNativeEditInFF: false, + autoSyncData : true, + fileNameFormat: '{time}{rand:6}' + } +}; + +// core/loadconfig.js +(function(){ + + UE.Editor.prototype.loadServerConfig = function(){ + var me = this; + setTimeout(function(){ + try{ + me.options.imageUrl && me.setOpt('serverUrl', me.options.imageUrl.replace(/^(.*[\/]).+([\.].+)$/, '$1controller$2')); + + var configUrl = me.getActionUrl('config'), + isJsonp = utils.isCrossDomainUrl(configUrl); + + /* 发出ajax请求 */ + me._serverConfigLoaded = false; + + configUrl && UE.ajax.request(configUrl,{ + 'method': 'GET', + 'dataType': isJsonp ? 'jsonp':'', + 'onsuccess':function(r){ + try { + var config = isJsonp ? r:eval("("+r.responseText+")"); + utils.extend(me.options, config); + me.fireEvent('serverConfigLoaded'); + me._serverConfigLoaded = true; + } catch (e) { + showErrorMsg(me.getLang('loadconfigFormatError')); + } + }, + 'onerror':function(){ + showErrorMsg(me.getLang('loadconfigHttpError')); + } + }); + } catch(e){ + showErrorMsg(me.getLang('loadconfigError')); + } + }); + + function showErrorMsg(msg) { + console && console.error(msg); + //me.fireEvent('showMessage', { + // 'title': msg, + // 'type': 'error' + //}); + } + }; + + UE.Editor.prototype.isServerConfigLoaded = function(){ + var me = this; + return me._serverConfigLoaded || false; + }; + + UE.Editor.prototype.afterConfigReady = function(handler){ + if (!handler || !utils.isFunction(handler)) return; + var me = this; + var readyHandler = function(){ + handler.apply(me, arguments); + me.removeListener('serverConfigLoaded', readyHandler); + }; + + if (me.isServerConfigLoaded()) { + handler.call(me, 'serverConfigLoaded'); + } else { + me.addListener('serverConfigLoaded', readyHandler); + } + }; + +})(); + + +// core/ajax.js +/** + * @file + * @module UE.ajax + * @since 1.2.6.1 + */ + +/** + * 提供对ajax请求的支持 + * @module UE.ajax + */ +UE.ajax = function() { + + //创建一个ajaxRequest对象 + var fnStr = 'XMLHttpRequest()'; + try { + new ActiveXObject("Msxml2.XMLHTTP"); + fnStr = 'ActiveXObject(\'Msxml2.XMLHTTP\')'; + } catch (e) { + try { + new ActiveXObject("Microsoft.XMLHTTP"); + fnStr = 'ActiveXObject(\'Microsoft.XMLHTTP\')' + } catch (e) { + } + } + var creatAjaxRequest = new Function('return new ' + fnStr); + + + /** + * 将json参数转化成适合ajax提交的参数列表 + * @param json + */ + function json2str(json) { + var strArr = []; + for (var i in json) { + //忽略默认的几个参数 + if(i=="method" || i=="timeout" || i=="async" || i=="dataType" || i=="callback") continue; + //忽略控制 + if(json[i] == undefined || json[i] == null) continue; + //传递过来的对象和函数不在提交之列 + if (!((typeof json[i]).toLowerCase() == "function" || (typeof json[i]).toLowerCase() == "object")) { + strArr.push( encodeURIComponent(i) + "="+encodeURIComponent(json[i]) ); + } else if (utils.isArray(json[i])) { + //支持传数组内容 + for(var j = 0; j < json[i].length; j++) { + strArr.push( encodeURIComponent(i) + "[]="+encodeURIComponent(json[i][j]) ); + } + } + } + return strArr.join("&"); + } + + function doAjax(url, ajaxOptions) { + var xhr = creatAjaxRequest(), + //是否超时 + timeIsOut = false, + //默认参数 + defaultAjaxOptions = { + method:"POST", + timeout:5000, + async:true, + data:{},//需要传递对象的话只能覆盖 + onsuccess:function() { + }, + onerror:function() { + } + }; + + if (typeof url === "object") { + ajaxOptions = url; + url = ajaxOptions.url; + } + if (!xhr || !url) return; + var ajaxOpts = ajaxOptions ? utils.extend(defaultAjaxOptions,ajaxOptions) : defaultAjaxOptions; + + var submitStr = json2str(ajaxOpts); // { name:"Jim",city:"Beijing" } --> "name=Jim&city=Beijing" + //如果用户直接通过data参数传递json对象过来,则也要将此json对象转化为字符串 + if (!utils.isEmptyObject(ajaxOpts.data)){ + submitStr += (submitStr? "&":"") + json2str(ajaxOpts.data); + } + //超时检测 + var timerID = setTimeout(function() { + if (xhr.readyState != 4) { + timeIsOut = true; + xhr.abort(); + clearTimeout(timerID); + } + }, ajaxOpts.timeout); + + var method = ajaxOpts.method.toUpperCase(); + var str = url + (url.indexOf("?")==-1?"?":"&") + (method=="POST"?"":submitStr+ "&noCache=" + +new Date); + xhr.open(method, str, ajaxOpts.async); + xhr.onreadystatechange = function() { + if (xhr.readyState == 4) { + if (!timeIsOut && xhr.status == 200) { + ajaxOpts.onsuccess(xhr); + } else { + ajaxOpts.onerror(xhr); + } + } + }; + if (method == "POST") { + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.send(submitStr); + } else { + xhr.send(null); + } + } + + function doJsonp(url, opts) { + + var successhandler = opts.onsuccess || function(){}, + scr = document.createElement('SCRIPT'), + options = opts || {}, + charset = options['charset'], + callbackField = options['jsonp'] || 'callback', + callbackFnName, + timeOut = options['timeOut'] || 0, + timer, + reg = new RegExp('(\\?|&)' + callbackField + '=([^&]*)'), + matches; + + if (utils.isFunction(successhandler)) { + callbackFnName = 'bd__editor__' + Math.floor(Math.random() * 2147483648).toString(36); + window[callbackFnName] = getCallBack(0); + } else if(utils.isString(successhandler)){ + callbackFnName = successhandler; + } else { + if (matches = reg.exec(url)) { + callbackFnName = matches[2]; + } + } + + url = url.replace(reg, '\x241' + callbackField + '=' + callbackFnName); + + if (url.search(reg) < 0) { + url += (url.indexOf('?') < 0 ? '?' : '&') + callbackField + '=' + callbackFnName; + } + + var queryStr = json2str(opts); // { name:"Jim",city:"Beijing" } --> "name=Jim&city=Beijing" + //如果用户直接通过data参数传递json对象过来,则也要将此json对象转化为字符串 + if (!utils.isEmptyObject(opts.data)){ + queryStr += (queryStr? "&":"") + json2str(opts.data); + } + if (queryStr) { + url = url.replace(/\?/, '?' + queryStr + '&'); + } + + scr.onerror = getCallBack(1); + if( timeOut ){ + timer = setTimeout(getCallBack(1), timeOut); + } + createScriptTag(scr, url, charset); + + function createScriptTag(scr, url, charset) { + scr.setAttribute('type', 'text/javascript'); + scr.setAttribute('defer', 'defer'); + charset && scr.setAttribute('charset', charset); + scr.setAttribute('src', url); + document.getElementsByTagName('head')[0].appendChild(scr); + } + + function getCallBack(onTimeOut){ + return function(){ + try { + if(onTimeOut){ + options.onerror && options.onerror(); + }else{ + try{ + clearTimeout(timer); + successhandler.apply(window, arguments); + } catch (e){} + } + } catch (exception) { + options.onerror && options.onerror.call(window, exception); + } finally { + options.oncomplete && options.oncomplete.apply(window, arguments); + scr.parentNode && scr.parentNode.removeChild(scr); + window[callbackFnName] = null; + try { + delete window[callbackFnName]; + }catch(e){} + } + } + } + } + + return { + /** + * 根据给定的参数项,向指定的url发起一个ajax请求。 ajax请求完成后,会根据请求结果调用相应回调: 如果请求 + * 成功, 则调用onsuccess回调, 失败则调用 onerror 回调 + * @method request + * @param { URLString } url ajax请求的url地址 + * @param { Object } ajaxOptions ajax请求选项的键值对,支持的选项如下: + * @example + * ```javascript + * //向sayhello.php发起一个异步的Ajax GET请求, 请求超时时间为10s, 请求完成后执行相应的回调。 + * UE.ajax.requeset( 'sayhello.php', { + * + * //请求方法。可选值: 'GET', 'POST',默认值是'POST' + * method: 'GET', + * + * //超时时间。 默认为5000, 单位是ms + * timeout: 10000, + * + * //是否是异步请求。 true为异步请求, false为同步请求 + * async: true, + * + * //请求携带的数据。如果请求为GET请求, data会经过stringify后附加到请求url之后。 + * data: { + * name: 'ueditor' + * }, + * + * //请求成功后的回调, 该回调接受当前的XMLHttpRequest对象作为参数。 + * onsuccess: function ( xhr ) { + * console.log( xhr.responseText ); + * }, + * + * //请求失败或者超时后的回调。 + * onerror: function ( xhr ) { + * alert( 'Ajax请求失败' ); + * } + * + * } ); + * ``` + */ + + /** + * 根据给定的参数项发起一个ajax请求, 参数项里必须包含一个url地址。 ajax请求完成后,会根据请求结果调用相应回调: 如果请求 + * 成功, 则调用onsuccess回调, 失败则调用 onerror 回调。 + * @method request + * @warning 如果在参数项里未提供一个key为“url”的地址值,则该请求将直接退出。 + * @param { Object } ajaxOptions ajax请求选项的键值对,支持的选项如下: + * @example + * ```javascript + * + * //向sayhello.php发起一个异步的Ajax POST请求, 请求超时时间为5s, 请求完成后不执行任何回调。 + * UE.ajax.requeset( 'sayhello.php', { + * + * //请求的地址, 该项是必须的。 + * url: 'sayhello.php' + * + * } ); + * ``` + */ + request:function(url, opts) { + if (opts && opts.dataType == 'jsonp') { + doJsonp(url, opts); + } else { + doAjax(url, opts); + } + }, + getJSONP:function(url, data, fn) { + var opts = { + 'data': data, + 'oncomplete': fn + }; + doJsonp(url, opts); + } + }; + + +}(); + + +// core/filterword.js +/** + * UE过滤word的静态方法 + * @file + */ + +/** + * UEditor公用空间,UEditor所有的功能都挂载在该空间下 + * @module UE + */ + + +/** + * 根据传入html字符串过滤word + * @module UE + * @since 1.2.6.1 + * @method filterWord + * @param { String } html html字符串 + * @return { String } 已过滤后的结果字符串 + * @example + * ```javascript + * UE.filterWord(html); + * ``` + */ +var filterWord = UE.filterWord = function () { + + //是否是word过来的内容 + function isWordDocument( str ) { + return /(class="?Mso|style="[^"]*\bmso\-|w:WordDocument|<(v|o):|lang=)/ig.test( str ); + } + //去掉小数 + function transUnit( v ) { + v = v.replace( /[\d.]+\w+/g, function ( m ) { + return utils.transUnitToPx(m); + } ); + return v; + } + + function filterPasteWord( str ) { + return str.replace(/[\t\r\n]+/g,' ') + .replace( //ig, "" ) + //转换图片 + .replace(/]*>[\s\S]*?.<\/v:shape>/gi,function(str){ + //opera能自己解析出image所这里直接返回空 + if(browser.opera){ + return ''; + } + try{ + //有可能是bitmap占为图,无用,直接过滤掉,主要体现在粘贴excel表格中 + if(/Bitmap/i.test(str)){ + return ''; + } + var width = str.match(/width:([ \d.]*p[tx])/i)[1], + height = str.match(/height:([ \d.]*p[tx])/i)[1], + src = str.match(/src=\s*"([^"]*)"/i)[1]; + return ''; + } catch(e){ + return ''; + } + }) + //针对wps添加的多余标签处理 + .replace(/<\/?div[^>]*>/g,'') + //去掉多余的属性 + .replace( /v:\w+=(["']?)[^'"]+\1/g, '' ) + .replace( /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|xml|meta|link|style|\w+:\w+)(?=[\s\/>]))[^>]*>/gi, "" ) + .replace( /

    ]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "

    $1

    " ) + //去掉多余的属性 + .replace( /\s+(class|lang|align)\s*=\s*(['"]?)([\w-]+)\2/ig, function(str,name,marks,val){ + //保留list的标示 + return name == 'class' && val == 'MsoListParagraph' ? str : '' + }) + //清除多余的font/span不能匹配 有可能是空格 + .replace( /<(font|span)[^>]*>(\s*)<\/\1>/gi, function(a,b,c){ + return c.replace(/[\t\r\n ]+/g,' ') + }) + //处理style的问题 + .replace( /(<[a-z][^>]*)\sstyle=(["'])([^\2]*?)\2/gi, function( str, tag, tmp, style ) { + var n = [], + s = style.replace( /^\s+|\s+$/, '' ) + .replace(/'/g,'\'') + .replace( /"/gi, "'" ) + .replace(/[\d.]+(cm|pt)/g,function(str){ + return utils.transUnitToPx(str) + }) + .split( /;\s*/g ); + + for ( var i = 0,v; v = s[i];i++ ) { + + var name, value, + parts = v.split( ":" ); + + if ( parts.length == 2 ) { + name = parts[0].toLowerCase(); + value = parts[1].toLowerCase(); + if(/^(background)\w*/.test(name) && value.replace(/(initial|\s)/g,'').length == 0 + || + /^(margin)\w*/.test(name) && /^0\w+$/.test(value) + ){ + continue; + } + + switch ( name ) { + case "mso-padding-alt": + case "mso-padding-top-alt": + case "mso-padding-right-alt": + case "mso-padding-bottom-alt": + case "mso-padding-left-alt": + case "mso-margin-alt": + case "mso-margin-top-alt": + case "mso-margin-right-alt": + case "mso-margin-bottom-alt": + case "mso-margin-left-alt": + //ie下会出现挤到一起的情况 + //case "mso-table-layout-alt": + case "mso-height": + case "mso-width": + case "mso-vertical-align-alt": + //trace:1819 ff下会解析出padding在table上 + if(!/]/.test(html)) { + return UE.htmlparser(html).children[0] + } else { + return new uNode({ + type:'element', + children:[], + tagName:html + }) + } + }; + uNode.createText = function (data,noTrans) { + return new UE.uNode({ + type:'text', + 'data':noTrans ? data : utils.unhtml(data || '') + }) + }; + function nodeToHtml(node, arr, formatter, current) { + switch (node.type) { + case 'root': + for (var i = 0, ci; ci = node.children[i++];) { + //插入新行 + if (formatter && ci.type == 'element' && !dtd.$inlineWithA[ci.tagName] && i > 1) { + insertLine(arr, current, true); + insertIndent(arr, current) + } + nodeToHtml(ci, arr, formatter, current) + } + break; + case 'text': + isText(node, arr); + break; + case 'element': + isElement(node, arr, formatter, current); + break; + case 'comment': + isComment(node, arr, formatter); + } + return arr; + } + + function isText(node, arr) { + if(node.parentNode.tagName == 'pre'){ + //源码模式下输入html标签,不能做转换处理,直接输出 + arr.push(node.data) + }else{ + arr.push(notTransTagName[node.parentNode.tagName] ? utils.html(node.data) : node.data.replace(/[ ]{2}/g,'  ')) + } + + } + + function isElement(node, arr, formatter, current) { + var attrhtml = ''; + if (node.attrs) { + attrhtml = []; + var attrs = node.attrs; + for (var a in attrs) { + //这里就针对 + //

    '

    + //这里边的\"做转换,要不用innerHTML直接被截断了,属性src + //有可能做的不够 + attrhtml.push(a + (attrs[a] !== undefined ? '="' + (notTransAttrs[a] ? utils.html(attrs[a]).replace(/["]/g, function (a) { + return '"' + }) : utils.unhtml(attrs[a])) + '"' : '')) + } + attrhtml = attrhtml.join(' '); + } + arr.push('<' + node.tagName + + (attrhtml ? ' ' + attrhtml : '') + + (dtd.$empty[node.tagName] ? '\/' : '' ) + '>' + ); + //插入新行 + if (formatter && !dtd.$inlineWithA[node.tagName] && node.tagName != 'pre') { + if(node.children && node.children.length){ + current = insertLine(arr, current, true); + insertIndent(arr, current) + } + + } + if (node.children && node.children.length) { + for (var i = 0, ci; ci = node.children[i++];) { + if (formatter && ci.type == 'element' && !dtd.$inlineWithA[ci.tagName] && i > 1) { + insertLine(arr, current); + insertIndent(arr, current) + } + nodeToHtml(ci, arr, formatter, current) + } + } + if (!dtd.$empty[node.tagName]) { + if (formatter && !dtd.$inlineWithA[node.tagName] && node.tagName != 'pre') { + + if(node.children && node.children.length){ + current = insertLine(arr, current); + insertIndent(arr, current) + } + } + arr.push('<\/' + node.tagName + '>'); + } + + } + + function isComment(node, arr) { + arr.push(''); + } + + function getNodeById(root, id) { + var node; + if (root.type == 'element' && root.getAttr('id') == id) { + return root; + } + if (root.children && root.children.length) { + for (var i = 0, ci; ci = root.children[i++];) { + if (node = getNodeById(ci, id)) { + return node; + } + } + } + } + + function getNodesByTagName(node, tagName, arr) { + if (node.type == 'element' && node.tagName == tagName) { + arr.push(node); + } + if (node.children && node.children.length) { + for (var i = 0, ci; ci = node.children[i++];) { + getNodesByTagName(ci, tagName, arr) + } + } + } + function nodeTraversal(root,fn){ + if(root.children && root.children.length){ + for(var i= 0,ci;ci=root.children[i];){ + nodeTraversal(ci,fn); + //ci被替换的情况,这里就不再走 fn了 + if(ci.parentNode ){ + if(ci.children && ci.children.length){ + fn(ci) + } + if(ci.parentNode) i++ + } + } + }else{ + fn(root) + } + + } + uNode.prototype = { + + /** + * 当前节点对象,转换成html文本 + * @method toHtml + * @return { String } 返回转换后的html字符串 + * @example + * ```javascript + * node.toHtml(); + * ``` + */ + + /** + * 当前节点对象,转换成html文本 + * @method toHtml + * @param { Boolean } formatter 是否格式化返回值 + * @return { String } 返回转换后的html字符串 + * @example + * ```javascript + * node.toHtml( true ); + * ``` + */ + toHtml:function (formatter) { + var arr = []; + nodeToHtml(this, arr, formatter, 0); + return arr.join('') + }, + + /** + * 获取节点的html内容 + * @method innerHTML + * @warning 假如节点的type不是'element',或节点的标签名称不在dtd列表里,直接返回当前节点 + * @return { String } 返回节点的html内容 + * @example + * ```javascript + * var htmlstr = node.innerHTML(); + * ``` + */ + + /** + * 设置节点的html内容 + * @method innerHTML + * @warning 假如节点的type不是'element',或节点的标签名称不在dtd列表里,直接返回当前节点 + * @param { String } htmlstr 传入要设置的html内容 + * @return { UE.uNode } 返回节点本身 + * @example + * ```javascript + * node.innerHTML('text'); + * ``` + */ + innerHTML:function (htmlstr) { + if (this.type != 'element' || dtd.$empty[this.tagName]) { + return this; + } + if (utils.isString(htmlstr)) { + if(this.children){ + for (var i = 0, ci; ci = this.children[i++];) { + ci.parentNode = null; + } + } + this.children = []; + var tmpRoot = UE.htmlparser(htmlstr); + for (var i = 0, ci; ci = tmpRoot.children[i++];) { + this.children.push(ci); + ci.parentNode = this; + } + return this; + } else { + var tmpRoot = new UE.uNode({ + type:'root', + children:this.children + }); + return tmpRoot.toHtml(); + } + }, + + /** + * 获取节点的纯文本内容 + * @method innerText + * @warning 假如节点的type不是'element',或节点的标签名称不在dtd列表里,直接返回当前节点 + * @return { String } 返回节点的存文本内容 + * @example + * ```javascript + * var textStr = node.innerText(); + * ``` + */ + + /** + * 设置节点的纯文本内容 + * @method innerText + * @warning 假如节点的type不是'element',或节点的标签名称不在dtd列表里,直接返回当前节点 + * @param { String } textStr 传入要设置的文本内容 + * @return { UE.uNode } 返回节点本身 + * @example + * ```javascript + * node.innerText('text'); + * ``` + */ + innerText:function (textStr,noTrans) { + if (this.type != 'element' || dtd.$empty[this.tagName]) { + return this; + } + if (textStr) { + if(this.children){ + for (var i = 0, ci; ci = this.children[i++];) { + ci.parentNode = null; + } + } + this.children = []; + this.appendChild(uNode.createText(textStr,noTrans)); + return this; + } else { + return this.toHtml().replace(/<[^>]+>/g, ''); + } + }, + + /** + * 获取当前对象的data属性 + * @method getData + * @return { Object } 若节点的type值是elemenet,返回空字符串,否则返回节点的data属性 + * @example + * ```javascript + * node.getData(); + * ``` + */ + getData:function () { + if (this.type == 'element') + return ''; + return this.data + }, + + /** + * 获取当前节点下的第一个子节点 + * @method firstChild + * @return { UE.uNode } 返回第一个子节点 + * @example + * ```javascript + * node.firstChild(); //返回第一个子节点 + * ``` + */ + firstChild:function () { +// if (this.type != 'element' || dtd.$empty[this.tagName]) { +// return this; +// } + return this.children ? this.children[0] : null; + }, + + /** + * 获取当前节点下的最后一个子节点 + * @method lastChild + * @return { UE.uNode } 返回最后一个子节点 + * @example + * ```javascript + * node.lastChild(); //返回最后一个子节点 + * ``` + */ + lastChild:function () { +// if (this.type != 'element' || dtd.$empty[this.tagName] ) { +// return this; +// } + return this.children ? this.children[this.children.length - 1] : null; + }, + + /** + * 获取和当前节点有相同父亲节点的前一个节点 + * @method previousSibling + * @return { UE.uNode } 返回前一个节点 + * @example + * ```javascript + * node.children[2].previousSibling(); //返回子节点node.children[1] + * ``` + */ + previousSibling : function(){ + var parent = this.parentNode; + for (var i = 0, ci; ci = parent.children[i]; i++) { + if (ci === this) { + return i == 0 ? null : parent.children[i-1]; + } + } + + }, + + /** + * 获取和当前节点有相同父亲节点的后一个节点 + * @method nextSibling + * @return { UE.uNode } 返回后一个节点,找不到返回null + * @example + * ```javascript + * node.children[2].nextSibling(); //如果有,返回子节点node.children[3] + * ``` + */ + nextSibling : function(){ + var parent = this.parentNode; + for (var i = 0, ci; ci = parent.children[i++];) { + if (ci === this) { + return parent.children[i]; + } + } + }, + + /** + * 用新的节点替换当前节点 + * @method replaceChild + * @param { UE.uNode } target 要替换成该节点参数 + * @param { UE.uNode } source 要被替换掉的节点 + * @return { UE.uNode } 返回替换之后的节点对象 + * @example + * ```javascript + * node.replaceChild(newNode, childNode); //用newNode替换childNode,childNode是node的子节点 + * ``` + */ + replaceChild:function (target, source) { + if (this.children) { + if(target.parentNode){ + target.parentNode.removeChild(target); + } + for (var i = 0, ci; ci = this.children[i]; i++) { + if (ci === source) { + this.children.splice(i, 1, target); + source.parentNode = null; + target.parentNode = this; + return target; + } + } + } + }, + + /** + * 在节点的子节点列表最后位置插入一个节点 + * @method appendChild + * @param { UE.uNode } node 要插入的节点 + * @return { UE.uNode } 返回刚插入的子节点 + * @example + * ```javascript + * node.appendChild( newNode ); //在node内插入子节点newNode + * ``` + */ + appendChild:function (node) { + if (this.type == 'root' || (this.type == 'element' && !dtd.$empty[this.tagName])) { + if (!this.children) { + this.children = [] + } + if(node.parentNode){ + node.parentNode.removeChild(node); + } + for (var i = 0, ci; ci = this.children[i]; i++) { + if (ci === node) { + this.children.splice(i, 1); + break; + } + } + this.children.push(node); + node.parentNode = this; + return node; + } + + + }, + + /** + * 在传入节点的前面插入一个节点 + * @method insertBefore + * @param { UE.uNode } target 要插入的节点 + * @param { UE.uNode } source 在该参数节点前面插入 + * @return { UE.uNode } 返回刚插入的子节点 + * @example + * ```javascript + * node.parentNode.insertBefore(newNode, node); //在node节点后面插入newNode + * ``` + */ + insertBefore:function (target, source) { + if (this.children) { + if(target.parentNode){ + target.parentNode.removeChild(target); + } + for (var i = 0, ci; ci = this.children[i]; i++) { + if (ci === source) { + this.children.splice(i, 0, target); + target.parentNode = this; + return target; + } + } + + } + }, + + /** + * 在传入节点的后面插入一个节点 + * @method insertAfter + * @param { UE.uNode } target 要插入的节点 + * @param { UE.uNode } source 在该参数节点后面插入 + * @return { UE.uNode } 返回刚插入的子节点 + * @example + * ```javascript + * node.parentNode.insertAfter(newNode, node); //在node节点后面插入newNode + * ``` + */ + insertAfter:function (target, source) { + if (this.children) { + if(target.parentNode){ + target.parentNode.removeChild(target); + } + for (var i = 0, ci; ci = this.children[i]; i++) { + if (ci === source) { + this.children.splice(i + 1, 0, target); + target.parentNode = this; + return target; + } + + } + } + }, + + /** + * 从当前节点的子节点列表中,移除节点 + * @method removeChild + * @param { UE.uNode } node 要移除的节点引用 + * @param { Boolean } keepChildren 是否保留移除节点的子节点,若传入true,自动把移除节点的子节点插入到移除的位置 + * @return { * } 返回刚移除的子节点 + * @example + * ```javascript + * node.removeChild(childNode,true); //在node的子节点列表中移除child节点,并且吧child的子节点插入到移除的位置 + * ``` + */ + removeChild:function (node,keepChildren) { + if (this.children) { + for (var i = 0, ci; ci = this.children[i]; i++) { + if (ci === node) { + this.children.splice(i, 1); + ci.parentNode = null; + if(keepChildren && ci.children && ci.children.length){ + for(var j= 0,cj;cj=ci.children[j];j++){ + this.children.splice(i+j,0,cj); + cj.parentNode = this; + + } + } + return ci; + } + } + } + }, + + /** + * 获取当前节点所代表的元素属性,即获取attrs对象下的属性值 + * @method getAttr + * @param { String } attrName 要获取的属性名称 + * @return { * } 返回attrs对象下的属性值 + * @example + * ```javascript + * node.getAttr('title'); + * ``` + */ + getAttr:function (attrName) { + return this.attrs && this.attrs[attrName.toLowerCase()] + }, + + /** + * 设置当前节点所代表的元素属性,即设置attrs对象下的属性值 + * @method setAttr + * @param { String } attrName 要设置的属性名称 + * @param { * } attrVal 要设置的属性值,类型视设置的属性而定 + * @return { * } 返回attrs对象下的属性值 + * @example + * ```javascript + * node.setAttr('title','标题'); + * ``` + */ + setAttr:function (attrName, attrVal) { + if (!attrName) { + delete this.attrs; + return; + } + if(!this.attrs){ + this.attrs = {}; + } + if (utils.isObject(attrName)) { + for (var a in attrName) { + if (!attrName[a]) { + delete this.attrs[a] + } else { + this.attrs[a.toLowerCase()] = attrName[a]; + } + } + } else { + if (!attrVal) { + delete this.attrs[attrName] + } else { + this.attrs[attrName.toLowerCase()] = attrVal; + } + + } + }, + + /** + * 获取当前节点在父节点下的位置索引 + * @method getIndex + * @return { Number } 返回索引数值,如果没有父节点,返回-1 + * @example + * ```javascript + * node.getIndex(); + * ``` + */ + getIndex:function(){ + var parent = this.parentNode; + for(var i= 0,ci;ci=parent.children[i];i++){ + if(ci === this){ + return i; + } + } + return -1; + }, + + /** + * 在当前节点下,根据id查找节点 + * @method getNodeById + * @param { String } id 要查找的id + * @return { UE.uNode } 返回找到的节点 + * @example + * ```javascript + * node.getNodeById('textId'); + * ``` + */ + getNodeById:function (id) { + var node; + if (this.children && this.children.length) { + for (var i = 0, ci; ci = this.children[i++];) { + if (node = getNodeById(ci, id)) { + return node; + } + } + } + }, + + /** + * 在当前节点下,根据元素名称查找节点列表 + * @method getNodesByTagName + * @param { String } tagNames 要查找的元素名称 + * @return { Array } 返回找到的节点列表 + * @example + * ```javascript + * node.getNodesByTagName('span'); + * ``` + */ + getNodesByTagName:function (tagNames) { + tagNames = utils.trim(tagNames).replace(/[ ]{2,}/g, ' ').split(' '); + var arr = [], me = this; + utils.each(tagNames, function (tagName) { + if (me.children && me.children.length) { + for (var i = 0, ci; ci = me.children[i++];) { + getNodesByTagName(ci, tagName, arr) + } + } + }); + return arr; + }, + + /** + * 根据样式名称,获取节点的样式值 + * @method getStyle + * @param { String } name 要获取的样式名称 + * @return { String } 返回样式值 + * @example + * ```javascript + * node.getStyle('font-size'); + * ``` + */ + getStyle:function (name) { + var cssStyle = this.getAttr('style'); + if (!cssStyle) { + return '' + } + var reg = new RegExp('(^|;)\\s*' + name + ':([^;]+)','i'); + var match = cssStyle.match(reg); + if (match && match[0]) { + return match[2] + } + return ''; + }, + + /** + * 给节点设置样式 + * @method setStyle + * @param { String } name 要设置的的样式名称 + * @param { String } val 要设置的的样值 + * @example + * ```javascript + * node.setStyle('font-size', '12px'); + * ``` + */ + setStyle:function (name, val) { + function exec(name, val) { + var reg = new RegExp('(^|;)\\s*' + name + ':([^;]+;?)', 'gi'); + cssStyle = cssStyle.replace(reg, '$1'); + if (val) { + cssStyle = name + ':' + utils.unhtml(val) + ';' + cssStyle + } + + } + + var cssStyle = this.getAttr('style'); + if (!cssStyle) { + cssStyle = ''; + } + if (utils.isObject(name)) { + for (var a in name) { + exec(a, name[a]) + } + } else { + exec(name, val) + } + this.setAttr('style', utils.trim(cssStyle)) + }, + + /** + * 传入一个函数,递归遍历当前节点下的所有节点 + * @method traversal + * @param { Function } fn 遍历到节点的时,传入节点作为参数,运行此函数 + * @example + * ```javascript + * traversal(node, function(){ + * console.log(node.type); + * }); + * ``` + */ + traversal:function(fn){ + if(this.children && this.children.length){ + nodeTraversal(this,fn); + } + return this; + } + } +})(); + + +// core/htmlparser.js +/** + * html字符串转换成uNode节点 + * @file + * @module UE + * @since 1.2.6.1 + */ + +/** + * UEditor公用空间,UEditor所有的功能都挂载在该空间下 + * @unfile + * @module UE + */ + +/** + * html字符串转换成uNode节点的静态方法 + * @method htmlparser + * @param { String } htmlstr 要转换的html代码 + * @param { Boolean } ignoreBlank 若设置为true,转换的时候忽略\n\r\t等空白字符 + * @return { uNode } 给定的html片段转换形成的uNode对象 + * @example + * ```javascript + * var root = UE.htmlparser('

    htmlparser

    ', true); + * ``` + */ + +var htmlparser = UE.htmlparser = function (htmlstr,ignoreBlank) { + //todo 原来的方式 [^"'<>\/] 有\/就不能配对上 ') + } + html.push('') + } + //禁止指定table-width + return '
    这样的标签了 + //先去掉了,加上的原因忘了,这里先记录 + var re_tag = /<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)-->)|(?:([^\s\/<>]+)\s*((?:(?:"[^"]*")|(?:'[^']*')|[^"'<>])*)\/?>))/g, + re_attr = /([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g; + + //ie下取得的html可能会有\n存在,要去掉,在处理replace(/[\t\r\n]*/g,'');代码高量的\n不能去除 + var allowEmptyTags = { + b:1,code:1,i:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,span:1, + sub:1,img:1,sup:1,font:1,big:1,small:1,iframe:1,a:1,br:1,pre:1 + }; + htmlstr = htmlstr.replace(new RegExp(domUtils.fillChar, 'g'), ''); + if(!ignoreBlank){ + htmlstr = htmlstr.replace(new RegExp('[\\r\\t\\n'+(ignoreBlank?'':' ')+']*<\/?(\\w+)\\s*(?:[^>]*)>[\\r\\t\\n'+(ignoreBlank?'':' ')+']*','g'), function(a,b){ + //br暂时单独处理 + if(b && allowEmptyTags[b.toLowerCase()]){ + return a.replace(/(^[\n\r]+)|([\n\r]+$)/g,''); + } + return a.replace(new RegExp('^[\\r\\n'+(ignoreBlank?'':' ')+']+'),'').replace(new RegExp('[\\r\\n'+(ignoreBlank?'':' ')+']+$'),''); + }); + } + + var notTransAttrs = { + 'href':1, + 'src':1 + }; + + var uNode = UE.uNode, + needParentNode = { + 'td':'tr', + 'tr':['tbody','thead','tfoot'], + 'tbody':'table', + 'th':'tr', + 'thead':'table', + 'tfoot':'table', + 'caption':'table', + 'li':['ul', 'ol'], + 'dt':'dl', + 'dd':'dl', + 'option':'select' + }, + needChild = { + 'ol':'li', + 'ul':'li' + }; + + function text(parent, data) { + + if(needChild[parent.tagName]){ + var tmpNode = uNode.createElement(needChild[parent.tagName]); + parent.appendChild(tmpNode); + tmpNode.appendChild(uNode.createText(data)); + parent = tmpNode; + }else{ + + parent.appendChild(uNode.createText(data)); + } + } + + function element(parent, tagName, htmlattr) { + var needParentTag; + if (needParentTag = needParentNode[tagName]) { + var tmpParent = parent,hasParent; + while(tmpParent.type != 'root'){ + if(utils.isArray(needParentTag) ? utils.indexOf(needParentTag, tmpParent.tagName) != -1 : needParentTag == tmpParent.tagName){ + parent = tmpParent; + hasParent = true; + break; + } + tmpParent = tmpParent.parentNode; + } + if(!hasParent){ + parent = element(parent, utils.isArray(needParentTag) ? needParentTag[0] : needParentTag) + } + } + //按dtd处理嵌套 +// if(parent.type != 'root' && !dtd[parent.tagName][tagName]) +// parent = parent.parentNode; + var elm = new uNode({ + parentNode:parent, + type:'element', + tagName:tagName.toLowerCase(), + //是自闭合的处理一下 + children:dtd.$empty[tagName] ? null : [] + }); + //如果属性存在,处理属性 + if (htmlattr) { + var attrs = {}, match; + while (match = re_attr.exec(htmlattr)) { + attrs[match[1].toLowerCase()] = notTransAttrs[match[1].toLowerCase()] ? (match[2] || match[3] || match[4]) : utils.unhtml(match[2] || match[3] || match[4]) + } + elm.attrs = attrs; + } + //trace:3970 +// //如果parent下不能放elm +// if(dtd.$inline[parent.tagName] && dtd.$block[elm.tagName] && !dtd[parent.tagName][elm.tagName]){ +// parent = parent.parentNode; +// elm.parentNode = parent; +// } + parent.children.push(elm); + //如果是自闭合节点返回父亲节点 + return dtd.$empty[tagName] ? parent : elm + } + + function comment(parent, data) { + parent.children.push(new uNode({ + type:'comment', + data:data, + parentNode:parent + })); + } + + var match, currentIndex = 0, nextIndex = 0; + //设置根节点 + var root = new uNode({ + type:'root', + children:[] + }); + var currentParent = root; + + while (match = re_tag.exec(htmlstr)) { + currentIndex = match.index; + try{ + if (currentIndex > nextIndex) { + //text node + text(currentParent, htmlstr.slice(nextIndex, currentIndex)); + } + if (match[3]) { + + if(dtd.$cdata[currentParent.tagName]){ + text(currentParent, match[0]); + }else{ + //start tag + currentParent = element(currentParent, match[3].toLowerCase(), match[4]); + } + + + } else if (match[1]) { + if(currentParent.type != 'root'){ + if(dtd.$cdata[currentParent.tagName] && !dtd.$cdata[match[1]]){ + text(currentParent, match[0]); + }else{ + var tmpParent = currentParent; + while(currentParent.type == 'element' && currentParent.tagName != match[1].toLowerCase()){ + currentParent = currentParent.parentNode; + if(currentParent.type == 'root'){ + currentParent = tmpParent; + throw 'break' + } + } + //end tag + currentParent = currentParent.parentNode; + } + + } + + } else if (match[2]) { + //comment + comment(currentParent, match[2]) + } + }catch(e){} + + nextIndex = re_tag.lastIndex; + + } + //如果结束是文本,就有可能丢掉,所以这里手动判断一下 + //例如
  • sdfsdfsdf
  • sdfsdfsdfsdf + if (nextIndex < htmlstr.length) { + text(currentParent, htmlstr.slice(nextIndex)); + } + return root; +}; + + +// core/filternode.js +/** + * UE过滤节点的静态方法 + * @file + */ + +/** + * UEditor公用空间,UEditor所有的功能都挂载在该空间下 + * @module UE + */ + + +/** + * 根据传入节点和过滤规则过滤相应节点 + * @module UE + * @since 1.2.6.1 + * @method filterNode + * @param { Object } root 指定root节点 + * @param { Object } rules 过滤规则json对象 + * @example + * ```javascript + * UE.filterNode(root,editor.options.filterRules); + * ``` + */ +var filterNode = UE.filterNode = function () { + function filterNode(node,rules){ + switch (node.type) { + case 'text': + break; + case 'element': + var val; + if(val = rules[node.tagName]){ + if(val === '-'){ + node.parentNode.removeChild(node) + }else if(utils.isFunction(val)){ + var parentNode = node.parentNode, + index = node.getIndex(); + val(node); + if(node.parentNode){ + if(node.children){ + for(var i = 0,ci;ci=node.children[i];){ + filterNode(ci,rules); + if(ci.parentNode){ + i++; + } + } + } + }else{ + for(var i = index,ci;ci=parentNode.children[i];){ + filterNode(ci,rules); + if(ci.parentNode){ + i++; + } + } + } + + + }else{ + var attrs = val['$']; + if(attrs && node.attrs){ + var tmpAttrs = {},tmpVal; + for(var a in attrs){ + tmpVal = node.getAttr(a); + //todo 只先对style单独处理 + if(a == 'style' && utils.isArray(attrs[a])){ + var tmpCssStyle = []; + utils.each(attrs[a],function(v){ + var tmp; + if(tmp = node.getStyle(v)){ + tmpCssStyle.push(v + ':' + tmp); + } + }); + tmpVal = tmpCssStyle.join(';') + } + if(tmpVal){ + tmpAttrs[a] = tmpVal; + } + + } + node.attrs = tmpAttrs; + } + if(node.children){ + for(var i = 0,ci;ci=node.children[i];){ + filterNode(ci,rules); + if(ci.parentNode){ + i++; + } + } + } + } + }else{ + //如果不在名单里扣出子节点并删除该节点,cdata除外 + if(dtd.$cdata[node.tagName]){ + node.parentNode.removeChild(node) + }else{ + var parentNode = node.parentNode, + index = node.getIndex(); + node.parentNode.removeChild(node,true); + for(var i = index,ci;ci=parentNode.children[i];){ + filterNode(ci,rules); + if(ci.parentNode){ + i++; + } + } + } + } + break; + case 'comment': + node.parentNode.removeChild(node) + } + + } + return function(root,rules){ + if(utils.isEmptyObject(rules)){ + return root; + } + var val; + if(val = rules['-']){ + utils.each(val.split(' '),function(k){ + rules[k] = '-' + }) + } + for(var i= 0,ci;ci=root.children[i];){ + filterNode(ci,rules); + if(ci.parentNode){ + i++; + } + } + return root; + } +}(); + +// core/plugin.js +/** + * Created with JetBrains PhpStorm. + * User: campaign + * Date: 10/8/13 + * Time: 6:15 PM + * To change this template use File | Settings | File Templates. + */ +UE.plugin = function(){ + var _plugins = {}; + return { + register : function(pluginName,fn,oldOptionName,afterDisabled){ + if(oldOptionName && utils.isFunction(oldOptionName)){ + afterDisabled = oldOptionName; + oldOptionName = null + } + _plugins[pluginName] = { + optionName : oldOptionName || pluginName, + execFn : fn, + //当插件被禁用时执行 + afterDisabled : afterDisabled + } + }, + load : function(editor){ + utils.each(_plugins,function(plugin){ + var _export = plugin.execFn.call(editor); + if(editor.options[plugin.optionName] !== false){ + if(_export){ + //后边需要再做扩展 + utils.each(_export,function(v,k){ + switch(k.toLowerCase()){ + case 'shortcutkey': + editor.addshortcutkey(v); + break; + case 'bindevents': + utils.each(v,function(fn,eventName){ + editor.addListener(eventName,fn); + }); + break; + case 'bindmultievents': + utils.each(utils.isArray(v) ? v:[v],function(event){ + var types = utils.trim(event.type).split(/\s+/); + utils.each(types,function(eventName){ + editor.addListener(eventName, event.handler); + }); + }); + break; + case 'commands': + utils.each(v,function(execFn,execName){ + editor.commands[execName] = execFn + }); + break; + case 'outputrule': + editor.addOutputRule(v); + break; + case 'inputrule': + editor.addInputRule(v); + break; + case 'defaultoptions': + editor.setOpt(v) + } + }) + } + + }else if(plugin.afterDisabled){ + plugin.afterDisabled.call(editor) + } + + }); + //向下兼容 + utils.each(UE.plugins,function(plugin){ + plugin.call(editor); + }); + }, + run : function(pluginName,editor){ + var plugin = _plugins[pluginName]; + if(plugin){ + plugin.exeFn.call(editor) + } + } + } +}(); + +// core/keymap.js +var keymap = UE.keymap = { + 'Backspace' : 8, + 'Tab' : 9, + 'Enter' : 13, + + 'Shift':16, + 'Control':17, + 'Alt':18, + 'CapsLock':20, + + 'Esc':27, + + 'Spacebar':32, + + 'PageUp':33, + 'PageDown':34, + 'End':35, + 'Home':36, + + 'Left':37, + 'Up':38, + 'Right':39, + 'Down':40, + + 'Insert':45, + + 'Del':46, + + 'NumLock':144, + + 'Cmd':91, + + '=':187, + '-':189, + + "b":66, + 'i':73, + //回退 + 'z':90, + 'y':89, + //粘贴 + 'v' : 86, + 'x' : 88, + + 's' : 83, + + 'n' : 78 +}; + +// core/localstorage.js +//存储媒介封装 +var LocalStorage = UE.LocalStorage = (function () { + + var storage = window.localStorage || getUserData() || null, + LOCAL_FILE = 'localStorage'; + + return { + + saveLocalData: function (key, data) { + + if (storage && data) { + storage.setItem(key, data); + return true; + } + + return false; + + }, + + getLocalData: function (key) { + + if (storage) { + return storage.getItem(key); + } + + return null; + + }, + + removeItem: function (key) { + + storage && storage.removeItem(key); + + } + + }; + + function getUserData() { + + var container = document.createElement("div"); + container.style.display = "none"; + + if (!container.addBehavior) { + return null; + } + + container.addBehavior("#default#userdata"); + + return { + + getItem: function (key) { + + var result = null; + + try { + document.body.appendChild(container); + container.load(LOCAL_FILE); + result = container.getAttribute(key); + document.body.removeChild(container); + } catch (e) { + } + + return result; + + }, + + setItem: function (key, value) { + + document.body.appendChild(container); + container.setAttribute(key, value); + container.save(LOCAL_FILE); + document.body.removeChild(container); + + }, + + //// 暂时没有用到 + //clear: function () { + // + // var expiresTime = new Date(); + // expiresTime.setFullYear(expiresTime.getFullYear() - 1); + // document.body.appendChild(container); + // container.expires = expiresTime.toUTCString(); + // container.save(LOCAL_FILE); + // document.body.removeChild(container); + // + //}, + + removeItem: function (key) { + + document.body.appendChild(container); + container.removeAttribute(key); + container.save(LOCAL_FILE); + document.body.removeChild(container); + + } + + }; + + } + +})(); + +(function () { + + var ROOTKEY = 'ueditor_preference'; + + UE.Editor.prototype.setPreferences = function(key,value){ + var obj = {}; + if (utils.isString(key)) { + obj[ key ] = value; + } else { + obj = key; + } + var data = LocalStorage.getLocalData(ROOTKEY); + if (data && (data = utils.str2json(data))) { + utils.extend(data, obj); + } else { + data = obj; + } + data && LocalStorage.saveLocalData(ROOTKEY, utils.json2str(data)); + }; + + UE.Editor.prototype.getPreferences = function(key){ + var data = LocalStorage.getLocalData(ROOTKEY); + if (data && (data = utils.str2json(data))) { + return key ? data[key] : data + } + return null; + }; + + UE.Editor.prototype.removePreferences = function (key) { + var data = LocalStorage.getLocalData(ROOTKEY); + if (data && (data = utils.str2json(data))) { + data[key] = undefined; + delete data[key] + } + data && LocalStorage.saveLocalData(ROOTKEY, utils.json2str(data)); + }; + +})(); + + +// plugins/defaultfilter.js +///import core +///plugin 编辑器默认的过滤转换机制 + +UE.plugins['defaultfilter'] = function () { + var me = this; + me.setOpt({ + 'allowDivTransToP':true, + 'disabledTableInTable':true + }); + //默认的过滤处理 + //进入编辑器的内容处理 + me.addInputRule(function (root) { + var allowDivTransToP = this.options.allowDivTransToP; + var val; + function tdParent(node){ + while(node && node.type == 'element'){ + if(node.tagName == 'td'){ + return true; + } + node = node.parentNode; + } + return false; + } + //进行默认的处理 + root.traversal(function (node) { + if (node.type == 'element') { + if (!dtd.$cdata[node.tagName] && me.options.autoClearEmptyNode && dtd.$inline[node.tagName] && !dtd.$empty[node.tagName] && (!node.attrs || utils.isEmptyObject(node.attrs))) { + if (!node.firstChild()) node.parentNode.removeChild(node); + else if (node.tagName == 'span' && (!node.attrs || utils.isEmptyObject(node.attrs))) { + node.parentNode.removeChild(node, true) + } + return; + } + switch (node.tagName) { + case 'style': + case 'script': + node.setAttr({ + cdata_tag: node.tagName, + cdata_data: (node.innerHTML() || ''), + '_ue_custom_node_':'true' + }); + node.tagName = 'div'; + node.innerHTML(''); + break; + case 'a': + if (val = node.getAttr('href')) { + node.setAttr('_href', val) + } + break; + case 'img': + //todo base64暂时去掉,后边做远程图片上传后,干掉这个 + if (val = node.getAttr('src')) { + if (/^data:/.test(val)) { + node.parentNode.removeChild(node); + break; + } + } + node.setAttr('_src', node.getAttr('src')); + break; + case 'span': + if (browser.webkit && (val = node.getStyle('white-space'))) { + if (/nowrap|normal/.test(val)) { + node.setStyle('white-space', ''); + if (me.options.autoClearEmptyNode && utils.isEmptyObject(node.attrs)) { + node.parentNode.removeChild(node, true) + } + } + } + val = node.getAttr('id'); + if(val && /^_baidu_bookmark_/i.test(val)){ + node.parentNode.removeChild(node) + } + break; + case 'p': + if (val = node.getAttr('align')) { + node.setAttr('align'); + node.setStyle('text-align', val) + } + //trace:3431 +// var cssStyle = node.getAttr('style'); +// if (cssStyle) { +// cssStyle = cssStyle.replace(/(margin|padding)[^;]+/g, ''); +// node.setAttr('style', cssStyle) +// +// } + //p标签不允许嵌套 + utils.each(node.children,function(n){ + if(n.type == 'element' && n.tagName == 'p'){ + var next = n.nextSibling(); + node.parentNode.insertAfter(n,node); + var last = n; + while(next){ + var tmp = next.nextSibling(); + node.parentNode.insertAfter(next,last); + last = next; + next = tmp; + } + return false; + } + }); + if (!node.firstChild()) { + node.innerHTML(browser.ie ? ' ' : '
    ') + } + break; + case 'div': + if(node.getAttr('cdata_tag')){ + break; + } + //针对代码这里不处理插入代码的div + val = node.getAttr('class'); + if(val && /^line number\d+/.test(val)){ + break; + } + if(!allowDivTransToP){ + break; + } + var tmpNode, p = UE.uNode.createElement('p'); + while (tmpNode = node.firstChild()) { + if (tmpNode.type == 'text' || !UE.dom.dtd.$block[tmpNode.tagName]) { + p.appendChild(tmpNode); + } else { + if (p.firstChild()) { + node.parentNode.insertBefore(p, node); + p = UE.uNode.createElement('p'); + } else { + node.parentNode.insertBefore(tmpNode, node); + } + } + } + if (p.firstChild()) { + node.parentNode.insertBefore(p, node); + } + node.parentNode.removeChild(node); + break; + case 'dl': + node.tagName = 'ul'; + break; + case 'dt': + case 'dd': + node.tagName = 'li'; + break; + case 'li': + var className = node.getAttr('class'); + if (!className || !/list\-/.test(className)) { + node.setAttr() + } + var tmpNodes = node.getNodesByTagName('ol ul'); + UE.utils.each(tmpNodes, function (n) { + node.parentNode.insertAfter(n, node); + }); + break; + case 'td': + case 'th': + case 'caption': + if(!node.children || !node.children.length){ + node.appendChild(browser.ie11below ? UE.uNode.createText(' ') : UE.uNode.createElement('br')) + } + break; + case 'table': + if(me.options.disabledTableInTable && tdParent(node)){ + node.parentNode.insertBefore(UE.uNode.createText(node.innerText()),node); + node.parentNode.removeChild(node) + } + } + + } +// if(node.type == 'comment'){ +// node.parentNode.removeChild(node); +// } + }) + + }); + + //从编辑器出去的内容处理 + me.addOutputRule(function (root) { + + var val; + root.traversal(function (node) { + if (node.type == 'element') { + + if (me.options.autoClearEmptyNode && dtd.$inline[node.tagName] && !dtd.$empty[node.tagName] && (!node.attrs || utils.isEmptyObject(node.attrs))) { + + if (!node.firstChild()) node.parentNode.removeChild(node); + else if (node.tagName == 'span' && (!node.attrs || utils.isEmptyObject(node.attrs))) { + node.parentNode.removeChild(node, true) + } + return; + } + switch (node.tagName) { + case 'div': + if (val = node.getAttr('cdata_tag')) { + node.tagName = val; + node.appendChild(UE.uNode.createText(node.getAttr('cdata_data'))); + node.setAttr({cdata_tag: '', cdata_data: '','_ue_custom_node_':''}); + } + break; + case 'a': + if (val = node.getAttr('_href')) { + node.setAttr({ + 'href': utils.html(val), + '_href': '' + }) + } + break; + break; + case 'span': + val = node.getAttr('id'); + if(val && /^_baidu_bookmark_/i.test(val)){ + node.parentNode.removeChild(node) + } + break; + case 'img': + if (val = node.getAttr('_src')) { + node.setAttr({ + 'src': node.getAttr('_src'), + '_src': '' + }) + } + + + } + } + + }) + + + }); +}; + + +// plugins/inserthtml.js +/** + * 插入html字符串插件 + * @file + * @since 1.2.6.1 + */ + +/** + * 插入html代码 + * @command inserthtml + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } html 插入的html字符串 + * @remaind 插入的标签内容是在当前的选区位置上插入,如果当前是闭合状态,那直接插入内容, 如果当前是选中状态,将先清除当前选中内容后,再做插入 + * @warning 注意:该命令会对当前选区的位置,对插入的内容进行过滤转换处理。 过滤的规则遵循html语意化的原则。 + * @example + * ```javascript + * //xxx[BB]xxx 当前选区为非闭合选区,选中BB这两个文本 + * //执行命令,插入CC + * //插入后的效果 xxxCCxxx + * //

    xx|xxx

    当前选区为闭合状态 + * //插入

    CC

    + * //结果

    xx

    CC

    xxx

    + * //

    xxxx

    |

    xxx

    当前选区在两个p标签之间 + * //插入 xxxx + * //结果

    xxxx

    xxxx

    xxx

    + * ``` + */ + +UE.commands['inserthtml'] = { + execCommand: function (command,html,notNeedFilter){ + var me = this, + range, + div; + if(!html){ + return; + } + if(me.fireEvent('beforeinserthtml',html) === true){ + return; + } + range = me.selection.getRange(); + div = range.document.createElement( 'div' ); + div.style.display = 'inline'; + + if (!notNeedFilter) { + var root = UE.htmlparser(html); + //如果给了过滤规则就先进行过滤 + if(me.options.filterRules){ + UE.filterNode(root,me.options.filterRules); + } + //执行默认的处理 + me.filterInputRule(root); + html = root.toHtml() + } + div.innerHTML = utils.trim( html ); + + if ( !range.collapsed ) { + var tmpNode = range.startContainer; + if(domUtils.isFillChar(tmpNode)){ + range.setStartBefore(tmpNode) + } + tmpNode = range.endContainer; + if(domUtils.isFillChar(tmpNode)){ + range.setEndAfter(tmpNode) + } + range.txtToElmBoundary(); + //结束边界可能放到了br的前边,要把br包含进来 + // x[xxx]
    + if(range.endContainer && range.endContainer.nodeType == 1){ + tmpNode = range.endContainer.childNodes[range.endOffset]; + if(tmpNode && domUtils.isBr(tmpNode)){ + range.setEndAfter(tmpNode); + } + } + if(range.startOffset == 0){ + tmpNode = range.startContainer; + if(domUtils.isBoundaryNode(tmpNode,'firstChild') ){ + tmpNode = range.endContainer; + if(range.endOffset == (tmpNode.nodeType == 3 ? tmpNode.nodeValue.length : tmpNode.childNodes.length) && domUtils.isBoundaryNode(tmpNode,'lastChild')){ + me.body.innerHTML = '

    '+(browser.ie ? '' : '
    ')+'

    '; + range.setStart(me.body.firstChild,0).collapse(true) + + } + } + } + !range.collapsed && range.deleteContents(); + if(range.startContainer.nodeType == 1){ + var child = range.startContainer.childNodes[range.startOffset],pre; + if(child && domUtils.isBlockElm(child) && (pre = child.previousSibling) && domUtils.isBlockElm(pre)){ + range.setEnd(pre,pre.childNodes.length).collapse(); + while(child.firstChild){ + pre.appendChild(child.firstChild); + } + domUtils.remove(child); + } + } + + } + + + var child,parent,pre,tmp,hadBreak = 0, nextNode; + //如果当前位置选中了fillchar要干掉,要不会产生空行 + if(range.inFillChar()){ + child = range.startContainer; + if(domUtils.isFillChar(child)){ + range.setStartBefore(child).collapse(true); + domUtils.remove(child); + }else if(domUtils.isFillChar(child,true)){ + child.nodeValue = child.nodeValue.replace(fillCharReg,''); + range.startOffset--; + range.collapsed && range.collapse(true) + } + } + //列表单独处理 + var li = domUtils.findParentByTagName(range.startContainer,'li',true); + if(li){ + var next,last; + while(child = div.firstChild){ + //针对hr单独处理一下先 + while(child && (child.nodeType == 3 || !domUtils.isBlockElm(child) || child.tagName=='HR' )){ + next = child.nextSibling; + range.insertNode( child).collapse(); + last = child; + child = next; + + } + if(child){ + if(/^(ol|ul)$/i.test(child.tagName)){ + while(child.firstChild){ + last = child.firstChild; + domUtils.insertAfter(li,child.firstChild); + li = li.nextSibling; + } + domUtils.remove(child) + }else{ + var tmpLi; + next = child.nextSibling; + tmpLi = me.document.createElement('li'); + domUtils.insertAfter(li,tmpLi); + tmpLi.appendChild(child); + last = child; + child = next; + li = tmpLi; + } + } + } + li = domUtils.findParentByTagName(range.startContainer,'li',true); + if(domUtils.isEmptyBlock(li)){ + domUtils.remove(li) + } + if(last){ + + range.setStartAfter(last).collapse(true).select(true) + } + }else{ + while ( child = div.firstChild ) { + if(hadBreak){ + var p = me.document.createElement('p'); + while(child && (child.nodeType == 3 || !dtd.$block[child.tagName])){ + nextNode = child.nextSibling; + p.appendChild(child); + child = nextNode; + } + if(p.firstChild){ + + child = p + } + } + range.insertNode( child ); + nextNode = child.nextSibling; + if ( !hadBreak && child.nodeType == domUtils.NODE_ELEMENT && domUtils.isBlockElm( child ) ){ + + parent = domUtils.findParent( child,function ( node ){ return domUtils.isBlockElm( node ); } ); + if ( parent && parent.tagName.toLowerCase() != 'body' && !(dtd[parent.tagName][child.nodeName] && child.parentNode === parent)){ + if(!dtd[parent.tagName][child.nodeName]){ + pre = parent; + }else{ + tmp = child.parentNode; + while (tmp !== parent){ + pre = tmp; + tmp = tmp.parentNode; + + } + } + + + domUtils.breakParent( child, pre || tmp ); + //去掉break后前一个多余的节点

    |<[p> ==>

    |

    + var pre = child.previousSibling; + domUtils.trimWhiteTextNode(pre); + if(!pre.childNodes.length){ + domUtils.remove(pre); + } + //trace:2012,在非ie的情况,切开后剩下的节点有可能不能点入光标添加br占位 + + if(!browser.ie && + (next = child.nextSibling) && + domUtils.isBlockElm(next) && + next.lastChild && + !domUtils.isBr(next.lastChild)){ + next.appendChild(me.document.createElement('br')); + } + hadBreak = 1; + } + } + var next = child.nextSibling; + if(!div.firstChild && next && domUtils.isBlockElm(next)){ + + range.setStart(next,0).collapse(true); + break; + } + range.setEndAfter( child ).collapse(); + + } + + child = range.startContainer; + + if(nextNode && domUtils.isBr(nextNode)){ + domUtils.remove(nextNode) + } + //用chrome可能有空白展位符 + if(domUtils.isBlockElm(child) && domUtils.isEmptyNode(child)){ + if(nextNode = child.nextSibling){ + domUtils.remove(child); + if(nextNode.nodeType == 1 && dtd.$block[nextNode.tagName]){ + + range.setStart(nextNode,0).collapse(true).shrinkBoundary() + } + }else{ + + try{ + child.innerHTML = browser.ie ? domUtils.fillChar : '
    '; + }catch(e){ + range.setStartBefore(child); + domUtils.remove(child) + } + + } + + } + //加上true因为在删除表情等时会删两次,第一次是删的fillData + try{ + range.select(true); + }catch(e){} + + } + + + + setTimeout(function(){ + range = me.selection.getRange(); + range.scrollToView(me.autoHeightEnabled,me.autoHeightEnabled ? domUtils.getXY(me.iframe).y:0); + me.fireEvent('afterinserthtml', html); + },200); + } +}; + + +// plugins/autotypeset.js +/** + * 自动排版 + * @file + * @since 1.2.6.1 + */ + +/** + * 对当前编辑器的内容执行自动排版, 排版的行为根据config配置文件里的“autotypeset”选项进行控制。 + * @command autotypeset + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'autotypeset' ); + * ``` + */ + +UE.plugins['autotypeset'] = function(){ + + this.setOpt({'autotypeset': { + mergeEmptyline: true, //合并空行 + removeClass: true, //去掉冗余的class + removeEmptyline: false, //去掉空行 + textAlign:"left", //段落的排版方式,可以是 left,right,center,justify 去掉这个属性表示不执行排版 + imageBlockLine: 'center', //图片的浮动方式,独占一行剧中,左右浮动,默认: center,left,right,none 去掉这个属性表示不执行排版 + pasteFilter: false, //根据规则过滤没事粘贴进来的内容 + clearFontSize: false, //去掉所有的内嵌字号,使用编辑器默认的字号 + clearFontFamily: false, //去掉所有的内嵌字体,使用编辑器默认的字体 + removeEmptyNode: false, // 去掉空节点 + //可以去掉的标签 + removeTagNames: utils.extend({div:1},dtd.$removeEmpty), + indent: false, // 行首缩进 + indentValue : '2em', //行首缩进的大小 + bdc2sb: false, + tobdc: false + }}); + + var me = this, + opt = me.options.autotypeset, + remainClass = { + 'selectTdClass':1, + 'pagebreak':1, + 'anchorclass':1 + }, + remainTag = { + 'li':1 + }, + tags = { + div:1, + p:1, + //trace:2183 这些也认为是行 + blockquote:1,center:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1, + span:1 + }, + highlightCont; + //升级了版本,但配置项目里没有autotypeset + if(!opt){ + return; + } + + readLocalOpts(); + + function isLine(node,notEmpty){ + if(!node || node.nodeType == 3) + return 0; + if(domUtils.isBr(node)) + return 1; + if(node && node.parentNode && tags[node.tagName.toLowerCase()]){ + if(highlightCont && highlightCont.contains(node) + || + node.getAttribute('pagebreak') + ){ + return 0; + } + + return notEmpty ? !domUtils.isEmptyBlock(node) : domUtils.isEmptyBlock(node,new RegExp('[\\s'+domUtils.fillChar + +']','g')); + } + } + + function removeNotAttributeSpan(node){ + if(!node.style.cssText){ + domUtils.removeAttributes(node,['style']); + if(node.tagName.toLowerCase() == 'span' && domUtils.hasNoAttributes(node)){ + domUtils.remove(node,true); + } + } + } + function autotype(type,html){ + + var me = this,cont; + if(html){ + if(!opt.pasteFilter){ + return; + } + cont = me.document.createElement('div'); + cont.innerHTML = html.html; + }else{ + cont = me.document.body; + } + var nodes = domUtils.getElementsByTagName(cont,'*'); + + // 行首缩进,段落方向,段间距,段内间距 + for(var i=0,ci;ci=nodes[i++];){ + + if(me.fireEvent('excludeNodeinautotype',ci) === true){ + continue; + } + //font-size + if(opt.clearFontSize && ci.style.fontSize){ + domUtils.removeStyle(ci,'font-size'); + + removeNotAttributeSpan(ci); + + } + //font-family + if(opt.clearFontFamily && ci.style.fontFamily){ + domUtils.removeStyle(ci,'font-family'); + removeNotAttributeSpan(ci); + } + + if(isLine(ci)){ + //合并空行 + if(opt.mergeEmptyline ){ + var next = ci.nextSibling,tmpNode,isBr = domUtils.isBr(ci); + while(isLine(next)){ + tmpNode = next; + next = tmpNode.nextSibling; + if(isBr && (!next || next && !domUtils.isBr(next))){ + break; + } + domUtils.remove(tmpNode); + } + + } + //去掉空行,保留占位的空行 + if(opt.removeEmptyline && domUtils.inDoc(ci,cont) && !remainTag[ci.parentNode.tagName.toLowerCase()] ){ + if(domUtils.isBr(ci)){ + next = ci.nextSibling; + if(next && !domUtils.isBr(next)){ + continue; + } + } + domUtils.remove(ci); + continue; + + } + + } + if(isLine(ci,true) && ci.tagName != 'SPAN'){ + if(opt.indent){ + ci.style.textIndent = opt.indentValue; + } + if(opt.textAlign){ + ci.style.textAlign = opt.textAlign; + } + // if(opt.lineHeight) + // ci.style.lineHeight = opt.lineHeight + 'cm'; + + } + + //去掉class,保留的class不去掉 + if(opt.removeClass && ci.className && !remainClass[ci.className.toLowerCase()]){ + + if(highlightCont && highlightCont.contains(ci)){ + continue; + } + domUtils.removeAttributes(ci,['class']); + } + + //表情不处理 + if(opt.imageBlockLine && ci.tagName.toLowerCase() == 'img' && !ci.getAttribute('emotion')){ + if(html){ + var img = ci; + switch (opt.imageBlockLine){ + case 'left': + case 'right': + case 'none': + var pN = img.parentNode,tmpNode,pre,next; + while(dtd.$inline[pN.tagName] || pN.tagName == 'A'){ + pN = pN.parentNode; + } + tmpNode = pN; + if(tmpNode.tagName == 'P' && domUtils.getStyle(tmpNode,'text-align') == 'center'){ + if(!domUtils.isBody(tmpNode) && domUtils.getChildCount(tmpNode,function(node){return !domUtils.isBr(node) && !domUtils.isWhitespace(node)}) == 1){ + pre = tmpNode.previousSibling; + next = tmpNode.nextSibling; + if(pre && next && pre.nodeType == 1 && next.nodeType == 1 && pre.tagName == next.tagName && domUtils.isBlockElm(pre)){ + pre.appendChild(tmpNode.firstChild); + while(next.firstChild){ + pre.appendChild(next.firstChild); + } + domUtils.remove(tmpNode); + domUtils.remove(next); + }else{ + domUtils.setStyle(tmpNode,'text-align',''); + } + + + } + + + } + domUtils.setStyle(img,'float', opt.imageBlockLine); + break; + case 'center': + if(me.queryCommandValue('imagefloat') != 'center'){ + pN = img.parentNode; + domUtils.setStyle(img,'float','none'); + tmpNode = img; + while(pN && domUtils.getChildCount(pN,function(node){return !domUtils.isBr(node) && !domUtils.isWhitespace(node)}) == 1 + && (dtd.$inline[pN.tagName] || pN.tagName == 'A')){ + tmpNode = pN; + pN = pN.parentNode; + } + var pNode = me.document.createElement('p'); + domUtils.setAttributes(pNode,{ + + style:'text-align:center' + }); + tmpNode.parentNode.insertBefore(pNode,tmpNode); + pNode.appendChild(tmpNode); + domUtils.setStyle(tmpNode,'float',''); + + } + + + } + } else { + var range = me.selection.getRange(); + range.selectNode(ci).select(); + me.execCommand('imagefloat', opt.imageBlockLine); + } + + } + + //去掉冗余的标签 + if(opt.removeEmptyNode){ + if(opt.removeTagNames[ci.tagName.toLowerCase()] && domUtils.hasNoAttributes(ci) && domUtils.isEmptyBlock(ci)){ + domUtils.remove(ci); + } + } + } + if(opt.tobdc){ + var root = UE.htmlparser(cont.innerHTML); + root.traversal(function(node){ + if(node.type == 'text'){ + node.data = ToDBC(node.data) + } + }); + cont.innerHTML = root.toHtml() + } + if(opt.bdc2sb){ + var root = UE.htmlparser(cont.innerHTML); + root.traversal(function(node){ + if(node.type == 'text'){ + node.data = DBC2SB(node.data) + } + }); + cont.innerHTML = root.toHtml() + } + if(html){ + html.html = cont.innerHTML; + } + } + if(opt.pasteFilter){ + me.addListener('beforepaste',autotype); + } + + function DBC2SB(str) { + var result = ''; + for (var i = 0; i < str.length; i++) { + var code = str.charCodeAt(i); //获取当前字符的unicode编码 + if (code >= 65281 && code <= 65373)//在这个unicode编码范围中的是所有的英文字母已经各种字符 + { + result += String.fromCharCode(str.charCodeAt(i) - 65248); //把全角字符的unicode编码转换为对应半角字符的unicode码 + } else if (code == 12288)//空格 + { + result += String.fromCharCode(str.charCodeAt(i) - 12288 + 32); + } else { + result += str.charAt(i); + } + } + return result; + } + function ToDBC(txtstring) { + txtstring = utils.html(txtstring); + var tmp = ""; + var mark = "";/*用于判断,如果是html尖括里的标记,则不进行全角的转换*/ + for (var i = 0; i < txtstring.length; i++) { + if (txtstring.charCodeAt(i) == 32) { + tmp = tmp + String.fromCharCode(12288); + } + else if (txtstring.charCodeAt(i) < 127) { + tmp = tmp + String.fromCharCode(txtstring.charCodeAt(i) + 65248); + } + else { + tmp += txtstring.charAt(i); + } + } + return tmp; + } + + function readLocalOpts() { + var cookieOpt = me.getPreferences('autotypeset'); + utils.extend(me.options.autotypeset, cookieOpt); + } + + me.commands['autotypeset'] = { + execCommand:function () { + me.removeListener('beforepaste',autotype); + if(opt.pasteFilter){ + me.addListener('beforepaste',autotype); + } + autotype.call(me) + } + + }; + +}; + + + +// plugins/autosubmit.js +/** + * 快捷键提交 + * @file + * @since 1.2.6.1 + */ + +/** + * 提交表单 + * @command autosubmit + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'autosubmit' ); + * ``` + */ + +UE.plugin.register('autosubmit',function(){ + return { + shortcutkey:{ + "autosubmit":"ctrl+13" //手动提交 + }, + commands:{ + 'autosubmit':{ + execCommand:function () { + var me=this, + form = domUtils.findParentByTagName(me.iframe,"form", false); + if (form){ + if(me.fireEvent("beforesubmit")===false){ + return; + } + me.sync(); + form.submit(); + } + } + } + } + } +}); + +// plugins/background.js +/** + * 背景插件,为UEditor提供设置背景功能 + * @file + * @since 1.2.6.1 + */ +UE.plugin.register('background', function () { + var me = this, + cssRuleId = 'editor_background', + isSetColored, + reg = new RegExp('body[\\s]*\\{(.+)\\}', 'i'); + + function stringToObj(str) { + var obj = {}, styles = str.split(';'); + utils.each(styles, function (v) { + var index = v.indexOf(':'), + key = utils.trim(v.substr(0, index)).toLowerCase(); + key && (obj[key] = utils.trim(v.substr(index + 1) || '')); + }); + return obj; + } + + function setBackground(obj) { + if (obj) { + var styles = []; + for (var name in obj) { + if (obj.hasOwnProperty(name)) { + styles.push(name + ":" + obj[name] + '; '); + } + } + utils.cssRule(cssRuleId, styles.length ? ('body{' + styles.join("") + '}') : '', me.document); + } else { + utils.cssRule(cssRuleId, '', me.document) + } + } + //重写editor.hasContent方法 + + var orgFn = me.hasContents; + me.hasContents = function(){ + if(me.queryCommandValue('background')){ + return true + } + return orgFn.apply(me,arguments); + }; + return { + bindEvents: { + 'getAllHtml': function (type, headHtml) { + var body = this.body, + su = domUtils.getComputedStyle(body, "background-image"), + url = ""; + if (su.indexOf(me.options.imagePath) > 0) { + url = su.substring(su.indexOf(me.options.imagePath), su.length - 1).replace(/"|\(|\)/ig, ""); + } else { + url = su != "none" ? su.replace(/url\("?|"?\)/ig, "") : ""; + } + var html = ' '; + headHtml.push(html); + }, + 'aftersetcontent': function () { + if(isSetColored == false) setBackground(); + } + }, + inputRule: function (root) { + isSetColored = false; + utils.each(root.getNodesByTagName('p'), function (p) { + var styles = p.getAttr('data-background'); + if (styles) { + isSetColored = true; + setBackground(stringToObj(styles)); + p.parentNode.removeChild(p); + } + }) + }, + outputRule: function (root) { + var me = this, + styles = (utils.cssRule(cssRuleId, me.document) || '').replace(/[\n\r]+/g, '').match(reg); + if (styles) { + root.appendChild(UE.uNode.createElement('


    ')); + } + }, + commands: { + 'background': { + execCommand: function (cmd, obj) { + setBackground(obj); + }, + queryCommandValue: function () { + var me = this, + styles = (utils.cssRule(cssRuleId, me.document) || '').replace(/[\n\r]+/g, '').match(reg); + return styles ? stringToObj(styles[1]) : null; + }, + notNeedUndo: true + } + } + } +}); + +// plugins/image.js +/** + * 图片插入、排版插件 + * @file + * @since 1.2.6.1 + */ + +/** + * 图片对齐方式 + * @command imagefloat + * @method execCommand + * @remind 值center为独占一行居中 + * @param { String } cmd 命令字符串 + * @param { String } align 对齐方式,可传left、right、none、center + * @remaind center表示图片独占一行 + * @example + * ```javascript + * editor.execCommand( 'imagefloat', 'center' ); + * ``` + */ + +/** + * 如果选区所在位置是图片区域 + * @command imagefloat + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回图片对齐方式 + * @example + * ```javascript + * editor.queryCommandValue( 'imagefloat' ); + * ``` + */ + +UE.commands['imagefloat'] = { + execCommand:function (cmd, align) { + var me = this, + range = me.selection.getRange(); + if (!range.collapsed) { + var img = range.getClosedNode(); + if (img && img.tagName == 'IMG') { + switch (align) { + case 'left': + case 'right': + case 'none': + var pN = img.parentNode, tmpNode, pre, next; + while (dtd.$inline[pN.tagName] || pN.tagName == 'A') { + pN = pN.parentNode; + } + tmpNode = pN; + if (tmpNode.tagName == 'P' && domUtils.getStyle(tmpNode, 'text-align') == 'center') { + if (!domUtils.isBody(tmpNode) && domUtils.getChildCount(tmpNode, function (node) { + return !domUtils.isBr(node) && !domUtils.isWhitespace(node); + }) == 1) { + pre = tmpNode.previousSibling; + next = tmpNode.nextSibling; + if (pre && next && pre.nodeType == 1 && next.nodeType == 1 && pre.tagName == next.tagName && domUtils.isBlockElm(pre)) { + pre.appendChild(tmpNode.firstChild); + while (next.firstChild) { + pre.appendChild(next.firstChild); + } + domUtils.remove(tmpNode); + domUtils.remove(next); + } else { + domUtils.setStyle(tmpNode, 'text-align', ''); + } + + + } + + range.selectNode(img).select(); + } + domUtils.setStyle(img, 'float', align == 'none' ? '' : align); + if(align == 'none'){ + domUtils.removeAttributes(img,'align'); + } + + break; + case 'center': + if (me.queryCommandValue('imagefloat') != 'center') { + pN = img.parentNode; + domUtils.setStyle(img, 'float', ''); + domUtils.removeAttributes(img,'align'); + tmpNode = img; + while (pN && domUtils.getChildCount(pN, function (node) { + return !domUtils.isBr(node) && !domUtils.isWhitespace(node); + }) == 1 + && (dtd.$inline[pN.tagName] || pN.tagName == 'A')) { + tmpNode = pN; + pN = pN.parentNode; + } + range.setStartBefore(tmpNode).setCursor(false); + pN = me.document.createElement('div'); + pN.appendChild(tmpNode); + domUtils.setStyle(tmpNode, 'float', ''); + + me.execCommand('insertHtml', '

    ' + pN.innerHTML + '

    '); + + tmpNode = me.document.getElementById('_img_parent_tmp'); + tmpNode.removeAttribute('id'); + tmpNode = tmpNode.firstChild; + range.selectNode(tmpNode).select(); + //去掉后边多余的元素 + next = tmpNode.parentNode.nextSibling; + if (next && domUtils.isEmptyNode(next)) { + domUtils.remove(next); + } + + } + + break; + } + + } + } + }, + queryCommandValue:function () { + var range = this.selection.getRange(), + startNode, floatStyle; + if (range.collapsed) { + return 'none'; + } + startNode = range.getClosedNode(); + if (startNode && startNode.nodeType == 1 && startNode.tagName == 'IMG') { + floatStyle = domUtils.getComputedStyle(startNode, 'float') || startNode.getAttribute('align'); + + if (floatStyle == 'none') { + floatStyle = domUtils.getComputedStyle(startNode.parentNode, 'text-align') == 'center' ? 'center' : floatStyle; + } + return { + left:1, + right:1, + center:1 + }[floatStyle] ? floatStyle : 'none'; + } + return 'none'; + + + }, + queryCommandState:function () { + var range = this.selection.getRange(), + startNode; + + if (range.collapsed) return -1; + + startNode = range.getClosedNode(); + if (startNode && startNode.nodeType == 1 && startNode.tagName == 'IMG') { + return 0; + } + return -1; + } +}; + + +/** + * 插入图片 + * @command insertimage + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { Object } opt 属性键值对,这些属性都将被复制到当前插入图片 + * @remind 该命令第二个参数可接受一个图片配置项对象的数组,可以插入多张图片, + * 此时数组的每一个元素都是一个Object类型的图片属性集合。 + * @example + * ```javascript + * editor.execCommand( 'insertimage', { + * src:'a/b/c.jpg', + * width:'100', + * height:'100' + * } ); + * ``` + * @example + * ```javascript + * editor.execCommand( 'insertimage', [{ + * src:'a/b/c.jpg', + * width:'100', + * height:'100' + * },{ + * src:'a/b/d.jpg', + * width:'100', + * height:'100' + * }] ); + * ``` + */ + +UE.commands['insertimage'] = { + execCommand:function (cmd, opt) { + + opt = utils.isArray(opt) ? opt : [opt]; + if (!opt.length) { + return; + } + var me = this, + range = me.selection.getRange(), + img = range.getClosedNode(); + + if(me.fireEvent('beforeinsertimage', opt) === true){ + return; + } + + if (img && /img/i.test(img.tagName) && (img.className != "edui-faked-video" || img.className.indexOf("edui-upload-video")!=-1) && !img.getAttribute("word_img")) { + var first = opt.shift(); + var floatStyle = first['floatStyle']; + delete first['floatStyle']; +//// img.style.border = (first.border||0) +"px solid #000"; +//// img.style.margin = (first.margin||0) +"px"; +// img.style.cssText += ';margin:' + (first.margin||0) +"px;" + 'border:' + (first.border||0) +"px solid #000"; + domUtils.setAttributes(img, first); + me.execCommand('imagefloat', floatStyle); + if (opt.length > 0) { + range.setStartAfter(img).setCursor(false, true); + me.execCommand('insertimage', opt); + } + + } else { + var html = [], str = '', ci; + ci = opt[0]; + if (opt.length == 1) { + str = '' + ci.alt + ''; + if (ci['floatStyle'] == 'center') { + str = '

    ' + str + '

    '; + } + html.push(str); + + } else { + for (var i = 0; ci = opt[i++];) { + str = '

    '; + html.push(str); + } + } + + me.execCommand('insertHtml', html.join('')); + } + + me.fireEvent('afterinsertimage', opt) + } +}; + +// plugins/justify.js +/** + * 段落格式 + * @file + * @since 1.2.6.1 + */ + +/** + * 段落对齐方式 + * @command justify + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } align 对齐方式:left => 居左,right => 居右,center => 居中,justify => 两端对齐 + * @example + * ```javascript + * editor.execCommand( 'justify', 'center' ); + * ``` + */ +/** + * 如果选区所在位置是段落区域,返回当前段落对齐方式 + * @command justify + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回段落对齐方式 + * @example + * ```javascript + * editor.queryCommandValue( 'justify' ); + * ``` + */ + +UE.plugins['justify']=function(){ + var me=this, + block = domUtils.isBlockElm, + defaultValue = { + left:1, + right:1, + center:1, + justify:1 + }, + doJustify = function (range, style) { + var bookmark = range.createBookmark(), + filterFn = function (node) { + return node.nodeType == 1 ? node.tagName.toLowerCase() != 'br' && !domUtils.isBookmarkNode(node) : !domUtils.isWhitespace(node); + }; + + range.enlarge(true); + var bookmark2 = range.createBookmark(), + current = domUtils.getNextDomNode(bookmark2.start, false, filterFn), + tmpRange = range.cloneRange(), + tmpNode; + while (current && !(domUtils.getPosition(current, bookmark2.end) & domUtils.POSITION_FOLLOWING)) { + if (current.nodeType == 3 || !block(current)) { + tmpRange.setStartBefore(current); + while (current && current !== bookmark2.end && !block(current)) { + tmpNode = current; + current = domUtils.getNextDomNode(current, false, null, function (node) { + return !block(node); + }); + } + tmpRange.setEndAfter(tmpNode); + var common = tmpRange.getCommonAncestor(); + if (!domUtils.isBody(common) && block(common)) { + domUtils.setStyles(common, utils.isString(style) ? {'text-align':style} : style); + current = common; + } else { + var p = range.document.createElement('p'); + domUtils.setStyles(p, utils.isString(style) ? {'text-align':style} : style); + var frag = tmpRange.extractContents(); + p.appendChild(frag); + tmpRange.insertNode(p); + current = p; + } + current = domUtils.getNextDomNode(current, false, filterFn); + } else { + current = domUtils.getNextDomNode(current, true, filterFn); + } + } + return range.moveToBookmark(bookmark2).moveToBookmark(bookmark); + }; + + UE.commands['justify'] = { + execCommand:function (cmdName, align) { + var range = this.selection.getRange(), + txt; + + //闭合时单独处理 + if (range.collapsed) { + txt = this.document.createTextNode('p'); + range.insertNode(txt); + } + doJustify(range, align); + if (txt) { + range.setStartBefore(txt).collapse(true); + domUtils.remove(txt); + } + + range.select(); + + + return true; + }, + queryCommandValue:function () { + var startNode = this.selection.getStart(), + value = domUtils.getComputedStyle(startNode, 'text-align'); + return defaultValue[value] ? value : 'left'; + }, + queryCommandState:function () { + var start = this.selection.getStart(), + cell = start && domUtils.findParentByTagName(start, ["td", "th","caption"], true); + + return cell? -1:0; + } + + }; +}; + + +// plugins/font.js +/** + * 字体颜色,背景色,字号,字体,下划线,删除线 + * @file + * @since 1.2.6.1 + */ + +/** + * 字体颜色 + * @command forecolor + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } value 色值(必须十六进制) + * @example + * ```javascript + * editor.execCommand( 'forecolor', '#000' ); + * ``` + */ +/** + * 返回选区字体颜色 + * @command forecolor + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回字体颜色 + * @example + * ```javascript + * editor.queryCommandValue( 'forecolor' ); + * ``` + */ + +/** + * 字体背景颜色 + * @command backcolor + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } value 色值(必须十六进制) + * @example + * ```javascript + * editor.execCommand( 'backcolor', '#000' ); + * ``` + */ +/** + * 返回选区字体颜色 + * @command backcolor + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回字体背景颜色 + * @example + * ```javascript + * editor.queryCommandValue( 'backcolor' ); + * ``` + */ + +/** + * 字体大小 + * @command fontsize + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } value 字体大小 + * @example + * ```javascript + * editor.execCommand( 'fontsize', '14px' ); + * ``` + */ +/** + * 返回选区字体大小 + * @command fontsize + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回字体大小 + * @example + * ```javascript + * editor.queryCommandValue( 'fontsize' ); + * ``` + */ + +/** + * 字体样式 + * @command fontfamily + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } value 字体样式 + * @example + * ```javascript + * editor.execCommand( 'fontfamily', '微软雅黑' ); + * ``` + */ +/** + * 返回选区字体样式 + * @command fontfamily + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回字体样式 + * @example + * ```javascript + * editor.queryCommandValue( 'fontfamily' ); + * ``` + */ + +/** + * 字体下划线,与删除线互斥 + * @command underline + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'underline' ); + * ``` + */ + +/** + * 字体删除线,与下划线互斥 + * @command strikethrough + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'strikethrough' ); + * ``` + */ + +/** + * 字体边框 + * @command fontborder + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'fontborder' ); + * ``` + */ + +UE.plugins['font'] = function () { + var me = this, + fonts = { + 'forecolor': 'color', + 'backcolor': 'background-color', + 'fontsize': 'font-size', + 'fontfamily': 'font-family', + 'underline': 'text-decoration', + 'strikethrough': 'text-decoration', + 'fontborder': 'border' + }, + needCmd = {'underline': 1, 'strikethrough': 1, 'fontborder': 1}, + needSetChild = { + 'forecolor': 'color', + 'backcolor': 'background-color', + 'fontsize': 'font-size', + 'fontfamily': 'font-family' + + }; + me.setOpt({ + 'fontfamily': [ + { name: 'songti', val: '宋体,SimSun'}, + { name: 'yahei', val: '微软雅黑,Microsoft YaHei'}, + { name: 'kaiti', val: '楷体,楷体_GB2312, SimKai'}, + { name: 'heiti', val: '黑体, SimHei'}, + { name: 'lishu', val: '隶书, SimLi'}, + { name: 'andaleMono', val: 'andale mono'}, + { name: 'arial', val: 'arial, helvetica,sans-serif'}, + { name: 'arialBlack', val: 'arial black,avant garde'}, + { name: 'comicSansMs', val: 'comic sans ms'}, + { name: 'impact', val: 'impact,chicago'}, + { name: 'timesNewRoman', val: 'times new roman'} + ], + 'fontsize': [10, 11, 12, 14, 16, 18, 20, 24, 36] + }); + + function mergeWithParent(node){ + var parent; + while(parent = node.parentNode){ + if(parent.tagName == 'SPAN' && domUtils.getChildCount(parent,function(child){ + return !domUtils.isBookmarkNode(child) && !domUtils.isBr(child) + }) == 1) { + parent.style.cssText += node.style.cssText; + domUtils.remove(node,true); + node = parent; + + }else{ + break; + } + } + + } + function mergeChild(rng,cmdName,value){ + if(needSetChild[cmdName]){ + rng.adjustmentBoundary(); + if(!rng.collapsed && rng.startContainer.nodeType == 1){ + var start = rng.startContainer.childNodes[rng.startOffset]; + if(start && domUtils.isTagNode(start,'span')){ + var bk = rng.createBookmark(); + utils.each(domUtils.getElementsByTagName(start, 'span'), function (span) { + if (!span.parentNode || domUtils.isBookmarkNode(span))return; + if(cmdName == 'backcolor' && domUtils.getComputedStyle(span,'background-color').toLowerCase() === value){ + return; + } + domUtils.removeStyle(span,needSetChild[cmdName]); + if(span.style.cssText.replace(/^\s+$/,'').length == 0){ + domUtils.remove(span,true) + } + }); + rng.moveToBookmark(bk) + } + } + } + + } + function mergesibling(rng,cmdName,value) { + var collapsed = rng.collapsed, + bk = rng.createBookmark(), common; + if (collapsed) { + common = bk.start.parentNode; + while (dtd.$inline[common.tagName]) { + common = common.parentNode; + } + } else { + common = domUtils.getCommonAncestor(bk.start, bk.end); + } + utils.each(domUtils.getElementsByTagName(common, 'span'), function (span) { + if (!span.parentNode || domUtils.isBookmarkNode(span))return; + if (/\s*border\s*:\s*none;?\s*/i.test(span.style.cssText)) { + if(/^\s*border\s*:\s*none;?\s*$/.test(span.style.cssText)){ + domUtils.remove(span, true); + }else{ + domUtils.removeStyle(span,'border'); + } + return + } + if (/border/i.test(span.style.cssText) && span.parentNode.tagName == 'SPAN' && /border/i.test(span.parentNode.style.cssText)) { + span.style.cssText = span.style.cssText.replace(/border[^:]*:[^;]+;?/gi, ''); + } + if(!(cmdName=='fontborder' && value=='none')){ + var next = span.nextSibling; + while (next && next.nodeType == 1 && next.tagName == 'SPAN' ) { + if(domUtils.isBookmarkNode(next) && cmdName == 'fontborder') { + span.appendChild(next); + next = span.nextSibling; + continue; + } + if (next.style.cssText == span.style.cssText) { + domUtils.moveChild(next, span); + domUtils.remove(next); + } + if (span.nextSibling === next) + break; + next = span.nextSibling; + } + } + + + mergeWithParent(span); + if(browser.ie && browser.version > 8 ){ + //拷贝父亲们的特别的属性,这里只做背景颜色的处理 + var parent = domUtils.findParent(span,function(n){return n.tagName == 'SPAN' && /background-color/.test(n.style.cssText)}); + if(parent && !/background-color/.test(span.style.cssText)){ + span.style.backgroundColor = parent.style.backgroundColor; + } + } + + }); + rng.moveToBookmark(bk); + mergeChild(rng,cmdName,value) + } + + me.addInputRule(function (root) { + utils.each(root.getNodesByTagName('u s del font strike'), function (node) { + if (node.tagName == 'font') { + var cssStyle = []; + for (var p in node.attrs) { + switch (p) { + case 'size': + cssStyle.push('font-size:' + + ({ + '1':'10', + '2':'12', + '3':'16', + '4':'18', + '5':'24', + '6':'32', + '7':'48' + }[node.attrs[p]] || node.attrs[p]) + 'px'); + break; + case 'color': + cssStyle.push('color:' + node.attrs[p]); + break; + case 'face': + cssStyle.push('font-family:' + node.attrs[p]); + break; + case 'style': + cssStyle.push(node.attrs[p]); + } + } + node.attrs = { + 'style': cssStyle.join(';') + }; + } else { + var val = node.tagName == 'u' ? 'underline' : 'line-through'; + node.attrs = { + 'style': (node.getAttr('style') || '') + 'text-decoration:' + val + ';' + } + } + node.tagName = 'span'; + }); +// utils.each(root.getNodesByTagName('span'), function (node) { +// var val; +// if(val = node.getAttr('class')){ +// if(/fontstrikethrough/.test(val)){ +// node.setStyle('text-decoration','line-through'); +// if(node.attrs['class']){ +// node.attrs['class'] = node.attrs['class'].replace(/fontstrikethrough/,''); +// }else{ +// node.setAttr('class') +// } +// } +// if(/fontborder/.test(val)){ +// node.setStyle('border','1px solid #000'); +// if(node.attrs['class']){ +// node.attrs['class'] = node.attrs['class'].replace(/fontborder/,''); +// }else{ +// node.setAttr('class') +// } +// } +// } +// }); + }); +// me.addOutputRule(function(root){ +// utils.each(root.getNodesByTagName('span'), function (node) { +// var val; +// if(val = node.getStyle('text-decoration')){ +// if(/line-through/.test(val)){ +// if(node.attrs['class']){ +// node.attrs['class'] += ' fontstrikethrough'; +// }else{ +// node.setAttr('class','fontstrikethrough') +// } +// } +// +// node.setStyle('text-decoration') +// } +// if(val = node.getStyle('border')){ +// if(/1px/.test(val) && /solid/.test(val)){ +// if(node.attrs['class']){ +// node.attrs['class'] += ' fontborder'; +// +// }else{ +// node.setAttr('class','fontborder') +// } +// } +// node.setStyle('border') +// +// } +// }); +// }); + for (var p in fonts) { + (function (cmd, style) { + UE.commands[cmd] = { + execCommand: function (cmdName, value) { + value = value || (this.queryCommandState(cmdName) ? 'none' : cmdName == 'underline' ? 'underline' : + cmdName == 'fontborder' ? '1px solid #000' : + 'line-through'); + var me = this, + range = this.selection.getRange(), + text; + + if (value == 'default') { + + if (range.collapsed) { + text = me.document.createTextNode('font'); + range.insertNode(text).select(); + + } + me.execCommand('removeFormat', 'span,a', style); + if (text) { + range.setStartBefore(text).collapse(true); + domUtils.remove(text); + } + mergesibling(range,cmdName,value); + range.select() + } else { + if (!range.collapsed) { + if (needCmd[cmd] && me.queryCommandValue(cmd)) { + me.execCommand('removeFormat', 'span,a', style); + } + range = me.selection.getRange(); + + range.applyInlineStyle('span', {'style': style + ':' + value}); + mergesibling(range, cmdName,value); + range.select(); + } else { + + var span = domUtils.findParentByTagName(range.startContainer, 'span', true); + text = me.document.createTextNode('font'); + if (span && !span.children.length && !span[browser.ie ? 'innerText' : 'textContent'].replace(fillCharReg, '').length) { + //for ie hack when enter + range.insertNode(text); + if (needCmd[cmd]) { + range.selectNode(text).select(); + me.execCommand('removeFormat', 'span,a', style, null); + + span = domUtils.findParentByTagName(text, 'span', true); + range.setStartBefore(text); + + } + span && (span.style.cssText += ';' + style + ':' + value); + range.collapse(true).select(); + + + } else { + range.insertNode(text); + range.selectNode(text).select(); + span = range.document.createElement('span'); + + if (needCmd[cmd]) { + //a标签内的不处理跳过 + if (domUtils.findParentByTagName(text, 'a', true)) { + range.setStartBefore(text).setCursor(); + domUtils.remove(text); + return; + } + me.execCommand('removeFormat', 'span,a', style); + } + + span.style.cssText = style + ':' + value; + + + text.parentNode.insertBefore(span, text); + //修复,span套span 但样式不继承的问题 + if (!browser.ie || browser.ie && browser.version == 9) { + var spanParent = span.parentNode; + while (!domUtils.isBlockElm(spanParent)) { + if (spanParent.tagName == 'SPAN') { + //opera合并style不会加入";" + span.style.cssText = spanParent.style.cssText + ";" + span.style.cssText; + } + spanParent = spanParent.parentNode; + } + } + + + if (opera) { + setTimeout(function () { + range.setStart(span, 0).collapse(true); + mergesibling(range, cmdName,value); + range.select(); + }); + } else { + range.setStart(span, 0).collapse(true); + mergesibling(range,cmdName,value); + range.select(); + } + + //trace:981 + //domUtils.mergeToParent(span) + } + domUtils.remove(text); + } + + + } + return true; + }, + queryCommandValue: function (cmdName) { + var startNode = this.selection.getStart(); + + //trace:946 + if (cmdName == 'underline' || cmdName == 'strikethrough') { + var tmpNode = startNode, value; + while (tmpNode && !domUtils.isBlockElm(tmpNode) && !domUtils.isBody(tmpNode)) { + if (tmpNode.nodeType == 1) { + value = domUtils.getComputedStyle(tmpNode, style); + if (value != 'none') { + return value; + } + } + + tmpNode = tmpNode.parentNode; + } + return 'none'; + } + if (cmdName == 'fontborder') { + var tmp = startNode, val; + while (tmp && dtd.$inline[tmp.tagName]) { + if (val = domUtils.getComputedStyle(tmp, 'border')) { + + if (/1px/.test(val) && /solid/.test(val)) { + return val; + } + } + tmp = tmp.parentNode; + } + return '' + } + + if( cmdName == 'FontSize' ) { + var styleVal = domUtils.getComputedStyle(startNode, style), + tmp = /^([\d\.]+)(\w+)$/.exec( styleVal ); + + if( tmp ) { + + return Math.floor( tmp[1] ) + tmp[2]; + + } + + return styleVal; + + } + + return domUtils.getComputedStyle(startNode, style); + }, + queryCommandState: function (cmdName) { + if (!needCmd[cmdName]) + return 0; + var val = this.queryCommandValue(cmdName); + if (cmdName == 'fontborder') { + return /1px/.test(val) && /solid/.test(val) + } else { + return cmdName == 'underline' ? /underline/.test(val) : /line\-through/.test(val); + + } + + } + }; + })(p, fonts[p]); + } +}; + +// plugins/link.js +/** + * 超链接 + * @file + * @since 1.2.6.1 + */ + +/** + * 插入超链接 + * @command link + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { Object } options 设置自定义属性,例如:url、title、target + * @example + * ```javascript + * editor.execCommand( 'link', '{ + * url:'ueditor.baidu.com', + * title:'ueditor', + * target:'_blank' + * }' ); + * ``` + */ +/** + * 返回当前选中的第一个超链接节点 + * @command link + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { Element } 超链接节点 + * @example + * ```javascript + * editor.queryCommandValue( 'link' ); + * ``` + */ + +/** + * 取消超链接 + * @command unlink + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'unlink'); + * ``` + */ + +UE.plugins['link'] = function(){ + function optimize( range ) { + var start = range.startContainer,end = range.endContainer; + + if ( start = domUtils.findParentByTagName( start, 'a', true ) ) { + range.setStartBefore( start ); + } + if ( end = domUtils.findParentByTagName( end, 'a', true ) ) { + range.setEndAfter( end ); + } + } + + + UE.commands['unlink'] = { + execCommand : function() { + var range = this.selection.getRange(), + bookmark; + if(range.collapsed && !domUtils.findParentByTagName( range.startContainer, 'a', true )){ + return; + } + bookmark = range.createBookmark(); + optimize( range ); + range.removeInlineStyle( 'a' ).moveToBookmark( bookmark ).select(); + }, + queryCommandState : function(){ + return !this.highlight && this.queryCommandValue('link') ? 0 : -1; + } + + }; + function doLink(range,opt,me){ + var rngClone = range.cloneRange(), + link = me.queryCommandValue('link'); + optimize( range = range.adjustmentBoundary() ); + var start = range.startContainer; + if(start.nodeType == 1 && link){ + start = start.childNodes[range.startOffset]; + if(start && start.nodeType == 1 && start.tagName == 'A' && /^(?:https?|ftp|file)\s*:\s*\/\//.test(start[browser.ie?'innerText':'textContent'])){ + start[browser.ie ? 'innerText' : 'textContent'] = utils.html(opt.textValue||opt.href); + + } + } + if( !rngClone.collapsed || link){ + range.removeInlineStyle( 'a' ); + rngClone = range.cloneRange(); + } + + if ( rngClone.collapsed ) { + var a = range.document.createElement( 'a'), + text = ''; + if(opt.textValue){ + + text = utils.html(opt.textValue); + delete opt.textValue; + }else{ + text = utils.html(opt.href); + + } + domUtils.setAttributes( a, opt ); + start = domUtils.findParentByTagName( rngClone.startContainer, 'a', true ); + if(start && domUtils.isInNodeEndBoundary(rngClone,start)){ + range.setStartAfter(start).collapse(true); + + } + a[browser.ie ? 'innerText' : 'textContent'] = text; + range.insertNode(a).selectNode( a ); + } else { + range.applyInlineStyle( 'a', opt ); + + } + } + UE.commands['link'] = { + execCommand : function( cmdName, opt ) { + var range; + opt._href && (opt._href = utils.unhtml(opt._href,/[<">]/g)); + opt.href && (opt.href = utils.unhtml(opt.href,/[<">]/g)); + opt.textValue && (opt.textValue = utils.unhtml(opt.textValue,/[<">]/g)); + doLink(range=this.selection.getRange(),opt,this); + //闭合都不加占位符,如果加了会在a后边多个占位符节点,导致a是图片背景组成的列表,出现空白问题 + range.collapse().select(true); + + }, + queryCommandValue : function() { + var range = this.selection.getRange(), + node; + if ( range.collapsed ) { +// node = this.selection.getStart(); + //在ie下getstart()取值偏上了 + node = range.startContainer; + node = node.nodeType == 1 ? node : node.parentNode; + + if ( node && (node = domUtils.findParentByTagName( node, 'a', true )) && ! domUtils.isInNodeEndBoundary(range,node)) { + + return node; + } + } else { + //trace:1111 如果是

    xx

    startContainer是p就会找不到a + range.shrinkBoundary(); + var start = range.startContainer.nodeType == 3 || !range.startContainer.childNodes[range.startOffset] ? range.startContainer : range.startContainer.childNodes[range.startOffset], + end = range.endContainer.nodeType == 3 || range.endOffset == 0 ? range.endContainer : range.endContainer.childNodes[range.endOffset-1], + common = range.getCommonAncestor(); + node = domUtils.findParentByTagName( common, 'a', true ); + if ( !node && common.nodeType == 1){ + + var as = common.getElementsByTagName( 'a' ), + ps,pe; + + for ( var i = 0,ci; ci = as[i++]; ) { + ps = domUtils.getPosition( ci, start ),pe = domUtils.getPosition( ci,end); + if ( (ps & domUtils.POSITION_FOLLOWING || ps & domUtils.POSITION_CONTAINS) + && + (pe & domUtils.POSITION_PRECEDING || pe & domUtils.POSITION_CONTAINS) + ) { + node = ci; + break; + } + } + } + return node; + } + + }, + queryCommandState : function() { + //判断如果是视频的话连接不可用 + //fix 853 + var img = this.selection.getRange().getClosedNode(), + flag = img && (img.className == "edui-faked-video" || img.className.indexOf("edui-upload-video")!=-1); + return flag ? -1 : 0; + } + }; +}; + +// plugins/iframe.js +///import core +///import plugins\inserthtml.js +///commands 插入框架 +///commandsName InsertFrame +///commandsTitle 插入Iframe +///commandsDialog dialogs\insertframe + +UE.plugins['insertframe'] = function() { + var me =this; + function deleteIframe(){ + me._iframe && delete me._iframe; + } + + me.addListener("selectionchange",function(){ + deleteIframe(); + }); + +}; + + + +// plugins/scrawl.js +///import core +///commands 涂鸦 +///commandsName Scrawl +///commandsTitle 涂鸦 +///commandsDialog dialogs\scrawl +UE.commands['scrawl'] = { + queryCommandState : function(){ + return ( browser.ie && browser.version <= 8 ) ? -1 :0; + } +}; + + +// plugins/removeformat.js +/** + * 清除格式 + * @file + * @since 1.2.6.1 + */ + +/** + * 清除文字样式 + * @command removeformat + * @method execCommand + * @param { String } cmd 命令字符串 + * @param {String} tags 以逗号隔开的标签。如:strong + * @param {String} style 样式如:color + * @param {String} attrs 属性如:width + * @example + * ```javascript + * editor.execCommand( 'removeformat', 'strong','color','width' ); + * ``` + */ + +UE.plugins['removeformat'] = function(){ + var me = this; + me.setOpt({ + 'removeFormatTags': 'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var', + 'removeFormatAttributes':'class,style,lang,width,height,align,hspace,valign' + }); + me.commands['removeformat'] = { + execCommand : function( cmdName, tags, style, attrs,notIncludeA ) { + + var tagReg = new RegExp( '^(?:' + (tags || this.options.removeFormatTags).replace( /,/g, '|' ) + ')$', 'i' ) , + removeFormatAttributes = style ? [] : (attrs || this.options.removeFormatAttributes).split( ',' ), + range = new dom.Range( this.document ), + bookmark,node,parent, + filter = function( node ) { + return node.nodeType == 1; + }; + + function isRedundantSpan (node) { + if (node.nodeType == 3 || node.tagName.toLowerCase() != 'span'){ + return 0; + } + if (browser.ie) { + //ie 下判断实效,所以只能简单用style来判断 + //return node.style.cssText == '' ? 1 : 0; + var attrs = node.attributes; + if ( attrs.length ) { + for ( var i = 0,l = attrs.length; i + var node = range.startContainer, + tmp, + collapsed = range.collapsed; + while(node.nodeType == 1 && domUtils.isEmptyNode(node) && dtd.$removeEmpty[node.tagName]){ + tmp = node.parentNode; + range.setStartBefore(node); + //trace:937 + //更新结束边界 + if(range.startContainer === range.endContainer){ + range.endOffset--; + } + domUtils.remove(node); + node = tmp; + } + + if(!collapsed){ + node = range.endContainer; + while(node.nodeType == 1 && domUtils.isEmptyNode(node) && dtd.$removeEmpty[node.tagName]){ + tmp = node.parentNode; + range.setEndBefore(node); + domUtils.remove(node); + + node = tmp; + } + + + } + } + + + + range = this.selection.getRange(); + doRemove( range ); + range.select(); + + } + + }; + +}; + + +// plugins/blockquote.js +/** + * 添加引用 + * @file + * @since 1.2.6.1 + */ + +/** + * 添加引用 + * @command blockquote + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'blockquote' ); + * ``` + */ + +/** + * 添加引用 + * @command blockquote + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { Object } attrs 节点属性 + * @example + * ```javascript + * editor.execCommand( 'blockquote',{ + * style: "color: red;" + * } ); + * ``` + */ + + +UE.plugins['blockquote'] = function(){ + var me = this; + function getObj(editor){ + return domUtils.filterNodeList(editor.selection.getStartElementPath(),'blockquote'); + } + me.commands['blockquote'] = { + execCommand : function( cmdName, attrs ) { + var range = this.selection.getRange(), + obj = getObj(this), + blockquote = dtd.blockquote, + bookmark = range.createBookmark(); + + if ( obj ) { + + var start = range.startContainer, + startBlock = domUtils.isBlockElm(start) ? start : domUtils.findParent(start,function(node){return domUtils.isBlockElm(node)}), + + end = range.endContainer, + endBlock = domUtils.isBlockElm(end) ? end : domUtils.findParent(end,function(node){return domUtils.isBlockElm(node)}); + + //处理一下li + startBlock = domUtils.findParentByTagName(startBlock,'li',true) || startBlock; + endBlock = domUtils.findParentByTagName(endBlock,'li',true) || endBlock; + + + if(startBlock.tagName == 'LI' || startBlock.tagName == 'TD' || startBlock === obj || domUtils.isBody(startBlock)){ + domUtils.remove(obj,true); + }else{ + domUtils.breakParent(startBlock,obj); + } + + if(startBlock !== endBlock){ + obj = domUtils.findParentByTagName(endBlock,'blockquote'); + if(obj){ + if(endBlock.tagName == 'LI' || endBlock.tagName == 'TD'|| domUtils.isBody(endBlock)){ + obj.parentNode && domUtils.remove(obj,true); + }else{ + domUtils.breakParent(endBlock,obj); + } + + } + } + + var blockquotes = domUtils.getElementsByTagName(this.document,'blockquote'); + for(var i=0,bi;bi=blockquotes[i++];){ + if(!bi.childNodes.length){ + domUtils.remove(bi); + }else if(domUtils.getPosition(bi,startBlock)&domUtils.POSITION_FOLLOWING && domUtils.getPosition(bi,endBlock)&domUtils.POSITION_PRECEDING){ + domUtils.remove(bi,true); + } + } + + + + + } else { + + var tmpRange = range.cloneRange(), + node = tmpRange.startContainer.nodeType == 1 ? tmpRange.startContainer : tmpRange.startContainer.parentNode, + preNode = node, + doEnd = 1; + + //调整开始 + while ( 1 ) { + if ( domUtils.isBody(node) ) { + if ( preNode !== node ) { + if ( range.collapsed ) { + tmpRange.selectNode( preNode ); + doEnd = 0; + } else { + tmpRange.setStartBefore( preNode ); + } + }else{ + tmpRange.setStart(node,0); + } + + break; + } + if ( !blockquote[node.tagName] ) { + if ( range.collapsed ) { + tmpRange.selectNode( preNode ); + } else{ + tmpRange.setStartBefore( preNode); + } + break; + } + + preNode = node; + node = node.parentNode; + } + + //调整结束 + if ( doEnd ) { + preNode = node = node = tmpRange.endContainer.nodeType == 1 ? tmpRange.endContainer : tmpRange.endContainer.parentNode; + while ( 1 ) { + + if ( domUtils.isBody( node ) ) { + if ( preNode !== node ) { + + tmpRange.setEndAfter( preNode ); + + } else { + tmpRange.setEnd( node, node.childNodes.length ); + } + + break; + } + if ( !blockquote[node.tagName] ) { + tmpRange.setEndAfter( preNode ); + break; + } + + preNode = node; + node = node.parentNode; + } + + } + + + node = range.document.createElement( 'blockquote' ); + domUtils.setAttributes( node, attrs ); + node.appendChild( tmpRange.extractContents() ); + tmpRange.insertNode( node ); + //去除重复的 + var childs = domUtils.getElementsByTagName(node,'blockquote'); + for(var i=0,ci;ci=childs[i++];){ + if(ci.parentNode){ + domUtils.remove(ci,true); + } + } + + } + range.moveToBookmark( bookmark ).select(); + }, + queryCommandState : function() { + return getObj(this) ? 1 : 0; + } + }; +}; + + + +// plugins/convertcase.js +/** + * 大小写转换 + * @file + * @since 1.2.6.1 + */ + +/** + * 把选区内文本变大写,与“tolowercase”命令互斥 + * @command touppercase + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'touppercase' ); + * ``` + */ + +/** + * 把选区内文本变小写,与“touppercase”命令互斥 + * @command tolowercase + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'tolowercase' ); + * ``` + */ +UE.commands['touppercase'] = +UE.commands['tolowercase'] = { + execCommand:function (cmd) { + var me = this; + var rng = me.selection.getRange(); + if(rng.collapsed){ + return rng; + } + var bk = rng.createBookmark(), + bkEnd = bk.end, + filterFn = function( node ) { + return !domUtils.isBr(node) && !domUtils.isWhitespace( node ); + }, + curNode = domUtils.getNextDomNode( bk.start, false, filterFn ); + while ( curNode && (domUtils.getPosition( curNode, bkEnd ) & domUtils.POSITION_PRECEDING) ) { + + if ( curNode.nodeType == 3 ) { + curNode.nodeValue = curNode.nodeValue[cmd == 'touppercase' ? 'toUpperCase' : 'toLowerCase'](); + } + curNode = domUtils.getNextDomNode( curNode, true, filterFn ); + if(curNode === bkEnd){ + break; + } + + } + rng.moveToBookmark(bk).select(); + } +}; + + + +// plugins/indent.js +/** + * 首行缩进 + * @file + * @since 1.2.6.1 + */ + +/** + * 缩进 + * @command indent + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'indent' ); + * ``` + */ +UE.commands['indent'] = { + execCommand : function() { + var me = this,value = me.queryCommandState("indent") ? "0em" : (me.options.indentValue || '2em'); + me.execCommand('Paragraph','p',{style:'text-indent:'+ value}); + }, + queryCommandState : function() { + var pN = domUtils.filterNodeList(this.selection.getStartElementPath(),'p h1 h2 h3 h4 h5 h6'); + return pN && pN.style.textIndent && parseInt(pN.style.textIndent) ? 1 : 0; + } + +}; + + +// plugins/print.js +/** + * 打印 + * @file + * @since 1.2.6.1 + */ + +/** + * 打印 + * @command print + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'print' ); + * ``` + */ +UE.commands['print'] = { + execCommand : function(){ + this.window.print(); + }, + notNeedUndo : 1 +}; + + + +// plugins/preview.js +/** + * 预览 + * @file + * @since 1.2.6.1 + */ + +/** + * 预览 + * @command preview + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'preview' ); + * ``` + */ +UE.commands['preview'] = { + execCommand : function(){ + var w = window.open('', '_blank', ''), + d = w.document; + d.open(); + d.write('
    '+this.getContent(null,null,true)+'
    '); + d.close(); + }, + notNeedUndo : 1 +}; + + +// plugins/selectall.js +/** + * 全选 + * @file + * @since 1.2.6.1 + */ + +/** + * 选中所有内容 + * @command selectall + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'selectall' ); + * ``` + */ +UE.plugins['selectall'] = function(){ + var me = this; + me.commands['selectall'] = { + execCommand : function(){ + //去掉了原生的selectAll,因为会出现报错和当内容为空时,不能出现闭合状态的光标 + var me = this,body = me.body, + range = me.selection.getRange(); + range.selectNodeContents(body); + if(domUtils.isEmptyBlock(body)){ + //opera不能自动合并到元素的里边,要手动处理一下 + if(browser.opera && body.firstChild && body.firstChild.nodeType == 1){ + range.setStartAtFirst(body.firstChild); + } + range.collapse(true); + } + range.select(true); + }, + notNeedUndo : 1 + }; + + + //快捷键 + me.addshortcutkey({ + "selectAll" : "ctrl+65" + }); +}; + + +// plugins/paragraph.js +/** + * 段落样式 + * @file + * @since 1.2.6.1 + */ + +/** + * 段落格式 + * @command paragraph + * @method execCommand + * @param { String } cmd 命令字符串 + * @param {String} style 标签值为:'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' + * @param {Object} attrs 标签的属性 + * @example + * ```javascript + * editor.execCommand( 'Paragraph','h1','{ + * class:'test' + * }' ); + * ``` + */ + +/** + * 返回选区内节点标签名 + * @command paragraph + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 节点标签名 + * @example + * ```javascript + * editor.queryCommandValue( 'Paragraph' ); + * ``` + */ + +UE.plugins['paragraph'] = function() { + var me = this, + block = domUtils.isBlockElm, + notExchange = ['TD','LI','PRE'], + + doParagraph = function(range,style,attrs,sourceCmdName){ + var bookmark = range.createBookmark(), + filterFn = function( node ) { + return node.nodeType == 1 ? node.tagName.toLowerCase() != 'br' && !domUtils.isBookmarkNode(node) : !domUtils.isWhitespace( node ); + }, + para; + + range.enlarge( true ); + var bookmark2 = range.createBookmark(), + current = domUtils.getNextDomNode( bookmark2.start, false, filterFn ), + tmpRange = range.cloneRange(), + tmpNode; + while ( current && !(domUtils.getPosition( current, bookmark2.end ) & domUtils.POSITION_FOLLOWING) ) { + if ( current.nodeType == 3 || !block( current ) ) { + tmpRange.setStartBefore( current ); + while ( current && current !== bookmark2.end && !block( current ) ) { + tmpNode = current; + current = domUtils.getNextDomNode( current, false, null, function( node ) { + return !block( node ); + } ); + } + tmpRange.setEndAfter( tmpNode ); + + para = range.document.createElement( style ); + if(attrs){ + domUtils.setAttributes(para,attrs); + if(sourceCmdName && sourceCmdName == 'customstyle' && attrs.style){ + para.style.cssText = attrs.style; + } + } + para.appendChild( tmpRange.extractContents() ); + //需要内容占位 + if(domUtils.isEmptyNode(para)){ + domUtils.fillChar(range.document,para); + + } + + tmpRange.insertNode( para ); + + var parent = para.parentNode; + //如果para上一级是一个block元素且不是body,td就删除它 + if ( block( parent ) && !domUtils.isBody( para.parentNode ) && utils.indexOf(notExchange,parent.tagName)==-1) { + //存储dir,style + if(!(sourceCmdName && sourceCmdName == 'customstyle')){ + parent.getAttribute('dir') && para.setAttribute('dir',parent.getAttribute('dir')); + //trace:1070 + parent.style.cssText && (para.style.cssText = parent.style.cssText + ';' + para.style.cssText); + //trace:1030 + parent.style.textAlign && !para.style.textAlign && (para.style.textAlign = parent.style.textAlign); + parent.style.textIndent && !para.style.textIndent && (para.style.textIndent = parent.style.textIndent); + parent.style.padding && !para.style.padding && (para.style.padding = parent.style.padding); + } + + //trace:1706 选择的就是h1-6要删除 + if(attrs && /h\d/i.test(parent.tagName) && !/h\d/i.test(para.tagName) ){ + domUtils.setAttributes(parent,attrs); + if(sourceCmdName && sourceCmdName == 'customstyle' && attrs.style){ + parent.style.cssText = attrs.style; + } + domUtils.remove(para,true); + para = parent; + }else{ + domUtils.remove( para.parentNode, true ); + } + + } + if( utils.indexOf(notExchange,parent.tagName)!=-1){ + current = parent; + }else{ + current = para; + } + + + current = domUtils.getNextDomNode( current, false, filterFn ); + } else { + current = domUtils.getNextDomNode( current, true, filterFn ); + } + } + return range.moveToBookmark( bookmark2 ).moveToBookmark( bookmark ); + }; + me.setOpt('paragraph',{'p':'', 'h1':'', 'h2':'', 'h3':'', 'h4':'', 'h5':'', 'h6':''}); + me.commands['paragraph'] = { + execCommand : function( cmdName, style,attrs,sourceCmdName ) { + var range = this.selection.getRange(); + //闭合时单独处理 + if(range.collapsed){ + var txt = this.document.createTextNode('p'); + range.insertNode(txt); + //去掉冗余的fillchar + if(browser.ie){ + var node = txt.previousSibling; + if(node && domUtils.isWhitespace(node)){ + domUtils.remove(node); + } + node = txt.nextSibling; + if(node && domUtils.isWhitespace(node)){ + domUtils.remove(node); + } + } + + } + range = doParagraph(range,style,attrs,sourceCmdName); + if(txt){ + range.setStartBefore(txt).collapse(true); + pN = txt.parentNode; + + domUtils.remove(txt); + + if(domUtils.isBlockElm(pN)&&domUtils.isEmptyNode(pN)){ + domUtils.fillNode(this.document,pN); + } + + } + + if(browser.gecko && range.collapsed && range.startContainer.nodeType == 1){ + var child = range.startContainer.childNodes[range.startOffset]; + if(child && child.nodeType == 1 && child.tagName.toLowerCase() == style){ + range.setStart(child,0).collapse(true); + } + } + //trace:1097 原来有true,原因忘了,但去了就不能清除多余的占位符了 + range.select(); + + + return true; + }, + queryCommandValue : function() { + var node = domUtils.filterNodeList(this.selection.getStartElementPath(),'p h1 h2 h3 h4 h5 h6'); + return node ? node.tagName.toLowerCase() : ''; + } + }; +}; + + +// plugins/directionality.js +/** + * 设置文字输入的方向的插件 + * @file + * @since 1.2.6.1 + */ +(function() { + var block = domUtils.isBlockElm , + getObj = function(editor){ +// var startNode = editor.selection.getStart(), +// parents; +// if ( startNode ) { +// //查找所有的是block的父亲节点 +// parents = domUtils.findParents( startNode, true, block, true ); +// for ( var i = 0,ci; ci = parents[i++]; ) { +// if ( ci.getAttribute( 'dir' ) ) { +// return ci; +// } +// } +// } + return domUtils.filterNodeList(editor.selection.getStartElementPath(),function(n){return n && n.nodeType == 1 && n.getAttribute('dir')}); + + }, + doDirectionality = function(range,editor,forward){ + + var bookmark, + filterFn = function( node ) { + return node.nodeType == 1 ? !domUtils.isBookmarkNode(node) : !domUtils.isWhitespace(node); + }, + + obj = getObj( editor ); + + if ( obj && range.collapsed ) { + obj.setAttribute( 'dir', forward ); + return range; + } + bookmark = range.createBookmark(); + range.enlarge( true ); + var bookmark2 = range.createBookmark(), + current = domUtils.getNextDomNode( bookmark2.start, false, filterFn ), + tmpRange = range.cloneRange(), + tmpNode; + while ( current && !(domUtils.getPosition( current, bookmark2.end ) & domUtils.POSITION_FOLLOWING) ) { + if ( current.nodeType == 3 || !block( current ) ) { + tmpRange.setStartBefore( current ); + while ( current && current !== bookmark2.end && !block( current ) ) { + tmpNode = current; + current = domUtils.getNextDomNode( current, false, null, function( node ) { + return !block( node ); + } ); + } + tmpRange.setEndAfter( tmpNode ); + var common = tmpRange.getCommonAncestor(); + if ( !domUtils.isBody( common ) && block( common ) ) { + //遍历到了block节点 + common.setAttribute( 'dir', forward ); + current = common; + } else { + //没有遍历到,添加一个block节点 + var p = range.document.createElement( 'p' ); + p.setAttribute( 'dir', forward ); + var frag = tmpRange.extractContents(); + p.appendChild( frag ); + tmpRange.insertNode( p ); + current = p; + } + + current = domUtils.getNextDomNode( current, false, filterFn ); + } else { + current = domUtils.getNextDomNode( current, true, filterFn ); + } + } + return range.moveToBookmark( bookmark2 ).moveToBookmark( bookmark ); + }; + + /** + * 文字输入方向 + * @command directionality + * @method execCommand + * @param { String } cmdName 命令字符串 + * @param { String } forward 传入'ltr'表示从左向右输入,传入'rtl'表示从右向左输入 + * @example + * ```javascript + * editor.execCommand( 'directionality', 'ltr'); + * ``` + */ + + /** + * 查询当前选区的文字输入方向 + * @command directionality + * @method queryCommandValue + * @param { String } cmdName 命令字符串 + * @return { String } 返回'ltr'表示从左向右输入,返回'rtl'表示从右向左输入 + * @example + * ```javascript + * editor.queryCommandValue( 'directionality'); + * ``` + */ + UE.commands['directionality'] = { + execCommand : function( cmdName,forward ) { + var range = this.selection.getRange(); + //闭合时单独处理 + if(range.collapsed){ + var txt = this.document.createTextNode('d'); + range.insertNode(txt); + } + doDirectionality(range,this,forward); + if(txt){ + range.setStartBefore(txt).collapse(true); + domUtils.remove(txt); + } + + range.select(); + return true; + }, + queryCommandValue : function() { + var node = getObj(this); + return node ? node.getAttribute('dir') : 'ltr'; + } + }; +})(); + + + +// plugins/horizontal.js +/** + * 插入分割线插件 + * @file + * @since 1.2.6.1 + */ + +/** + * 插入分割线 + * @command horizontal + * @method execCommand + * @param { String } cmdName 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'horizontal' ); + * ``` + */ +UE.plugins['horizontal'] = function(){ + var me = this; + me.commands['horizontal'] = { + execCommand : function( cmdName ) { + var me = this; + if(me.queryCommandState(cmdName)!==-1){ + me.execCommand('insertHtml','
    '); + var range = me.selection.getRange(), + start = range.startContainer; + if(start.nodeType == 1 && !start.childNodes[range.startOffset] ){ + + var tmp; + if(tmp = start.childNodes[range.startOffset - 1]){ + if(tmp.nodeType == 1 && tmp.tagName == 'HR'){ + if(me.options.enterTag == 'p'){ + tmp = me.document.createElement('p'); + range.insertNode(tmp); + range.setStart(tmp,0).setCursor(); + + }else{ + tmp = me.document.createElement('br'); + range.insertNode(tmp); + range.setStartBefore(tmp).setCursor(); + } + } + } + + } + return true; + } + + }, + //边界在table里不能加分隔线 + queryCommandState : function() { + return domUtils.filterNodeList(this.selection.getStartElementPath(),'table') ? -1 : 0; + } + }; +// me.addListener('delkeyup',function(){ +// var rng = this.selection.getRange(); +// if(browser.ie && browser.version > 8){ +// rng.txtToElmBoundary(true); +// if(domUtils.isStartInblock(rng)){ +// var tmpNode = rng.startContainer; +// var pre = tmpNode.previousSibling; +// if(pre && domUtils.isTagNode(pre,'hr')){ +// domUtils.remove(pre); +// rng.select(); +// return; +// } +// } +// } +// if(domUtils.isBody(rng.startContainer)){ +// var hr = rng.startContainer.childNodes[rng.startOffset -1]; +// if(hr && hr.nodeName == 'HR'){ +// var next = hr.nextSibling; +// if(next){ +// rng.setStart(next,0) +// }else if(hr.previousSibling){ +// rng.setStartAtLast(hr.previousSibling) +// }else{ +// var p = this.document.createElement('p'); +// hr.parentNode.insertBefore(p,hr); +// domUtils.fillNode(this.document,p); +// rng.setStart(p,0); +// } +// domUtils.remove(hr); +// rng.setCursor(false,true); +// } +// } +// }) + me.addListener('delkeydown',function(name,evt){ + var rng = this.selection.getRange(); + rng.txtToElmBoundary(true); + if(domUtils.isStartInblock(rng)){ + var tmpNode = rng.startContainer; + var pre = tmpNode.previousSibling; + if(pre && domUtils.isTagNode(pre,'hr')){ + domUtils.remove(pre); + rng.select(); + domUtils.preventDefault(evt); + return true; + + } + } + + }) +}; + + + +// plugins/time.js +/** + * 插入时间和日期 + * @file + * @since 1.2.6.1 + */ + +/** + * 插入时间,默认格式:12:59:59 + * @command time + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'time'); + * ``` + */ + +/** + * 插入日期,默认格式:2013-08-30 + * @command date + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'date'); + * ``` + */ +UE.commands['time'] = UE.commands["date"] = { + execCommand : function(cmd, format){ + var date = new Date; + + function formatTime(date, format) { + var hh = ('0' + date.getHours()).slice(-2), + ii = ('0' + date.getMinutes()).slice(-2), + ss = ('0' + date.getSeconds()).slice(-2); + format = format || 'hh:ii:ss'; + return format.replace(/hh/ig, hh).replace(/ii/ig, ii).replace(/ss/ig, ss); + } + function formatDate(date, format) { + var yyyy = ('000' + date.getFullYear()).slice(-4), + yy = yyyy.slice(-2), + mm = ('0' + (date.getMonth()+1)).slice(-2), + dd = ('0' + date.getDate()).slice(-2); + format = format || 'yyyy-mm-dd'; + return format.replace(/yyyy/ig, yyyy).replace(/yy/ig, yy).replace(/mm/ig, mm).replace(/dd/ig, dd); + } + + this.execCommand('insertHtml',cmd == "time" ? formatTime(date, format):formatDate(date, format) ); + } +}; + + +// plugins/rowspacing.js +/** + * 段前段后间距插件 + * @file + * @since 1.2.6.1 + */ + +/** + * 设置段间距 + * @command rowspacing + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } value 段间距的值,以px为单位 + * @param { String } dir 间距位置,top或bottom,分别表示段前和段后 + * @example + * ```javascript + * editor.execCommand( 'rowspacing', '10', 'top' ); + * ``` + */ + +UE.plugins['rowspacing'] = function(){ + var me = this; + me.setOpt({ + 'rowspacingtop':['5', '10', '15', '20', '25'], + 'rowspacingbottom':['5', '10', '15', '20', '25'] + + }); + me.commands['rowspacing'] = { + execCommand : function( cmdName,value,dir ) { + this.execCommand('paragraph','p',{style:'margin-'+dir+':'+value + 'px'}); + return true; + }, + queryCommandValue : function(cmdName,dir) { + var pN = domUtils.filterNodeList(this.selection.getStartElementPath(),function(node){return domUtils.isBlockElm(node) }), + value; + //trace:1026 + if(pN){ + value = domUtils.getComputedStyle(pN,'margin-'+dir).replace(/[^\d]/g,''); + return !value ? 0 : value; + } + return 0; + + } + }; +}; + + + + +// plugins/lineheight.js +/** + * 设置行内间距 + * @file + * @since 1.2.6.1 + */ +UE.plugins['lineheight'] = function(){ + var me = this; + me.setOpt({'lineheight':['1', '1.5','1.75','2', '3', '4', '5']}); + + /** + * 行距 + * @command lineheight + * @method execCommand + * @param { String } cmdName 命令字符串 + * @param { String } value 传入的行高值, 该值是当前字体的倍数, 例如: 1.5, 1.75 + * @example + * ```javascript + * editor.execCommand( 'lineheight', 1.5); + * ``` + */ + /** + * 查询当前选区内容的行高大小 + * @command lineheight + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回当前行高大小 + * @example + * ```javascript + * editor.queryCommandValue( 'lineheight' ); + * ``` + */ + + me.commands['lineheight'] = { + execCommand : function( cmdName,value ) { + this.execCommand('paragraph','p',{style:'line-height:'+ (value == "1" ? "normal" : value + 'em') }); + return true; + }, + queryCommandValue : function() { + var pN = domUtils.filterNodeList(this.selection.getStartElementPath(),function(node){return domUtils.isBlockElm(node)}); + if(pN){ + var value = domUtils.getComputedStyle(pN,'line-height'); + return value == 'normal' ? 1 : value.replace(/[^\d.]*/ig,""); + } + } + }; +}; + + + + +// plugins/insertcode.js +/** + * 插入代码插件 + * @file + * @since 1.2.6.1 + */ + +UE.plugins['insertcode'] = function() { + var me = this; + me.ready(function(){ + utils.cssRule('pre','pre{margin:.5em 0;padding:.4em .6em;border-radius:8px;background:#f8f8f8;}', + me.document) + }); + me.setOpt('insertcode',{ + 'as3':'ActionScript3', + 'bash':'Bash/Shell', + 'cpp':'C/C++', + 'css':'Css', + 'cf':'CodeFunction', + 'c#':'C#', + 'delphi':'Delphi', + 'diff':'Diff', + 'erlang':'Erlang', + 'groovy':'Groovy', + 'html':'Html', + 'java':'Java', + 'jfx':'JavaFx', + 'js':'Javascript', + 'pl':'Perl', + 'php':'Php', + 'plain':'Plain Text', + 'ps':'PowerShell', + 'python':'Python', + 'ruby':'Ruby', + 'scala':'Scala', + 'sql':'Sql', + 'vb':'Vb', + 'xml':'Xml' + }); + + /** + * 插入代码 + * @command insertcode + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } lang 插入代码的语言 + * @example + * ```javascript + * editor.execCommand( 'insertcode', 'javascript' ); + * ``` + */ + + /** + * 如果选区所在位置是插入插入代码区域,返回代码的语言 + * @command insertcode + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回代码的语言 + * @example + * ```javascript + * editor.queryCommandValue( 'insertcode' ); + * ``` + */ + + me.commands['insertcode'] = { + execCommand : function(cmd,lang){ + var me = this, + rng = me.selection.getRange(), + pre = domUtils.findParentByTagName(rng.startContainer,'pre',true); + if(pre){ + pre.className = 'brush:'+lang+';toolbar:false;'; + }else{ + var code = ''; + if(rng.collapsed){ + code = browser.ie && browser.ie11below ? (browser.version <= 8 ? ' ':''):'
    '; + }else{ + var frag = rng.extractContents(); + var div = me.document.createElement('div'); + div.appendChild(frag); + + utils.each(UE.filterNode(UE.htmlparser(div.innerHTML.replace(/[\r\t]/g,'')),me.options.filterTxtRules).children,function(node){ + if(browser.ie && browser.ie11below && browser.version > 8){ + + if(node.type =='element'){ + if(node.tagName == 'br'){ + code += '\n' + }else if(!dtd.$empty[node.tagName]){ + utils.each(node.children,function(cn){ + if(cn.type =='element'){ + if(cn.tagName == 'br'){ + code += '\n' + }else if(!dtd.$empty[node.tagName]){ + code += cn.innerText(); + } + }else{ + code += cn.data + } + }) + if(!/\n$/.test(code)){ + code += '\n'; + } + } + }else{ + code += node.data + '\n' + } + if(!node.nextSibling() && /\n$/.test(code)){ + code = code.replace(/\n$/,''); + } + }else{ + if(browser.ie && browser.ie11below){ + + if(node.type =='element'){ + if(node.tagName == 'br'){ + code += '
    ' + }else if(!dtd.$empty[node.tagName]){ + utils.each(node.children,function(cn){ + if(cn.type =='element'){ + if(cn.tagName == 'br'){ + code += '
    ' + }else if(!dtd.$empty[node.tagName]){ + code += cn.innerText(); + } + }else{ + code += cn.data + } + }); + if(!/br>$/.test(code)){ + code += '
    '; + } + } + }else{ + code += node.data + '
    ' + } + if(!node.nextSibling() && /
    $/.test(code)){ + code = code.replace(/
    $/,''); + } + + }else{ + code += (node.type == 'element' ? (dtd.$empty[node.tagName] ? '' : node.innerText()) : node.data); + if(!/br\/?\s*>$/.test(code)){ + if(!node.nextSibling()) + return; + code += '
    ' + } + } + + } + + }); + } + me.execCommand('inserthtml','
    '+code+'
    ',true); + + pre = me.document.getElementById('coder'); + domUtils.removeAttributes(pre,'id'); + var tmpNode = pre.previousSibling; + + if(tmpNode && (tmpNode.nodeType == 3 && tmpNode.nodeValue.length == 1 && browser.ie && browser.version == 6 || domUtils.isEmptyBlock(tmpNode))){ + + domUtils.remove(tmpNode) + } + var rng = me.selection.getRange(); + if(domUtils.isEmptyBlock(pre)){ + rng.setStart(pre,0).setCursor(false,true) + }else{ + rng.selectNodeContents(pre).select() + } + } + + + + }, + queryCommandValue : function(){ + var path = this.selection.getStartElementPath(); + var lang = ''; + utils.each(path,function(node){ + if(node.nodeName =='PRE'){ + var match = node.className.match(/brush:([^;]+)/); + lang = match && match[1] ? match[1] : ''; + return false; + } + }); + return lang; + } + }; + + me.addInputRule(function(root){ + utils.each(root.getNodesByTagName('pre'),function(pre){ + var brs = pre.getNodesByTagName('br'); + if(brs.length){ + browser.ie && browser.ie11below && browser.version > 8 && utils.each(brs,function(br){ + var txt = UE.uNode.createText('\n'); + br.parentNode.insertBefore(txt,br); + br.parentNode.removeChild(br); + }); + return; + } + if(browser.ie && browser.ie11below && browser.version > 8) + return; + var code = pre.innerText().split(/\n/); + pre.innerHTML(''); + utils.each(code,function(c){ + if(c.length){ + pre.appendChild(UE.uNode.createText(c)); + } + pre.appendChild(UE.uNode.createElement('br')) + }) + }) + }); + me.addOutputRule(function(root){ + utils.each(root.getNodesByTagName('pre'),function(pre){ + var code = ''; + utils.each(pre.children,function(n){ + if(n.type == 'text'){ + //在ie下文本内容有可能末尾带有\n要去掉 + //trace:3396 + code += n.data.replace(/[ ]/g,' ').replace(/\n$/,''); + }else{ + if(n.tagName == 'br'){ + code += '\n' + }else{ + code += (!dtd.$empty[n.tagName] ? '' : n.innerText()); + } + + } + + }); + + pre.innerText(code.replace(/( |\n)+$/,'')) + }) + }); + //不需要判断highlight的command列表 + me.notNeedCodeQuery ={ + help:1, + undo:1, + redo:1, + source:1, + print:1, + searchreplace:1, + fullscreen:1, + preview:1, + insertparagraph:1, + elementpath:1, + insertcode:1, + inserthtml:1, + selectall:1 + }; + //将queyCommamndState重置 + var orgQuery = me.queryCommandState; + me.queryCommandState = function(cmd){ + var me = this; + + if(!me.notNeedCodeQuery[cmd.toLowerCase()] && me.selection && me.queryCommandValue('insertcode')){ + return -1; + } + return UE.Editor.prototype.queryCommandState.apply(this,arguments) + }; + me.addListener('beforeenterkeydown',function(){ + var rng = me.selection.getRange(); + var pre = domUtils.findParentByTagName(rng.startContainer,'pre',true); + if(pre){ + me.fireEvent('saveScene'); + if(!rng.collapsed){ + rng.deleteContents(); + } + if(!browser.ie || browser.ie9above){ + var tmpNode = me.document.createElement('br'),pre; + rng.insertNode(tmpNode).setStartAfter(tmpNode).collapse(true); + var next = tmpNode.nextSibling; + if(!next && (!browser.ie || browser.version > 10)){ + rng.insertNode(tmpNode.cloneNode(false)); + }else{ + rng.setStartAfter(tmpNode); + } + pre = tmpNode.previousSibling; + var tmp; + while(pre ){ + tmp = pre; + pre = pre.previousSibling; + if(!pre || pre.nodeName == 'BR'){ + pre = tmp; + break; + } + } + if(pre){ + var str = ''; + while(pre && pre.nodeName != 'BR' && new RegExp('^[\\s'+domUtils.fillChar+']*$').test(pre.nodeValue)){ + str += pre.nodeValue; + pre = pre.nextSibling; + } + if(pre.nodeName != 'BR'){ + var match = pre.nodeValue.match(new RegExp('^([\\s'+domUtils.fillChar+']+)')); + if(match && match[1]){ + str += match[1] + } + + } + if(str){ + str = me.document.createTextNode(str); + rng.insertNode(str).setStartAfter(str); + } + } + rng.collapse(true).select(true); + }else{ + if(browser.version > 8){ + + var txt = me.document.createTextNode('\n'); + var start = rng.startContainer; + if(rng.startOffset == 0){ + var preNode = start.previousSibling; + if(preNode){ + rng.insertNode(txt); + var fillchar = me.document.createTextNode(' '); + rng.setStartAfter(txt).insertNode(fillchar).setStart(fillchar,0).collapse(true).select(true) + } + }else{ + rng.insertNode(txt).setStartAfter(txt); + var fillchar = me.document.createTextNode(' '); + start = rng.startContainer.childNodes[rng.startOffset]; + if(start && !/^\n/.test(start.nodeValue)){ + rng.setStartBefore(txt) + } + rng.insertNode(fillchar).setStart(fillchar,0).collapse(true).select(true) + } + + }else{ + var tmpNode = me.document.createElement('br'); + rng.insertNode(tmpNode); + rng.insertNode(me.document.createTextNode(domUtils.fillChar)); + rng.setStartAfter(tmpNode); + pre = tmpNode.previousSibling; + var tmp; + while(pre ){ + tmp = pre; + pre = pre.previousSibling; + if(!pre || pre.nodeName == 'BR'){ + pre = tmp; + break; + } + } + if(pre){ + var str = ''; + while(pre && pre.nodeName != 'BR' && new RegExp('^[ '+domUtils.fillChar+']*$').test(pre.nodeValue)){ + str += pre.nodeValue; + pre = pre.nextSibling; + } + if(pre.nodeName != 'BR'){ + var match = pre.nodeValue.match(new RegExp('^([ '+domUtils.fillChar+']+)')); + if(match && match[1]){ + str += match[1] + } + + } + + str = me.document.createTextNode(str); + rng.insertNode(str).setStartAfter(str); + } + rng.collapse(true).select(); + } + + + } + me.fireEvent('saveScene'); + return true; + } + + + }); + + me.addListener('tabkeydown',function(cmd,evt){ + var rng = me.selection.getRange(); + var pre = domUtils.findParentByTagName(rng.startContainer,'pre',true); + if(pre){ + me.fireEvent('saveScene'); + if(evt.shiftKey){ + + }else{ + if(!rng.collapsed){ + var bk = rng.createBookmark(); + var start = bk.start.previousSibling; + + while(start){ + if(pre.firstChild === start && !domUtils.isBr(start)){ + pre.insertBefore(me.document.createTextNode(' '),start); + + break; + } + if(domUtils.isBr(start)){ + pre.insertBefore(me.document.createTextNode(' '),start.nextSibling); + + break; + } + start = start.previousSibling; + } + var end = bk.end; + start = bk.start.nextSibling; + if(pre.firstChild === bk.start){ + pre.insertBefore(me.document.createTextNode(' '),start.nextSibling) + + } + while(start && start !== end){ + if(domUtils.isBr(start) && start.nextSibling){ + if(start.nextSibling === end){ + break; + } + pre.insertBefore(me.document.createTextNode(' '),start.nextSibling) + } + + start = start.nextSibling; + } + rng.moveToBookmark(bk).select(); + }else{ + var tmpNode = me.document.createTextNode(' '); + rng.insertNode(tmpNode).setStartAfter(tmpNode).collapse(true).select(true); + } + } + + + me.fireEvent('saveScene'); + return true; + } + + + }); + + + me.addListener('beforeinserthtml',function(evtName,html){ + var me = this, + rng = me.selection.getRange(), + pre = domUtils.findParentByTagName(rng.startContainer,'pre',true); + if(pre){ + if(!rng.collapsed){ + rng.deleteContents() + } + var htmlstr = ''; + if(browser.ie && browser.version > 8){ + + utils.each(UE.filterNode(UE.htmlparser(html),me.options.filterTxtRules).children,function(node){ + if(node.type =='element'){ + if(node.tagName == 'br'){ + htmlstr += '\n' + }else if(!dtd.$empty[node.tagName]){ + utils.each(node.children,function(cn){ + if(cn.type =='element'){ + if(cn.tagName == 'br'){ + htmlstr += '\n' + }else if(!dtd.$empty[node.tagName]){ + htmlstr += cn.innerText(); + } + }else{ + htmlstr += cn.data + } + }) + if(!/\n$/.test(htmlstr)){ + htmlstr += '\n'; + } + } + }else{ + htmlstr += node.data + '\n' + } + if(!node.nextSibling() && /\n$/.test(htmlstr)){ + htmlstr = htmlstr.replace(/\n$/,''); + } + }); + var tmpNode = me.document.createTextNode(utils.html(htmlstr.replace(/ /g,' '))); + rng.insertNode(tmpNode).selectNode(tmpNode).select(); + }else{ + var frag = me.document.createDocumentFragment(); + + utils.each(UE.filterNode(UE.htmlparser(html),me.options.filterTxtRules).children,function(node){ + if(node.type =='element'){ + if(node.tagName == 'br'){ + frag.appendChild(me.document.createElement('br')) + }else if(!dtd.$empty[node.tagName]){ + utils.each(node.children,function(cn){ + if(cn.type =='element'){ + if(cn.tagName == 'br'){ + + frag.appendChild(me.document.createElement('br')) + }else if(!dtd.$empty[node.tagName]){ + frag.appendChild(me.document.createTextNode(utils.html(cn.innerText().replace(/ /g,' ')))); + + } + }else{ + frag.appendChild(me.document.createTextNode(utils.html( cn.data.replace(/ /g,' ')))); + + } + }) + if(frag.lastChild.nodeName != 'BR'){ + frag.appendChild(me.document.createElement('br')) + } + } + }else{ + frag.appendChild(me.document.createTextNode(utils.html( node.data.replace(/ /g,' ')))); + } + if(!node.nextSibling() && frag.lastChild.nodeName == 'BR'){ + frag.removeChild(frag.lastChild) + } + + + }); + rng.insertNode(frag).select(); + + } + + return true; + } + }); + //方向键的处理 + me.addListener('keydown',function(cmd,evt){ + var me = this,keyCode = evt.keyCode || evt.which; + if(keyCode == 40){ + var rng = me.selection.getRange(),pre,start = rng.startContainer; + if(rng.collapsed && (pre = domUtils.findParentByTagName(rng.startContainer,'pre',true)) && !pre.nextSibling){ + var last = pre.lastChild + while(last && last.nodeName == 'BR'){ + last = last.previousSibling; + } + if(last === start || rng.startContainer === pre && rng.startOffset == pre.childNodes.length){ + me.execCommand('insertparagraph'); + domUtils.preventDefault(evt) + } + + } + } + }); + //trace:3395 + me.addListener('delkeydown',function(type,evt){ + var rng = this.selection.getRange(); + rng.txtToElmBoundary(true); + var start = rng.startContainer; + if(domUtils.isTagNode(start,'pre') && rng.collapsed && domUtils.isStartInblock(rng)){ + var p = me.document.createElement('p'); + domUtils.fillNode(me.document,p); + start.parentNode.insertBefore(p,start); + domUtils.remove(start); + rng.setStart(p,0).setCursor(false,true); + domUtils.preventDefault(evt); + return true; + } + }) +}; + + +// plugins/cleardoc.js +/** + * 清空文档插件 + * @file + * @since 1.2.6.1 + */ + +/** + * 清空文档 + * @command cleardoc + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * //editor 是编辑器实例 + * editor.execCommand('cleardoc'); + * ``` + */ + +UE.commands['cleardoc'] = { + execCommand : function( cmdName) { + var me = this, + enterTag = me.options.enterTag, + range = me.selection.getRange(); + if(enterTag == "br"){ + me.body.innerHTML = "
    "; + range.setStart(me.body,0).setCursor(); + }else{ + me.body.innerHTML = "

    "+(ie ? "" : "
    ")+"

    "; + range.setStart(me.body.firstChild,0).setCursor(false,true); + } + setTimeout(function(){ + me.fireEvent("clearDoc"); + },0); + + } +}; + + + +// plugins/anchor.js +/** + * 锚点插件,为UEditor提供插入锚点支持 + * @file + * @since 1.2.6.1 + */ +UE.plugin.register('anchor', function (){ + + return { + bindEvents:{ + 'ready':function(){ + utils.cssRule('anchor', + '.anchorclass{background: url(\'' + + this.options.themePath + + this.options.theme +'/images/anchor.gif\') no-repeat scroll left center transparent;cursor: auto;display: inline-block;height: 16px;width: 15px;}', + this.document); + } + }, + outputRule: function(root){ + utils.each(root.getNodesByTagName('img'),function(a){ + var val; + if(val = a.getAttr('anchorname')){ + a.tagName = 'a'; + a.setAttr({ + anchorname : '', + name : val, + 'class' : '' + }) + } + }) + }, + inputRule:function(root){ + utils.each(root.getNodesByTagName('a'),function(a){ + var val; + if((val = a.getAttr('name')) && !a.getAttr('href')){ + a.tagName = 'img'; + a.setAttr({ + anchorname :a.getAttr('name'), + 'class' : 'anchorclass' + }); + a.setAttr('name') + + } + }) + + }, + commands:{ + /** + * 插入锚点 + * @command anchor + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } name 锚点名称字符串 + * @example + * ```javascript + * //editor 是编辑器实例 + * editor.execCommand('anchor', 'anchor1'); + * ``` + */ + 'anchor':{ + execCommand:function (cmd, name) { + var range = this.selection.getRange(),img = range.getClosedNode(); + if (img && img.getAttribute('anchorname')) { + if (name) { + img.setAttribute('anchorname', name); + } else { + range.setStartBefore(img).setCursor(); + domUtils.remove(img); + } + } else { + if (name) { + //只在选区的开始插入 + var anchor = this.document.createElement('img'); + range.collapse(true); + domUtils.setAttributes(anchor,{ + 'anchorname':name, + 'class':'anchorclass' + }); + range.insertNode(anchor).setStartAfter(anchor).setCursor(false,true); + } + } + } + } + } + } +}); + + +// plugins/wordcount.js +///import core +///commands 字数统计 +///commandsName WordCount,wordCount +///commandsTitle 字数统计 +/* + * Created by JetBrains WebStorm. + * User: taoqili + * Date: 11-9-7 + * Time: 下午8:18 + * To change this template use File | Settings | File Templates. + */ + +UE.plugins['wordcount'] = function(){ + var me = this; + me.setOpt('wordCount',true); + me.addListener('contentchange',function(){ + me.fireEvent('wordcount'); + }); + var timer; + me.addListener('ready',function(){ + var me = this; + domUtils.on(me.body,"keyup",function(evt){ + var code = evt.keyCode||evt.which, + //忽略的按键,ctr,alt,shift,方向键 + ignores = {"16":1,"18":1,"20":1,"37":1,"38":1,"39":1,"40":1}; + if(code in ignores) return; + clearTimeout(timer); + timer = setTimeout(function(){ + me.fireEvent('wordcount'); + },200) + }) + }); +}; + + +// plugins/pagebreak.js +/** + * 分页功能插件 + * @file + * @since 1.2.6.1 + */ +UE.plugins['pagebreak'] = function () { + var me = this, + notBreakTags = ['td']; + me.setOpt('pageBreakTag','_ueditor_page_break_tag_'); + + function fillNode(node){ + if(domUtils.isEmptyBlock(node)){ + var firstChild = node.firstChild,tmpNode; + + while(firstChild && firstChild.nodeType == 1 && domUtils.isEmptyBlock(firstChild)){ + tmpNode = firstChild; + firstChild = firstChild.firstChild; + } + !tmpNode && (tmpNode = node); + domUtils.fillNode(me.document,tmpNode); + } + } + //分页符样式添加 + + me.ready(function(){ + utils.cssRule('pagebreak','.pagebreak{display:block;clear:both !important;cursor:default !important;width: 100% !important;margin:0;}',me.document); + }); + function isHr(node){ + return node && node.nodeType == 1 && node.tagName == 'HR' && node.className == 'pagebreak'; + } + me.addInputRule(function(root){ + root.traversal(function(node){ + if(node.type == 'text' && node.data == me.options.pageBreakTag){ + var hr = UE.uNode.createElement('
    '); + node.parentNode.insertBefore(hr,node); + node.parentNode.removeChild(node) + } + }) + }); + me.addOutputRule(function(node){ + utils.each(node.getNodesByTagName('hr'),function(n){ + if(n.getAttr('class') == 'pagebreak'){ + var txt = UE.uNode.createText(me.options.pageBreakTag); + n.parentNode.insertBefore(txt,n); + n.parentNode.removeChild(n); + } + }) + + }); + + /** + * 插入分页符 + * @command pagebreak + * @method execCommand + * @param { String } cmd 命令字符串 + * @remind 在表格中插入分页符会把表格切分成两部分 + * @remind 获取编辑器内的数据时, 编辑器会把分页符转换成“_ueditor_page_break_tag_”字符串, + * 以便于提交数据到服务器端后处理分页。 + * @example + * ```javascript + * editor.execCommand( 'pagebreak'); //插入一个hr标签,带有样式类名pagebreak + * ``` + */ + + me.commands['pagebreak'] = { + execCommand:function () { + var range = me.selection.getRange(),hr = me.document.createElement('hr'); + domUtils.setAttributes(hr,{ + 'class' : 'pagebreak', + noshade:"noshade", + size:"5" + }); + domUtils.unSelectable(hr); + //table单独处理 + var node = domUtils.findParentByTagName(range.startContainer, notBreakTags, true), + + parents = [], pN; + if (node) { + switch (node.tagName) { + case 'TD': + pN = node.parentNode; + if (!pN.previousSibling) { + var table = domUtils.findParentByTagName(pN, 'table'); +// var tableWrapDiv = table.parentNode; +// if(tableWrapDiv && tableWrapDiv.nodeType == 1 +// && tableWrapDiv.tagName == 'DIV' +// && tableWrapDiv.getAttribute('dropdrag') +// ){ +// domUtils.remove(tableWrapDiv,true); +// } + table.parentNode.insertBefore(hr, table); + parents = domUtils.findParents(hr, true); + + } else { + pN.parentNode.insertBefore(hr, pN); + parents = domUtils.findParents(hr); + + } + pN = parents[1]; + if (hr !== pN) { + domUtils.breakParent(hr, pN); + + } + //table要重写绑定一下拖拽 + me.fireEvent('afteradjusttable',me.document); + } + + } else { + + if (!range.collapsed) { + range.deleteContents(); + var start = range.startContainer; + while ( !domUtils.isBody(start) && domUtils.isBlockElm(start) && domUtils.isEmptyNode(start)) { + range.setStartBefore(start).collapse(true); + domUtils.remove(start); + start = range.startContainer; + } + + } + range.insertNode(hr); + + var pN = hr.parentNode, nextNode; + while (!domUtils.isBody(pN)) { + domUtils.breakParent(hr, pN); + nextNode = hr.nextSibling; + if (nextNode && domUtils.isEmptyBlock(nextNode)) { + domUtils.remove(nextNode); + } + pN = hr.parentNode; + } + nextNode = hr.nextSibling; + var pre = hr.previousSibling; + if(isHr(pre)){ + domUtils.remove(pre); + }else{ + pre && fillNode(pre); + } + + if(!nextNode){ + var p = me.document.createElement('p'); + + hr.parentNode.appendChild(p); + domUtils.fillNode(me.document,p); + range.setStart(p,0).collapse(true); + }else{ + if(isHr(nextNode)){ + domUtils.remove(nextNode); + }else{ + fillNode(nextNode); + } + range.setEndAfter(hr).collapse(false); + } + + range.select(true); + + } + + } + }; +}; + +// plugins/wordimage.js +///import core +///commands 本地图片引导上传 +///commandsName WordImage +///commandsTitle 本地图片引导上传 +///commandsDialog dialogs\wordimage + +UE.plugin.register('wordimage',function(){ + var me = this, + images = []; + return { + commands : { + 'wordimage':{ + execCommand:function () { + var images = domUtils.getElementsByTagName(me.body, "img"); + var urlList = []; + for (var i = 0, ci; ci = images[i++];) { + var url = ci.getAttribute("word_img"); + url && urlList.push(url); + } + return urlList; + }, + queryCommandState:function () { + images = domUtils.getElementsByTagName(me.body, "img"); + for (var i = 0, ci; ci = images[i++];) { + if (ci.getAttribute("word_img")) { + return 1; + } + } + return -1; + }, + notNeedUndo:true + } + }, + inputRule : function (root) { + utils.each(root.getNodesByTagName('img'), function (img) { + var attrs = img.attrs, + flag = parseInt(attrs.width) < 128 || parseInt(attrs.height) < 43, + opt = me.options, + src = opt.UEDITOR_HOME_URL + 'themes/default/images/spacer.gif'; + if (attrs['src'] && /^(?:(file:\/+))/.test(attrs['src'])) { + img.setAttr({ + width:attrs.width, + height:attrs.height, + alt:attrs.alt, + word_img: attrs.src, + src:src, + 'style':'background:url(' + ( flag ? opt.themePath + opt.theme + '/images/word.gif' : opt.langPath + opt.lang + '/images/localimage.png') + ') no-repeat center center;border:1px solid #ddd' + }) + } + }) + } + } +}); + +// plugins/dragdrop.js +UE.plugins['dragdrop'] = function (){ + + var me = this; + me.ready(function(){ + domUtils.on(this.body,'dragend',function(){ + var rng = me.selection.getRange(); + var node = rng.getClosedNode()||me.selection.getStart(); + + if(node && node.tagName == 'IMG'){ + + var pre = node.previousSibling,next; + while(next = node.nextSibling){ + if(next.nodeType == 1 && next.tagName == 'SPAN' && !next.firstChild){ + domUtils.remove(next) + }else{ + break; + } + } + + + if((pre && pre.nodeType == 1 && !domUtils.isEmptyBlock(pre) || !pre) && (!next || next && !domUtils.isEmptyBlock(next))){ + if(pre && pre.tagName == 'P' && !domUtils.isEmptyBlock(pre)){ + pre.appendChild(node); + domUtils.moveChild(next,pre); + domUtils.remove(next); + }else if(next && next.tagName == 'P' && !domUtils.isEmptyBlock(next)){ + next.insertBefore(node,next.firstChild); + } + + if(pre && pre.tagName == 'P' && domUtils.isEmptyBlock(pre)){ + domUtils.remove(pre) + } + if(next && next.tagName == 'P' && domUtils.isEmptyBlock(next)){ + domUtils.remove(next) + } + rng.selectNode(node).select(); + me.fireEvent('saveScene'); + + } + + } + + }) + }); + me.addListener('keyup', function(type, evt) { + var keyCode = evt.keyCode || evt.which; + if (keyCode == 13) { + var rng = me.selection.getRange(),node; + if(node = domUtils.findParentByTagName(rng.startContainer,'p',true)){ + if(domUtils.getComputedStyle(node,'text-align') == 'center'){ + domUtils.removeStyle(node,'text-align') + } + } + } + }) +}; + + +// plugins/undo.js +/** + * undo redo + * @file + * @since 1.2.6.1 + */ + +/** + * 撤销上一次执行的命令 + * @command undo + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'undo' ); + * ``` + */ + +/** + * 重做上一次执行的命令 + * @command redo + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'redo' ); + * ``` + */ + +UE.plugins['undo'] = function () { + var saveSceneTimer; + var me = this, + maxUndoCount = me.options.maxUndoCount || 20, + maxInputCount = me.options.maxInputCount || 20, + fillchar = new RegExp(domUtils.fillChar + '|<\/hr>', 'gi');// ie会产生多余的 + var noNeedFillCharTags = { + ol:1,ul:1,table:1,tbody:1,tr:1,body:1 + }; + var orgState = me.options.autoClearEmptyNode; + function compareAddr(indexA, indexB) { + if (indexA.length != indexB.length) + return 0; + for (var i = 0, l = indexA.length; i < l; i++) { + if (indexA[i] != indexB[i]) + return 0 + } + return 1; + } + + function compareRangeAddress(rngAddrA, rngAddrB) { + if (rngAddrA.collapsed != rngAddrB.collapsed) { + return 0; + } + if (!compareAddr(rngAddrA.startAddress, rngAddrB.startAddress) || !compareAddr(rngAddrA.endAddress, rngAddrB.endAddress)) { + return 0; + } + return 1; + } + + function UndoManager() { + this.list = []; + this.index = 0; + this.hasUndo = false; + this.hasRedo = false; + this.undo = function () { + if (this.hasUndo) { + if (!this.list[this.index - 1] && this.list.length == 1) { + this.reset(); + return; + } + while (this.list[this.index].content == this.list[this.index - 1].content) { + this.index--; + if (this.index == 0) { + return this.restore(0); + } + } + this.restore(--this.index); + } + }; + this.redo = function () { + if (this.hasRedo) { + while (this.list[this.index].content == this.list[this.index + 1].content) { + this.index++; + if (this.index == this.list.length - 1) { + return this.restore(this.index); + } + } + this.restore(++this.index); + } + }; + + this.restore = function () { + var me = this.editor; + var scene = this.list[this.index]; + var root = UE.htmlparser(scene.content.replace(fillchar, '')); + me.options.autoClearEmptyNode = false; + me.filterInputRule(root); + me.options.autoClearEmptyNode = orgState; + //trace:873 + //去掉展位符 + me.document.body.innerHTML = root.toHtml(); + me.fireEvent('afterscencerestore'); + //处理undo后空格不展位的问题 + if (browser.ie) { + utils.each(domUtils.getElementsByTagName(me.document,'td th caption p'),function(node){ + if(domUtils.isEmptyNode(node)){ + domUtils.fillNode(me.document, node); + } + }) + } + + try{ + var rng = new dom.Range(me.document).moveToAddress(scene.address); + rng.select(noNeedFillCharTags[rng.startContainer.nodeName.toLowerCase()]); + }catch(e){} + + this.update(); + this.clearKey(); + //不能把自己reset了 + me.fireEvent('reset', true); + }; + + this.getScene = function () { + var me = this.editor; + var rng = me.selection.getRange(), + rngAddress = rng.createAddress(false,true); + me.fireEvent('beforegetscene'); + var root = UE.htmlparser(me.body.innerHTML); + me.options.autoClearEmptyNode = false; + me.filterOutputRule(root); + me.options.autoClearEmptyNode = orgState; + var cont = root.toHtml(); + //trace:3461 + //这个会引起回退时导致空格丢失的情况 +// browser.ie && (cont = cont.replace(/> <').replace(/\s*\s*/g, '>')); + me.fireEvent('aftergetscene'); + + return { + address:rngAddress, + content:cont + } + }; + this.save = function (notCompareRange,notSetCursor) { + clearTimeout(saveSceneTimer); + var currentScene = this.getScene(notSetCursor), + lastScene = this.list[this.index]; + + if(lastScene && lastScene.content != currentScene.content){ + me.trigger('contentchange') + } + //内容相同位置相同不存 + if (lastScene && lastScene.content == currentScene.content && + ( notCompareRange ? 1 : compareRangeAddress(lastScene.address, currentScene.address) ) + ) { + return; + } + this.list = this.list.slice(0, this.index + 1); + this.list.push(currentScene); + //如果大于最大数量了,就把最前的剔除 + if (this.list.length > maxUndoCount) { + this.list.shift(); + } + this.index = this.list.length - 1; + this.clearKey(); + //跟新undo/redo状态 + this.update(); + + }; + this.update = function () { + this.hasRedo = !!this.list[this.index + 1]; + this.hasUndo = !!this.list[this.index - 1]; + }; + this.reset = function () { + this.list = []; + this.index = 0; + this.hasUndo = false; + this.hasRedo = false; + this.clearKey(); + }; + this.clearKey = function () { + keycont = 0; + lastKeyCode = null; + }; + } + + me.undoManger = new UndoManager(); + me.undoManger.editor = me; + function saveScene() { + this.undoManger.save(); + } + + me.addListener('saveScene', function () { + var args = Array.prototype.splice.call(arguments,1); + this.undoManger.save.apply(this.undoManger,args); + }); + +// me.addListener('beforeexeccommand', saveScene); +// me.addListener('afterexeccommand', saveScene); + + me.addListener('reset', function (type, exclude) { + if (!exclude) { + this.undoManger.reset(); + } + }); + me.commands['redo'] = me.commands['undo'] = { + execCommand:function (cmdName) { + this.undoManger[cmdName](); + }, + queryCommandState:function (cmdName) { + return this.undoManger['has' + (cmdName.toLowerCase() == 'undo' ? 'Undo' : 'Redo')] ? 0 : -1; + }, + notNeedUndo:1 + }; + + var keys = { + // /*Backspace*/ 8:1, /*Delete*/ 46:1, + /*Shift*/ 16:1, /*Ctrl*/ 17:1, /*Alt*/ 18:1, + 37:1, 38:1, 39:1, 40:1 + + }, + keycont = 0, + lastKeyCode; + //输入法状态下不计算字符数 + var inputType = false; + me.addListener('ready', function () { + domUtils.on(this.body, 'compositionstart', function () { + inputType = true; + }); + domUtils.on(this.body, 'compositionend', function () { + inputType = false; + }) + }); + //快捷键 + me.addshortcutkey({ + "Undo":"ctrl+90", //undo + "Redo":"ctrl+89" //redo + + }); + var isCollapsed = true; + me.addListener('keydown', function (type, evt) { + + var me = this; + var keyCode = evt.keyCode || evt.which; + if (!keys[keyCode] && !evt.ctrlKey && !evt.metaKey && !evt.shiftKey && !evt.altKey) { + if (inputType) + return; + + if(!me.selection.getRange().collapsed){ + me.undoManger.save(false,true); + isCollapsed = false; + return; + } + if (me.undoManger.list.length == 0) { + me.undoManger.save(true); + } + clearTimeout(saveSceneTimer); + function save(cont){ + cont.undoManger.save(false,true); + cont.fireEvent('selectionchange'); + } + saveSceneTimer = setTimeout(function(){ + if(inputType){ + var interalTimer = setInterval(function(){ + if(!inputType){ + save(me); + clearInterval(interalTimer) + } + },300) + return; + } + save(me); + },200); + + lastKeyCode = keyCode; + keycont++; + if (keycont >= maxInputCount ) { + save(me) + } + } + }); + me.addListener('keyup', function (type, evt) { + var keyCode = evt.keyCode || evt.which; + if (!keys[keyCode] && !evt.ctrlKey && !evt.metaKey && !evt.shiftKey && !evt.altKey) { + if (inputType) + return; + if(!isCollapsed){ + this.undoManger.save(false,true); + isCollapsed = true; + } + } + }); + //扩展实例,添加关闭和开启命令undo + me.stopCmdUndo = function(){ + me.__hasEnterExecCommand = true; + }; + me.startCmdUndo = function(){ + me.__hasEnterExecCommand = false; + } +}; + + +// plugins/copy.js +UE.plugin.register('copy', function () { + + var me = this; + + function initZeroClipboard() { + + ZeroClipboard.config({ + debug: false, + swfPath: me.options.UEDITOR_HOME_URL + 'third-party/zeroclipboard/ZeroClipboard.swf' + }); + + var client = me.zeroclipboard = new ZeroClipboard(); + + // 复制内容 + client.on('copy', function (e) { + var client = e.client, + rng = me.selection.getRange(), + div = document.createElement('div'); + + div.appendChild(rng.cloneContents()); + client.setText(div.innerText || div.textContent); + client.setHtml(div.innerHTML); + rng.select(); + }); + // hover事件传递到target + client.on('mouseover mouseout', function (e) { + var target = e.target; + if (e.type == 'mouseover') { + domUtils.addClass(target, 'edui-state-hover'); + } else if (e.type == 'mouseout') { + domUtils.removeClasses(target, 'edui-state-hover'); + } + }); + // flash加载不成功 + client.on('wrongflash noflash', function () { + ZeroClipboard.destroy(); + }); + } + + return { + bindEvents: { + 'ready': function () { + if (!browser.ie) { + if (window.ZeroClipboard) { + initZeroClipboard(); + } else { + utils.loadFile(document, { + src: me.options.UEDITOR_HOME_URL + "third-party/zeroclipboard/ZeroClipboard.js", + tag: "script", + type: "text/javascript", + defer: "defer" + }, function () { + initZeroClipboard(); + }); + } + } + } + }, + commands: { + 'copy': { + execCommand: function (cmd) { + if (!me.document.execCommand('copy')) { + alert(me.getLang('copymsg')); + } + } + } + } + } +}); + + +// plugins/paste.js +///import core +///import plugins/inserthtml.js +///import plugins/undo.js +///import plugins/serialize.js +///commands 粘贴 +///commandsName PastePlain +///commandsTitle 纯文本粘贴模式 +/** + * @description 粘贴 + * @author zhanyi + */ +UE.plugins['paste'] = function () { + function getClipboardData(callback) { + var doc = this.document; + if (doc.getElementById('baidu_pastebin')) { + return; + } + var range = this.selection.getRange(), + bk = range.createBookmark(), + //创建剪贴的容器div + pastebin = doc.createElement('div'); + pastebin.id = 'baidu_pastebin'; + // Safari 要求div必须有内容,才能粘贴内容进来 + browser.webkit && pastebin.appendChild(doc.createTextNode(domUtils.fillChar + domUtils.fillChar)); + doc.body.appendChild(pastebin); + //trace:717 隐藏的span不能得到top + //bk.start.innerHTML = ' '; + bk.start.style.display = ''; + pastebin.style.cssText = "position:absolute;width:1px;height:1px;overflow:hidden;left:-1000px;white-space:nowrap;top:" + + //要在现在光标平行的位置加入,否则会出现跳动的问题 + domUtils.getXY(bk.start).y + 'px'; + + range.selectNodeContents(pastebin).select(true); + + setTimeout(function () { + if (browser.webkit) { + for (var i = 0, pastebins = doc.querySelectorAll('#baidu_pastebin'), pi; pi = pastebins[i++];) { + if (domUtils.isEmptyNode(pi)) { + domUtils.remove(pi); + } else { + pastebin = pi; + break; + } + } + } + try { + pastebin.parentNode.removeChild(pastebin); + } catch (e) { + } + range.moveToBookmark(bk).select(true); + callback(pastebin); + }, 0); + } + + var me = this; + + me.setOpt({ + retainOnlyLabelPasted : false + }); + + var txtContent, htmlContent, address; + + function getPureHtml(html){ + return html.replace(/<(\/?)([\w\-]+)([^>]*)>/gi, function (a, b, tagName, attrs) { + tagName = tagName.toLowerCase(); + if ({img: 1}[tagName]) { + return a; + } + attrs = attrs.replace(/([\w\-]*?)\s*=\s*(("([^"]*)")|('([^']*)')|([^\s>]+))/gi, function (str, atr, val) { + if ({ + 'src': 1, + 'href': 1, + 'name': 1 + }[atr.toLowerCase()]) { + return atr + '=' + val + ' ' + } + return '' + }); + if ({ + 'span': 1, + 'div': 1 + }[tagName]) { + return '' + } else { + + return '<' + b + tagName + ' ' + utils.trim(attrs) + '>' + } + + }); + } + function filter(div) { + var html; + if (div.firstChild) { + //去掉cut中添加的边界值 + var nodes = domUtils.getElementsByTagName(div, 'span'); + for (var i = 0, ni; ni = nodes[i++];) { + if (ni.id == '_baidu_cut_start' || ni.id == '_baidu_cut_end') { + domUtils.remove(ni); + } + } + + if (browser.webkit) { + + var brs = div.querySelectorAll('div br'); + for (var i = 0, bi; bi = brs[i++];) { + var pN = bi.parentNode; + if (pN.tagName == 'DIV' && pN.childNodes.length == 1) { + pN.innerHTML = '


    '; + domUtils.remove(pN); + } + } + var divs = div.querySelectorAll('#baidu_pastebin'); + for (var i = 0, di; di = divs[i++];) { + var tmpP = me.document.createElement('p'); + di.parentNode.insertBefore(tmpP, di); + while (di.firstChild) { + tmpP.appendChild(di.firstChild); + } + domUtils.remove(di); + } + + var metas = div.querySelectorAll('meta'); + for (var i = 0, ci; ci = metas[i++];) { + domUtils.remove(ci); + } + + var brs = div.querySelectorAll('br'); + for (i = 0; ci = brs[i++];) { + if (/^apple-/i.test(ci.className)) { + domUtils.remove(ci); + } + } + } + if (browser.gecko) { + var dirtyNodes = div.querySelectorAll('[_moz_dirty]'); + for (i = 0; ci = dirtyNodes[i++];) { + ci.removeAttribute('_moz_dirty'); + } + } + if (!browser.ie) { + var spans = div.querySelectorAll('span.Apple-style-span'); + for (var i = 0, ci; ci = spans[i++];) { + domUtils.remove(ci, true); + } + } + + //ie下使用innerHTML会产生多余的\r\n字符,也会产生 这里过滤掉 + html = div.innerHTML;//.replace(/>(?:(\s| )*?)<'); + + //过滤word粘贴过来的冗余属性 + html = UE.filterWord(html); + //取消了忽略空白的第二个参数,粘贴过来的有些是有空白的,会被套上相关的标签 + var root = UE.htmlparser(html); + //如果给了过滤规则就先进行过滤 + if (me.options.filterRules) { + UE.filterNode(root, me.options.filterRules); + } + //执行默认的处理 + me.filterInputRule(root); + //针对chrome的处理 + if (browser.webkit) { + var br = root.lastChild(); + if (br && br.type == 'element' && br.tagName == 'br') { + root.removeChild(br) + } + utils.each(me.body.querySelectorAll('div'), function (node) { + if (domUtils.isEmptyBlock(node)) { + domUtils.remove(node,true) + } + }) + } + html = {'html': root.toHtml()}; + me.fireEvent('beforepaste', html, root); + //抢了默认的粘贴,那后边的内容就不执行了,比如表格粘贴 + if(!html.html){ + return; + } + root = UE.htmlparser(html.html,true); + //如果开启了纯文本模式 + if (me.queryCommandState('pasteplain') === 1) { + me.execCommand('insertHtml', UE.filterNode(root, me.options.filterTxtRules).toHtml(), true); + } else { + //文本模式 + UE.filterNode(root, me.options.filterTxtRules); + txtContent = root.toHtml(); + //完全模式 + htmlContent = html.html; + + address = me.selection.getRange().createAddress(true); + me.execCommand('insertHtml', me.getOpt('retainOnlyLabelPasted') === true ? getPureHtml(htmlContent) : htmlContent, true); + } + me.fireEvent("afterpaste", html); + } + } + + me.addListener('pasteTransfer', function (cmd, plainType) { + + if (address && txtContent && htmlContent && txtContent != htmlContent) { + var range = me.selection.getRange(); + range.moveToAddress(address, true); + + if (!range.collapsed) { + + while (!domUtils.isBody(range.startContainer) + ) { + var start = range.startContainer; + if(start.nodeType == 1){ + start = start.childNodes[range.startOffset]; + if(!start){ + range.setStartBefore(range.startContainer); + continue; + } + var pre = start.previousSibling; + + if(pre && pre.nodeType == 3 && new RegExp('^[\n\r\t '+domUtils.fillChar+']*$').test(pre.nodeValue)){ + range.setStartBefore(pre) + } + } + if(range.startOffset == 0){ + range.setStartBefore(range.startContainer); + }else{ + break; + } + + } + while (!domUtils.isBody(range.endContainer) + ) { + var end = range.endContainer; + if(end.nodeType == 1){ + end = end.childNodes[range.endOffset]; + if(!end){ + range.setEndAfter(range.endContainer); + continue; + } + var next = end.nextSibling; + if(next && next.nodeType == 3 && new RegExp('^[\n\r\t'+domUtils.fillChar+']*$').test(next.nodeValue)){ + range.setEndAfter(next) + } + } + if(range.endOffset == range.endContainer[range.endContainer.nodeType == 3 ? 'nodeValue' : 'childNodes'].length){ + range.setEndAfter(range.endContainer); + }else{ + break; + } + + } + + } + + range.deleteContents(); + range.select(true); + me.__hasEnterExecCommand = true; + var html = htmlContent; + if (plainType === 2 ) { + html = getPureHtml(html); + } else if (plainType) { + html = txtContent; + } + me.execCommand('inserthtml', html, true); + me.__hasEnterExecCommand = false; + var rng = me.selection.getRange(); + while (!domUtils.isBody(rng.startContainer) && !rng.startOffset && + rng.startContainer[rng.startContainer.nodeType == 3 ? 'nodeValue' : 'childNodes'].length + ) { + rng.setStartBefore(rng.startContainer); + } + var tmpAddress = rng.createAddress(true); + address.endAddress = tmpAddress.startAddress; + } + }); + + me.addListener('ready', function () { + domUtils.on(me.body, 'cut', function () { + var range = me.selection.getRange(); + if (!range.collapsed && me.undoManger) { + me.undoManger.save(); + } + }); + + //ie下beforepaste在点击右键时也会触发,所以用监控键盘才处理 + domUtils.on(me.body, browser.ie || browser.opera ? 'keydown' : 'paste', function (e) { + if ((browser.ie || browser.opera) && ((!e.ctrlKey && !e.metaKey) || e.keyCode != '86')) { + return; + } + getClipboardData.call(me, function (div) { + filter(div); + }); + }); + + }); + + me.commands['paste'] = { + execCommand: function (cmd) { + if (browser.ie) { + getClipboardData.call(me, function (div) { + filter(div); + }); + me.document.execCommand('paste'); + } else { + alert(me.getLang('pastemsg')); + } + } + } +}; + + + +// plugins/puretxtpaste.js +/** + * 纯文本粘贴插件 + * @file + * @since 1.2.6.1 + */ + +UE.plugins['pasteplain'] = function(){ + var me = this; + me.setOpt({ + 'pasteplain':false, + 'filterTxtRules' : function(){ + function transP(node){ + node.tagName = 'p'; + node.setStyle(); + } + function removeNode(node){ + node.parentNode.removeChild(node,true) + } + return { + //直接删除及其字节点内容 + '-' : 'script style object iframe embed input select', + 'p': {$:{}}, + 'br':{$:{}}, + div: function (node) { + var tmpNode, p = UE.uNode.createElement('p'); + while (tmpNode = node.firstChild()) { + if (tmpNode.type == 'text' || !UE.dom.dtd.$block[tmpNode.tagName]) { + p.appendChild(tmpNode); + } else { + if (p.firstChild()) { + node.parentNode.insertBefore(p, node); + p = UE.uNode.createElement('p'); + } else { + node.parentNode.insertBefore(tmpNode, node); + } + } + } + if (p.firstChild()) { + node.parentNode.insertBefore(p, node); + } + node.parentNode.removeChild(node); + }, + ol: removeNode, + ul: removeNode, + dl:removeNode, + dt:removeNode, + dd:removeNode, + 'li':removeNode, + 'caption':transP, + 'th':transP, + 'tr':transP, + 'h1':transP,'h2':transP,'h3':transP,'h4':transP,'h5':transP,'h6':transP, + 'td':function(node){ + //没有内容的td直接删掉 + var txt = !!node.innerText(); + if(txt){ + node.parentNode.insertAfter(UE.uNode.createText('    '),node); + } + node.parentNode.removeChild(node,node.innerText()) + } + } + }() + }); + //暂时这里支持一下老版本的属性 + var pasteplain = me.options.pasteplain; + + /** + * 启用或取消纯文本粘贴模式 + * @command pasteplain + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.queryCommandState( 'pasteplain' ); + * ``` + */ + + /** + * 查询当前是否处于纯文本粘贴模式 + * @command pasteplain + * @method queryCommandState + * @param { String } cmd 命令字符串 + * @return { int } 如果处于纯文本模式,返回1,否则,返回0 + * @example + * ```javascript + * editor.queryCommandState( 'pasteplain' ); + * ``` + */ + me.commands['pasteplain'] = { + queryCommandState: function (){ + return pasteplain ? 1 : 0; + }, + execCommand: function (){ + pasteplain = !pasteplain|0; + }, + notNeedUndo : 1 + }; +}; + +// plugins/list.js +/** + * 有序列表,无序列表插件 + * @file + * @since 1.2.6.1 + */ + +UE.plugins['list'] = function () { + var me = this, + notExchange = { + 'TD':1, + 'PRE':1, + 'BLOCKQUOTE':1 + }; + var customStyle = { + 'cn' : 'cn-1-', + 'cn1' : 'cn-2-', + 'cn2' : 'cn-3-', + 'num': 'num-1-', + 'num1' : 'num-2-', + 'num2' : 'num-3-', + 'dash' : 'dash', + 'dot':'dot' + }; + + me.setOpt( { + 'autoTransWordToList':false, + 'insertorderedlist':{ + 'num':'', + 'num1':'', + 'num2':'', + 'cn':'', + 'cn1':'', + 'cn2':'', + 'decimal':'', + 'lower-alpha':'', + 'lower-roman':'', + 'upper-alpha':'', + 'upper-roman':'' + }, + 'insertunorderedlist':{ + 'circle':'', + 'disc':'', + 'square':'', + 'dash' : '', + 'dot':'' + }, + listDefaultPaddingLeft : '30', + listiconpath : 'http://bs.baidu.com/listicon/', + maxListLevel : -1,//-1不限制 + disablePInList:false + } ); + function listToArray(list){ + var arr = []; + for(var p in list){ + arr.push(p) + } + return arr; + } + var listStyle = { + 'OL':listToArray(me.options.insertorderedlist), + 'UL':listToArray(me.options.insertunorderedlist) + }; + var liiconpath = me.options.listiconpath; + + //根据用户配置,调整customStyle + for(var s in customStyle){ + if(!me.options.insertorderedlist.hasOwnProperty(s) && !me.options.insertunorderedlist.hasOwnProperty(s)){ + delete customStyle[s]; + } + } + + me.ready(function () { + var customCss = []; + for(var p in customStyle){ + if(p == 'dash' || p == 'dot'){ + customCss.push('li.list-' + customStyle[p] + '{background-image:url(' + liiconpath +customStyle[p]+'.gif)}'); + customCss.push('ul.custom_'+p+'{list-style:none;}ul.custom_'+p+' li{background-position:0 3px;background-repeat:no-repeat}'); + }else{ + for(var i= 0;i<99;i++){ + customCss.push('li.list-' + customStyle[p] + i + '{background-image:url(' + liiconpath + 'list-'+customStyle[p] + i + '.gif)}') + } + customCss.push('ol.custom_'+p+'{list-style:none;}ol.custom_'+p+' li{background-position:0 3px;background-repeat:no-repeat}'); + } + switch(p){ + case 'cn': + customCss.push('li.list-'+p+'-paddingleft-1{padding-left:25px}'); + customCss.push('li.list-'+p+'-paddingleft-2{padding-left:40px}'); + customCss.push('li.list-'+p+'-paddingleft-3{padding-left:55px}'); + break; + case 'cn1': + customCss.push('li.list-'+p+'-paddingleft-1{padding-left:30px}'); + customCss.push('li.list-'+p+'-paddingleft-2{padding-left:40px}'); + customCss.push('li.list-'+p+'-paddingleft-3{padding-left:55px}'); + break; + case 'cn2': + customCss.push('li.list-'+p+'-paddingleft-1{padding-left:40px}'); + customCss.push('li.list-'+p+'-paddingleft-2{padding-left:55px}'); + customCss.push('li.list-'+p+'-paddingleft-3{padding-left:68px}'); + break; + case 'num': + case 'num1': + customCss.push('li.list-'+p+'-paddingleft-1{padding-left:25px}'); + break; + case 'num2': + customCss.push('li.list-'+p+'-paddingleft-1{padding-left:35px}'); + customCss.push('li.list-'+p+'-paddingleft-2{padding-left:40px}'); + break; + case 'dash': + customCss.push('li.list-'+p+'-paddingleft{padding-left:35px}'); + break; + case 'dot': + customCss.push('li.list-'+p+'-paddingleft{padding-left:20px}'); + } + } + customCss.push('.list-paddingleft-1{padding-left:0}'); + customCss.push('.list-paddingleft-2{padding-left:'+me.options.listDefaultPaddingLeft+'px}'); + customCss.push('.list-paddingleft-3{padding-left:'+me.options.listDefaultPaddingLeft*2+'px}'); + //如果不给宽度会在自定应样式里出现滚动条 + utils.cssRule('list', 'ol,ul{margin:0;pading:0;'+(browser.ie ? '' : 'width:95%')+'}li{clear:both;}'+customCss.join('\n'), me.document); + }); + //单独处理剪切的问题 + me.ready(function(){ + domUtils.on(me.body,'cut',function(){ + setTimeout(function(){ + var rng = me.selection.getRange(),li; + //trace:3416 + if(!rng.collapsed){ + if(li = domUtils.findParentByTagName(rng.startContainer,'li',true)){ + if(!li.nextSibling && domUtils.isEmptyBlock(li)){ + var pn = li.parentNode,node; + if(node = pn.previousSibling){ + domUtils.remove(pn); + rng.setStartAtLast(node).collapse(true); + rng.select(true); + }else if(node = pn.nextSibling){ + domUtils.remove(pn); + rng.setStartAtFirst(node).collapse(true); + rng.select(true); + }else{ + var tmpNode = me.document.createElement('p'); + domUtils.fillNode(me.document,tmpNode); + pn.parentNode.insertBefore(tmpNode,pn); + domUtils.remove(pn); + rng.setStart(tmpNode,0).collapse(true); + rng.select(true); + } + } + } + } + + }) + }) + }); + + function getStyle(node){ + var cls = node.className; + if(domUtils.hasClass(node,/custom_/)){ + return cls.match(/custom_(\w+)/)[1] + } + return domUtils.getStyle(node, 'list-style-type') + + } + + me.addListener('beforepaste',function(type,html){ + var me = this, + rng = me.selection.getRange(),li; + var root = UE.htmlparser(html.html,true); + if(li = domUtils.findParentByTagName(rng.startContainer,'li',true)){ + var list = li.parentNode,tagName = list.tagName == 'OL' ? 'ul':'ol'; + utils.each(root.getNodesByTagName(tagName),function(n){ + n.tagName = list.tagName; + n.setAttr(); + if(n.parentNode === root){ + type = getStyle(list) || (list.tagName == 'OL' ? 'decimal' : 'disc') + }else{ + var className = n.parentNode.getAttr('class'); + if(className && /custom_/.test(className)){ + type = className.match(/custom_(\w+)/)[1] + }else{ + type = n.parentNode.getStyle('list-style-type'); + } + if(!type){ + type = list.tagName == 'OL' ? 'decimal' : 'disc'; + } + } + var index = utils.indexOf(listStyle[list.tagName], type); + if(n.parentNode !== root) + index = index + 1 == listStyle[list.tagName].length ? 0 : index + 1; + var currentStyle = listStyle[list.tagName][index]; + if(customStyle[currentStyle]){ + n.setAttr('class', 'custom_' + currentStyle) + + }else{ + n.setStyle('list-style-type',currentStyle) + } + }) + + } + + html.html = root.toHtml(); + }); + //导出时,去掉p标签 + me.getOpt('disablePInList') === true && me.addOutputRule(function(root){ + utils.each(root.getNodesByTagName('li'),function(li){ + var newChildrens = [],index=0; + utils.each(li.children,function(n){ + if(n.tagName == 'p'){ + var tmpNode; + while(tmpNode = n.children.pop()) { + newChildrens.splice(index,0,tmpNode); + tmpNode.parentNode = li; + lastNode = tmpNode; + } + tmpNode = newChildrens[newChildrens.length-1]; + if(!tmpNode || tmpNode.type != 'element' || tmpNode.tagName != 'br'){ + var br = UE.uNode.createElement('br'); + br.parentNode = li; + newChildrens.push(br); + } + + index = newChildrens.length; + } + }); + if(newChildrens.length){ + li.children = newChildrens; + } + }); + }); + //进入编辑器的li要套p标签 + me.addInputRule(function(root){ + utils.each(root.getNodesByTagName('li'),function(li){ + var tmpP = UE.uNode.createElement('p'); + for(var i= 0,ci;ci=li.children[i];){ + if(ci.type == 'text' || dtd.p[ci.tagName]){ + tmpP.appendChild(ci); + }else{ + if(tmpP.firstChild()){ + li.insertBefore(tmpP,ci); + tmpP = UE.uNode.createElement('p'); + i = i + 2; + }else{ + i++; + } + + } + } + if(tmpP.firstChild() && !tmpP.parentNode || !li.firstChild()){ + li.appendChild(tmpP); + } + //trace:3357 + //p不能为空 + if (!tmpP.firstChild()) { + tmpP.innerHTML(browser.ie ? ' ' : '
    ') + } + //去掉末尾的空白 + var p = li.firstChild(); + var lastChild = p.lastChild(); + if(lastChild && lastChild.type == 'text' && /^\s*$/.test(lastChild.data)){ + p.removeChild(lastChild) + } + }); + if(me.options.autoTransWordToList){ + var orderlisttype = { + 'num1':/^\d+\)/, + 'decimal':/^\d+\./, + 'lower-alpha':/^[a-z]+\)/, + 'upper-alpha':/^[A-Z]+\./, + 'cn':/^[\u4E00\u4E8C\u4E09\u56DB\u516d\u4e94\u4e03\u516b\u4e5d]+[\u3001]/, + 'cn2':/^\([\u4E00\u4E8C\u4E09\u56DB\u516d\u4e94\u4e03\u516b\u4e5d]+\)/ + }, + unorderlisttype = { + 'square':'n' + }; + function checkListType(content,container){ + var span = container.firstChild(); + if(span && span.type == 'element' && span.tagName == 'span' && /Wingdings|Symbol/.test(span.getStyle('font-family'))){ + for(var p in unorderlisttype){ + if(unorderlisttype[p] == span.data){ + return p + } + } + return 'disc' + } + for(var p in orderlisttype){ + if(orderlisttype[p].test(content)){ + return p; + } + } + + } + utils.each(root.getNodesByTagName('p'),function(node){ + if(node.getAttr('class') != 'MsoListParagraph'){ + return + } + + //word粘贴过来的会带有margin要去掉,但这样也可能会误命中一些央视 + node.setStyle('margin',''); + node.setStyle('margin-left',''); + node.setAttr('class',''); + + function appendLi(list,p,type){ + if(list.tagName == 'ol'){ + if(browser.ie){ + var first = p.firstChild(); + if(first.type =='element' && first.tagName == 'span' && orderlisttype[type].test(first.innerText())){ + p.removeChild(first); + } + }else{ + p.innerHTML(p.innerHTML().replace(orderlisttype[type],'')); + } + }else{ + p.removeChild(p.firstChild()) + } + + var li = UE.uNode.createElement('li'); + li.appendChild(p); + list.appendChild(li); + } + var tmp = node,type,cacheNode = node; + + if(node.parentNode.tagName != 'li' && (type = checkListType(node.innerText(),node))){ + + var list = UE.uNode.createElement(me.options.insertorderedlist.hasOwnProperty(type) ? 'ol' : 'ul'); + if(customStyle[type]){ + list.setAttr('class','custom_'+type) + }else{ + list.setStyle('list-style-type',type) + } + while(node && node.parentNode.tagName != 'li' && checkListType(node.innerText(),node)){ + tmp = node.nextSibling(); + if(!tmp){ + node.parentNode.insertBefore(list,node) + } + appendLi(list,node,type); + node = tmp; + } + if(!list.parentNode && node && node.parentNode){ + node.parentNode.insertBefore(list,node) + } + } + var span = cacheNode.firstChild(); + if(span && span.type == 'element' && span.tagName == 'span' && /^\s*( )+\s*$/.test(span.innerText())){ + span.parentNode.removeChild(span) + } + }) + } + + }); + + //调整索引标签 + me.addListener('contentchange',function(){ + adjustListStyle(me.document) + }); + + function adjustListStyle(doc,ignore){ + utils.each(domUtils.getElementsByTagName(doc,'ol ul'),function(node){ + + if(!domUtils.inDoc(node,doc)) + return; + + var parent = node.parentNode; + if(parent.tagName == node.tagName){ + var nodeStyleType = getStyle(node) || (node.tagName == 'OL' ? 'decimal' : 'disc'), + parentStyleType = getStyle(parent) || (parent.tagName == 'OL' ? 'decimal' : 'disc'); + if(nodeStyleType == parentStyleType){ + var styleIndex = utils.indexOf(listStyle[node.tagName], nodeStyleType); + styleIndex = styleIndex + 1 == listStyle[node.tagName].length ? 0 : styleIndex + 1; + setListStyle(node,listStyle[node.tagName][styleIndex]) + } + + } + var index = 0,type = 2; + if( domUtils.hasClass(node,/custom_/)){ + if(!(/[ou]l/i.test(parent.tagName) && domUtils.hasClass(parent,/custom_/))){ + type = 1; + } + }else{ + if(/[ou]l/i.test(parent.tagName) && domUtils.hasClass(parent,/custom_/)){ + type = 3; + } + } + + var style = domUtils.getStyle(node, 'list-style-type'); + style && (node.style.cssText = 'list-style-type:' + style); + node.className = utils.trim(node.className.replace(/list-paddingleft-\w+/,'')) + ' list-paddingleft-' + type; + utils.each(domUtils.getElementsByTagName(node,'li'),function(li){ + li.style.cssText && (li.style.cssText = ''); + if(!li.firstChild){ + domUtils.remove(li); + return; + } + if(li.parentNode !== node){ + return; + } + index++; + if(domUtils.hasClass(node,/custom_/) ){ + var paddingLeft = 1,currentStyle = getStyle(node); + if(node.tagName == 'OL'){ + if(currentStyle){ + switch(currentStyle){ + case 'cn' : + case 'cn1': + case 'cn2': + if(index > 10 && (index % 10 == 0 || index > 10 && index < 20)){ + paddingLeft = 2 + }else if(index > 20){ + paddingLeft = 3 + } + break; + case 'num2' : + if(index > 9){ + paddingLeft = 2 + } + } + } + li.className = 'list-'+customStyle[currentStyle]+ index + ' ' + 'list-'+currentStyle+'-paddingleft-' + paddingLeft; + }else{ + li.className = 'list-'+customStyle[currentStyle] + ' ' + 'list-'+currentStyle+'-paddingleft'; + } + }else{ + li.className = li.className.replace(/list-[\w\-]+/gi,''); + } + var className = li.getAttribute('class'); + if(className !== null && !className.replace(/\s/g,'')){ + domUtils.removeAttributes(li,'class') + } + }); + !ignore && adjustList(node,node.tagName.toLowerCase(),getStyle(node)||domUtils.getStyle(node, 'list-style-type'),true); + }) + } + function adjustList(list, tag, style,ignoreEmpty) { + var nextList = list.nextSibling; + if (nextList && nextList.nodeType == 1 && nextList.tagName.toLowerCase() == tag && (getStyle(nextList) || domUtils.getStyle(nextList, 'list-style-type') || (tag == 'ol' ? 'decimal' : 'disc')) == style) { + domUtils.moveChild(nextList, list); + if (nextList.childNodes.length == 0) { + domUtils.remove(nextList); + } + } + if(nextList && domUtils.isFillChar(nextList)){ + domUtils.remove(nextList); + } + var preList = list.previousSibling; + if (preList && preList.nodeType == 1 && preList.tagName.toLowerCase() == tag && (getStyle(preList) || domUtils.getStyle(preList, 'list-style-type') || (tag == 'ol' ? 'decimal' : 'disc')) == style) { + domUtils.moveChild(list, preList); + } + if(preList && domUtils.isFillChar(preList)){ + domUtils.remove(preList); + } + !ignoreEmpty && domUtils.isEmptyBlock(list) && domUtils.remove(list); + if(getStyle(list)){ + adjustListStyle(list.ownerDocument,true) + } + } + + function setListStyle(list,style){ + if(customStyle[style]){ + list.className = 'custom_' + style; + } + try{ + domUtils.setStyle(list, 'list-style-type', style); + }catch(e){} + } + function clearEmptySibling(node) { + var tmpNode = node.previousSibling; + if (tmpNode && domUtils.isEmptyBlock(tmpNode)) { + domUtils.remove(tmpNode); + } + tmpNode = node.nextSibling; + if (tmpNode && domUtils.isEmptyBlock(tmpNode)) { + domUtils.remove(tmpNode); + } + } + + me.addListener('keydown', function (type, evt) { + function preventAndSave() { + evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false); + me.fireEvent('contentchange'); + me.undoManger && me.undoManger.save(); + } + function findList(node,filterFn){ + while(node && !domUtils.isBody(node)){ + if(filterFn(node)){ + return null + } + if(node.nodeType == 1 && /[ou]l/i.test(node.tagName)){ + return node; + } + node = node.parentNode; + } + return null; + } + var keyCode = evt.keyCode || evt.which; + if (keyCode == 13 && !evt.shiftKey) {//回车 + var rng = me.selection.getRange(), + parent = domUtils.findParent(rng.startContainer,function(node){return domUtils.isBlockElm(node)},true), + li = domUtils.findParentByTagName(rng.startContainer,'li',true); + if(parent && parent.tagName != 'PRE' && !li){ + var html = parent.innerHTML.replace(new RegExp(domUtils.fillChar, 'g'),''); + if(/^\s*1\s*\.[^\d]/.test(html)){ + parent.innerHTML = html.replace(/^\s*1\s*\./,''); + rng.setStartAtLast(parent).collapse(true).select(); + me.__hasEnterExecCommand = true; + me.execCommand('insertorderedlist'); + me.__hasEnterExecCommand = false; + } + } + var range = me.selection.getRange(), + start = findList(range.startContainer,function (node) { + return node.tagName == 'TABLE'; + }), + end = range.collapsed ? start : findList(range.endContainer,function (node) { + return node.tagName == 'TABLE'; + }); + + if (start && end && start === end) { + + if (!range.collapsed) { + start = domUtils.findParentByTagName(range.startContainer, 'li', true); + end = domUtils.findParentByTagName(range.endContainer, 'li', true); + if (start && end && start === end) { + range.deleteContents(); + li = domUtils.findParentByTagName(range.startContainer, 'li', true); + if (li && domUtils.isEmptyBlock(li)) { + + pre = li.previousSibling; + next = li.nextSibling; + p = me.document.createElement('p'); + + domUtils.fillNode(me.document, p); + parentList = li.parentNode; + if (pre && next) { + range.setStart(next, 0).collapse(true).select(true); + domUtils.remove(li); + + } else { + if (!pre && !next || !pre) { + + parentList.parentNode.insertBefore(p, parentList); + + + } else { + li.parentNode.parentNode.insertBefore(p, parentList.nextSibling); + } + domUtils.remove(li); + if (!parentList.firstChild) { + domUtils.remove(parentList); + } + range.setStart(p, 0).setCursor(); + + + } + preventAndSave(); + return; + + } + } else { + var tmpRange = range.cloneRange(), + bk = tmpRange.collapse(false).createBookmark(); + + range.deleteContents(); + tmpRange.moveToBookmark(bk); + var li = domUtils.findParentByTagName(tmpRange.startContainer, 'li', true); + + clearEmptySibling(li); + tmpRange.select(); + preventAndSave(); + return; + } + } + + + li = domUtils.findParentByTagName(range.startContainer, 'li', true); + + if (li) { + if (domUtils.isEmptyBlock(li)) { + bk = range.createBookmark(); + var parentList = li.parentNode; + if (li !== parentList.lastChild) { + domUtils.breakParent(li, parentList); + clearEmptySibling(li); + } else { + + parentList.parentNode.insertBefore(li, parentList.nextSibling); + if (domUtils.isEmptyNode(parentList)) { + domUtils.remove(parentList); + } + } + //嵌套不处理 + if (!dtd.$list[li.parentNode.tagName]) { + + if (!domUtils.isBlockElm(li.firstChild)) { + p = me.document.createElement('p'); + li.parentNode.insertBefore(p, li); + while (li.firstChild) { + p.appendChild(li.firstChild); + } + domUtils.remove(li); + } else { + domUtils.remove(li, true); + } + } + range.moveToBookmark(bk).select(); + + + } else { + var first = li.firstChild; + if (!first || !domUtils.isBlockElm(first)) { + var p = me.document.createElement('p'); + + !li.firstChild && domUtils.fillNode(me.document, p); + while (li.firstChild) { + + p.appendChild(li.firstChild); + } + li.appendChild(p); + first = p; + } + + var span = me.document.createElement('span'); + + range.insertNode(span); + domUtils.breakParent(span, li); + + var nextLi = span.nextSibling; + first = nextLi.firstChild; + + if (!first) { + p = me.document.createElement('p'); + + domUtils.fillNode(me.document, p); + nextLi.appendChild(p); + first = p; + } + if (domUtils.isEmptyNode(first)) { + first.innerHTML = ''; + domUtils.fillNode(me.document, first); + } + + range.setStart(first, 0).collapse(true).shrinkBoundary().select(); + domUtils.remove(span); + var pre = nextLi.previousSibling; + if (pre && domUtils.isEmptyBlock(pre)) { + pre.innerHTML = '

    '; + domUtils.fillNode(me.document, pre.firstChild); + } + + } +// } + preventAndSave(); + } + + + } + + + } + if (keyCode == 8) { + //修中ie中li下的问题 + range = me.selection.getRange(); + if (range.collapsed && domUtils.isStartInblock(range)) { + tmpRange = range.cloneRange().trimBoundary(); + li = domUtils.findParentByTagName(range.startContainer, 'li', true); + //要在li的最左边,才能处理 + if (li && domUtils.isStartInblock(tmpRange)) { + start = domUtils.findParentByTagName(range.startContainer, 'p', true); + if (start && start !== li.firstChild) { + var parentList = domUtils.findParentByTagName(start,['ol','ul']); + domUtils.breakParent(start,parentList); + clearEmptySibling(start); + me.fireEvent('contentchange'); + range.setStart(start,0).setCursor(false,true); + me.fireEvent('saveScene'); + domUtils.preventDefault(evt); + return; + } + + if (li && (pre = li.previousSibling)) { + if (keyCode == 46 && li.childNodes.length) { + return; + } + //有可能上边的兄弟节点是个2级菜单,要追加到2级菜单的最后的li + if (dtd.$list[pre.tagName]) { + pre = pre.lastChild; + } + me.undoManger && me.undoManger.save(); + first = li.firstChild; + if (domUtils.isBlockElm(first)) { + if (domUtils.isEmptyNode(first)) { +// range.setEnd(pre, pre.childNodes.length).shrinkBoundary().collapse().select(true); + pre.appendChild(first); + range.setStart(first, 0).setCursor(false, true); + //first不是唯一的节点 + while (li.firstChild) { + pre.appendChild(li.firstChild); + } + } else { + + span = me.document.createElement('span'); + range.insertNode(span); + //判断pre是否是空的节点,如果是


    类型的空节点,干掉p标签防止它占位 + if (domUtils.isEmptyBlock(pre)) { + pre.innerHTML = ''; + } + domUtils.moveChild(li, pre); + range.setStartBefore(span).collapse(true).select(true); + + domUtils.remove(span); + + } + } else { + if (domUtils.isEmptyNode(li)) { + var p = me.document.createElement('p'); + pre.appendChild(p); + range.setStart(p, 0).setCursor(); +// range.setEnd(pre, pre.childNodes.length).shrinkBoundary().collapse().select(true); + } else { + range.setEnd(pre, pre.childNodes.length).collapse().select(true); + while (li.firstChild) { + pre.appendChild(li.firstChild); + } + } + } + domUtils.remove(li); + me.fireEvent('contentchange'); + me.fireEvent('saveScene'); + domUtils.preventDefault(evt); + return; + + } + //trace:980 + + if (li && !li.previousSibling) { + var parentList = li.parentNode; + var bk = range.createBookmark(); + if(domUtils.isTagNode(parentList.parentNode,'ol ul')){ + parentList.parentNode.insertBefore(li,parentList); + if(domUtils.isEmptyNode(parentList)){ + domUtils.remove(parentList) + } + }else{ + + while(li.firstChild){ + parentList.parentNode.insertBefore(li.firstChild,parentList); + } + + domUtils.remove(li); + if(domUtils.isEmptyNode(parentList)){ + domUtils.remove(parentList) + } + + } + range.moveToBookmark(bk).setCursor(false,true); + me.fireEvent('contentchange'); + me.fireEvent('saveScene'); + domUtils.preventDefault(evt); + return; + + } + + + } + + + } + + } + }); + + me.addListener('keyup',function(type, evt){ + var keyCode = evt.keyCode || evt.which; + if (keyCode == 8) { + var rng = me.selection.getRange(),list; + if(list = domUtils.findParentByTagName(rng.startContainer,['ol', 'ul'],true)){ + adjustList(list,list.tagName.toLowerCase(),getStyle(list)||domUtils.getComputedStyle(list,'list-style-type'),true) + } + } + }); + //处理tab键 + me.addListener('tabkeydown',function(){ + + var range = me.selection.getRange(); + + //控制级数 + function checkLevel(li){ + if(me.options.maxListLevel != -1){ + var level = li.parentNode,levelNum = 0; + while(/[ou]l/i.test(level.tagName)){ + levelNum++; + level = level.parentNode; + } + if(levelNum >= me.options.maxListLevel){ + return true; + } + } + } + //只以开始为准 + //todo 后续改进 + var li = domUtils.findParentByTagName(range.startContainer, 'li', true); + if(li){ + + var bk; + if(range.collapsed){ + if(checkLevel(li)) + return true; + var parentLi = li.parentNode, + list = me.document.createElement(parentLi.tagName), + index = utils.indexOf(listStyle[list.tagName], getStyle(parentLi)||domUtils.getComputedStyle(parentLi, 'list-style-type')); + index = index + 1 == listStyle[list.tagName].length ? 0 : index + 1; + var currentStyle = listStyle[list.tagName][index]; + setListStyle(list,currentStyle); + if(domUtils.isStartInblock(range)){ + me.fireEvent('saveScene'); + bk = range.createBookmark(); + parentLi.insertBefore(list, li); + list.appendChild(li); + adjustList(list,list.tagName.toLowerCase(),currentStyle); + me.fireEvent('contentchange'); + range.moveToBookmark(bk).select(true); + return true; + } + }else{ + me.fireEvent('saveScene'); + bk = range.createBookmark(); + for(var i= 0,closeList,parents = domUtils.findParents(li),ci;ci=parents[i++];){ + if(domUtils.isTagNode(ci,'ol ul')){ + closeList = ci; + break; + } + } + var current = li; + if(bk.end){ + while(current && !(domUtils.getPosition(current, bk.end) & domUtils.POSITION_FOLLOWING)){ + if(checkLevel(current)){ + current = domUtils.getNextDomNode(current,false,null,function(node){return node !== closeList}); + continue; + } + var parentLi = current.parentNode, + list = me.document.createElement(parentLi.tagName), + index = utils.indexOf(listStyle[list.tagName], getStyle(parentLi)||domUtils.getComputedStyle(parentLi, 'list-style-type')); + var currentIndex = index + 1 == listStyle[list.tagName].length ? 0 : index + 1; + var currentStyle = listStyle[list.tagName][currentIndex]; + setListStyle(list,currentStyle); + parentLi.insertBefore(list, current); + while(current && !(domUtils.getPosition(current, bk.end) & domUtils.POSITION_FOLLOWING)){ + li = current.nextSibling; + list.appendChild(current); + if(!li || domUtils.isTagNode(li,'ol ul')){ + if(li){ + while(li = li.firstChild){ + if(li.tagName == 'LI'){ + break; + } + } + }else{ + li = domUtils.getNextDomNode(current,false,null,function(node){return node !== closeList}); + } + break; + } + current = li; + } + adjustList(list,list.tagName.toLowerCase(),currentStyle); + current = li; + } + } + me.fireEvent('contentchange'); + range.moveToBookmark(bk).select(); + return true; + } + } + + }); + function getLi(start){ + while(start && !domUtils.isBody(start)){ + if(start.nodeName == 'TABLE'){ + return null; + } + if(start.nodeName == 'LI'){ + return start + } + start = start.parentNode; + } + } + + /** + * 有序列表,与“insertunorderedlist”命令互斥 + * @command insertorderedlist + * @method execCommand + * @param { String } command 命令字符串 + * @param { String } style 插入的有序列表类型,值为:decimal,lower-alpha,lower-roman,upper-alpha,upper-roman,cn,cn1,cn2,num,num1,num2 + * @example + * ```javascript + * editor.execCommand( 'insertorderedlist','decimal'); + * ``` + */ + /** + * 查询当前选区内容是否有序列表 + * @command insertorderedlist + * @method queryCommandState + * @param { String } cmd 命令字符串 + * @return { int } 如果当前选区是有序列表返回1,否则返回0 + * @example + * ```javascript + * editor.queryCommandState( 'insertorderedlist' ); + * ``` + */ + /** + * 查询当前选区内容是否有序列表 + * @command insertorderedlist + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回当前有序列表的类型,值为null或decimal,lower-alpha,lower-roman,upper-alpha,upper-roman,cn,cn1,cn2,num,num1,num2 + * @example + * ```javascript + * editor.queryCommandValue( 'insertorderedlist' ); + * ``` + */ + + /** + * 无序列表,与“insertorderedlist”命令互斥 + * @command insertunorderedlist + * @method execCommand + * @param { String } command 命令字符串 + * @param { String } style 插入的无序列表类型,值为:circle,disc,square,dash,dot + * @example + * ```javascript + * editor.execCommand( 'insertunorderedlist','circle'); + * ``` + */ + /** + * 查询当前是否有word文档粘贴进来的图片 + * @command insertunorderedlist + * @method insertunorderedlist + * @param { String } command 命令字符串 + * @return { int } 如果当前选区是无序列表返回1,否则返回0 + * @example + * ```javascript + * editor.queryCommandState( 'insertunorderedlist' ); + * ``` + */ + /** + * 查询当前选区内容是否有序列表 + * @command insertunorderedlist + * @method queryCommandValue + * @param { String } command 命令字符串 + * @return { String } 返回当前无序列表的类型,值为null或circle,disc,square,dash,dot + * @example + * ```javascript + * editor.queryCommandValue( 'insertunorderedlist' ); + * ``` + */ + + me.commands['insertorderedlist'] = + me.commands['insertunorderedlist'] = { + execCommand:function (command, style) { + + if (!style) { + style = command.toLowerCase() == 'insertorderedlist' ? 'decimal' : 'disc'; + } + var me = this, + range = this.selection.getRange(), + filterFn = function (node) { + return node.nodeType == 1 ? node.tagName.toLowerCase() != 'br' : !domUtils.isWhitespace(node); + }, + tag = command.toLowerCase() == 'insertorderedlist' ? 'ol' : 'ul', + frag = me.document.createDocumentFragment(); + //去掉是因为会出现选到末尾,导致adjustmentBoundary缩到ol/ul的位置 + //range.shrinkBoundary();//.adjustmentBoundary(); + range.adjustmentBoundary().shrinkBoundary(); + var bko = range.createBookmark(true), + start = getLi(me.document.getElementById(bko.start)), + modifyStart = 0, + end = getLi(me.document.getElementById(bko.end)), + modifyEnd = 0, + startParent, endParent, + list, tmp; + + if (start || end) { + start && (startParent = start.parentNode); + if (!bko.end) { + end = start; + } + end && (endParent = end.parentNode); + + if (startParent === endParent) { + while (start !== end) { + tmp = start; + start = start.nextSibling; + if (!domUtils.isBlockElm(tmp.firstChild)) { + var p = me.document.createElement('p'); + while (tmp.firstChild) { + p.appendChild(tmp.firstChild); + } + tmp.appendChild(p); + } + frag.appendChild(tmp); + } + tmp = me.document.createElement('span'); + startParent.insertBefore(tmp, end); + if (!domUtils.isBlockElm(end.firstChild)) { + p = me.document.createElement('p'); + while (end.firstChild) { + p.appendChild(end.firstChild); + } + end.appendChild(p); + } + frag.appendChild(end); + domUtils.breakParent(tmp, startParent); + if (domUtils.isEmptyNode(tmp.previousSibling)) { + domUtils.remove(tmp.previousSibling); + } + if (domUtils.isEmptyNode(tmp.nextSibling)) { + domUtils.remove(tmp.nextSibling) + } + var nodeStyle = getStyle(startParent) || domUtils.getComputedStyle(startParent, 'list-style-type') || (command.toLowerCase() == 'insertorderedlist' ? 'decimal' : 'disc'); + if (startParent.tagName.toLowerCase() == tag && nodeStyle == style) { + for (var i = 0, ci, tmpFrag = me.document.createDocumentFragment(); ci = frag.firstChild;) { + if(domUtils.isTagNode(ci,'ol ul')){ +// 删除时,子列表不处理 +// utils.each(domUtils.getElementsByTagName(ci,'li'),function(li){ +// while(li.firstChild){ +// tmpFrag.appendChild(li.firstChild); +// } +// +// }); + tmpFrag.appendChild(ci); + }else{ + while (ci.firstChild) { + + tmpFrag.appendChild(ci.firstChild); + domUtils.remove(ci); + } + } + + } + tmp.parentNode.insertBefore(tmpFrag, tmp); + } else { + list = me.document.createElement(tag); + setListStyle(list,style); + list.appendChild(frag); + tmp.parentNode.insertBefore(list, tmp); + } + + domUtils.remove(tmp); + list && adjustList(list, tag, style); + range.moveToBookmark(bko).select(); + return; + } + //开始 + if (start) { + while (start) { + tmp = start.nextSibling; + if (domUtils.isTagNode(start, 'ol ul')) { + frag.appendChild(start); + } else { + var tmpfrag = me.document.createDocumentFragment(), + hasBlock = 0; + while (start.firstChild) { + if (domUtils.isBlockElm(start.firstChild)) { + hasBlock = 1; + } + tmpfrag.appendChild(start.firstChild); + } + if (!hasBlock) { + var tmpP = me.document.createElement('p'); + tmpP.appendChild(tmpfrag); + frag.appendChild(tmpP); + } else { + frag.appendChild(tmpfrag); + } + domUtils.remove(start); + } + + start = tmp; + } + startParent.parentNode.insertBefore(frag, startParent.nextSibling); + if (domUtils.isEmptyNode(startParent)) { + range.setStartBefore(startParent); + domUtils.remove(startParent); + } else { + range.setStartAfter(startParent); + } + modifyStart = 1; + } + + if (end && domUtils.inDoc(endParent, me.document)) { + //结束 + start = endParent.firstChild; + while (start && start !== end) { + tmp = start.nextSibling; + if (domUtils.isTagNode(start, 'ol ul')) { + frag.appendChild(start); + } else { + tmpfrag = me.document.createDocumentFragment(); + hasBlock = 0; + while (start.firstChild) { + if (domUtils.isBlockElm(start.firstChild)) { + hasBlock = 1; + } + tmpfrag.appendChild(start.firstChild); + } + if (!hasBlock) { + tmpP = me.document.createElement('p'); + tmpP.appendChild(tmpfrag); + frag.appendChild(tmpP); + } else { + frag.appendChild(tmpfrag); + } + domUtils.remove(start); + } + start = tmp; + } + var tmpDiv = domUtils.createElement(me.document, 'div', { + 'tmpDiv':1 + }); + domUtils.moveChild(end, tmpDiv); + + frag.appendChild(tmpDiv); + domUtils.remove(end); + endParent.parentNode.insertBefore(frag, endParent); + range.setEndBefore(endParent); + if (domUtils.isEmptyNode(endParent)) { + domUtils.remove(endParent); + } + + modifyEnd = 1; + } + + + } + + if (!modifyStart) { + range.setStartBefore(me.document.getElementById(bko.start)); + } + if (bko.end && !modifyEnd) { + range.setEndAfter(me.document.getElementById(bko.end)); + } + range.enlarge(true, function (node) { + return notExchange[node.tagName]; + }); + + frag = me.document.createDocumentFragment(); + + var bk = range.createBookmark(), + current = domUtils.getNextDomNode(bk.start, false, filterFn), + tmpRange = range.cloneRange(), + tmpNode, + block = domUtils.isBlockElm; + + while (current && current !== bk.end && (domUtils.getPosition(current, bk.end) & domUtils.POSITION_PRECEDING)) { + + if (current.nodeType == 3 || dtd.li[current.tagName]) { + if (current.nodeType == 1 && dtd.$list[current.tagName]) { + while (current.firstChild) { + frag.appendChild(current.firstChild); + } + tmpNode = domUtils.getNextDomNode(current, false, filterFn); + domUtils.remove(current); + current = tmpNode; + continue; + + } + tmpNode = current; + tmpRange.setStartBefore(current); + + while (current && current !== bk.end && (!block(current) || domUtils.isBookmarkNode(current) )) { + tmpNode = current; + current = domUtils.getNextDomNode(current, false, null, function (node) { + return !notExchange[node.tagName]; + }); + } + + if (current && block(current)) { + tmp = domUtils.getNextDomNode(tmpNode, false, filterFn); + if (tmp && domUtils.isBookmarkNode(tmp)) { + current = domUtils.getNextDomNode(tmp, false, filterFn); + tmpNode = tmp; + } + } + tmpRange.setEndAfter(tmpNode); + + current = domUtils.getNextDomNode(tmpNode, false, filterFn); + + var li = range.document.createElement('li'); + + li.appendChild(tmpRange.extractContents()); + if(domUtils.isEmptyNode(li)){ + var tmpNode = range.document.createElement('p'); + while(li.firstChild){ + tmpNode.appendChild(li.firstChild) + } + li.appendChild(tmpNode); + } + frag.appendChild(li); + } else { + current = domUtils.getNextDomNode(current, true, filterFn); + } + } + range.moveToBookmark(bk).collapse(true); + list = me.document.createElement(tag); + setListStyle(list,style); + list.appendChild(frag); + range.insertNode(list); + //当前list上下看能否合并 + adjustList(list, tag, style); + //去掉冗余的tmpDiv + for (var i = 0, ci, tmpDivs = domUtils.getElementsByTagName(list, 'div'); ci = tmpDivs[i++];) { + if (ci.getAttribute('tmpDiv')) { + domUtils.remove(ci, true) + } + } + range.moveToBookmark(bko).select(); + + }, + queryCommandState:function (command) { + var tag = command.toLowerCase() == 'insertorderedlist' ? 'ol' : 'ul'; + var path = this.selection.getStartElementPath(); + for(var i= 0,ci;ci = path[i++];){ + if(ci.nodeName == 'TABLE'){ + return 0 + } + if(tag == ci.nodeName.toLowerCase()){ + return 1 + }; + } + return 0; + + }, + queryCommandValue:function (command) { + var tag = command.toLowerCase() == 'insertorderedlist' ? 'ol' : 'ul'; + var path = this.selection.getStartElementPath(), + node; + for(var i= 0,ci;ci = path[i++];){ + if(ci.nodeName == 'TABLE'){ + node = null; + break; + } + if(tag == ci.nodeName.toLowerCase()){ + node = ci; + break; + }; + } + return node ? getStyle(node) || domUtils.getComputedStyle(node, 'list-style-type') : null; + } + }; +}; + + + +// plugins/source.js +/** + * 源码编辑插件 + * @file + * @since 1.2.6.1 + */ + +(function (){ + var sourceEditors = { + textarea: function (editor, holder){ + var textarea = holder.ownerDocument.createElement('textarea'); + textarea.style.cssText = 'position:absolute;resize:none;width:100%;height:100%;border:0;padding:0;margin:0;overflow-y:auto;'; + // todo: IE下只有onresize属性可用... 很纠结 + if (browser.ie && browser.version < 8) { + textarea.style.width = holder.offsetWidth + 'px'; + textarea.style.height = holder.offsetHeight + 'px'; + holder.onresize = function (){ + textarea.style.width = holder.offsetWidth + 'px'; + textarea.style.height = holder.offsetHeight + 'px'; + }; + } + holder.appendChild(textarea); + return { + setContent: function (content){ + textarea.value = content; + }, + getContent: function (){ + return textarea.value; + }, + select: function (){ + var range; + if (browser.ie) { + range = textarea.createTextRange(); + range.collapse(true); + range.select(); + } else { + //todo: chrome下无法设置焦点 + textarea.setSelectionRange(0, 0); + textarea.focus(); + } + }, + dispose: function (){ + holder.removeChild(textarea); + // todo + holder.onresize = null; + textarea = null; + holder = null; + } + }; + }, + codemirror: function (editor, holder){ + + var codeEditor = window.CodeMirror(holder, { + mode: "text/html", + tabMode: "indent", + lineNumbers: true, + lineWrapping:true + }); + var dom = codeEditor.getWrapperElement(); + dom.style.cssText = 'position:absolute;left:0;top:0;width:100%;height:100%;font-family:consolas,"Courier new",monospace;font-size:13px;'; + codeEditor.getScrollerElement().style.cssText = 'position:absolute;left:0;top:0;width:100%;height:100%;'; + codeEditor.refresh(); + return { + getCodeMirror:function(){ + return codeEditor; + }, + setContent: function (content){ + codeEditor.setValue(content); + }, + getContent: function (){ + return codeEditor.getValue(); + }, + select: function (){ + codeEditor.focus(); + }, + dispose: function (){ + holder.removeChild(dom); + dom = null; + codeEditor = null; + } + }; + } + }; + + UE.plugins['source'] = function (){ + var me = this; + var opt = this.options; + var sourceMode = false; + var sourceEditor; + var orgSetContent; + opt.sourceEditor = browser.ie ? 'textarea' : (opt.sourceEditor || 'codemirror'); + + me.setOpt({ + sourceEditorFirst:false + }); + function createSourceEditor(holder){ + return sourceEditors[opt.sourceEditor == 'codemirror' && window.CodeMirror ? 'codemirror' : 'textarea'](me, holder); + } + + var bakCssText; + //解决在源码模式下getContent不能得到最新的内容问题 + var oldGetContent, + bakAddress; + + /** + * 切换源码模式和编辑模式 + * @command source + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'source'); + * ``` + */ + + /** + * 查询当前编辑区域的状态是源码模式还是可视化模式 + * @command source + * @method queryCommandState + * @param { String } cmd 命令字符串 + * @return { int } 如果当前是源码编辑模式,返回1,否则返回0 + * @example + * ```javascript + * editor.queryCommandState( 'source' ); + * ``` + */ + + me.commands['source'] = { + execCommand: function (){ + + sourceMode = !sourceMode; + if (sourceMode) { + bakAddress = me.selection.getRange().createAddress(false,true); + me.undoManger && me.undoManger.save(true); + if(browser.gecko){ + me.body.contentEditable = false; + } + + bakCssText = me.iframe.style.cssText; + me.iframe.style.cssText += 'position:absolute;left:-32768px;top:-32768px;'; + + + me.fireEvent('beforegetcontent'); + var root = UE.htmlparser(me.body.innerHTML); + me.filterOutputRule(root); + root.traversal(function (node) { + if (node.type == 'element') { + switch (node.tagName) { + case 'td': + case 'th': + case 'caption': + if(node.children && node.children.length == 1){ + if(node.firstChild().tagName == 'br' ){ + node.removeChild(node.firstChild()) + } + }; + break; + case 'pre': + node.innerText(node.innerText().replace(/ /g,' ')) + + } + } + }); + + me.fireEvent('aftergetcontent'); + + var content = root.toHtml(true); + + sourceEditor = createSourceEditor(me.iframe.parentNode); + + sourceEditor.setContent(content); + + orgSetContent = me.setContent; + + me.setContent = function(html){ + //这里暂时不触发事件,防止报错 + var root = UE.htmlparser(html); + me.filterInputRule(root); + html = root.toHtml(); + sourceEditor.setContent(html); + }; + + setTimeout(function (){ + sourceEditor.select(); + me.addListener('fullscreenchanged', function(){ + try{ + sourceEditor.getCodeMirror().refresh() + }catch(e){} + }); + }); + + //重置getContent,源码模式下取值也能是最新的数据 + oldGetContent = me.getContent; + me.getContent = function (){ + return sourceEditor.getContent() || '

    ' + (browser.ie ? '' : '
    ')+'

    '; + }; + } else { + me.iframe.style.cssText = bakCssText; + var cont = sourceEditor.getContent() || '

    ' + (browser.ie ? '' : '
    ')+'

    '; + //处理掉block节点前后的空格,有可能会误命中,暂时不考虑 + cont = cont.replace(new RegExp('[\\r\\t\\n ]*<\/?(\\w+)\\s*(?:[^>]*)>','g'), function(a,b){ + if(b && !dtd.$inlineWithA[b.toLowerCase()]){ + return a.replace(/(^[\n\r\t ]*)|([\n\r\t ]*$)/g,''); + } + return a.replace(/(^[\n\r\t]*)|([\n\r\t]*$)/g,'') + }); + + me.setContent = orgSetContent; + + me.setContent(cont); + sourceEditor.dispose(); + sourceEditor = null; + //还原getContent方法 + me.getContent = oldGetContent; + var first = me.body.firstChild; + //trace:1106 都删除空了,下边会报错,所以补充一个p占位 + if(!first){ + me.body.innerHTML = '

    '+(browser.ie?'':'
    ')+'

    '; + first = me.body.firstChild; + } + + + //要在ifm为显示时ff才能取到selection,否则报错 + //这里不能比较位置了 + me.undoManger && me.undoManger.save(true); + + if(browser.gecko){ + + var input = document.createElement('input'); + input.style.cssText = 'position:absolute;left:0;top:-32768px'; + + document.body.appendChild(input); + + me.body.contentEditable = false; + setTimeout(function(){ + domUtils.setViewportOffset(input, { left: -32768, top: 0 }); + input.focus(); + setTimeout(function(){ + me.body.contentEditable = true; + me.selection.getRange().moveToAddress(bakAddress).select(true); + domUtils.remove(input); + }); + + }); + }else{ + //ie下有可能报错,比如在代码顶头的情况 + try{ + me.selection.getRange().moveToAddress(bakAddress).select(true); + }catch(e){} + + } + } + this.fireEvent('sourcemodechanged', sourceMode); + }, + queryCommandState: function (){ + return sourceMode|0; + }, + notNeedUndo : 1 + }; + var oldQueryCommandState = me.queryCommandState; + + me.queryCommandState = function (cmdName){ + cmdName = cmdName.toLowerCase(); + if (sourceMode) { + //源码模式下可以开启的命令 + return cmdName in { + 'source' : 1, + 'fullscreen' : 1 + } ? 1 : -1 + } + return oldQueryCommandState.apply(this, arguments); + }; + + if(opt.sourceEditor == "codemirror"){ + + me.addListener("ready",function(){ + utils.loadFile(document,{ + src : opt.codeMirrorJsUrl || opt.UEDITOR_HOME_URL + "third-party/codemirror/codemirror.js", + tag : "script", + type : "text/javascript", + defer : "defer" + },function(){ + if(opt.sourceEditorFirst){ + setTimeout(function(){ + me.execCommand("source"); + },0); + } + }); + utils.loadFile(document,{ + tag : "link", + rel : "stylesheet", + type : "text/css", + href : opt.codeMirrorCssUrl || opt.UEDITOR_HOME_URL + "third-party/codemirror/codemirror.css" + }); + + }); + } + + }; + +})(); + +// plugins/enterkey.js +///import core +///import plugins/undo.js +///commands 设置回车标签p或br +///commandsName EnterKey +///commandsTitle 设置回车标签p或br +/** + * @description 处理回车 + * @author zhanyi + */ +UE.plugins['enterkey'] = function() { + var hTag, + me = this, + tag = me.options.enterTag; + me.addListener('keyup', function(type, evt) { + + var keyCode = evt.keyCode || evt.which; + if (keyCode == 13) { + var range = me.selection.getRange(), + start = range.startContainer, + doSave; + + //修正在h1-h6里边回车后不能嵌套p的问题 + if (!browser.ie) { + + if (/h\d/i.test(hTag)) { + if (browser.gecko) { + var h = domUtils.findParentByTagName(start, [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6','blockquote','caption','table'], true); + if (!h) { + me.document.execCommand('formatBlock', false, '

    '); + doSave = 1; + } + } else { + //chrome remove div + if (start.nodeType == 1) { + var tmp = me.document.createTextNode(''),div; + range.insertNode(tmp); + div = domUtils.findParentByTagName(tmp, 'div', true); + if (div) { + var p = me.document.createElement('p'); + while (div.firstChild) { + p.appendChild(div.firstChild); + } + div.parentNode.insertBefore(p, div); + domUtils.remove(div); + range.setStartBefore(tmp).setCursor(); + doSave = 1; + } + domUtils.remove(tmp); + + } + } + + if (me.undoManger && doSave) { + me.undoManger.save(); + } + } + //没有站位符,会出现多行的问题 + browser.opera && range.select(); + }else{ + me.fireEvent('saveScene',true,true) + } + } + }); + + me.addListener('keydown', function(type, evt) { + var keyCode = evt.keyCode || evt.which; + if (keyCode == 13) {//回车 + if(me.fireEvent('beforeenterkeydown')){ + domUtils.preventDefault(evt); + return; + } + me.fireEvent('saveScene',true,true); + hTag = ''; + + + var range = me.selection.getRange(); + + if (!range.collapsed) { + //跨td不能删 + var start = range.startContainer, + end = range.endContainer, + startTd = domUtils.findParentByTagName(start, 'td', true), + endTd = domUtils.findParentByTagName(end, 'td', true); + if (startTd && endTd && startTd !== endTd || !startTd && endTd || startTd && !endTd) { + evt.preventDefault ? evt.preventDefault() : ( evt.returnValue = false); + return; + } + } + if (tag == 'p') { + + + if (!browser.ie) { + + start = domUtils.findParentByTagName(range.startContainer, ['ol','ul','p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6','blockquote','caption'], true); + + //opera下执行formatblock会在table的场景下有问题,回车在opera原生支持很好,所以暂时在opera去掉调用这个原生的command + //trace:2431 + if (!start && !browser.opera) { + + me.document.execCommand('formatBlock', false, '

    '); + + if (browser.gecko) { + range = me.selection.getRange(); + start = domUtils.findParentByTagName(range.startContainer, 'p', true); + start && domUtils.removeDirtyAttr(start); + } + + + } else { + hTag = start.tagName; + start.tagName.toLowerCase() == 'p' && browser.gecko && domUtils.removeDirtyAttr(start); + } + + } + + } else { + evt.preventDefault ? evt.preventDefault() : ( evt.returnValue = false); + + if (!range.collapsed) { + range.deleteContents(); + start = range.startContainer; + if (start.nodeType == 1 && (start = start.childNodes[range.startOffset])) { + while (start.nodeType == 1) { + if (dtd.$empty[start.tagName]) { + range.setStartBefore(start).setCursor(); + if (me.undoManger) { + me.undoManger.save(); + } + return false; + } + if (!start.firstChild) { + var br = range.document.createElement('br'); + start.appendChild(br); + range.setStart(start, 0).setCursor(); + if (me.undoManger) { + me.undoManger.save(); + } + return false; + } + start = start.firstChild; + } + if (start === range.startContainer.childNodes[range.startOffset]) { + br = range.document.createElement('br'); + range.insertNode(br).setCursor(); + + } else { + range.setStart(start, 0).setCursor(); + } + + + } else { + br = range.document.createElement('br'); + range.insertNode(br).setStartAfter(br).setCursor(); + } + + + } else { + br = range.document.createElement('br'); + range.insertNode(br); + var parent = br.parentNode; + if (parent.lastChild === br) { + br.parentNode.insertBefore(br.cloneNode(true), br); + range.setStartBefore(br); + } else { + range.setStartAfter(br); + } + range.setCursor(); + + } + + } + + } + }); +}; + + +// plugins/keystrokes.js +/* 处理特殊键的兼容性问题 */ +UE.plugins['keystrokes'] = function() { + var me = this; + var collapsed = true; + me.addListener('keydown', function(type, evt) { + var keyCode = evt.keyCode || evt.which, + rng = me.selection.getRange(); + + //处理全选的情况 + if(!rng.collapsed && !(evt.ctrlKey || evt.shiftKey || evt.altKey || evt.metaKey) && (keyCode >= 65 && keyCode <=90 + || keyCode >= 48 && keyCode <= 57 || + keyCode >= 96 && keyCode <= 111 || { + 13:1, + 8:1, + 46:1 + }[keyCode]) + ){ + + var tmpNode = rng.startContainer; + if(domUtils.isFillChar(tmpNode)){ + rng.setStartBefore(tmpNode) + } + tmpNode = rng.endContainer; + if(domUtils.isFillChar(tmpNode)){ + rng.setEndAfter(tmpNode) + } + rng.txtToElmBoundary(); + //结束边界可能放到了br的前边,要把br包含进来 + // x[xxx]
    + if(rng.endContainer && rng.endContainer.nodeType == 1){ + tmpNode = rng.endContainer.childNodes[rng.endOffset]; + if(tmpNode && domUtils.isBr(tmpNode)){ + rng.setEndAfter(tmpNode); + } + } + if(rng.startOffset == 0){ + tmpNode = rng.startContainer; + if(domUtils.isBoundaryNode(tmpNode,'firstChild') ){ + tmpNode = rng.endContainer; + if(rng.endOffset == (tmpNode.nodeType == 3 ? tmpNode.nodeValue.length : tmpNode.childNodes.length) && domUtils.isBoundaryNode(tmpNode,'lastChild')){ + me.fireEvent('saveScene'); + me.body.innerHTML = '

    '+(browser.ie ? '' : '
    ')+'

    '; + rng.setStart(me.body.firstChild,0).setCursor(false,true); + me._selectionChange(); + return; + } + } + } + } + + //处理backspace + if (keyCode == keymap.Backspace) { + rng = me.selection.getRange(); + collapsed = rng.collapsed; + if(me.fireEvent('delkeydown',evt)){ + return; + } + var start,end; + //避免按两次删除才能生效的问题 + if(rng.collapsed && rng.inFillChar()){ + start = rng.startContainer; + + if(domUtils.isFillChar(start)){ + rng.setStartBefore(start).shrinkBoundary(true).collapse(true); + domUtils.remove(start) + }else{ + start.nodeValue = start.nodeValue.replace(new RegExp('^' + domUtils.fillChar ),''); + rng.startOffset--; + rng.collapse(true).select(true) + } + } + + //解决选中control元素不能删除的问题 + if (start = rng.getClosedNode()) { + me.fireEvent('saveScene'); + rng.setStartBefore(start); + domUtils.remove(start); + rng.setCursor(); + me.fireEvent('saveScene'); + domUtils.preventDefault(evt); + return; + } + //阻止在table上的删除 + if (!browser.ie) { + start = domUtils.findParentByTagName(rng.startContainer, 'table', true); + end = domUtils.findParentByTagName(rng.endContainer, 'table', true); + if (start && !end || !start && end || start !== end) { + evt.preventDefault(); + return; + } + } + + } + //处理tab键的逻辑 + if (keyCode == keymap.Tab) { + //不处理以下标签 + var excludeTagNameForTabKey = { + 'ol' : 1, + 'ul' : 1, + 'table':1 + }; + //处理组件里的tab按下事件 + if(me.fireEvent('tabkeydown',evt)){ + domUtils.preventDefault(evt); + return; + } + var range = me.selection.getRange(); + me.fireEvent('saveScene'); + for (var i = 0,txt = '',tabSize = me.options.tabSize|| 4,tabNode = me.options.tabNode || ' '; i < tabSize; i++) { + txt += tabNode; + } + var span = me.document.createElement('span'); + span.innerHTML = txt + domUtils.fillChar; + if (range.collapsed) { + range.insertNode(span.cloneNode(true).firstChild).setCursor(true); + } else { + var filterFn = function(node) { + return domUtils.isBlockElm(node) && !excludeTagNameForTabKey[node.tagName.toLowerCase()] + + }; + //普通的情况 + start = domUtils.findParent(range.startContainer, filterFn,true); + end = domUtils.findParent(range.endContainer, filterFn,true); + if (start && end && start === end) { + range.deleteContents(); + range.insertNode(span.cloneNode(true).firstChild).setCursor(true); + } else { + var bookmark = range.createBookmark(); + range.enlarge(true); + var bookmark2 = range.createBookmark(), + current = domUtils.getNextDomNode(bookmark2.start, false, filterFn); + while (current && !(domUtils.getPosition(current, bookmark2.end) & domUtils.POSITION_FOLLOWING)) { + current.insertBefore(span.cloneNode(true).firstChild, current.firstChild); + current = domUtils.getNextDomNode(current, false, filterFn); + } + range.moveToBookmark(bookmark2).moveToBookmark(bookmark).select(); + } + } + domUtils.preventDefault(evt) + } + //trace:1634 + //ff的del键在容器空的时候,也会删除 + if(browser.gecko && keyCode == 46){ + range = me.selection.getRange(); + if(range.collapsed){ + start = range.startContainer; + if(domUtils.isEmptyBlock(start)){ + var parent = start.parentNode; + while(domUtils.getChildCount(parent) == 1 && !domUtils.isBody(parent)){ + start = parent; + parent = parent.parentNode; + } + if(start === parent.lastChild) + evt.preventDefault(); + return; + } + } + } + }); + me.addListener('keyup', function(type, evt) { + var keyCode = evt.keyCode || evt.which, + rng,me = this; + if(keyCode == keymap.Backspace){ + if(me.fireEvent('delkeyup')){ + return; + } + rng = me.selection.getRange(); + if(rng.collapsed){ + var tmpNode, + autoClearTagName = ['h1','h2','h3','h4','h5','h6']; + if(tmpNode = domUtils.findParentByTagName(rng.startContainer,autoClearTagName,true)){ + if(domUtils.isEmptyBlock(tmpNode)){ + var pre = tmpNode.previousSibling; + if(pre && pre.nodeName != 'TABLE'){ + domUtils.remove(tmpNode); + rng.setStartAtLast(pre).setCursor(false,true); + return; + }else{ + var next = tmpNode.nextSibling; + if(next && next.nodeName != 'TABLE'){ + domUtils.remove(tmpNode); + rng.setStartAtFirst(next).setCursor(false,true); + return; + } + } + } + } + //处理当删除到body时,要重新给p标签展位 + if(domUtils.isBody(rng.startContainer)){ + var tmpNode = domUtils.createElement(me.document,'p',{ + 'innerHTML' : browser.ie ? domUtils.fillChar : '
    ' + }); + rng.insertNode(tmpNode).setStart(tmpNode,0).setCursor(false,true); + } + } + + + //chrome下如果删除了inline标签,浏览器会有记忆,在输入文字还是会套上刚才删除的标签,所以这里再选一次就不会了 + if( !collapsed && (rng.startContainer.nodeType == 3 || rng.startContainer.nodeType == 1 && domUtils.isEmptyBlock(rng.startContainer))){ + if(browser.ie){ + var span = rng.document.createElement('span'); + rng.insertNode(span).setStartBefore(span).collapse(true); + rng.select(); + domUtils.remove(span) + }else{ + rng.select() + } + + } + } + + + }) +}; + +// plugins/fiximgclick.js +///import core +///commands 修复chrome下图片不能点击的问题,出现八个角可改变大小 +///commandsName FixImgClick +///commandsTitle 修复chrome下图片不能点击的问题,出现八个角可改变大小 +//修复chrome下图片不能点击的问题,出现八个角可改变大小 + +UE.plugins['fiximgclick'] = (function () { + + var elementUpdated = false; + function Scale() { + this.editor = null; + this.resizer = null; + this.cover = null; + this.doc = document; + this.prePos = {x: 0, y: 0}; + this.startPos = {x: 0, y: 0}; + } + + (function () { + var rect = [ + //[left, top, width, height] + [0, 0, -1, -1], + [0, 0, 0, -1], + [0, 0, 1, -1], + [0, 0, -1, 0], + [0, 0, 1, 0], + [0, 0, -1, 1], + [0, 0, 0, 1], + [0, 0, 1, 1] + ]; + + Scale.prototype = { + init: function (editor) { + var me = this; + me.editor = editor; + me.startPos = this.prePos = {x: 0, y: 0}; + me.dragId = -1; + + var hands = [], + cover = me.cover = document.createElement('div'), + resizer = me.resizer = document.createElement('div'); + + cover.id = me.editor.ui.id + '_imagescale_cover'; + cover.style.cssText = 'position:absolute;display:none;z-index:' + (me.editor.options.zIndex) + ';filter:alpha(opacity=0); opacity:0;background:#CCC;'; + domUtils.on(cover, 'mousedown click', function () { + me.hide(); + }); + + for (i = 0; i < 8; i++) { + hands.push(''); + } + resizer.id = me.editor.ui.id + '_imagescale'; + resizer.className = 'edui-editor-imagescale'; + resizer.innerHTML = hands.join(''); + resizer.style.cssText += ';display:none;border:1px solid #3b77ff;z-index:' + (me.editor.options.zIndex) + ';'; + + me.editor.ui.getDom().appendChild(cover); + me.editor.ui.getDom().appendChild(resizer); + + me.initStyle(); + me.initEvents(); + }, + initStyle: function () { + utils.cssRule('imagescale', '.edui-editor-imagescale{display:none;position:absolute;border:1px solid #38B2CE;cursor:hand;-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;}' + + '.edui-editor-imagescale span{position:absolute;width:6px;height:6px;overflow:hidden;font-size:0px;display:block;background-color:#3C9DD0;}' + + '.edui-editor-imagescale .edui-editor-imagescale-hand0{cursor:nw-resize;top:0;margin-top:-4px;left:0;margin-left:-4px;}' + + '.edui-editor-imagescale .edui-editor-imagescale-hand1{cursor:n-resize;top:0;margin-top:-4px;left:50%;margin-left:-4px;}' + + '.edui-editor-imagescale .edui-editor-imagescale-hand2{cursor:ne-resize;top:0;margin-top:-4px;left:100%;margin-left:-3px;}' + + '.edui-editor-imagescale .edui-editor-imagescale-hand3{cursor:w-resize;top:50%;margin-top:-4px;left:0;margin-left:-4px;}' + + '.edui-editor-imagescale .edui-editor-imagescale-hand4{cursor:e-resize;top:50%;margin-top:-4px;left:100%;margin-left:-3px;}' + + '.edui-editor-imagescale .edui-editor-imagescale-hand5{cursor:sw-resize;top:100%;margin-top:-3px;left:0;margin-left:-4px;}' + + '.edui-editor-imagescale .edui-editor-imagescale-hand6{cursor:s-resize;top:100%;margin-top:-3px;left:50%;margin-left:-4px;}' + + '.edui-editor-imagescale .edui-editor-imagescale-hand7{cursor:se-resize;top:100%;margin-top:-3px;left:100%;margin-left:-3px;}'); + }, + initEvents: function () { + var me = this; + + me.startPos.x = me.startPos.y = 0; + me.isDraging = false; + }, + _eventHandler: function (e) { + var me = this; + switch (e.type) { + case 'mousedown': + var hand = e.target || e.srcElement, hand; + if (hand.className.indexOf('edui-editor-imagescale-hand') != -1 && me.dragId == -1) { + me.dragId = hand.className.slice(-1); + me.startPos.x = me.prePos.x = e.clientX; + me.startPos.y = me.prePos.y = e.clientY; + domUtils.on(me.doc,'mousemove', me.proxy(me._eventHandler, me)); + } + break; + case 'mousemove': + if (me.dragId != -1) { + me.updateContainerStyle(me.dragId, {x: e.clientX - me.prePos.x, y: e.clientY - me.prePos.y}); + me.prePos.x = e.clientX; + me.prePos.y = e.clientY; + elementUpdated = true; + me.updateTargetElement(); + + } + break; + case 'mouseup': + if (me.dragId != -1) { + me.updateContainerStyle(me.dragId, {x: e.clientX - me.prePos.x, y: e.clientY - me.prePos.y}); + me.updateTargetElement(); + if (me.target.parentNode) me.attachTo(me.target); + me.dragId = -1; + } + domUtils.un(me.doc,'mousemove', me.proxy(me._eventHandler, me)); + //修复只是点击挪动点,但没有改变大小,不应该触发contentchange + if(elementUpdated){ + elementUpdated = false; + me.editor.fireEvent('contentchange'); + } + + break; + default: + break; + } + }, + updateTargetElement: function () { + var me = this; + domUtils.setStyles(me.target, { + 'width': me.resizer.style.width, + 'height': me.resizer.style.height + }); + me.target.width = parseInt(me.resizer.style.width); + me.target.height = parseInt(me.resizer.style.height); + me.attachTo(me.target); + }, + updateContainerStyle: function (dir, offset) { + var me = this, + dom = me.resizer, tmp; + + if (rect[dir][0] != 0) { + tmp = parseInt(dom.style.left) + offset.x; + dom.style.left = me._validScaledProp('left', tmp) + 'px'; + } + if (rect[dir][1] != 0) { + tmp = parseInt(dom.style.top) + offset.y; + dom.style.top = me._validScaledProp('top', tmp) + 'px'; + } + if (rect[dir][2] != 0) { + tmp = dom.clientWidth + rect[dir][2] * offset.x; + dom.style.width = me._validScaledProp('width', tmp) + 'px'; + } + if (rect[dir][3] != 0) { + tmp = dom.clientHeight + rect[dir][3] * offset.y; + dom.style.height = me._validScaledProp('height', tmp) + 'px'; + } + }, + _validScaledProp: function (prop, value) { + var ele = this.resizer, + wrap = document; + + value = isNaN(value) ? 0 : value; + switch (prop) { + case 'left': + return value < 0 ? 0 : (value + ele.clientWidth) > wrap.clientWidth ? wrap.clientWidth - ele.clientWidth : value; + case 'top': + return value < 0 ? 0 : (value + ele.clientHeight) > wrap.clientHeight ? wrap.clientHeight - ele.clientHeight : value; + case 'width': + return value <= 0 ? 1 : (value + ele.offsetLeft) > wrap.clientWidth ? wrap.clientWidth - ele.offsetLeft : value; + case 'height': + return value <= 0 ? 1 : (value + ele.offsetTop) > wrap.clientHeight ? wrap.clientHeight - ele.offsetTop : value; + } + }, + hideCover: function () { + this.cover.style.display = 'none'; + }, + showCover: function () { + var me = this, + editorPos = domUtils.getXY(me.editor.ui.getDom()), + iframePos = domUtils.getXY(me.editor.iframe); + + domUtils.setStyles(me.cover, { + 'width': me.editor.iframe.offsetWidth + 'px', + 'height': me.editor.iframe.offsetHeight + 'px', + 'top': iframePos.y - editorPos.y + 'px', + 'left': iframePos.x - editorPos.x + 'px', + 'position': 'absolute', + 'display': '' + }) + }, + show: function (targetObj) { + var me = this; + me.resizer.style.display = 'block'; + if(targetObj) me.attachTo(targetObj); + + domUtils.on(this.resizer, 'mousedown', me.proxy(me._eventHandler, me)); + domUtils.on(me.doc, 'mouseup', me.proxy(me._eventHandler, me)); + + me.showCover(); + me.editor.fireEvent('afterscaleshow', me); + me.editor.fireEvent('saveScene'); + }, + hide: function () { + var me = this; + me.hideCover(); + me.resizer.style.display = 'none'; + + domUtils.un(me.resizer, 'mousedown', me.proxy(me._eventHandler, me)); + domUtils.un(me.doc, 'mouseup', me.proxy(me._eventHandler, me)); + me.editor.fireEvent('afterscalehide', me); + }, + proxy: function( fn, context ) { + return function(e) { + return fn.apply( context || this, arguments); + }; + }, + attachTo: function (targetObj) { + var me = this, + target = me.target = targetObj, + resizer = this.resizer, + imgPos = domUtils.getXY(target), + iframePos = domUtils.getXY(me.editor.iframe), + editorPos = domUtils.getXY(resizer.parentNode); + + domUtils.setStyles(resizer, { + 'width': target.width + 'px', + 'height': target.height + 'px', + 'left': iframePos.x + imgPos.x - me.editor.document.body.scrollLeft - editorPos.x - parseInt(resizer.style.borderLeftWidth) + 'px', + 'top': iframePos.y + imgPos.y - me.editor.document.body.scrollTop - editorPos.y - parseInt(resizer.style.borderTopWidth) + 'px' + }); + } + } + })(); + + return function () { + var me = this, + imageScale; + + me.setOpt('imageScaleEnabled', true); + + if ( !browser.ie && me.options.imageScaleEnabled) { + me.addListener('click', function (type, e) { + + var range = me.selection.getRange(), + img = range.getClosedNode(); + + if (img && img.tagName == 'IMG' && me.body.contentEditable!="false") { + + if (img.className.indexOf("edui-faked-music") != -1 || + img.getAttribute("anchorname") || + domUtils.hasClass(img, 'loadingclass') || + domUtils.hasClass(img, 'loaderrorclass')) { return } + + if (!imageScale) { + imageScale = new Scale(); + imageScale.init(me); + me.ui.getDom().appendChild(imageScale.resizer); + + var _keyDownHandler = function (e) { + imageScale.hide(); + if(imageScale.target) me.selection.getRange().selectNode(imageScale.target).select(); + }, _mouseDownHandler = function (e) { + var ele = e.target || e.srcElement; + if (ele && (ele.className===undefined || ele.className.indexOf('edui-editor-imagescale') == -1)) { + _keyDownHandler(e); + } + }, timer; + + me.addListener('afterscaleshow', function (e) { + me.addListener('beforekeydown', _keyDownHandler); + me.addListener('beforemousedown', _mouseDownHandler); + domUtils.on(document, 'keydown', _keyDownHandler); + domUtils.on(document,'mousedown', _mouseDownHandler); + me.selection.getNative().removeAllRanges(); + }); + me.addListener('afterscalehide', function (e) { + me.removeListener('beforekeydown', _keyDownHandler); + me.removeListener('beforemousedown', _mouseDownHandler); + domUtils.un(document, 'keydown', _keyDownHandler); + domUtils.un(document,'mousedown', _mouseDownHandler); + var target = imageScale.target; + if (target.parentNode) { + me.selection.getRange().selectNode(target).select(); + } + }); + //TODO 有iframe的情况,mousedown不能往下传。。 + domUtils.on(imageScale.resizer, 'mousedown', function (e) { + me.selection.getNative().removeAllRanges(); + var ele = e.target || e.srcElement; + if (ele && ele.className.indexOf('edui-editor-imagescale-hand') == -1) { + timer = setTimeout(function () { + imageScale.hide(); + if(imageScale.target) me.selection.getRange().selectNode(ele).select(); + }, 200); + } + }); + domUtils.on(imageScale.resizer, 'mouseup', function (e) { + var ele = e.target || e.srcElement; + if (ele && ele.className.indexOf('edui-editor-imagescale-hand') == -1) { + clearTimeout(timer); + } + }); + } + imageScale.show(img); + } else { + if (imageScale && imageScale.resizer.style.display != 'none') imageScale.hide(); + } + }); + } + + if (browser.webkit) { + me.addListener('click', function (type, e) { + if (e.target.tagName == 'IMG' && me.body.contentEditable!="false") { + var range = new dom.Range(me.document); + range.selectNode(e.target).select(); + } + }); + } + } +})(); + +// plugins/autolink.js +///import core +///commands 为非ie浏览器自动添加a标签 +///commandsName AutoLink +///commandsTitle 自动增加链接 +/** + * @description 为非ie浏览器自动添加a标签 + * @author zhanyi + */ + +UE.plugin.register('autolink',function(){ + var cont = 0; + + return !browser.ie ? { + + bindEvents:{ + 'reset' : function(){ + cont = 0; + }, + 'keydown':function(type, evt) { + var me = this; + var keyCode = evt.keyCode || evt.which; + + if (keyCode == 32 || keyCode == 13) { + + var sel = me.selection.getNative(), + range = sel.getRangeAt(0).cloneRange(), + offset, + charCode; + + var start = range.startContainer; + while (start.nodeType == 1 && range.startOffset > 0) { + start = range.startContainer.childNodes[range.startOffset - 1]; + if (!start){ + break; + } + range.setStart(start, start.nodeType == 1 ? start.childNodes.length : start.nodeValue.length); + range.collapse(true); + start = range.startContainer; + } + + do{ + if (range.startOffset == 0) { + start = range.startContainer.previousSibling; + + while (start && start.nodeType == 1) { + start = start.lastChild; + } + if (!start || domUtils.isFillChar(start)){ + break; + } + offset = start.nodeValue.length; + } else { + start = range.startContainer; + offset = range.startOffset; + } + range.setStart(start, offset - 1); + charCode = range.toString().charCodeAt(0); + } while (charCode != 160 && charCode != 32); + + if (range.toString().replace(new RegExp(domUtils.fillChar, 'g'), '').match(/(?:https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)/i)) { + while(range.toString().length){ + if(/^(?:https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)/i.test(range.toString())){ + break; + } + try{ + range.setStart(range.startContainer,range.startOffset+1); + }catch(e){ + //trace:2121 + var start = range.startContainer; + while(!(next = start.nextSibling)){ + if(domUtils.isBody(start)){ + return; + } + start = start.parentNode; + + } + range.setStart(next,0); + + } + + } + //range的开始边界已经在a标签里的不再处理 + if(domUtils.findParentByTagName(range.startContainer,'a',true)){ + return; + } + var a = me.document.createElement('a'),text = me.document.createTextNode(' '),href; + + me.undoManger && me.undoManger.save(); + a.appendChild(range.extractContents()); + a.href = a.innerHTML = a.innerHTML.replace(/<[^>]+>/g,''); + href = a.getAttribute("href").replace(new RegExp(domUtils.fillChar,'g'),''); + href = /^(?:https?:\/\/)/ig.test(href) ? href : "http://"+ href; + a.setAttribute('_src',utils.html(href)); + a.href = utils.html(href); + + range.insertNode(a); + a.parentNode.insertBefore(text, a.nextSibling); + range.setStart(text, 0); + range.collapse(true); + sel.removeAllRanges(); + sel.addRange(range); + me.undoManger && me.undoManger.save(); + } + } + } + } + }:{} + },function(){ + var keyCodes = { + 37:1, 38:1, 39:1, 40:1, + 13:1,32:1 + }; + function checkIsCludeLink(node){ + if(node.nodeType == 3){ + return null + } + if(node.nodeName == 'A'){ + return node; + } + var lastChild = node.lastChild; + + while(lastChild){ + if(lastChild.nodeName == 'A'){ + return lastChild; + } + if(lastChild.nodeType == 3){ + if(domUtils.isWhitespace(lastChild)){ + lastChild = lastChild.previousSibling; + continue; + } + return null + } + lastChild = lastChild.lastChild; + } + } + browser.ie && this.addListener('keyup',function(cmd,evt){ + var me = this,keyCode = evt.keyCode; + if(keyCodes[keyCode]){ + var rng = me.selection.getRange(); + var start = rng.startContainer; + + if(keyCode == 13){ + while(start && !domUtils.isBody(start) && !domUtils.isBlockElm(start)){ + start = start.parentNode; + } + if(start && !domUtils.isBody(start) && start.nodeName == 'P'){ + var pre = start.previousSibling; + if(pre && pre.nodeType == 1){ + var pre = checkIsCludeLink(pre); + if(pre && !pre.getAttribute('_href')){ + domUtils.remove(pre,true); + } + } + } + }else if(keyCode == 32 ){ + if(start.nodeType == 3 && /^\s$/.test(start.nodeValue)){ + start = start.previousSibling; + if(start && start.nodeName == 'A' && !start.getAttribute('_href')){ + domUtils.remove(start,true); + } + } + }else { + start = domUtils.findParentByTagName(start,'a',true); + if(start && !start.getAttribute('_href')){ + var bk = rng.createBookmark(); + + domUtils.remove(start,true); + rng.moveToBookmark(bk).select(true) + } + } + + } + + + }); + } +); + +// plugins/autoheight.js +///import core +///commands 当输入内容超过编辑器高度时,编辑器自动增高 +///commandsName AutoHeight,autoHeightEnabled +///commandsTitle 自动增高 +/** + * @description 自动伸展 + * @author zhanyi + */ +UE.plugins['autoheight'] = function () { + var me = this; + //提供开关,就算加载也可以关闭 + me.autoHeightEnabled = me.options.autoHeightEnabled !== false; + if (!me.autoHeightEnabled) { + return; + } + + var bakOverflow, + lastHeight = 0, + options = me.options, + currentHeight, + timer; + + function adjustHeight() { + var me = this; + clearTimeout(timer); + if(isFullscreen)return; + if (!me.queryCommandState || me.queryCommandState && me.queryCommandState('source') != 1) { + timer = setTimeout(function(){ + + var node = me.body.lastChild; + while(node && node.nodeType != 1){ + node = node.previousSibling; + } + if(node && node.nodeType == 1){ + node.style.clear = 'both'; + currentHeight = Math.max(domUtils.getXY(node).y + node.offsetHeight + 25 ,Math.max(options.minFrameHeight, options.initialFrameHeight)) ; + if (currentHeight != lastHeight) { + if (currentHeight !== parseInt(me.iframe.parentNode.style.height)) { + me.iframe.parentNode.style.height = currentHeight + 'px'; + } + me.body.style.height = currentHeight + 'px'; + lastHeight = currentHeight; + } + domUtils.removeStyle(node,'clear'); + } + + + },50) + } + } + var isFullscreen; + me.addListener('fullscreenchanged',function(cmd,f){ + isFullscreen = f + }); + me.addListener('destroy', function () { + me.removeListener('contentchange afterinserthtml keyup mouseup',adjustHeight) + }); + me.enableAutoHeight = function () { + var me = this; + if (!me.autoHeightEnabled) { + return; + } + var doc = me.document; + me.autoHeightEnabled = true; + bakOverflow = doc.body.style.overflowY; + doc.body.style.overflowY = 'hidden'; + me.addListener('contentchange afterinserthtml keyup mouseup',adjustHeight); + //ff不给事件算得不对 + + setTimeout(function () { + adjustHeight.call(me); + }, browser.gecko ? 100 : 0); + me.fireEvent('autoheightchanged', me.autoHeightEnabled); + }; + me.disableAutoHeight = function () { + + me.body.style.overflowY = bakOverflow || ''; + + me.removeListener('contentchange', adjustHeight); + me.removeListener('keyup', adjustHeight); + me.removeListener('mouseup', adjustHeight); + me.autoHeightEnabled = false; + me.fireEvent('autoheightchanged', me.autoHeightEnabled); + }; + + me.on('setHeight',function(){ + me.disableAutoHeight() + }); + me.addListener('ready', function () { + me.enableAutoHeight(); + //trace:1764 + var timer; + domUtils.on(browser.ie ? me.body : me.document, browser.webkit ? 'dragover' : 'drop', function () { + clearTimeout(timer); + timer = setTimeout(function () { + //trace:3681 + adjustHeight.call(me); + }, 100); + + }); + //修复内容过多时,回到顶部,顶部内容被工具栏遮挡问题 + var lastScrollY; + window.onscroll = function(){ + if(lastScrollY === null){ + lastScrollY = this.scrollY + }else if(this.scrollY == 0 && lastScrollY != 0){ + me.window.scrollTo(0,0); + lastScrollY = null; + } + } + }); + + +}; + + + +// plugins/autofloat.js +///import core +///commands 悬浮工具栏 +///commandsName AutoFloat,autoFloatEnabled +///commandsTitle 悬浮工具栏 +/** + * modified by chengchao01 + * 注意: 引入此功能后,在IE6下会将body的背景图片覆盖掉! + */ +UE.plugins['autofloat'] = function() { + var me = this, + lang = me.getLang(); + me.setOpt({ + topOffset:0 + }); + var optsAutoFloatEnabled = me.options.autoFloatEnabled !== false, + topOffset = me.options.topOffset; + + + //如果不固定toolbar的位置,则直接退出 + if(!optsAutoFloatEnabled){ + return; + } + var uiUtils = UE.ui.uiUtils, + LteIE6 = browser.ie && browser.version <= 6, + quirks = browser.quirks; + + function checkHasUI(){ + if(!UE.ui){ + alert(lang.autofloatMsg); + return 0; + } + return 1; + } + function fixIE6FixedPos(){ + var docStyle = document.body.style; + docStyle.backgroundImage = 'url("about:blank")'; + docStyle.backgroundAttachment = 'fixed'; + } + var bakCssText, + placeHolder = document.createElement('div'), + toolbarBox,orgTop, + getPosition, + flag =true; //ie7模式下需要偏移 + function setFloating(){ + var toobarBoxPos = domUtils.getXY(toolbarBox), + origalFloat = domUtils.getComputedStyle(toolbarBox,'position'), + origalLeft = domUtils.getComputedStyle(toolbarBox,'left'); + toolbarBox.style.width = toolbarBox.offsetWidth + 'px'; + toolbarBox.style.zIndex = me.options.zIndex * 1 + 1; + toolbarBox.parentNode.insertBefore(placeHolder, toolbarBox); + if (LteIE6 || (quirks && browser.ie)) { + if(toolbarBox.style.position != 'absolute'){ + toolbarBox.style.position = 'absolute'; + } + toolbarBox.style.top = (document.body.scrollTop||document.documentElement.scrollTop) - orgTop + topOffset + 'px'; + } else { + if (browser.ie7Compat && flag) { + flag = false; + toolbarBox.style.left = domUtils.getXY(toolbarBox).x - document.documentElement.getBoundingClientRect().left+2 + 'px'; + } + if(toolbarBox.style.position != 'fixed'){ + toolbarBox.style.position = 'fixed'; + toolbarBox.style.top = topOffset +"px"; + ((origalFloat == 'absolute' || origalFloat == 'relative') && parseFloat(origalLeft)) && (toolbarBox.style.left = toobarBoxPos.x + 'px'); + } + } + } + function unsetFloating(){ + flag = true; + if(placeHolder.parentNode){ + placeHolder.parentNode.removeChild(placeHolder); + } + + toolbarBox.style.cssText = bakCssText; + } + + function updateFloating(){ + var rect3 = getPosition(me.container); + var offset=me.options.toolbarTopOffset||0; + if (rect3.top < 0 && rect3.bottom - toolbarBox.offsetHeight > offset) { + setFloating(); + }else{ + unsetFloating(); + } + } + var defer_updateFloating = utils.defer(function(){ + updateFloating(); + },browser.ie ? 200 : 100,true); + + me.addListener('destroy',function(){ + domUtils.un(window, ['scroll','resize'], updateFloating); + me.removeListener('keydown', defer_updateFloating); + }); + + me.addListener('ready', function(){ + if(checkHasUI(me)){ + //加载了ui组件,但在new时,没有加载ui,导致编辑器实例上没有ui类,所以这里做判断 + if(!me.ui){ + return; + } + getPosition = uiUtils.getClientRect; + toolbarBox = me.ui.getDom('toolbarbox'); + orgTop = getPosition(toolbarBox).top; + bakCssText = toolbarBox.style.cssText; + placeHolder.style.height = toolbarBox.offsetHeight + 'px'; + if(LteIE6){ + fixIE6FixedPos(); + } + domUtils.on(window, ['scroll','resize'], updateFloating); + me.addListener('keydown', defer_updateFloating); + + me.addListener('beforefullscreenchange', function (t, enabled){ + if (enabled) { + unsetFloating(); + } + }); + me.addListener('fullscreenchanged', function (t, enabled){ + if (!enabled) { + updateFloating(); + } + }); + me.addListener('sourcemodechanged', function (t, enabled){ + setTimeout(function (){ + updateFloating(); + },0); + }); + me.addListener("clearDoc",function(){ + setTimeout(function(){ + updateFloating(); + },0); + + }) + } + }); +}; + + +// plugins/video.js +/** + * video插件, 为UEditor提供视频插入支持 + * @file + * @since 1.2.6.1 + */ + +UE.plugins['video'] = function (){ + var me =this; + + /** + * 创建插入视频字符窜 + * @param url 视频地址 + * @param width 视频宽度 + * @param height 视频高度 + * @param align 视频对齐 + * @param toEmbed 是否以flash代替显示 + * @param addParagraph 是否需要添加P 标签 + */ + function creatInsertStr(url,width,height,id,align,classname,type){ + var str; + switch (type){ + case 'image': + str = '' + break; + case 'embed': + str = ''; + break; + case 'video': + var ext = url.substr(url.lastIndexOf('.') + 1); + if(ext == 'ogv') ext = 'ogg'; + str = '' + + ''; + break; + } + return str; + } + + function switchImgAndVideo(root,img2video){ + utils.each(root.getNodesByTagName(img2video ? 'img' : 'embed video'),function(node){ + var className = node.getAttr('class'); + if(className && className.indexOf('edui-faked-video') != -1){ + var html = creatInsertStr( img2video ? node.getAttr('_url') : node.getAttr('src'),node.getAttr('width'),node.getAttr('height'),null,node.getStyle('float') || '',className,img2video ? 'embed':'image'); + node.parentNode.replaceChild(UE.uNode.createElement(html),node); + } + if(className && className.indexOf('edui-upload-video') != -1){ + var html = creatInsertStr( img2video ? node.getAttr('_url') : node.getAttr('src'),node.getAttr('width'),node.getAttr('height'),null,node.getStyle('float') || '',className,img2video ? 'video':'image'); + node.parentNode.replaceChild(UE.uNode.createElement(html),node); + } + }) + } + + me.addOutputRule(function(root){ + switchImgAndVideo(root,true) + }); + me.addInputRule(function(root){ + switchImgAndVideo(root) + }); + + /** + * 插入视频 + * @command insertvideo + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { Object } videoAttr 键值对对象, 描述一个视频的所有属性 + * @example + * ```javascript + * + * var videoAttr = { + * //视频地址 + * url: 'http://www.youku.com/xxx', + * //视频宽高值, 单位px + * width: 200, + * height: 100 + * }; + * + * //editor 是编辑器实例 + * //向编辑器插入单个视频 + * editor.execCommand( 'insertvideo', videoAttr ); + * ``` + */ + + /** + * 插入视频 + * @command insertvideo + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { Array } videoArr 需要插入的视频的数组, 其中的每一个元素都是一个键值对对象, 描述了一个视频的所有属性 + * @example + * ```javascript + * + * var videoAttr1 = { + * //视频地址 + * url: 'http://www.youku.com/xxx', + * //视频宽高值, 单位px + * width: 200, + * height: 100 + * }, + * videoAttr2 = { + * //视频地址 + * url: 'http://www.youku.com/xxx', + * //视频宽高值, 单位px + * width: 200, + * height: 100 + * } + * + * //editor 是编辑器实例 + * //该方法将会向编辑器内插入两个视频 + * editor.execCommand( 'insertvideo', [ videoAttr1, videoAttr2 ] ); + * ``` + */ + + /** + * 查询当前光标所在处是否是一个视频 + * @command insertvideo + * @method queryCommandState + * @param { String } cmd 需要查询的命令字符串 + * @return { int } 如果当前光标所在处的元素是一个视频对象, 则返回1,否则返回0 + * @example + * ```javascript + * + * //editor 是编辑器实例 + * editor.queryCommandState( 'insertvideo' ); + * ``` + */ + me.commands["insertvideo"] = { + execCommand: function (cmd, videoObjs, type){ + videoObjs = utils.isArray(videoObjs)?videoObjs:[videoObjs]; + var html = [],id = 'tmpVedio', cl; + for(var i=0,vi,len = videoObjs.length;i 0) { + return 0; + } + for (var i in dtd.$isNotEmpty) if (dtd.$isNotEmpty.hasOwnProperty(i)) { + if (node.getElementsByTagName(i).length) { + return 0; + } + } + return 1; + }; + UETable.getWidth = function (cell) { + if (!cell)return 0; + return parseInt(domUtils.getComputedStyle(cell, "width"), 10); + }; + + /** + * 获取单元格或者单元格组的“对齐”状态。 如果当前的检测对象是一个单元格组, 只有在满足所有单元格的 水平和竖直 对齐属性都相同的 + * 条件时才会返回其状态值,否则将返回null; 如果当前只检测了一个单元格, 则直接返回当前单元格的对齐状态; + * @param table cell or table cells , 支持单个单元格dom对象 或者 单元格dom对象数组 + * @return { align: 'left' || 'right' || 'center', valign: 'top' || 'middle' || 'bottom' } 或者 null + */ + UETable.getTableCellAlignState = function ( cells ) { + + !utils.isArray( cells ) && ( cells = [cells] ); + + var result = {}, + status = ['align', 'valign'], + tempStatus = null, + isSame = true;//状态是否相同 + + utils.each( cells, function( cellNode ){ + + utils.each( status, function( currentState ){ + + tempStatus = cellNode.getAttribute( currentState ); + + if( !result[ currentState ] && tempStatus ) { + result[ currentState ] = tempStatus; + } else if( !result[ currentState ] || ( tempStatus !== result[ currentState ] ) ) { + isSame = false; + return false; + } + + } ); + + return isSame; + + }); + + return isSame ? result : null; + + }; + + /** + * 根据当前选区获取相关的table信息 + * @return {Object} + */ + UETable.getTableItemsByRange = function (editor) { + var start = editor.selection.getStart(); + + //ff下会选中bookmark + if( start && start.id && start.id.indexOf('_baidu_bookmark_start_') === 0 && start.nextSibling) { + start = start.nextSibling; + } + + //在table或者td边缘有可能存在选中tr的情况 + var cell = start && domUtils.findParentByTagName(start, ["td", "th"], true), + tr = cell && cell.parentNode, + caption = start && domUtils.findParentByTagName(start, 'caption', true), + table = caption ? caption.parentNode : tr && tr.parentNode.parentNode; + + return { + cell:cell, + tr:tr, + table:table, + caption:caption + } + }; + UETable.getUETableBySelected = function (editor) { + var table = UETable.getTableItemsByRange(editor).table; + if (table && table.ueTable && table.ueTable.selectedTds.length) { + return table.ueTable; + } + return null; + }; + + UETable.getDefaultValue = function (editor, table) { + var borderMap = { + thin:'0px', + medium:'1px', + thick:'2px' + }, + tableBorder, tdPadding, tdBorder, tmpValue; + if (!table) { + table = editor.document.createElement('table'); + table.insertRow(0).insertCell(0).innerHTML = 'xxx'; + editor.body.appendChild(table); + var td = table.getElementsByTagName('td')[0]; + tmpValue = domUtils.getComputedStyle(table, 'border-left-width'); + tableBorder = parseInt(borderMap[tmpValue] || tmpValue, 10); + tmpValue = domUtils.getComputedStyle(td, 'padding-left'); + tdPadding = parseInt(borderMap[tmpValue] || tmpValue, 10); + tmpValue = domUtils.getComputedStyle(td, 'border-left-width'); + tdBorder = parseInt(borderMap[tmpValue] || tmpValue, 10); + domUtils.remove(table); + return { + tableBorder:tableBorder, + tdPadding:tdPadding, + tdBorder:tdBorder + }; + } else { + td = table.getElementsByTagName('td')[0]; + tmpValue = domUtils.getComputedStyle(table, 'border-left-width'); + tableBorder = parseInt(borderMap[tmpValue] || tmpValue, 10); + tmpValue = domUtils.getComputedStyle(td, 'padding-left'); + tdPadding = parseInt(borderMap[tmpValue] || tmpValue, 10); + tmpValue = domUtils.getComputedStyle(td, 'border-left-width'); + tdBorder = parseInt(borderMap[tmpValue] || tmpValue, 10); + return { + tableBorder:tableBorder, + tdPadding:tdPadding, + tdBorder:tdBorder + }; + } + }; + /** + * 根据当前点击的td或者table获取索引对象 + * @param tdOrTable + */ + UETable.getUETable = function (tdOrTable) { + var tag = tdOrTable.tagName.toLowerCase(); + tdOrTable = (tag == "td" || tag == "th" || tag == 'caption') ? domUtils.findParentByTagName(tdOrTable, "table", true) : tdOrTable; + if (!tdOrTable.ueTable) { + tdOrTable.ueTable = new UETable(tdOrTable); + } + return tdOrTable.ueTable; + }; + + UETable.cloneCell = function(cell,ignoreMerge,keepPro){ + if (!cell || utils.isString(cell)) { + return this.table.ownerDocument.createElement(cell || 'td'); + } + var flag = domUtils.hasClass(cell, "selectTdClass"); + flag && domUtils.removeClasses(cell, "selectTdClass"); + var tmpCell = cell.cloneNode(true); + if (ignoreMerge) { + tmpCell.rowSpan = tmpCell.colSpan = 1; + } + //去掉宽高 + !keepPro && domUtils.removeAttributes(tmpCell,'width height'); + !keepPro && domUtils.removeAttributes(tmpCell,'style'); + + tmpCell.style.borderLeftStyle = ""; + tmpCell.style.borderTopStyle = ""; + tmpCell.style.borderLeftColor = cell.style.borderRightColor; + tmpCell.style.borderLeftWidth = cell.style.borderRightWidth; + tmpCell.style.borderTopColor = cell.style.borderBottomColor; + tmpCell.style.borderTopWidth = cell.style.borderBottomWidth; + flag && domUtils.addClass(cell, "selectTdClass"); + return tmpCell; + } + + UETable.prototype = { + getMaxRows:function () { + var rows = this.table.rows, maxLen = 1; + for (var i = 0, row; row = rows[i]; i++) { + var currentMax = 1; + for (var j = 0, cj; cj = row.cells[j++];) { + currentMax = Math.max(cj.rowSpan || 1, currentMax); + } + maxLen = Math.max(currentMax + i, maxLen); + } + return maxLen; + }, + /** + * 获取当前表格的最大列数 + */ + getMaxCols:function () { + var rows = this.table.rows, maxLen = 0, cellRows = {}; + for (var i = 0, row; row = rows[i]; i++) { + var cellsNum = 0; + for (var j = 0, cj; cj = row.cells[j++];) { + cellsNum += (cj.colSpan || 1); + if (cj.rowSpan && cj.rowSpan > 1) { + for (var k = 1; k < cj.rowSpan; k++) { + if (!cellRows['row_' + (i + k)]) { + cellRows['row_' + (i + k)] = (cj.colSpan || 1); + } else { + cellRows['row_' + (i + k)]++ + } + } + + } + } + cellsNum += cellRows['row_' + i] || 0; + maxLen = Math.max(cellsNum, maxLen); + } + return maxLen; + }, + getCellColIndex:function (cell) { + + }, + /** + * 获取当前cell旁边的单元格, + * @param cell + * @param right + */ + getHSideCell:function (cell, right) { + try { + var cellInfo = this.getCellInfo(cell), + previewRowIndex, previewColIndex; + var len = this.selectedTds.length, + range = this.cellsRange; + //首行或者首列没有前置单元格 + if ((!right && (!len ? !cellInfo.colIndex : !range.beginColIndex)) || (right && (!len ? (cellInfo.colIndex == (this.colsNum - 1)) : (range.endColIndex == this.colsNum - 1)))) return null; + + previewRowIndex = !len ? cellInfo.rowIndex : range.beginRowIndex; + previewColIndex = !right ? ( !len ? (cellInfo.colIndex < 1 ? 0 : (cellInfo.colIndex - 1)) : range.beginColIndex - 1) + : ( !len ? cellInfo.colIndex + 1 : range.endColIndex + 1); + return this.getCell(this.indexTable[previewRowIndex][previewColIndex].rowIndex, this.indexTable[previewRowIndex][previewColIndex].cellIndex); + } catch (e) { + showError(e); + } + }, + getTabNextCell:function (cell, preRowIndex) { + var cellInfo = this.getCellInfo(cell), + rowIndex = preRowIndex || cellInfo.rowIndex, + colIndex = cellInfo.colIndex + 1 + (cellInfo.colSpan - 1), + nextCell; + try { + nextCell = this.getCell(this.indexTable[rowIndex][colIndex].rowIndex, this.indexTable[rowIndex][colIndex].cellIndex); + } catch (e) { + try { + rowIndex = rowIndex * 1 + 1; + colIndex = 0; + nextCell = this.getCell(this.indexTable[rowIndex][colIndex].rowIndex, this.indexTable[rowIndex][colIndex].cellIndex); + } catch (e) { + } + } + return nextCell; + + }, + /** + * 获取视觉上的后置单元格 + * @param cell + * @param bottom + */ + getVSideCell:function (cell, bottom, ignoreRange) { + try { + var cellInfo = this.getCellInfo(cell), + nextRowIndex, nextColIndex; + var len = this.selectedTds.length && !ignoreRange, + range = this.cellsRange; + //末行或者末列没有后置单元格 + if ((!bottom && (cellInfo.rowIndex == 0)) || (bottom && (!len ? (cellInfo.rowIndex + cellInfo.rowSpan > this.rowsNum - 1) : (range.endRowIndex == this.rowsNum - 1)))) return null; + + nextRowIndex = !bottom ? ( !len ? cellInfo.rowIndex - 1 : range.beginRowIndex - 1) + : ( !len ? (cellInfo.rowIndex + cellInfo.rowSpan) : range.endRowIndex + 1); + nextColIndex = !len ? cellInfo.colIndex : range.beginColIndex; + return this.getCell(this.indexTable[nextRowIndex][nextColIndex].rowIndex, this.indexTable[nextRowIndex][nextColIndex].cellIndex); + } catch (e) { + showError(e); + } + }, + /** + * 获取相同结束位置的单元格,xOrY指代了是获取x轴相同还是y轴相同 + */ + getSameEndPosCells:function (cell, xOrY) { + try { + var flag = (xOrY.toLowerCase() === "x"), + end = domUtils.getXY(cell)[flag ? 'x' : 'y'] + cell["offset" + (flag ? 'Width' : 'Height')], + rows = this.table.rows, + cells = null, returns = []; + for (var i = 0; i < this.rowsNum; i++) { + cells = rows[i].cells; + for (var j = 0, tmpCell; tmpCell = cells[j++];) { + var tmpEnd = domUtils.getXY(tmpCell)[flag ? 'x' : 'y'] + tmpCell["offset" + (flag ? 'Width' : 'Height')]; + //对应行的td已经被上面行rowSpan了 + if (tmpEnd > end && flag) break; + if (cell == tmpCell || end == tmpEnd) { + //只获取单一的单元格 + //todo 仅获取单一单元格在特定情况下会造成returns为空,从而影响后续的拖拽实现,修正这个。需考虑性能 + if (tmpCell[flag ? "colSpan" : "rowSpan"] == 1) { + returns.push(tmpCell); + } + if (flag) break; + } + } + } + return returns; + } catch (e) { + showError(e); + } + }, + setCellContent:function (cell, content) { + cell.innerHTML = content || (browser.ie ? domUtils.fillChar : "
    "); + }, + cloneCell:UETable.cloneCell, + /** + * 获取跟当前单元格的右边竖线为左边的所有未合并单元格 + */ + getSameStartPosXCells:function (cell) { + try { + var start = domUtils.getXY(cell).x + cell.offsetWidth, + rows = this.table.rows, cells , returns = []; + for (var i = 0; i < this.rowsNum; i++) { + cells = rows[i].cells; + for (var j = 0, tmpCell; tmpCell = cells[j++];) { + var tmpStart = domUtils.getXY(tmpCell).x; + if (tmpStart > start) break; + if (tmpStart == start && tmpCell.colSpan == 1) { + returns.push(tmpCell); + break; + } + } + } + return returns; + } catch (e) { + showError(e); + } + }, + /** + * 更新table对应的索引表 + */ + update:function (table) { + this.table = table || this.table; + this.selectedTds = []; + this.cellsRange = {}; + this.indexTable = []; + var rows = this.table.rows, + rowsNum = this.getMaxRows(), + dNum = rowsNum - rows.length, + colsNum = this.getMaxCols(); + while (dNum--) { + this.table.insertRow(rows.length); + } + this.rowsNum = rowsNum; + this.colsNum = colsNum; + for (var i = 0, len = rows.length; i < len; i++) { + this.indexTable[i] = new Array(colsNum); + } + //填充索引表 + for (var rowIndex = 0, row; row = rows[rowIndex]; rowIndex++) { + for (var cellIndex = 0, cell, cells = row.cells; cell = cells[cellIndex]; cellIndex++) { + //修正整行被rowSpan时导致的行数计算错误 + if (cell.rowSpan > rowsNum) { + cell.rowSpan = rowsNum; + } + var colIndex = cellIndex, + rowSpan = cell.rowSpan || 1, + colSpan = cell.colSpan || 1; + //当已经被上一行rowSpan或者被前一列colSpan了,则跳到下一个单元格进行 + while (this.indexTable[rowIndex][colIndex]) colIndex++; + for (var j = 0; j < rowSpan; j++) { + for (var k = 0; k < colSpan; k++) { + this.indexTable[rowIndex + j][colIndex + k] = { + rowIndex:rowIndex, + cellIndex:cellIndex, + colIndex:colIndex, + rowSpan:rowSpan, + colSpan:colSpan + } + } + } + } + } + //修复残缺td + for (j = 0; j < rowsNum; j++) { + for (k = 0; k < colsNum; k++) { + if (this.indexTable[j][k] === undefined) { + row = rows[j]; + cell = row.cells[row.cells.length - 1]; + cell = cell ? cell.cloneNode(true) : this.table.ownerDocument.createElement("td"); + this.setCellContent(cell); + if (cell.colSpan !== 1)cell.colSpan = 1; + if (cell.rowSpan !== 1)cell.rowSpan = 1; + row.appendChild(cell); + this.indexTable[j][k] = { + rowIndex:j, + cellIndex:cell.cellIndex, + colIndex:k, + rowSpan:1, + colSpan:1 + } + } + } + } + //当框选后删除行或者列后撤销,需要重建选区。 + var tds = domUtils.getElementsByTagName(this.table, "td"), + selectTds = []; + utils.each(tds, function (td) { + if (domUtils.hasClass(td, "selectTdClass")) { + selectTds.push(td); + } + }); + if (selectTds.length) { + var start = selectTds[0], + end = selectTds[selectTds.length - 1], + startInfo = this.getCellInfo(start), + endInfo = this.getCellInfo(end); + this.selectedTds = selectTds; + this.cellsRange = { + beginRowIndex:startInfo.rowIndex, + beginColIndex:startInfo.colIndex, + endRowIndex:endInfo.rowIndex + endInfo.rowSpan - 1, + endColIndex:endInfo.colIndex + endInfo.colSpan - 1 + }; + } + //给第一行设置firstRow的样式名称,在排序图标的样式上使用到 + if(!domUtils.hasClass(this.table.rows[0], "firstRow")) { + domUtils.addClass(this.table.rows[0], "firstRow"); + for(var i = 1; i< this.table.rows.length; i++) { + domUtils.removeClasses(this.table.rows[i], "firstRow"); + } + } + }, + /** + * 获取单元格的索引信息 + */ + getCellInfo:function (cell) { + if (!cell) return; + var cellIndex = cell.cellIndex, + rowIndex = cell.parentNode.rowIndex, + rowInfo = this.indexTable[rowIndex], + numCols = this.colsNum; + for (var colIndex = cellIndex; colIndex < numCols; colIndex++) { + var cellInfo = rowInfo[colIndex]; + if (cellInfo.rowIndex === rowIndex && cellInfo.cellIndex === cellIndex) { + return cellInfo; + } + } + }, + /** + * 根据行列号获取单元格 + */ + getCell:function (rowIndex, cellIndex) { + return rowIndex < this.rowsNum && this.table.rows[rowIndex].cells[cellIndex] || null; + }, + /** + * 删除单元格 + */ + deleteCell:function (cell, rowIndex) { + rowIndex = typeof rowIndex == 'number' ? rowIndex : cell.parentNode.rowIndex; + var row = this.table.rows[rowIndex]; + row.deleteCell(cell.cellIndex); + }, + /** + * 根据始末两个单元格获取被框选的所有单元格范围 + */ + getCellsRange:function (cellA, cellB) { + function checkRange(beginRowIndex, beginColIndex, endRowIndex, endColIndex) { + var tmpBeginRowIndex = beginRowIndex, + tmpBeginColIndex = beginColIndex, + tmpEndRowIndex = endRowIndex, + tmpEndColIndex = endColIndex, + cellInfo, colIndex, rowIndex; + // 通过indexTable检查是否存在超出TableRange上边界的情况 + if (beginRowIndex > 0) { + for (colIndex = beginColIndex; colIndex < endColIndex; colIndex++) { + cellInfo = me.indexTable[beginRowIndex][colIndex]; + rowIndex = cellInfo.rowIndex; + if (rowIndex < beginRowIndex) { + tmpBeginRowIndex = Math.min(rowIndex, tmpBeginRowIndex); + } + } + } + // 通过indexTable检查是否存在超出TableRange右边界的情况 + if (endColIndex < me.colsNum) { + for (rowIndex = beginRowIndex; rowIndex < endRowIndex; rowIndex++) { + cellInfo = me.indexTable[rowIndex][endColIndex]; + colIndex = cellInfo.colIndex + cellInfo.colSpan - 1; + if (colIndex > endColIndex) { + tmpEndColIndex = Math.max(colIndex, tmpEndColIndex); + } + } + } + // 检查是否有超出TableRange下边界的情况 + if (endRowIndex < me.rowsNum) { + for (colIndex = beginColIndex; colIndex < endColIndex; colIndex++) { + cellInfo = me.indexTable[endRowIndex][colIndex]; + rowIndex = cellInfo.rowIndex + cellInfo.rowSpan - 1; + if (rowIndex > endRowIndex) { + tmpEndRowIndex = Math.max(rowIndex, tmpEndRowIndex); + } + } + } + // 检查是否有超出TableRange左边界的情况 + if (beginColIndex > 0) { + for (rowIndex = beginRowIndex; rowIndex < endRowIndex; rowIndex++) { + cellInfo = me.indexTable[rowIndex][beginColIndex]; + colIndex = cellInfo.colIndex; + if (colIndex < beginColIndex) { + tmpBeginColIndex = Math.min(cellInfo.colIndex, tmpBeginColIndex); + } + } + } + //递归调用直至所有完成所有框选单元格的扩展 + if (tmpBeginRowIndex != beginRowIndex || tmpBeginColIndex != beginColIndex || tmpEndRowIndex != endRowIndex || tmpEndColIndex != endColIndex) { + return checkRange(tmpBeginRowIndex, tmpBeginColIndex, tmpEndRowIndex, tmpEndColIndex); + } else { + // 不需要扩展TableRange的情况 + return { + beginRowIndex:beginRowIndex, + beginColIndex:beginColIndex, + endRowIndex:endRowIndex, + endColIndex:endColIndex + }; + } + } + + try { + var me = this, + cellAInfo = me.getCellInfo(cellA); + if (cellA === cellB) { + return { + beginRowIndex:cellAInfo.rowIndex, + beginColIndex:cellAInfo.colIndex, + endRowIndex:cellAInfo.rowIndex + cellAInfo.rowSpan - 1, + endColIndex:cellAInfo.colIndex + cellAInfo.colSpan - 1 + }; + } + var cellBInfo = me.getCellInfo(cellB); + // 计算TableRange的四个边 + var beginRowIndex = Math.min(cellAInfo.rowIndex, cellBInfo.rowIndex), + beginColIndex = Math.min(cellAInfo.colIndex, cellBInfo.colIndex), + endRowIndex = Math.max(cellAInfo.rowIndex + cellAInfo.rowSpan - 1, cellBInfo.rowIndex + cellBInfo.rowSpan - 1), + endColIndex = Math.max(cellAInfo.colIndex + cellAInfo.colSpan - 1, cellBInfo.colIndex + cellBInfo.colSpan - 1); + + return checkRange(beginRowIndex, beginColIndex, endRowIndex, endColIndex); + } catch (e) { + //throw e; + } + }, + /** + * 依据cellsRange获取对应的单元格集合 + */ + getCells:function (range) { + //每次获取cells之前必须先清除上次的选择,否则会对后续获取操作造成影响 + this.clearSelected(); + var beginRowIndex = range.beginRowIndex, + beginColIndex = range.beginColIndex, + endRowIndex = range.endRowIndex, + endColIndex = range.endColIndex, + cellInfo, rowIndex, colIndex, tdHash = {}, returnTds = []; + for (var i = beginRowIndex; i <= endRowIndex; i++) { + for (var j = beginColIndex; j <= endColIndex; j++) { + cellInfo = this.indexTable[i][j]; + rowIndex = cellInfo.rowIndex; + colIndex = cellInfo.colIndex; + // 如果Cells里已经包含了此Cell则跳过 + var key = rowIndex + '|' + colIndex; + if (tdHash[key]) continue; + tdHash[key] = 1; + if (rowIndex < i || colIndex < j || rowIndex + cellInfo.rowSpan - 1 > endRowIndex || colIndex + cellInfo.colSpan - 1 > endColIndex) { + return null; + } + returnTds.push(this.getCell(rowIndex, cellInfo.cellIndex)); + } + } + return returnTds; + }, + /** + * 清理已经选中的单元格 + */ + clearSelected:function () { + UETable.removeSelectedClass(this.selectedTds); + this.selectedTds = []; + this.cellsRange = {}; + }, + /** + * 根据range设置已经选中的单元格 + */ + setSelected:function (range) { + var cells = this.getCells(range); + UETable.addSelectedClass(cells); + this.selectedTds = cells; + this.cellsRange = range; + }, + isFullRow:function () { + var range = this.cellsRange; + return (range.endColIndex - range.beginColIndex + 1) == this.colsNum; + }, + isFullCol:function () { + var range = this.cellsRange, + table = this.table, + ths = table.getElementsByTagName("th"), + rows = range.endRowIndex - range.beginRowIndex + 1; + return !ths.length ? rows == this.rowsNum : rows == this.rowsNum || (rows == this.rowsNum - 1); + + }, + /** + * 获取视觉上的前置单元格,默认是左边,top传入时 + * @param cell + * @param top + */ + getNextCell:function (cell, bottom, ignoreRange) { + try { + var cellInfo = this.getCellInfo(cell), + nextRowIndex, nextColIndex; + var len = this.selectedTds.length && !ignoreRange, + range = this.cellsRange; + //末行或者末列没有后置单元格 + if ((!bottom && (cellInfo.rowIndex == 0)) || (bottom && (!len ? (cellInfo.rowIndex + cellInfo.rowSpan > this.rowsNum - 1) : (range.endRowIndex == this.rowsNum - 1)))) return null; + + nextRowIndex = !bottom ? ( !len ? cellInfo.rowIndex - 1 : range.beginRowIndex - 1) + : ( !len ? (cellInfo.rowIndex + cellInfo.rowSpan) : range.endRowIndex + 1); + nextColIndex = !len ? cellInfo.colIndex : range.beginColIndex; + return this.getCell(this.indexTable[nextRowIndex][nextColIndex].rowIndex, this.indexTable[nextRowIndex][nextColIndex].cellIndex); + } catch (e) { + showError(e); + } + }, + getPreviewCell:function (cell, top) { + try { + var cellInfo = this.getCellInfo(cell), + previewRowIndex, previewColIndex; + var len = this.selectedTds.length, + range = this.cellsRange; + //首行或者首列没有前置单元格 + if ((!top && (!len ? !cellInfo.colIndex : !range.beginColIndex)) || (top && (!len ? (cellInfo.rowIndex > (this.colsNum - 1)) : (range.endColIndex == this.colsNum - 1)))) return null; + + previewRowIndex = !top ? ( !len ? cellInfo.rowIndex : range.beginRowIndex ) + : ( !len ? (cellInfo.rowIndex < 1 ? 0 : (cellInfo.rowIndex - 1)) : range.beginRowIndex); + previewColIndex = !top ? ( !len ? (cellInfo.colIndex < 1 ? 0 : (cellInfo.colIndex - 1)) : range.beginColIndex - 1) + : ( !len ? cellInfo.colIndex : range.endColIndex + 1); + return this.getCell(this.indexTable[previewRowIndex][previewColIndex].rowIndex, this.indexTable[previewRowIndex][previewColIndex].cellIndex); + } catch (e) { + showError(e); + } + }, + /** + * 移动单元格中的内容 + */ + moveContent:function (cellTo, cellFrom) { + if (UETable.isEmptyBlock(cellFrom)) return; + if (UETable.isEmptyBlock(cellTo)) { + cellTo.innerHTML = cellFrom.innerHTML; + return; + } + var child = cellTo.lastChild; + if (child.nodeType == 3 || !dtd.$block[child.tagName]) { + cellTo.appendChild(cellTo.ownerDocument.createElement('br')) + } + while (child = cellFrom.firstChild) { + cellTo.appendChild(child); + } + }, + /** + * 向右合并单元格 + */ + mergeRight:function (cell) { + var cellInfo = this.getCellInfo(cell), + rightColIndex = cellInfo.colIndex + cellInfo.colSpan, + rightCellInfo = this.indexTable[cellInfo.rowIndex][rightColIndex], + rightCell = this.getCell(rightCellInfo.rowIndex, rightCellInfo.cellIndex); + //合并 + cell.colSpan = cellInfo.colSpan + rightCellInfo.colSpan; + //被合并的单元格不应存在宽度属性 + cell.removeAttribute("width"); + //移动内容 + this.moveContent(cell, rightCell); + //删掉被合并的Cell + this.deleteCell(rightCell, rightCellInfo.rowIndex); + this.update(); + }, + /** + * 向下合并单元格 + */ + mergeDown:function (cell) { + var cellInfo = this.getCellInfo(cell), + downRowIndex = cellInfo.rowIndex + cellInfo.rowSpan, + downCellInfo = this.indexTable[downRowIndex][cellInfo.colIndex], + downCell = this.getCell(downCellInfo.rowIndex, downCellInfo.cellIndex); + cell.rowSpan = cellInfo.rowSpan + downCellInfo.rowSpan; + cell.removeAttribute("height"); + this.moveContent(cell, downCell); + this.deleteCell(downCell, downCellInfo.rowIndex); + this.update(); + }, + /** + * 合并整个range中的内容 + */ + mergeRange:function () { + //由于合并操作可以在任意时刻进行,所以无法通过鼠标位置等信息实时生成range,只能通过缓存实例中的cellsRange对象来访问 + var range = this.cellsRange, + leftTopCell = this.getCell(range.beginRowIndex, this.indexTable[range.beginRowIndex][range.beginColIndex].cellIndex); + + if (leftTopCell.tagName == "TH" && range.endRowIndex !== range.beginRowIndex) { + var index = this.indexTable, + info = this.getCellInfo(leftTopCell); + leftTopCell = this.getCell(1, index[1][info.colIndex].cellIndex); + range = this.getCellsRange(leftTopCell, this.getCell(index[this.rowsNum - 1][info.colIndex].rowIndex, index[this.rowsNum - 1][info.colIndex].cellIndex)); + } + + // 删除剩余的Cells + var cells = this.getCells(range); + for(var i= 0,ci;ci=cells[i++];){ + if (ci !== leftTopCell) { + this.moveContent(leftTopCell, ci); + this.deleteCell(ci); + } + } + // 修改左上角Cell的rowSpan和colSpan,并调整宽度属性设置 + leftTopCell.rowSpan = range.endRowIndex - range.beginRowIndex + 1; + leftTopCell.rowSpan > 1 && leftTopCell.removeAttribute("height"); + leftTopCell.colSpan = range.endColIndex - range.beginColIndex + 1; + leftTopCell.colSpan > 1 && leftTopCell.removeAttribute("width"); + if (leftTopCell.rowSpan == this.rowsNum && leftTopCell.colSpan != 1) { + leftTopCell.colSpan = 1; + } + + if (leftTopCell.colSpan == this.colsNum && leftTopCell.rowSpan != 1) { + var rowIndex = leftTopCell.parentNode.rowIndex; + //解决IE下的表格操作问题 + if( this.table.deleteRow ) { + for (var i = rowIndex+ 1, curIndex=rowIndex+ 1, len=leftTopCell.rowSpan; i < len; i++) { + this.table.deleteRow(curIndex); + } + } else { + for (var i = 0, len=leftTopCell.rowSpan - 1; i < len; i++) { + var row = this.table.rows[rowIndex + 1]; + row.parentNode.removeChild(row); + } + } + leftTopCell.rowSpan = 1; + } + this.update(); + }, + /** + * 插入一行单元格 + */ + insertRow:function (rowIndex, sourceCell) { + var numCols = this.colsNum, + table = this.table, + row = table.insertRow(rowIndex), cell, + isInsertTitle = typeof sourceCell == 'string' && sourceCell.toUpperCase() == 'TH'; + + function replaceTdToTh(colIndex, cell, tableRow) { + if (colIndex == 0) { + var tr = tableRow.nextSibling || tableRow.previousSibling, + th = tr.cells[colIndex]; + if (th.tagName == 'TH') { + th = cell.ownerDocument.createElement("th"); + th.appendChild(cell.firstChild); + tableRow.insertBefore(th, cell); + domUtils.remove(cell) + } + }else{ + if (cell.tagName == 'TH') { + var td = cell.ownerDocument.createElement("td"); + td.appendChild(cell.firstChild); + tableRow.insertBefore(td, cell); + domUtils.remove(cell) + } + } + } + + //首行直接插入,无需考虑部分单元格被rowspan的情况 + if (rowIndex == 0 || rowIndex == this.rowsNum) { + for (var colIndex = 0; colIndex < numCols; colIndex++) { + cell = this.cloneCell(sourceCell, true); + this.setCellContent(cell); + cell.getAttribute('vAlign') && cell.setAttribute('vAlign', cell.getAttribute('vAlign')); + row.appendChild(cell); + if(!isInsertTitle) replaceTdToTh(colIndex, cell, row); + } + } else { + var infoRow = this.indexTable[rowIndex], + cellIndex = 0; + for (colIndex = 0; colIndex < numCols; colIndex++) { + var cellInfo = infoRow[colIndex]; + //如果存在某个单元格的rowspan穿过待插入行的位置,则修改该单元格的rowspan即可,无需插入单元格 + if (cellInfo.rowIndex < rowIndex) { + cell = this.getCell(cellInfo.rowIndex, cellInfo.cellIndex); + cell.rowSpan = cellInfo.rowSpan + 1; + } else { + cell = this.cloneCell(sourceCell, true); + this.setCellContent(cell); + row.appendChild(cell); + } + if(!isInsertTitle) replaceTdToTh(colIndex, cell, row); + } + } + //框选时插入不触发contentchange,需要手动更新索引。 + this.update(); + return row; + }, + /** + * 删除一行单元格 + * @param rowIndex + */ + deleteRow:function (rowIndex) { + var row = this.table.rows[rowIndex], + infoRow = this.indexTable[rowIndex], + colsNum = this.colsNum, + count = 0; //处理计数 + for (var colIndex = 0; colIndex < colsNum;) { + var cellInfo = infoRow[colIndex], + cell = this.getCell(cellInfo.rowIndex, cellInfo.cellIndex); + if (cell.rowSpan > 1) { + if (cellInfo.rowIndex == rowIndex) { + var clone = cell.cloneNode(true); + clone.rowSpan = cell.rowSpan - 1; + clone.innerHTML = ""; + cell.rowSpan = 1; + var nextRowIndex = rowIndex + 1, + nextRow = this.table.rows[nextRowIndex], + insertCellIndex, + preMerged = this.getPreviewMergedCellsNum(nextRowIndex, colIndex) - count; + if (preMerged < colIndex) { + insertCellIndex = colIndex - preMerged - 1; + //nextRow.insertCell(insertCellIndex); + domUtils.insertAfter(nextRow.cells[insertCellIndex], clone); + } else { + if (nextRow.cells.length) nextRow.insertBefore(clone, nextRow.cells[0]) + } + count += 1; + //cell.parentNode.removeChild(cell); + } + } + colIndex += cell.colSpan || 1; + } + var deleteTds = [], cacheMap = {}; + for (colIndex = 0; colIndex < colsNum; colIndex++) { + var tmpRowIndex = infoRow[colIndex].rowIndex, + tmpCellIndex = infoRow[colIndex].cellIndex, + key = tmpRowIndex + "_" + tmpCellIndex; + if (cacheMap[key])continue; + cacheMap[key] = 1; + cell = this.getCell(tmpRowIndex, tmpCellIndex); + deleteTds.push(cell); + } + var mergeTds = []; + utils.each(deleteTds, function (td) { + if (td.rowSpan == 1) { + td.parentNode.removeChild(td); + } else { + mergeTds.push(td); + } + }); + utils.each(mergeTds, function (td) { + td.rowSpan--; + }); + row.parentNode.removeChild(row); + //浏览器方法本身存在bug,采用自定义方法删除 + //this.table.deleteRow(rowIndex); + this.update(); + }, + insertCol:function (colIndex, sourceCell, defaultValue) { + var rowsNum = this.rowsNum, + rowIndex = 0, + tableRow, cell, + backWidth = parseInt((this.table.offsetWidth - (this.colsNum + 1) * 20 - (this.colsNum + 1)) / (this.colsNum + 1), 10), + isInsertTitleCol = typeof sourceCell == 'string' && sourceCell.toUpperCase() == 'TH'; + + function replaceTdToTh(rowIndex, cell, tableRow) { + if (rowIndex == 0) { + var th = cell.nextSibling || cell.previousSibling; + if (th.tagName == 'TH') { + th = cell.ownerDocument.createElement("th"); + th.appendChild(cell.firstChild); + tableRow.insertBefore(th, cell); + domUtils.remove(cell) + } + }else{ + if (cell.tagName == 'TH') { + var td = cell.ownerDocument.createElement("td"); + td.appendChild(cell.firstChild); + tableRow.insertBefore(td, cell); + domUtils.remove(cell) + } + } + } + + var preCell; + if (colIndex == 0 || colIndex == this.colsNum) { + for (; rowIndex < rowsNum; rowIndex++) { + tableRow = this.table.rows[rowIndex]; + preCell = tableRow.cells[colIndex == 0 ? colIndex : tableRow.cells.length]; + cell = this.cloneCell(sourceCell, true); //tableRow.insertCell(colIndex == 0 ? colIndex : tableRow.cells.length); + this.setCellContent(cell); + cell.setAttribute('vAlign', cell.getAttribute('vAlign')); + preCell && cell.setAttribute('width', preCell.getAttribute('width')); + if (!colIndex) { + tableRow.insertBefore(cell, tableRow.cells[0]); + } else { + domUtils.insertAfter(tableRow.cells[tableRow.cells.length - 1], cell); + } + if(!isInsertTitleCol) replaceTdToTh(rowIndex, cell, tableRow) + } + } else { + for (; rowIndex < rowsNum; rowIndex++) { + var cellInfo = this.indexTable[rowIndex][colIndex]; + if (cellInfo.colIndex < colIndex) { + cell = this.getCell(cellInfo.rowIndex, cellInfo.cellIndex); + cell.colSpan = cellInfo.colSpan + 1; + } else { + tableRow = this.table.rows[rowIndex]; + preCell = tableRow.cells[cellInfo.cellIndex]; + + cell = this.cloneCell(sourceCell, true);//tableRow.insertCell(cellInfo.cellIndex); + this.setCellContent(cell); + cell.setAttribute('vAlign', cell.getAttribute('vAlign')); + preCell && cell.setAttribute('width', preCell.getAttribute('width')); + //防止IE下报错 + preCell ? tableRow.insertBefore(cell, preCell) : tableRow.appendChild(cell); + } + if(!isInsertTitleCol) replaceTdToTh(rowIndex, cell, tableRow); + } + } + //框选时插入不触发contentchange,需要手动更新索引 + this.update(); + this.updateWidth(backWidth, defaultValue || {tdPadding:10, tdBorder:1}); + }, + updateWidth:function (width, defaultValue) { + var table = this.table, + tmpWidth = UETable.getWidth(table) - defaultValue.tdPadding * 2 - defaultValue.tdBorder + width; + if (tmpWidth < table.ownerDocument.body.offsetWidth) { + table.setAttribute("width", tmpWidth); + return; + } + var tds = domUtils.getElementsByTagName(this.table, "td th"); + utils.each(tds, function (td) { + td.setAttribute("width", width); + }) + }, + deleteCol:function (colIndex) { + var indexTable = this.indexTable, + tableRows = this.table.rows, + backTableWidth = this.table.getAttribute("width"), + backTdWidth = 0, + rowsNum = this.rowsNum, + cacheMap = {}; + for (var rowIndex = 0; rowIndex < rowsNum;) { + var infoRow = indexTable[rowIndex], + cellInfo = infoRow[colIndex], + key = cellInfo.rowIndex + '_' + cellInfo.colIndex; + // 跳过已经处理过的Cell + if (cacheMap[key])continue; + cacheMap[key] = 1; + var cell = this.getCell(cellInfo.rowIndex, cellInfo.cellIndex); + if (!backTdWidth) backTdWidth = cell && parseInt(cell.offsetWidth / cell.colSpan, 10).toFixed(0); + // 如果Cell的colSpan大于1, 就修改colSpan, 否则就删掉这个Cell + if (cell.colSpan > 1) { + cell.colSpan--; + } else { + tableRows[rowIndex].deleteCell(cellInfo.cellIndex); + } + rowIndex += cellInfo.rowSpan || 1; + } + this.table.setAttribute("width", backTableWidth - backTdWidth); + this.update(); + }, + splitToCells:function (cell) { + var me = this, + cells = this.splitToRows(cell); + utils.each(cells, function (cell) { + me.splitToCols(cell); + }) + }, + splitToRows:function (cell) { + var cellInfo = this.getCellInfo(cell), + rowIndex = cellInfo.rowIndex, + colIndex = cellInfo.colIndex, + results = []; + // 修改Cell的rowSpan + cell.rowSpan = 1; + results.push(cell); + // 补齐单元格 + for (var i = rowIndex, endRow = rowIndex + cellInfo.rowSpan; i < endRow; i++) { + if (i == rowIndex)continue; + var tableRow = this.table.rows[i], + tmpCell = tableRow.insertCell(colIndex - this.getPreviewMergedCellsNum(i, colIndex)); + tmpCell.colSpan = cellInfo.colSpan; + this.setCellContent(tmpCell); + tmpCell.setAttribute('vAlign', cell.getAttribute('vAlign')); + tmpCell.setAttribute('align', cell.getAttribute('align')); + if (cell.style.cssText) { + tmpCell.style.cssText = cell.style.cssText; + } + results.push(tmpCell); + } + this.update(); + return results; + }, + getPreviewMergedCellsNum:function (rowIndex, colIndex) { + var indexRow = this.indexTable[rowIndex], + num = 0; + for (var i = 0; i < colIndex;) { + var colSpan = indexRow[i].colSpan, + tmpRowIndex = indexRow[i].rowIndex; + num += (colSpan - (tmpRowIndex == rowIndex ? 1 : 0)); + i += colSpan; + } + return num; + }, + splitToCols:function (cell) { + var backWidth = (cell.offsetWidth / cell.colSpan - 22).toFixed(0), + + cellInfo = this.getCellInfo(cell), + rowIndex = cellInfo.rowIndex, + colIndex = cellInfo.colIndex, + results = []; + // 修改Cell的rowSpan + cell.colSpan = 1; + cell.setAttribute("width", backWidth); + results.push(cell); + // 补齐单元格 + for (var j = colIndex, endCol = colIndex + cellInfo.colSpan; j < endCol; j++) { + if (j == colIndex)continue; + var tableRow = this.table.rows[rowIndex], + tmpCell = tableRow.insertCell(this.indexTable[rowIndex][j].cellIndex + 1); + tmpCell.rowSpan = cellInfo.rowSpan; + this.setCellContent(tmpCell); + tmpCell.setAttribute('vAlign', cell.getAttribute('vAlign')); + tmpCell.setAttribute('align', cell.getAttribute('align')); + tmpCell.setAttribute('width', backWidth); + if (cell.style.cssText) { + tmpCell.style.cssText = cell.style.cssText; + } + //处理th的情况 + if (cell.tagName == 'TH') { + var th = cell.ownerDocument.createElement('th'); + th.appendChild(tmpCell.firstChild); + th.setAttribute('vAlign', cell.getAttribute('vAlign')); + th.rowSpan = tmpCell.rowSpan; + tableRow.insertBefore(th, tmpCell); + domUtils.remove(tmpCell); + } + results.push(tmpCell); + } + this.update(); + return results; + }, + isLastCell:function (cell, rowsNum, colsNum) { + rowsNum = rowsNum || this.rowsNum; + colsNum = colsNum || this.colsNum; + var cellInfo = this.getCellInfo(cell); + return ((cellInfo.rowIndex + cellInfo.rowSpan) == rowsNum) && + ((cellInfo.colIndex + cellInfo.colSpan) == colsNum); + }, + getLastCell:function (cells) { + cells = cells || this.table.getElementsByTagName("td"); + var firstInfo = this.getCellInfo(cells[0]); + var me = this, last = cells[0], + tr = last.parentNode, + cellsNum = 0, cols = 0, rows; + utils.each(cells, function (cell) { + if (cell.parentNode == tr)cols += cell.colSpan || 1; + cellsNum += cell.rowSpan * cell.colSpan || 1; + }); + rows = cellsNum / cols; + utils.each(cells, function (cell) { + if (me.isLastCell(cell, rows, cols)) { + last = cell; + return false; + } + }); + return last; + + }, + selectRow:function (rowIndex) { + var indexRow = this.indexTable[rowIndex], + start = this.getCell(indexRow[0].rowIndex, indexRow[0].cellIndex), + end = this.getCell(indexRow[this.colsNum - 1].rowIndex, indexRow[this.colsNum - 1].cellIndex), + range = this.getCellsRange(start, end); + this.setSelected(range); + }, + selectTable:function () { + var tds = this.table.getElementsByTagName("td"), + range = this.getCellsRange(tds[0], tds[tds.length - 1]); + this.setSelected(range); + }, + setBackground:function (cells, value) { + if (typeof value === "string") { + utils.each(cells, function (cell) { + cell.style.backgroundColor = value; + }) + } else if (typeof value === "object") { + value = utils.extend({ + repeat:true, + colorList:["#ddd", "#fff"] + }, value); + var rowIndex = this.getCellInfo(cells[0]).rowIndex, + count = 0, + colors = value.colorList, + getColor = function (list, index, repeat) { + return list[index] ? list[index] : repeat ? list[index % list.length] : ""; + }; + for (var i = 0, cell; cell = cells[i++];) { + var cellInfo = this.getCellInfo(cell); + cell.style.backgroundColor = getColor(colors, ((rowIndex + count) == cellInfo.rowIndex) ? count : ++count, value.repeat); + } + } + }, + removeBackground:function (cells) { + utils.each(cells, function (cell) { + cell.style.backgroundColor = ""; + }) + } + + + }; + function showError(e) { + } +})(); + +// plugins/table.cmds.js +/** + * Created with JetBrains PhpStorm. + * User: taoqili + * Date: 13-2-20 + * Time: 下午6:25 + * To change this template use File | Settings | File Templates. + */ +; +(function () { + var UT = UE.UETable, + getTableItemsByRange = function (editor) { + return UT.getTableItemsByRange(editor); + }, + getUETableBySelected = function (editor) { + return UT.getUETableBySelected(editor) + }, + getDefaultValue = function (editor, table) { + return UT.getDefaultValue(editor, table); + }, + getUETable = function (tdOrTable) { + return UT.getUETable(tdOrTable); + }; + + + UE.commands['inserttable'] = { + queryCommandState: function () { + return getTableItemsByRange(this).table ? -1 : 0; + }, + execCommand: function (cmd, opt) { + function createTable(opt, tdWidth) { + var html = [], + rowsNum = opt.numRows, + colsNum = opt.numCols; + for (var r = 0; r < rowsNum; r++) { + html.push(''); + for (var c = 0; c < colsNum; c++) { + html.push('
  • ' + (browser.ie && browser.version < 11 ? domUtils.fillChar : '
    ') + '
    ' + html.join('') + '
    ' + } + + if (!opt) { + opt = utils.extend({}, { + numCols: this.options.defaultCols, + numRows: this.options.defaultRows, + tdvalign: this.options.tdvalign + }) + } + var me = this; + var range = this.selection.getRange(), + start = range.startContainer, + firstParentBlock = domUtils.findParent(start, function (node) { + return domUtils.isBlockElm(node); + }, true) || me.body; + + var defaultValue = getDefaultValue(me), + tableWidth = firstParentBlock.offsetWidth, + tdWidth = Math.floor(tableWidth / opt.numCols - defaultValue.tdPadding * 2 - defaultValue.tdBorder); + + //todo其他属性 + !opt.tdvalign && (opt.tdvalign = me.options.tdvalign); + me.execCommand("inserthtml", createTable(opt, tdWidth)); + } + }; + + UE.commands['insertparagraphbeforetable'] = { + queryCommandState: function () { + return getTableItemsByRange(this).cell ? 0 : -1; + }, + execCommand: function () { + var table = getTableItemsByRange(this).table; + if (table) { + var p = this.document.createElement("p"); + p.innerHTML = browser.ie ? ' ' : '
    '; + table.parentNode.insertBefore(p, table); + this.selection.getRange().setStart(p, 0).setCursor(); + } + } + }; + + UE.commands['deletetable'] = { + queryCommandState: function () { + var rng = this.selection.getRange(); + return domUtils.findParentByTagName(rng.startContainer, 'table', true) ? 0 : -1; + }, + execCommand: function (cmd, table) { + var rng = this.selection.getRange(); + table = table || domUtils.findParentByTagName(rng.startContainer, 'table', true); + if (table) { + var next = table.nextSibling; + if (!next) { + next = domUtils.createElement(this.document, 'p', { + 'innerHTML': browser.ie ? domUtils.fillChar : '
    ' + }); + table.parentNode.insertBefore(next, table); + } + domUtils.remove(table); + rng = this.selection.getRange(); + if (next.nodeType == 3) { + rng.setStartBefore(next) + } else { + rng.setStart(next, 0) + } + rng.setCursor(false, true) + this.fireEvent("tablehasdeleted") + + } + + } + }; + UE.commands['cellalign'] = { + queryCommandState: function () { + return getSelectedArr(this).length ? 0 : -1 + }, + execCommand: function (cmd, align) { + var selectedTds = getSelectedArr(this); + if (selectedTds.length) { + for (var i = 0, ci; ci = selectedTds[i++];) { + ci.setAttribute('align', align); + } + } + } + }; + UE.commands['cellvalign'] = { + queryCommandState: function () { + return getSelectedArr(this).length ? 0 : -1; + }, + execCommand: function (cmd, valign) { + var selectedTds = getSelectedArr(this); + if (selectedTds.length) { + for (var i = 0, ci; ci = selectedTds[i++];) { + ci.setAttribute('vAlign', valign); + } + } + } + }; + UE.commands['insertcaption'] = { + queryCommandState: function () { + var table = getTableItemsByRange(this).table; + if (table) { + return table.getElementsByTagName('caption').length == 0 ? 1 : -1; + } + return -1; + }, + execCommand: function () { + var table = getTableItemsByRange(this).table; + if (table) { + var caption = this.document.createElement('caption'); + caption.innerHTML = browser.ie ? domUtils.fillChar : '
    '; + table.insertBefore(caption, table.firstChild); + var range = this.selection.getRange(); + range.setStart(caption, 0).setCursor(); + } + + } + }; + UE.commands['deletecaption'] = { + queryCommandState: function () { + var rng = this.selection.getRange(), + table = domUtils.findParentByTagName(rng.startContainer, 'table'); + if (table) { + return table.getElementsByTagName('caption').length == 0 ? -1 : 1; + } + return -1; + }, + execCommand: function () { + var rng = this.selection.getRange(), + table = domUtils.findParentByTagName(rng.startContainer, 'table'); + if (table) { + domUtils.remove(table.getElementsByTagName('caption')[0]); + var range = this.selection.getRange(); + range.setStart(table.rows[0].cells[0], 0).setCursor(); + } + + } + }; + UE.commands['inserttitle'] = { + queryCommandState: function () { + var table = getTableItemsByRange(this).table; + if (table) { + var firstRow = table.rows[0]; + return firstRow.cells[firstRow.cells.length-1].tagName.toLowerCase() != 'th' ? 0 : -1 + } + return -1; + }, + execCommand: function () { + var table = getTableItemsByRange(this).table; + if (table) { + getUETable(table).insertRow(0, 'th'); + } + var th = table.getElementsByTagName('th')[0]; + this.selection.getRange().setStart(th, 0).setCursor(false, true); + } + }; + UE.commands['deletetitle'] = { + queryCommandState: function () { + var table = getTableItemsByRange(this).table; + if (table) { + var firstRow = table.rows[0]; + return firstRow.cells[firstRow.cells.length-1].tagName.toLowerCase() == 'th' ? 0 : -1 + } + return -1; + }, + execCommand: function () { + var table = getTableItemsByRange(this).table; + if (table) { + domUtils.remove(table.rows[0]) + } + var td = table.getElementsByTagName('td')[0]; + this.selection.getRange().setStart(td, 0).setCursor(false, true); + } + }; + UE.commands['inserttitlecol'] = { + queryCommandState: function () { + var table = getTableItemsByRange(this).table; + if (table) { + var lastRow = table.rows[table.rows.length-1]; + return lastRow.getElementsByTagName('th').length ? -1 : 0; + } + return -1; + }, + execCommand: function (cmd) { + var table = getTableItemsByRange(this).table; + if (table) { + getUETable(table).insertCol(0, 'th'); + } + resetTdWidth(table, this); + var th = table.getElementsByTagName('th')[0]; + this.selection.getRange().setStart(th, 0).setCursor(false, true); + } + }; + UE.commands['deletetitlecol'] = { + queryCommandState: function () { + var table = getTableItemsByRange(this).table; + if (table) { + var lastRow = table.rows[table.rows.length-1]; + return lastRow.getElementsByTagName('th').length ? 0 : -1; + } + return -1; + }, + execCommand: function () { + var table = getTableItemsByRange(this).table; + if (table) { + for(var i = 0; i< table.rows.length; i++ ){ + domUtils.remove(table.rows[i].children[0]) + } + } + resetTdWidth(table, this); + var td = table.getElementsByTagName('td')[0]; + this.selection.getRange().setStart(td, 0).setCursor(false, true); + } + }; + + UE.commands["mergeright"] = { + queryCommandState: function (cmd) { + var tableItems = getTableItemsByRange(this), + table = tableItems.table, + cell = tableItems.cell; + + if (!table || !cell) return -1; + var ut = getUETable(table); + if (ut.selectedTds.length) return -1; + + var cellInfo = ut.getCellInfo(cell), + rightColIndex = cellInfo.colIndex + cellInfo.colSpan; + if (rightColIndex >= ut.colsNum) return -1; // 如果处于最右边则不能向右合并 + + var rightCellInfo = ut.indexTable[cellInfo.rowIndex][rightColIndex], + rightCell = table.rows[rightCellInfo.rowIndex].cells[rightCellInfo.cellIndex]; + if (!rightCell || cell.tagName != rightCell.tagName) return -1; // TH和TD不能相互合并 + + // 当且仅当两个Cell的开始列号和结束列号一致时能进行合并 + return (rightCellInfo.rowIndex == cellInfo.rowIndex && rightCellInfo.rowSpan == cellInfo.rowSpan) ? 0 : -1; + }, + execCommand: function (cmd) { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell); + ut.mergeRight(cell); + rng.moveToBookmark(bk).select(); + } + }; + UE.commands["mergedown"] = { + queryCommandState: function (cmd) { + var tableItems = getTableItemsByRange(this), + table = tableItems.table, + cell = tableItems.cell; + + if (!table || !cell) return -1; + var ut = getUETable(table); + if (ut.selectedTds.length)return -1; + + var cellInfo = ut.getCellInfo(cell), + downRowIndex = cellInfo.rowIndex + cellInfo.rowSpan; + if (downRowIndex >= ut.rowsNum) return -1; // 如果处于最下边则不能向下合并 + + var downCellInfo = ut.indexTable[downRowIndex][cellInfo.colIndex], + downCell = table.rows[downCellInfo.rowIndex].cells[downCellInfo.cellIndex]; + if (!downCell || cell.tagName != downCell.tagName) return -1; // TH和TD不能相互合并 + + // 当且仅当两个Cell的开始列号和结束列号一致时能进行合并 + return (downCellInfo.colIndex == cellInfo.colIndex && downCellInfo.colSpan == cellInfo.colSpan) ? 0 : -1; + }, + execCommand: function () { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell); + ut.mergeDown(cell); + rng.moveToBookmark(bk).select(); + } + }; + UE.commands["mergecells"] = { + queryCommandState: function () { + return getUETableBySelected(this) ? 0 : -1; + }, + execCommand: function () { + var ut = getUETableBySelected(this); + if (ut && ut.selectedTds.length) { + var cell = ut.selectedTds[0]; + ut.mergeRange(); + var rng = this.selection.getRange(); + if (domUtils.isEmptyBlock(cell)) { + rng.setStart(cell, 0).collapse(true) + } else { + rng.selectNodeContents(cell) + } + rng.select(); + } + + + } + }; + UE.commands["insertrow"] = { + queryCommandState: function () { + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell; + return cell && (cell.tagName == "TD" || (cell.tagName == 'TH' && tableItems.tr !== tableItems.table.rows[0])) && + getUETable(tableItems.table).rowsNum < this.options.maxRowNum ? 0 : -1; + }, + execCommand: function () { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell, + table = tableItems.table, + ut = getUETable(table), + cellInfo = ut.getCellInfo(cell); + //ut.insertRow(!ut.selectedTds.length ? cellInfo.rowIndex:ut.cellsRange.beginRowIndex,''); + if (!ut.selectedTds.length) { + ut.insertRow(cellInfo.rowIndex, cell); + } else { + var range = ut.cellsRange; + for (var i = 0, len = range.endRowIndex - range.beginRowIndex + 1; i < len; i++) { + ut.insertRow(range.beginRowIndex, cell); + } + } + rng.moveToBookmark(bk).select(); + if (table.getAttribute("interlaced") === "enabled")this.fireEvent("interlacetable", table); + } + }; + //后插入行 + UE.commands["insertrownext"] = { + queryCommandState: function () { + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell; + return cell && (cell.tagName == "TD") && getUETable(tableItems.table).rowsNum < this.options.maxRowNum ? 0 : -1; + }, + execCommand: function () { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell, + table = tableItems.table, + ut = getUETable(table), + cellInfo = ut.getCellInfo(cell); + //ut.insertRow(!ut.selectedTds.length? cellInfo.rowIndex + cellInfo.rowSpan : ut.cellsRange.endRowIndex + 1,''); + if (!ut.selectedTds.length) { + ut.insertRow(cellInfo.rowIndex + cellInfo.rowSpan, cell); + } else { + var range = ut.cellsRange; + for (var i = 0, len = range.endRowIndex - range.beginRowIndex + 1; i < len; i++) { + ut.insertRow(range.endRowIndex + 1, cell); + } + } + rng.moveToBookmark(bk).select(); + if (table.getAttribute("interlaced") === "enabled")this.fireEvent("interlacetable", table); + } + }; + UE.commands["deleterow"] = { + queryCommandState: function () { + var tableItems = getTableItemsByRange(this); + return tableItems.cell ? 0 : -1; + }, + execCommand: function () { + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell), + cellsRange = ut.cellsRange, + cellInfo = ut.getCellInfo(cell), + preCell = ut.getVSideCell(cell), + nextCell = ut.getVSideCell(cell, true), + rng = this.selection.getRange(); + if (utils.isEmptyObject(cellsRange)) { + ut.deleteRow(cellInfo.rowIndex); + } else { + for (var i = cellsRange.beginRowIndex; i < cellsRange.endRowIndex + 1; i++) { + ut.deleteRow(cellsRange.beginRowIndex); + } + } + var table = ut.table; + if (!table.getElementsByTagName('td').length) { + var nextSibling = table.nextSibling; + domUtils.remove(table); + if (nextSibling) { + rng.setStart(nextSibling, 0).setCursor(false, true); + } + } else { + if (cellInfo.rowSpan == 1 || cellInfo.rowSpan == cellsRange.endRowIndex - cellsRange.beginRowIndex + 1) { + if (nextCell || preCell) rng.selectNodeContents(nextCell || preCell).setCursor(false, true); + } else { + var newCell = ut.getCell(cellInfo.rowIndex, ut.indexTable[cellInfo.rowIndex][cellInfo.colIndex].cellIndex); + if (newCell) rng.selectNodeContents(newCell).setCursor(false, true); + } + } + if (table.getAttribute("interlaced") === "enabled")this.fireEvent("interlacetable", table); + } + }; + UE.commands["insertcol"] = { + queryCommandState: function (cmd) { + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell; + return cell && (cell.tagName == "TD" || (cell.tagName == 'TH' && cell !== tableItems.tr.cells[0])) && + getUETable(tableItems.table).colsNum < this.options.maxColNum ? 0 : -1; + }, + execCommand: function (cmd) { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + if (this.queryCommandState(cmd) == -1)return; + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell), + cellInfo = ut.getCellInfo(cell); + + //ut.insertCol(!ut.selectedTds.length ? cellInfo.colIndex:ut.cellsRange.beginColIndex); + if (!ut.selectedTds.length) { + ut.insertCol(cellInfo.colIndex, cell); + } else { + var range = ut.cellsRange; + for (var i = 0, len = range.endColIndex - range.beginColIndex + 1; i < len; i++) { + ut.insertCol(range.beginColIndex, cell); + } + } + rng.moveToBookmark(bk).select(true); + } + }; + UE.commands["insertcolnext"] = { + queryCommandState: function () { + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell; + return cell && getUETable(tableItems.table).colsNum < this.options.maxColNum ? 0 : -1; + }, + execCommand: function () { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell), + cellInfo = ut.getCellInfo(cell); + //ut.insertCol(!ut.selectedTds.length ? cellInfo.colIndex + cellInfo.colSpan:ut.cellsRange.endColIndex +1); + if (!ut.selectedTds.length) { + ut.insertCol(cellInfo.colIndex + cellInfo.colSpan, cell); + } else { + var range = ut.cellsRange; + for (var i = 0, len = range.endColIndex - range.beginColIndex + 1; i < len; i++) { + ut.insertCol(range.endColIndex + 1, cell); + } + } + rng.moveToBookmark(bk).select(); + } + }; + + UE.commands["deletecol"] = { + queryCommandState: function () { + var tableItems = getTableItemsByRange(this); + return tableItems.cell ? 0 : -1; + }, + execCommand: function () { + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell), + range = ut.cellsRange, + cellInfo = ut.getCellInfo(cell), + preCell = ut.getHSideCell(cell), + nextCell = ut.getHSideCell(cell, true); + if (utils.isEmptyObject(range)) { + ut.deleteCol(cellInfo.colIndex); + } else { + for (var i = range.beginColIndex; i < range.endColIndex + 1; i++) { + ut.deleteCol(range.beginColIndex); + } + } + var table = ut.table, + rng = this.selection.getRange(); + + if (!table.getElementsByTagName('td').length) { + var nextSibling = table.nextSibling; + domUtils.remove(table); + if (nextSibling) { + rng.setStart(nextSibling, 0).setCursor(false, true); + } + } else { + if (domUtils.inDoc(cell, this.document)) { + rng.setStart(cell, 0).setCursor(false, true); + } else { + if (nextCell && domUtils.inDoc(nextCell, this.document)) { + rng.selectNodeContents(nextCell).setCursor(false, true); + } else { + if (preCell && domUtils.inDoc(preCell, this.document)) { + rng.selectNodeContents(preCell).setCursor(true, true); + } + } + } + } + } + }; + UE.commands["splittocells"] = { + queryCommandState: function () { + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell; + if (!cell) return -1; + var ut = getUETable(tableItems.table); + if (ut.selectedTds.length > 0) return -1; + return cell && (cell.colSpan > 1 || cell.rowSpan > 1) ? 0 : -1; + }, + execCommand: function () { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell); + ut.splitToCells(cell); + rng.moveToBookmark(bk).select(); + } + }; + UE.commands["splittorows"] = { + queryCommandState: function () { + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell; + if (!cell) return -1; + var ut = getUETable(tableItems.table); + if (ut.selectedTds.length > 0) return -1; + return cell && cell.rowSpan > 1 ? 0 : -1; + }, + execCommand: function () { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell); + ut.splitToRows(cell); + rng.moveToBookmark(bk).select(); + } + }; + UE.commands["splittocols"] = { + queryCommandState: function () { + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell; + if (!cell) return -1; + var ut = getUETable(tableItems.table); + if (ut.selectedTds.length > 0) return -1; + return cell && cell.colSpan > 1 ? 0 : -1; + }, + execCommand: function () { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell); + ut.splitToCols(cell); + rng.moveToBookmark(bk).select(); + + } + }; + + UE.commands["adaptbytext"] = + UE.commands["adaptbywindow"] = { + queryCommandState: function () { + return getTableItemsByRange(this).table ? 0 : -1 + }, + execCommand: function (cmd) { + var tableItems = getTableItemsByRange(this), + table = tableItems.table; + if (table) { + if (cmd == 'adaptbywindow') { + resetTdWidth(table, this); + } else { + var cells = domUtils.getElementsByTagName(table, "td th"); + utils.each(cells, function (cell) { + cell.removeAttribute("width"); + }); + table.removeAttribute("width"); + } + } + } + }; + + //平均分配各列 + UE.commands['averagedistributecol'] = { + queryCommandState: function () { + var ut = getUETableBySelected(this); + if (!ut) return -1; + return ut.isFullRow() || ut.isFullCol() ? 0 : -1; + }, + execCommand: function (cmd) { + var me = this, + ut = getUETableBySelected(me); + + function getAverageWidth() { + var tb = ut.table, + averageWidth, sumWidth = 0, colsNum = 0, + tbAttr = getDefaultValue(me, tb); + + if (ut.isFullRow()) { + sumWidth = tb.offsetWidth; + colsNum = ut.colsNum; + } else { + var begin = ut.cellsRange.beginColIndex, + end = ut.cellsRange.endColIndex, + node; + for (var i = begin; i <= end;) { + node = ut.selectedTds[i]; + sumWidth += node.offsetWidth; + i += node.colSpan; + colsNum += 1; + } + } + averageWidth = Math.ceil(sumWidth / colsNum) - tbAttr.tdBorder * 2 - tbAttr.tdPadding * 2; + return averageWidth; + } + + function setAverageWidth(averageWidth) { + utils.each(domUtils.getElementsByTagName(ut.table, "th"), function (node) { + node.setAttribute("width", ""); + }); + var cells = ut.isFullRow() ? domUtils.getElementsByTagName(ut.table, "td") : ut.selectedTds; + + utils.each(cells, function (node) { + if (node.colSpan == 1) { + node.setAttribute("width", averageWidth); + } + }); + } + + if (ut && ut.selectedTds.length) { + setAverageWidth(getAverageWidth()); + } + } + }; + //平均分配各行 + UE.commands['averagedistributerow'] = { + queryCommandState: function () { + var ut = getUETableBySelected(this); + if (!ut) return -1; + if (ut.selectedTds && /th/ig.test(ut.selectedTds[0].tagName)) return -1; + return ut.isFullRow() || ut.isFullCol() ? 0 : -1; + }, + execCommand: function (cmd) { + var me = this, + ut = getUETableBySelected(me); + + function getAverageHeight() { + var averageHeight, rowNum, sumHeight = 0, + tb = ut.table, + tbAttr = getDefaultValue(me, tb), + tdpadding = parseInt(domUtils.getComputedStyle(tb.getElementsByTagName('td')[0], "padding-top")); + + if (ut.isFullCol()) { + var captionArr = domUtils.getElementsByTagName(tb, "caption"), + thArr = domUtils.getElementsByTagName(tb, "th"), + captionHeight, thHeight; + + if (captionArr.length > 0) { + captionHeight = captionArr[0].offsetHeight; + } + if (thArr.length > 0) { + thHeight = thArr[0].offsetHeight; + } + + sumHeight = tb.offsetHeight - (captionHeight || 0) - (thHeight || 0); + rowNum = thArr.length == 0 ? ut.rowsNum : (ut.rowsNum - 1); + } else { + var begin = ut.cellsRange.beginRowIndex, + end = ut.cellsRange.endRowIndex, + count = 0, + trs = domUtils.getElementsByTagName(tb, "tr"); + for (var i = begin; i <= end; i++) { + sumHeight += trs[i].offsetHeight; + count += 1; + } + rowNum = count; + } + //ie8下是混杂模式 + if (browser.ie && browser.version < 9) { + averageHeight = Math.ceil(sumHeight / rowNum); + } else { + averageHeight = Math.ceil(sumHeight / rowNum) - tbAttr.tdBorder * 2 - tdpadding * 2; + } + return averageHeight; + } + + function setAverageHeight(averageHeight) { + var cells = ut.isFullCol() ? domUtils.getElementsByTagName(ut.table, "td") : ut.selectedTds; + utils.each(cells, function (node) { + if (node.rowSpan == 1) { + node.setAttribute("height", averageHeight); + } + }); + } + + if (ut && ut.selectedTds.length) { + setAverageHeight(getAverageHeight()); + } + } + }; + + //单元格对齐方式 + UE.commands['cellalignment'] = { + queryCommandState: function () { + return getTableItemsByRange(this).table ? 0 : -1 + }, + execCommand: function (cmd, data) { + var me = this, + ut = getUETableBySelected(me); + + if (!ut) { + var start = me.selection.getStart(), + cell = start && domUtils.findParentByTagName(start, ["td", "th", "caption"], true); + if (!/caption/ig.test(cell.tagName)) { + domUtils.setAttributes(cell, data); + } else { + cell.style.textAlign = data.align; + cell.style.verticalAlign = data.vAlign; + } + me.selection.getRange().setCursor(true); + } else { + utils.each(ut.selectedTds, function (cell) { + domUtils.setAttributes(cell, data); + }); + } + }, + /** + * 查询当前点击的单元格的对齐状态, 如果当前已经选择了多个单元格, 则会返回所有单元格经过统一协调过后的状态 + * @see UE.UETable.getTableCellAlignState + */ + queryCommandValue: function (cmd) { + + var activeMenuCell = getTableItemsByRange( this).cell; + + if( !activeMenuCell ) { + activeMenuCell = getSelectedArr(this)[0]; + } + + if (!activeMenuCell) { + + return null; + + } else { + + //获取同时选中的其他单元格 + var cells = UE.UETable.getUETable(activeMenuCell).selectedTds; + + !cells.length && ( cells = activeMenuCell ); + + return UE.UETable.getTableCellAlignState(cells); + + } + + } + }; + //表格对齐方式 + UE.commands['tablealignment'] = { + queryCommandState: function () { + if (browser.ie && browser.version < 8) { + return -1; + } + return getTableItemsByRange(this).table ? 0 : -1 + }, + execCommand: function (cmd, value) { + var me = this, + start = me.selection.getStart(), + table = start && domUtils.findParentByTagName(start, ["table"], true); + + if (table) { + table.setAttribute("align",value); + } + } + }; + + //表格属性 + UE.commands['edittable'] = { + queryCommandState: function () { + return getTableItemsByRange(this).table ? 0 : -1 + }, + execCommand: function (cmd, color) { + var rng = this.selection.getRange(), + table = domUtils.findParentByTagName(rng.startContainer, 'table'); + if (table) { + var arr = domUtils.getElementsByTagName(table, "td").concat( + domUtils.getElementsByTagName(table, "th"), + domUtils.getElementsByTagName(table, "caption") + ); + utils.each(arr, function (node) { + node.style.borderColor = color; + }); + } + } + }; + //单元格属性 + UE.commands['edittd'] = { + queryCommandState: function () { + return getTableItemsByRange(this).table ? 0 : -1 + }, + execCommand: function (cmd, bkColor) { + var me = this, + ut = getUETableBySelected(me); + + if (!ut) { + var start = me.selection.getStart(), + cell = start && domUtils.findParentByTagName(start, ["td", "th", "caption"], true); + if (cell) { + cell.style.backgroundColor = bkColor; + } + } else { + utils.each(ut.selectedTds, function (cell) { + cell.style.backgroundColor = bkColor; + }); + } + } + }; + + UE.commands["settablebackground"] = { + queryCommandState: function () { + return getSelectedArr(this).length > 1 ? 0 : -1; + }, + execCommand: function (cmd, value) { + var cells, ut; + cells = getSelectedArr(this); + ut = getUETable(cells[0]); + ut.setBackground(cells, value); + } + }; + + UE.commands["cleartablebackground"] = { + queryCommandState: function () { + var cells = getSelectedArr(this); + if (!cells.length)return -1; + for (var i = 0, cell; cell = cells[i++];) { + if (cell.style.backgroundColor !== "") return 0; + } + return -1; + }, + execCommand: function () { + var cells = getSelectedArr(this), + ut = getUETable(cells[0]); + ut.removeBackground(cells); + } + }; + + UE.commands["interlacetable"] = UE.commands["uninterlacetable"] = { + queryCommandState: function (cmd) { + var table = getTableItemsByRange(this).table; + if (!table) return -1; + var interlaced = table.getAttribute("interlaced"); + if (cmd == "interlacetable") { + //TODO 待定 + //是否需要待定,如果设置,则命令只能单次执行成功,但反射具备toggle效果;否则可以覆盖前次命令,但反射将不存在toggle效果 + return (interlaced === "enabled") ? -1 : 0; + } else { + return (!interlaced || interlaced === "disabled") ? -1 : 0; + } + }, + execCommand: function (cmd, classList) { + var table = getTableItemsByRange(this).table; + if (cmd == "interlacetable") { + table.setAttribute("interlaced", "enabled"); + this.fireEvent("interlacetable", table, classList); + } else { + table.setAttribute("interlaced", "disabled"); + this.fireEvent("uninterlacetable", table); + } + } + }; + UE.commands["setbordervisible"] = { + queryCommandState: function (cmd) { + var table = getTableItemsByRange(this).table; + if (!table) return -1; + return 0; + }, + execCommand: function () { + var table = getTableItemsByRange(this).table; + utils.each(domUtils.getElementsByTagName(table,'td'),function(td){ + td.style.borderWidth = '1px'; + td.style.borderStyle = 'solid'; + }) + } + }; + function resetTdWidth(table, editor) { + var tds = domUtils.getElementsByTagName(table,'td th'); + utils.each(tds, function (td) { + td.removeAttribute("width"); + }); + table.setAttribute('width', getTableWidth(editor, true, getDefaultValue(editor, table))); + var tdsWidths = []; + setTimeout(function () { + utils.each(tds, function (td) { + (td.colSpan == 1) && tdsWidths.push(td.offsetWidth) + }) + utils.each(tds, function (td,i) { + (td.colSpan == 1) && td.setAttribute("width", tdsWidths[i] + ""); + }) + }, 0); + } + + function getTableWidth(editor, needIEHack, defaultValue) { + var body = editor.body; + return body.offsetWidth - (needIEHack ? parseInt(domUtils.getComputedStyle(body, 'margin-left'), 10) * 2 : 0) - defaultValue.tableBorder * 2 - (editor.options.offsetWidth || 0); + } + + function getSelectedArr(editor) { + var cell = getTableItemsByRange(editor).cell; + if (cell) { + var ut = getUETable(cell); + return ut.selectedTds.length ? ut.selectedTds : [cell]; + } else { + return []; + } + } +})(); + + +// plugins/table.action.js +/** + * Created with JetBrains PhpStorm. + * User: taoqili + * Date: 12-10-12 + * Time: 上午10:05 + * To change this template use File | Settings | File Templates. + */ +UE.plugins['table'] = function () { + var me = this, + tabTimer = null, + //拖动计时器 + tableDragTimer = null, + //双击计时器 + tableResizeTimer = null, + //单元格最小宽度 + cellMinWidth = 5, + isInResizeBuffer = false, + //单元格边框大小 + cellBorderWidth = 5, + //鼠标偏移距离 + offsetOfTableCell = 10, + //记录在有限时间内的点击状态, 共有3个取值, 0, 1, 2。 0代表未初始化, 1代表单击了1次,2代表2次 + singleClickState = 0, + userActionStatus = null, + //双击允许的时间范围 + dblclickTime = 360, + UT = UE.UETable, + getUETable = function (tdOrTable) { + return UT.getUETable(tdOrTable); + }, + getUETableBySelected = function (editor) { + return UT.getUETableBySelected(editor); + }, + getDefaultValue = function (editor, table) { + return UT.getDefaultValue(editor, table); + }, + removeSelectedClass = function (cells) { + return UT.removeSelectedClass(cells); + }; + + function showError(e) { +// throw e; + } + me.ready(function(){ + var me = this; + var orgGetText = me.selection.getText; + me.selection.getText = function(){ + var table = getUETableBySelected(me); + if(table){ + var str = ''; + utils.each(table.selectedTds,function(td){ + str += td[browser.ie?'innerText':'textContent']; + }) + return str; + }else{ + return orgGetText.call(me.selection) + } + + } + }) + + //处理拖动及框选相关方法 + var startTd = null, //鼠标按下时的锚点td + currentTd = null, //当前鼠标经过时的td + onDrag = "", //指示当前拖动状态,其值可为"","h","v" ,分别表示未拖动状态,横向拖动状态,纵向拖动状态,用于鼠标移动过程中的判断 + onBorder = false, //检测鼠标按下时是否处在单元格边缘位置 + dragButton = null, + dragOver = false, + dragLine = null, //模拟的拖动线 + dragTd = null; //发生拖动的目标td + + var mousedown = false, + //todo 判断混乱模式 + needIEHack = true; + + me.setOpt({ + 'maxColNum':20, + 'maxRowNum':100, + 'defaultCols':5, + 'defaultRows':5, + 'tdvalign':'top', + 'cursorpath':me.options.UEDITOR_HOME_URL + "themes/default/images/cursor_", + 'tableDragable':false, + 'classList':["ue-table-interlace-color-single","ue-table-interlace-color-double"] + }); + me.getUETable = getUETable; + var commands = { + 'deletetable':1, + 'inserttable':1, + 'cellvalign':1, + 'insertcaption':1, + 'deletecaption':1, + 'inserttitle':1, + 'deletetitle':1, + "mergeright":1, + "mergedown":1, + "mergecells":1, + "insertrow":1, + "insertrownext":1, + "deleterow":1, + "insertcol":1, + "insertcolnext":1, + "deletecol":1, + "splittocells":1, + "splittorows":1, + "splittocols":1, + "adaptbytext":1, + "adaptbywindow":1, + "adaptbycustomer":1, + "insertparagraph":1, + "insertparagraphbeforetable":1, + "averagedistributecol":1, + "averagedistributerow":1 + }; + me.ready(function () { + utils.cssRule('table', + //选中的td上的样式 + '.selectTdClass{background-color:#edf5fa !important}' + + 'table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}' + + //插入的表格的默认样式 + 'table{margin-bottom:10px;border-collapse:collapse;display:table;}' + + 'td,th{padding: 5px 10px;border: 1px solid #DDD;}' + + 'caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}' + + 'th{border-top:1px solid #BBB;background-color:#F7F7F7;}' + + 'table tr.firstRow th{border-top-width:2px;}' + + '.ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }' + + 'td p{margin:0;padding:0;}', me.document); + + var tableCopyList, isFullCol, isFullRow; + //注册del/backspace事件 + me.addListener('keydown', function (cmd, evt) { + var me = this; + var keyCode = evt.keyCode || evt.which; + + if (keyCode == 8) { + + var ut = getUETableBySelected(me); + if (ut && ut.selectedTds.length) { + + if (ut.isFullCol()) { + me.execCommand('deletecol') + } else if (ut.isFullRow()) { + me.execCommand('deleterow') + } else { + me.fireEvent('delcells'); + } + domUtils.preventDefault(evt); + } + + var caption = domUtils.findParentByTagName(me.selection.getStart(), 'caption', true), + range = me.selection.getRange(); + if (range.collapsed && caption && isEmptyBlock(caption)) { + me.fireEvent('saveScene'); + var table = caption.parentNode; + domUtils.remove(caption); + if (table) { + range.setStart(table.rows[0].cells[0], 0).setCursor(false, true); + } + me.fireEvent('saveScene'); + } + + } + + if (keyCode == 46) { + + ut = getUETableBySelected(me); + if (ut) { + me.fireEvent('saveScene'); + for (var i = 0, ci; ci = ut.selectedTds[i++];) { + domUtils.fillNode(me.document, ci) + } + me.fireEvent('saveScene'); + domUtils.preventDefault(evt); + + } + + } + if (keyCode == 13) { + + var rng = me.selection.getRange(), + caption = domUtils.findParentByTagName(rng.startContainer, 'caption', true); + if (caption) { + var table = domUtils.findParentByTagName(caption, 'table'); + if (!rng.collapsed) { + + rng.deleteContents(); + me.fireEvent('saveScene'); + } else { + if (caption) { + rng.setStart(table.rows[0].cells[0], 0).setCursor(false, true); + } + } + domUtils.preventDefault(evt); + return; + } + if (rng.collapsed) { + var table = domUtils.findParentByTagName(rng.startContainer, 'table'); + if (table) { + var cell = table.rows[0].cells[0], + start = domUtils.findParentByTagName(me.selection.getStart(), ['td', 'th'], true), + preNode = table.previousSibling; + if (cell === start && (!preNode || preNode.nodeType == 1 && preNode.tagName == 'TABLE' ) && domUtils.isStartInblock(rng)) { + var first = domUtils.findParent(me.selection.getStart(), function(n){return domUtils.isBlockElm(n)}, true); + if(first && ( /t(h|d)/i.test(first.tagName) || first === start.firstChild )){ + me.execCommand('insertparagraphbeforetable'); + domUtils.preventDefault(evt); + } + + } + } + } + } + + if ((evt.ctrlKey || evt.metaKey) && evt.keyCode == '67') { + tableCopyList = null; + var ut = getUETableBySelected(me); + if (ut) { + var tds = ut.selectedTds; + isFullCol = ut.isFullCol(); + isFullRow = ut.isFullRow(); + tableCopyList = [ + [ut.cloneCell(tds[0],null,true)] + ]; + for (var i = 1, ci; ci = tds[i]; i++) { + if (ci.parentNode !== tds[i - 1].parentNode) { + tableCopyList.push([ut.cloneCell(ci,null,true)]); + } else { + tableCopyList[tableCopyList.length - 1].push(ut.cloneCell(ci,null,true)); + } + + } + } + } + }); + me.addListener("tablehasdeleted",function(){ + toggleDraggableState(this, false, "", null); + if (dragButton)domUtils.remove(dragButton); + }); + + me.addListener('beforepaste', function (cmd, html) { + var me = this; + var rng = me.selection.getRange(); + if (domUtils.findParentByTagName(rng.startContainer, 'caption', true)) { + var div = me.document.createElement("div"); + div.innerHTML = html.html; + //trace:3729 + html.html = div[browser.ie9below ? 'innerText' : 'textContent']; + return; + } + var table = getUETableBySelected(me); + if (tableCopyList) { + me.fireEvent('saveScene'); + var rng = me.selection.getRange(); + var td = domUtils.findParentByTagName(rng.startContainer, ['td', 'th'], true), tmpNode, preNode; + if (td) { + var ut = getUETable(td); + if (isFullRow) { + var rowIndex = ut.getCellInfo(td).rowIndex; + if (td.tagName == 'TH') { + rowIndex++; + } + for (var i = 0, ci; ci = tableCopyList[i++];) { + var tr = ut.insertRow(rowIndex++, "td"); + for (var j = 0, cj; cj = ci[j]; j++) { + var cell = tr.cells[j]; + if (!cell) { + cell = tr.insertCell(j) + } + cell.innerHTML = cj.innerHTML; + cj.getAttribute('width') && cell.setAttribute('width', cj.getAttribute('width')); + cj.getAttribute('vAlign') && cell.setAttribute('vAlign', cj.getAttribute('vAlign')); + cj.getAttribute('align') && cell.setAttribute('align', cj.getAttribute('align')); + cj.style.cssText && (cell.style.cssText = cj.style.cssText) + } + for (var j = 0, cj; cj = tr.cells[j]; j++) { + if (!ci[j]) + break; + cj.innerHTML = ci[j].innerHTML; + ci[j].getAttribute('width') && cj.setAttribute('width', ci[j].getAttribute('width')); + ci[j].getAttribute('vAlign') && cj.setAttribute('vAlign', ci[j].getAttribute('vAlign')); + ci[j].getAttribute('align') && cj.setAttribute('align', ci[j].getAttribute('align')); + ci[j].style.cssText && (cj.style.cssText = ci[j].style.cssText) + } + } + } else { + if (isFullCol) { + cellInfo = ut.getCellInfo(td); + var maxColNum = 0; + for (var j = 0, ci = tableCopyList[0], cj; cj = ci[j++];) { + maxColNum += cj.colSpan || 1; + } + me.__hasEnterExecCommand = true; + for (i = 0; i < maxColNum; i++) { + me.execCommand('insertcol'); + } + me.__hasEnterExecCommand = false; + td = ut.table.rows[0].cells[cellInfo.cellIndex]; + if (td.tagName == 'TH') { + td = ut.table.rows[1].cells[cellInfo.cellIndex]; + } + } + for (var i = 0, ci; ci = tableCopyList[i++];) { + tmpNode = td; + for (var j = 0, cj; cj = ci[j++];) { + if (td) { + td.innerHTML = cj.innerHTML; + //todo 定制处理 + cj.getAttribute('width') && td.setAttribute('width', cj.getAttribute('width')); + cj.getAttribute('vAlign') && td.setAttribute('vAlign', cj.getAttribute('vAlign')); + cj.getAttribute('align') && td.setAttribute('align', cj.getAttribute('align')); + cj.style.cssText && (td.style.cssText = cj.style.cssText); + preNode = td; + td = td.nextSibling; + } else { + var cloneTd = cj.cloneNode(true); + domUtils.removeAttributes(cloneTd, ['class', 'rowSpan', 'colSpan']); + + preNode.parentNode.appendChild(cloneTd) + } + } + td = ut.getNextCell(tmpNode, true, true); + if (!tableCopyList[i]) + break; + if (!td) { + var cellInfo = ut.getCellInfo(tmpNode); + ut.table.insertRow(ut.table.rows.length); + ut.update(); + td = ut.getVSideCell(tmpNode, true); + } + } + } + ut.update(); + } else { + table = me.document.createElement('table'); + for (var i = 0, ci; ci = tableCopyList[i++];) { + var tr = table.insertRow(table.rows.length); + for (var j = 0, cj; cj = ci[j++];) { + cloneTd = UT.cloneCell(cj,null,true); + domUtils.removeAttributes(cloneTd, ['class']); + tr.appendChild(cloneTd) + } + if (j == 2 && cloneTd.rowSpan > 1) { + cloneTd.rowSpan = 1; + } + } + + var defaultValue = getDefaultValue(me), + width = me.body.offsetWidth - + (needIEHack ? parseInt(domUtils.getComputedStyle(me.body, 'margin-left'), 10) * 2 : 0) - defaultValue.tableBorder * 2 - (me.options.offsetWidth || 0); + me.execCommand('insertHTML', '' + table.innerHTML.replace(/>\s*<').replace(/\bth\b/gi, "td") + '
    ') + } + me.fireEvent('contentchange'); + me.fireEvent('saveScene'); + html.html = ''; + return true; + } else { + var div = me.document.createElement("div"), tables; + div.innerHTML = html.html; + tables = div.getElementsByTagName("table"); + if (domUtils.findParentByTagName(me.selection.getStart(), 'table')) { + utils.each(tables, function (t) { + domUtils.remove(t) + }); + if (domUtils.findParentByTagName(me.selection.getStart(), 'caption', true)) { + div.innerHTML = div[browser.ie ? 'innerText' : 'textContent']; + } + } else { + utils.each(tables, function (table) { + removeStyleSize(table, true); + domUtils.removeAttributes(table, ['style', 'border']); + utils.each(domUtils.getElementsByTagName(table, "td"), function (td) { + if (isEmptyBlock(td)) { + domUtils.fillNode(me.document, td); + } + removeStyleSize(td, true); +// domUtils.removeAttributes(td, ['style']) + }); + }); + } + html.html = div.innerHTML; + } + }); + + me.addListener('afterpaste', function () { + utils.each(domUtils.getElementsByTagName(me.body, "table"), function (table) { + if (table.offsetWidth > me.body.offsetWidth) { + var defaultValue = getDefaultValue(me, table); + table.style.width = me.body.offsetWidth - (needIEHack ? parseInt(domUtils.getComputedStyle(me.body, 'margin-left'), 10) * 2 : 0) - defaultValue.tableBorder * 2 - (me.options.offsetWidth || 0) + 'px' + } + }) + }); + me.addListener('blur', function () { + tableCopyList = null; + }); + var timer; + me.addListener('keydown', function () { + clearTimeout(timer); + timer = setTimeout(function () { + var rng = me.selection.getRange(), + cell = domUtils.findParentByTagName(rng.startContainer, ['th', 'td'], true); + if (cell) { + var table = cell.parentNode.parentNode.parentNode; + if (table.offsetWidth > table.getAttribute("width")) { + cell.style.wordBreak = "break-all"; + } + } + + }, 100); + }); + me.addListener("selectionchange", function () { + toggleDraggableState(me, false, "", null); + }); + + + //内容变化时触发索引更新 + //todo 可否考虑标记检测,如果不涉及表格的变化就不进行索引重建和更新 + me.addListener("contentchange", function () { + var me = this; + //尽可能排除一些不需要更新的状况 + hideDragLine(me); + if (getUETableBySelected(me))return; + var rng = me.selection.getRange(); + var start = rng.startContainer; + start = domUtils.findParentByTagName(start, ['td', 'th'], true); + utils.each(domUtils.getElementsByTagName(me.document, 'table'), function (table) { + if (me.fireEvent("excludetable", table) === true) return; + table.ueTable = new UT(table); + //trace:3742 +// utils.each(domUtils.getElementsByTagName(me.document, 'td'), function (td) { +// +// if (domUtils.isEmptyBlock(td) && td !== start) { +// domUtils.fillNode(me.document, td); +// if (browser.ie && browser.version == 6) { +// td.innerHTML = ' ' +// } +// } +// }); +// utils.each(domUtils.getElementsByTagName(me.document, 'th'), function (th) { +// if (domUtils.isEmptyBlock(th) && th !== start) { +// domUtils.fillNode(me.document, th); +// if (browser.ie && browser.version == 6) { +// th.innerHTML = ' ' +// } +// } +// }); + table.onmouseover = function () { + me.fireEvent('tablemouseover', table); + }; + table.onmousemove = function () { + me.fireEvent('tablemousemove', table); + me.options.tableDragable && toggleDragButton(true, this, me); + utils.defer(function(){ + me.fireEvent('contentchange',50) + },true) + }; + table.onmouseout = function () { + me.fireEvent('tablemouseout', table); + toggleDraggableState(me, false, "", null); + hideDragLine(me); + }; + table.onclick = function (evt) { + evt = me.window.event || evt; + var target = getParentTdOrTh(evt.target || evt.srcElement); + if (!target)return; + var ut = getUETable(target), + table = ut.table, + cellInfo = ut.getCellInfo(target), + cellsRange, + rng = me.selection.getRange(); +// if ("topLeft" == inPosition(table, mouseCoords(evt))) { +// cellsRange = ut.getCellsRange(ut.table.rows[0].cells[0], ut.getLastCell()); +// ut.setSelected(cellsRange); +// return; +// } +// if ("bottomRight" == inPosition(table, mouseCoords(evt))) { +// +// return; +// } + if (inTableSide(table, target, evt, true)) { + var endTdCol = ut.getCell(ut.indexTable[ut.rowsNum - 1][cellInfo.colIndex].rowIndex, ut.indexTable[ut.rowsNum - 1][cellInfo.colIndex].cellIndex); + if (evt.shiftKey && ut.selectedTds.length) { + if (ut.selectedTds[0] !== endTdCol) { + cellsRange = ut.getCellsRange(ut.selectedTds[0], endTdCol); + ut.setSelected(cellsRange); + } else { + rng && rng.selectNodeContents(endTdCol).select(); + } + } else { + if (target !== endTdCol) { + cellsRange = ut.getCellsRange(target, endTdCol); + ut.setSelected(cellsRange); + } else { + rng && rng.selectNodeContents(endTdCol).select(); + } + } + return; + } + if (inTableSide(table, target, evt)) { + var endTdRow = ut.getCell(ut.indexTable[cellInfo.rowIndex][ut.colsNum - 1].rowIndex, ut.indexTable[cellInfo.rowIndex][ut.colsNum - 1].cellIndex); + if (evt.shiftKey && ut.selectedTds.length) { + if (ut.selectedTds[0] !== endTdRow) { + cellsRange = ut.getCellsRange(ut.selectedTds[0], endTdRow); + ut.setSelected(cellsRange); + } else { + rng && rng.selectNodeContents(endTdRow).select(); + } + } else { + if (target !== endTdRow) { + cellsRange = ut.getCellsRange(target, endTdRow); + ut.setSelected(cellsRange); + } else { + rng && rng.selectNodeContents(endTdRow).select(); + } + } + } + }; + }); + + switchBorderColor(me, true); + }); + + domUtils.on(me.document, "mousemove", mouseMoveEvent); + + domUtils.on(me.document, "mouseout", function (evt) { + var target = evt.target || evt.srcElement; + if (target.tagName == "TABLE") { + toggleDraggableState(me, false, "", null); + } + }); + /** + * 表格隔行变色 + */ + me.addListener("interlacetable",function(type,table,classList){ + if(!table) return; + var me = this, + rows = table.rows, + len = rows.length, + getClass = function(list,index,repeat){ + return list[index] ? list[index] : repeat ? list[index % list.length]: ""; + }; + for(var i = 0;i 1 ? currentRowIndex : ua.getCellInfo(cell).rowIndex; + var nextCell = ua.getTabNextCell(cell, currentRowIndex); + if (nextCell) { + if (isEmptyBlock(nextCell)) { + range.setStart(nextCell, 0).setCursor(false, true) + } else { + range.selectNodeContents(nextCell).select() + } + } else { + me.fireEvent('saveScene'); + me.__hasEnterExecCommand = true; + this.execCommand('insertrownext'); + me.__hasEnterExecCommand = false; + range = this.selection.getRange(); + range.setStart(table.rows[table.rows.length - 1].cells[0], 0).setCursor(); + me.fireEvent('saveScene'); + } + } + return true; + } + + }); + browser.ie && me.addListener('selectionchange', function () { + toggleDraggableState(this, false, "", null); + }); + me.addListener("keydown", function (type, evt) { + var me = this; + //处理在表格的最后一个输入tab产生新的表格 + var keyCode = evt.keyCode || evt.which; + if (keyCode == 8 || keyCode == 46) { + return; + } + var notCtrlKey = !evt.ctrlKey && !evt.metaKey && !evt.shiftKey && !evt.altKey; + notCtrlKey && removeSelectedClass(domUtils.getElementsByTagName(me.body, "td")); + var ut = getUETableBySelected(me); + if (!ut) return; + notCtrlKey && ut.clearSelected(); + }); + + me.addListener("beforegetcontent", function () { + switchBorderColor(this, false); + browser.ie && utils.each(this.document.getElementsByTagName('caption'), function (ci) { + if (domUtils.isEmptyNode(ci)) { + ci.innerHTML = ' ' + } + }); + }); + me.addListener("aftergetcontent", function () { + switchBorderColor(this, true); + }); + me.addListener("getAllHtml", function () { + removeSelectedClass(me.document.getElementsByTagName("td")); + }); + //修正全屏状态下插入的表格宽度在非全屏状态下撑开编辑器的情况 + me.addListener("fullscreenchanged", function (type, fullscreen) { + if (!fullscreen) { + var ratio = this.body.offsetWidth / document.body.offsetWidth, + tables = domUtils.getElementsByTagName(this.body, "table"); + utils.each(tables, function (table) { + if (table.offsetWidth < me.body.offsetWidth) return false; + var tds = domUtils.getElementsByTagName(table, "td"), + backWidths = []; + utils.each(tds, function (td) { + backWidths.push(td.offsetWidth); + }); + for (var i = 0, td; td = tds[i]; i++) { + td.setAttribute("width", Math.floor(backWidths[i] * ratio)); + } + table.setAttribute("width", Math.floor(getTableWidth(me, needIEHack, getDefaultValue(me)))) + }); + } + }); + + //重写execCommand命令,用于处理框选时的处理 + var oldExecCommand = me.execCommand; + me.execCommand = function (cmd, datatat) { + + var me = this, + args = arguments; + + cmd = cmd.toLowerCase(); + var ut = getUETableBySelected(me), tds, + range = new dom.Range(me.document), + cmdFun = me.commands[cmd] || UE.commands[cmd], + result; + if (!cmdFun) return; + if (ut && !commands[cmd] && !cmdFun.notNeedUndo && !me.__hasEnterExecCommand) { + me.__hasEnterExecCommand = true; + me.fireEvent("beforeexeccommand", cmd); + tds = ut.selectedTds; + var lastState = -2, lastValue = -2, value, state; + for (var i = 0, td; td = tds[i]; i++) { + if (isEmptyBlock(td)) { + range.setStart(td, 0).setCursor(false, true) + } else { + range.selectNode(td).select(true); + } + state = me.queryCommandState(cmd); + value = me.queryCommandValue(cmd); + if (state != -1) { + if (lastState !== state || lastValue !== value) { + me._ignoreContentChange = true; + result = oldExecCommand.apply(me, arguments); + me._ignoreContentChange = false; + + } + lastState = me.queryCommandState(cmd); + lastValue = me.queryCommandValue(cmd); + if (domUtils.isEmptyBlock(td)) { + domUtils.fillNode(me.document, td) + } + } + } + range.setStart(tds[0], 0).shrinkBoundary(true).setCursor(false, true); + me.fireEvent('contentchange'); + me.fireEvent("afterexeccommand", cmd); + me.__hasEnterExecCommand = false; + me._selectionChange(); + } else { + result = oldExecCommand.apply(me, arguments); + } + return result; + }; + + + }); + /** + * 删除obj的宽高style,改成属性宽高 + * @param obj + * @param replaceToProperty + */ + function removeStyleSize(obj, replaceToProperty) { + removeStyle(obj, "width", true); + removeStyle(obj, "height", true); + } + + function removeStyle(obj, styleName, replaceToProperty) { + if (obj.style[styleName]) { + replaceToProperty && obj.setAttribute(styleName, parseInt(obj.style[styleName], 10)); + obj.style[styleName] = ""; + } + } + + function getParentTdOrTh(ele) { + if (ele.tagName == "TD" || ele.tagName == "TH") return ele; + var td; + if (td = domUtils.findParentByTagName(ele, "td", true) || domUtils.findParentByTagName(ele, "th", true)) return td; + return null; + } + + function isEmptyBlock(node) { + var reg = new RegExp(domUtils.fillChar, 'g'); + if (node[browser.ie ? 'innerText' : 'textContent'].replace(/^\s*$/, '').replace(reg, '').length > 0) { + return 0; + } + for (var n in dtd.$isNotEmpty) { + if (node.getElementsByTagName(n).length) { + return 0; + } + } + return 1; + } + + + function mouseCoords(evt) { + if (evt.pageX || evt.pageY) { + return { x:evt.pageX, y:evt.pageY }; + } + return { + x:evt.clientX + me.document.body.scrollLeft - me.document.body.clientLeft, + y:evt.clientY + me.document.body.scrollTop - me.document.body.clientTop + }; + } + + function mouseMoveEvent(evt) { + + if( isEditorDisabled() ) { + return; + } + + try { + + //普通状态下鼠标移动 + var target = getParentTdOrTh(evt.target || evt.srcElement), + pos; + + //区分用户的行为是拖动还是双击 + if( isInResizeBuffer ) { + + me.body.style.webkitUserSelect = 'none'; + + if( Math.abs( userActionStatus.x - evt.clientX ) > offsetOfTableCell || Math.abs( userActionStatus.y - evt.clientY ) > offsetOfTableCell ) { + clearTableDragTimer(); + isInResizeBuffer = false; + singleClickState = 0; + //drag action + tableBorderDrag(evt); + } + } + + //修改单元格大小时的鼠标移动 + if (onDrag && dragTd) { + singleClickState = 0; + me.body.style.webkitUserSelect = 'none'; + me.selection.getNative()[browser.ie9below ? 'empty' : 'removeAllRanges'](); + pos = mouseCoords(evt); + toggleDraggableState(me, true, onDrag, pos, target); + if (onDrag == "h") { + dragLine.style.left = getPermissionX(dragTd, evt) + "px"; + } else if (onDrag == "v") { + dragLine.style.top = getPermissionY(dragTd, evt) + "px"; + } + return; + } + //当鼠标处于table上时,修改移动过程中的光标状态 + if (target) { + //针对使用table作为容器的组件不触发拖拽效果 + if (me.fireEvent('excludetable', target) === true) + return; + pos = mouseCoords(evt); + var state = getRelation(target, pos), + table = domUtils.findParentByTagName(target, "table", true); + + if (inTableSide(table, target, evt, true)) { + if (me.fireEvent("excludetable", table) === true) return; + me.body.style.cursor = "url(" + me.options.cursorpath + "h.png),pointer"; + } else if (inTableSide(table, target, evt)) { + if (me.fireEvent("excludetable", table) === true) return; + me.body.style.cursor = "url(" + me.options.cursorpath + "v.png),pointer"; + } else { + me.body.style.cursor = "text"; + var curCell = target; + if (/\d/.test(state)) { + state = state.replace(/\d/, ''); + target = getUETable(target).getPreviewCell(target, state == "v"); + } + //位于第一行的顶部或者第一列的左边时不可拖动 + toggleDraggableState(me, target ? !!state : false, target ? state : '', pos, target); + + } + } else { + toggleDragButton(false, table, me); + } + + } catch (e) { + showError(e); + } + } + + var dragButtonTimer; + + function toggleDragButton(show, table, editor) { + if (!show) { + if (dragOver)return; + dragButtonTimer = setTimeout(function () { + !dragOver && dragButton && dragButton.parentNode && dragButton.parentNode.removeChild(dragButton); + }, 2000); + } else { + createDragButton(table, editor); + } + } + + function createDragButton(table, editor) { + var pos = domUtils.getXY(table), + doc = table.ownerDocument; + if (dragButton && dragButton.parentNode)return dragButton; + dragButton = doc.createElement("div"); + dragButton.contentEditable = false; + dragButton.innerHTML = ""; + dragButton.style.cssText = "width:15px;height:15px;background-image:url(" + editor.options.UEDITOR_HOME_URL + "dialogs/table/dragicon.png);position: absolute;cursor:move;top:" + (pos.y - 15) + "px;left:" + (pos.x) + "px;"; + domUtils.unSelectable(dragButton); + dragButton.onmouseover = function (evt) { + dragOver = true; + }; + dragButton.onmouseout = function (evt) { + dragOver = false; + }; + domUtils.on(dragButton, 'click', function (type, evt) { + doClick(evt, this); + }); + domUtils.on(dragButton, 'dblclick', function (type, evt) { + doDblClick(evt); + }); + domUtils.on(dragButton, 'dragstart', function (type, evt) { + domUtils.preventDefault(evt); + }); + var timer; + + function doClick(evt, button) { + // 部分浏览器下需要清理 + clearTimeout(timer); + timer = setTimeout(function () { + editor.fireEvent("tableClicked", table, button); + }, 300); + } + + function doDblClick(evt) { + clearTimeout(timer); + var ut = getUETable(table), + start = table.rows[0].cells[0], + end = ut.getLastCell(), + range = ut.getCellsRange(start, end); + editor.selection.getRange().setStart(start, 0).setCursor(false, true); + ut.setSelected(range); + } + + doc.body.appendChild(dragButton); + } + + +// function inPosition(table, pos) { +// var tablePos = domUtils.getXY(table), +// width = table.offsetWidth, +// height = table.offsetHeight; +// if (pos.x - tablePos.x < 5 && pos.y - tablePos.y < 5) { +// return "topLeft"; +// } else if (tablePos.x + width - pos.x < 5 && tablePos.y + height - pos.y < 5) { +// return "bottomRight"; +// } +// } + + function inTableSide(table, cell, evt, top) { + var pos = mouseCoords(evt), + state = getRelation(cell, pos); + + if (top) { + var caption = table.getElementsByTagName("caption")[0], + capHeight = caption ? caption.offsetHeight : 0; + return (state == "v1") && ((pos.y - domUtils.getXY(table).y - capHeight) < 8); + } else { + return (state == "h1") && ((pos.x - domUtils.getXY(table).x) < 8); + } + } + + /** + * 获取拖动时允许的X轴坐标 + * @param dragTd + * @param evt + */ + function getPermissionX(dragTd, evt) { + var ut = getUETable(dragTd); + if (ut) { + var preTd = ut.getSameEndPosCells(dragTd, "x")[0], + nextTd = ut.getSameStartPosXCells(dragTd)[0], + mouseX = mouseCoords(evt).x, + left = (preTd ? domUtils.getXY(preTd).x : domUtils.getXY(ut.table).x) + 20 , + right = nextTd ? domUtils.getXY(nextTd).x + nextTd.offsetWidth - 20 : (me.body.offsetWidth + 5 || parseInt(domUtils.getComputedStyle(me.body, "width"), 10)); + + left += cellMinWidth; + right -= cellMinWidth; + + return mouseX < left ? left : mouseX > right ? right : mouseX; + } + } + + /** + * 获取拖动时允许的Y轴坐标 + */ + function getPermissionY(dragTd, evt) { + try { + var top = domUtils.getXY(dragTd).y, + mousePosY = mouseCoords(evt).y; + return mousePosY < top ? top : mousePosY; + } catch (e) { + showError(e); + } + } + + /** + * 移动状态切换 + */ + function toggleDraggableState(editor, draggable, dir, mousePos, cell) { + try { + editor.body.style.cursor = dir == "h" ? "col-resize" : dir == "v" ? "row-resize" : "text"; + if (browser.ie) { + if (dir && !mousedown && !getUETableBySelected(editor)) { + getDragLine(editor, editor.document); + showDragLineAt(dir, cell); + } else { + hideDragLine(editor) + } + } + onBorder = draggable; + } catch (e) { + showError(e); + } + } + + /** + * 获取与UETable相关的resize line + * @param uetable UETable对象 + */ + function getResizeLineByUETable() { + + var lineId = '_UETableResizeLine', + line = this.document.getElementById( lineId ); + + if( !line ) { + line = this.document.createElement("div"); + line.id = lineId; + line.contnetEditable = false; + line.setAttribute("unselectable", "on"); + + var styles = { + width: 2*cellBorderWidth + 1 + 'px', + position: 'absolute', + 'z-index': 100000, + cursor: 'col-resize', + background: 'red', + display: 'none' + }; + + //切换状态 + line.onmouseout = function(){ + this.style.display = 'none'; + }; + + utils.extend( line.style, styles ); + + this.document.body.appendChild( line ); + + } + + return line; + + } + + /** + * 更新resize-line + */ + function updateResizeLine( cell, uetable ) { + + var line = getResizeLineByUETable.call( this ), + table = uetable.table, + styles = { + top: domUtils.getXY( table ).y + 'px', + left: domUtils.getXY( cell).x + cell.offsetWidth - cellBorderWidth + 'px', + display: 'block', + height: table.offsetHeight + 'px' + }; + + utils.extend( line.style, styles ); + + } + + /** + * 显示resize-line + */ + function showResizeLine( cell ) { + + var uetable = getUETable( cell ); + + updateResizeLine.call( this, cell, uetable ); + + } + + /** + * 获取鼠标与当前单元格的相对位置 + * @param ele + * @param mousePos + */ + function getRelation(ele, mousePos) { + var elePos = domUtils.getXY(ele); + + if( !elePos ) { + return ''; + } + + if (elePos.x + ele.offsetWidth - mousePos.x < cellBorderWidth) { + return "h"; + } + if (mousePos.x - elePos.x < cellBorderWidth) { + return 'h1' + } + if (elePos.y + ele.offsetHeight - mousePos.y < cellBorderWidth) { + return "v"; + } + if (mousePos.y - elePos.y < cellBorderWidth) { + return 'v1' + } + return ''; + } + + function mouseDownEvent(type, evt) { + + if( isEditorDisabled() ) { + return ; + } + + userActionStatus = { + x: evt.clientX, + y: evt.clientY + }; + + //右键菜单单独处理 + if (evt.button == 2) { + var ut = getUETableBySelected(me), + flag = false; + + if (ut) { + var td = getTargetTd(me, evt); + utils.each(ut.selectedTds, function (ti) { + if (ti === td) { + flag = true; + } + }); + if (!flag) { + removeSelectedClass(domUtils.getElementsByTagName(me.body, "th td")); + ut.clearSelected() + } else { + td = ut.selectedTds[0]; + setTimeout(function () { + me.selection.getRange().setStart(td, 0).setCursor(false, true); + }, 0); + + } + } + } else { + tableClickHander( evt ); + } + + } + + //清除表格的计时器 + function clearTableTimer() { + tabTimer && clearTimeout( tabTimer ); + tabTimer = null; + } + + //双击收缩 + function tableDbclickHandler(evt) { + singleClickState = 0; + evt = evt || me.window.event; + var target = getParentTdOrTh(evt.target || evt.srcElement); + if (target) { + var h; + if (h = getRelation(target, mouseCoords(evt))) { + + hideDragLine( me ); + + if (h == 'h1') { + h = 'h'; + if (inTableSide(domUtils.findParentByTagName(target, "table"), target, evt)) { + me.execCommand('adaptbywindow'); + } else { + target = getUETable(target).getPreviewCell(target); + if (target) { + var rng = me.selection.getRange(); + rng.selectNodeContents(target).setCursor(true, true) + } + } + } + if (h == 'h') { + var ut = getUETable(target), + table = ut.table, + cells = getCellsByMoveBorder( target, table, true ); + + cells = extractArray( cells, 'left' ); + + ut.width = ut.offsetWidth; + + var oldWidth = [], + newWidth = []; + + utils.each( cells, function( cell ){ + + oldWidth.push( cell.offsetWidth ); + + } ); + + utils.each( cells, function( cell ){ + + cell.removeAttribute("width"); + + } ); + + window.setTimeout( function(){ + + //是否允许改变 + var changeable = true; + + utils.each( cells, function( cell, index ){ + + var width = cell.offsetWidth; + + if( width > oldWidth[index] ) { + changeable = false; + return false; + } + + newWidth.push( width ); + + } ); + + var change = changeable ? newWidth : oldWidth; + + utils.each( cells, function( cell, index ){ + + cell.width = change[index] - getTabcellSpace(); + + } ); + + + }, 0 ); + +// minWidth -= cellMinWidth; +// +// table.removeAttribute("width"); +// utils.each(cells, function (cell) { +// cell.style.width = ""; +// cell.width -= minWidth; +// }); + + } + } + } + } + + function tableClickHander( evt ) { + + removeSelectedClass(domUtils.getElementsByTagName(me.body, "td th")); + //trace:3113 + //选中单元格,点击table外部,不会清掉table上挂的ueTable,会引起getUETableBySelected方法返回值 + utils.each(me.document.getElementsByTagName('table'), function (t) { + t.ueTable = null; + }); + startTd = getTargetTd(me, evt); + if( !startTd ) return; + var table = domUtils.findParentByTagName(startTd, "table", true); + ut = getUETable(table); + ut && ut.clearSelected(); + + //判断当前鼠标状态 + if (!onBorder) { + me.document.body.style.webkitUserSelect = ''; + mousedown = true; + me.addListener('mouseover', mouseOverEvent); + } else { + //边框上的动作处理 + borderActionHandler( evt ); + } + + + } + + //处理表格边框上的动作, 这里做延时处理,避免两种动作互相影响 + function borderActionHandler( evt ) { + + if ( browser.ie ) { + evt = reconstruct(evt ); + } + + clearTableDragTimer(); + + //是否正在等待resize的缓冲中 + isInResizeBuffer = true; + + tableDragTimer = setTimeout(function(){ + tableBorderDrag( evt ); + }, dblclickTime); + + } + + function extractArray( originArr, key ) { + + var result = [], + tmp = null; + + for( var i = 0, len = originArr.length; i 0 && singleClickState--; + }, dblclickTime ); + + if( singleClickState === 2 ) { + + singleClickState = 0; + tableDbclickHandler(evt); + return; + + } + + } + + if (evt.button == 2)return; + var me = this; + //清除表格上原生跨选问题 + var range = me.selection.getRange(), + start = domUtils.findParentByTagName(range.startContainer, 'table', true), + end = domUtils.findParentByTagName(range.endContainer, 'table', true); + + if (start || end) { + if (start === end) { + start = domUtils.findParentByTagName(range.startContainer, ['td', 'th', 'caption'], true); + end = domUtils.findParentByTagName(range.endContainer, ['td', 'th', 'caption'], true); + if (start !== end) { + me.selection.clearRange() + } + } else { + me.selection.clearRange() + } + } + mousedown = false; + me.document.body.style.webkitUserSelect = ''; + //拖拽状态下的mouseUP + if ( onDrag && dragTd ) { + + me.selection.getNative()[browser.ie9below ? 'empty' : 'removeAllRanges'](); + + singleClickState = 0; + dragLine = me.document.getElementById('ue_tableDragLine'); + + // trace 3973 + if (dragLine) { + var dragTdPos = domUtils.getXY(dragTd), + dragLinePos = domUtils.getXY(dragLine); + + switch (onDrag) { + case "h": + changeColWidth(dragTd, dragLinePos.x - dragTdPos.x); + break; + case "v": + changeRowHeight(dragTd, dragLinePos.y - dragTdPos.y - dragTd.offsetHeight); + break; + default: + } + onDrag = ""; + dragTd = null; + + hideDragLine(me); + me.fireEvent('saveScene'); + return; + } + } + //正常状态下的mouseup + if (!startTd) { + var target = domUtils.findParentByTagName(evt.target || evt.srcElement, "td", true); + if (!target) target = domUtils.findParentByTagName(evt.target || evt.srcElement, "th", true); + if (target && (target.tagName == "TD" || target.tagName == "TH")) { + if (me.fireEvent("excludetable", target) === true) return; + range = new dom.Range(me.document); + range.setStart(target, 0).setCursor(false, true); + } + } else { + var ut = getUETable(startTd), + cell = ut ? ut.selectedTds[0] : null; + if (cell) { + range = new dom.Range(me.document); + if (domUtils.isEmptyBlock(cell)) { + range.setStart(cell, 0).setCursor(false, true); + } else { + range.selectNodeContents(cell).shrinkBoundary().setCursor(false, true); + } + } else { + range = me.selection.getRange().shrinkBoundary(); + if (!range.collapsed) { + var start = domUtils.findParentByTagName(range.startContainer, ['td', 'th'], true), + end = domUtils.findParentByTagName(range.endContainer, ['td', 'th'], true); + //在table里边的不能清除 + if (start && !end || !start && end || start && end && start !== end) { + range.setCursor(false, true); + } + } + } + startTd = null; + me.removeListener('mouseover', mouseOverEvent); + } + me._selectionChange(250, evt); + } + + function mouseOverEvent(type, evt) { + + if( isEditorDisabled() ) { + return; + } + + var me = this, + tar = evt.target || evt.srcElement; + currentTd = domUtils.findParentByTagName(tar, "td", true) || domUtils.findParentByTagName(tar, "th", true); + //需要判断两个TD是否位于同一个表格内 + if (startTd && currentTd && + ((startTd.tagName == "TD" && currentTd.tagName == "TD") || (startTd.tagName == "TH" && currentTd.tagName == "TH")) && + domUtils.findParentByTagName(startTd, 'table') == domUtils.findParentByTagName(currentTd, 'table')) { + var ut = getUETable(currentTd); + if (startTd != currentTd) { + me.document.body.style.webkitUserSelect = 'none'; + me.selection.getNative()[browser.ie9below ? 'empty' : 'removeAllRanges'](); + var range = ut.getCellsRange(startTd, currentTd); + ut.setSelected(range); + } else { + me.document.body.style.webkitUserSelect = ''; + ut.clearSelected(); + } + + } + evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false); + } + + function setCellHeight(cell, height, backHeight) { + var lineHight = parseInt(domUtils.getComputedStyle(cell, "line-height"), 10), + tmpHeight = backHeight + height; + height = tmpHeight < lineHight ? lineHight : tmpHeight; + if (cell.style.height) cell.style.height = ""; + cell.rowSpan == 1 ? cell.setAttribute("height", height) : (cell.removeAttribute && cell.removeAttribute("height")); + } + + function getWidth(cell) { + if (!cell)return 0; + return parseInt(domUtils.getComputedStyle(cell, "width"), 10); + } + + function changeColWidth(cell, changeValue) { + + var ut = getUETable(cell); + if (ut) { + + //根据当前移动的边框获取相关的单元格 + var table = ut.table, + cells = getCellsByMoveBorder( cell, table ); + + table.style.width = ""; + table.removeAttribute("width"); + + //修正改变量 + changeValue = correctChangeValue( changeValue, cell, cells ); + + if (cell.nextSibling) { + + var i=0; + + utils.each( cells, function( cellGroup ){ + + cellGroup.left.width = (+cellGroup.left.width)+changeValue; + cellGroup.right && ( cellGroup.right.width = (+cellGroup.right.width)-changeValue ); + + } ); + + } else { + + utils.each( cells, function( cellGroup ){ + cellGroup.left.width -= -changeValue; + } ); + + } + } + + } + + function isEditorDisabled() { + return me.body.contentEditable === "false"; + } + + function changeRowHeight(td, changeValue) { + if (Math.abs(changeValue) < 10) return; + var ut = getUETable(td); + if (ut) { + var cells = ut.getSameEndPosCells(td, "y"), + //备份需要连带变化的td的原始高度,否则后期无法获取正确的值 + backHeight = cells[0] ? cells[0].offsetHeight : 0; + for (var i = 0, cell; cell = cells[i++];) { + setCellHeight(cell, changeValue, backHeight); + } + } + + } + + /** + * 获取调整单元格大小的相关单元格 + * @isContainMergeCell 返回的结果中是否包含发生合并后的单元格 + */ + function getCellsByMoveBorder( cell, table, isContainMergeCell ) { + + if( !table ) { + table = domUtils.findParentByTagName( cell, 'table' ); + } + + if( !table ) { + return null; + } + + //获取到该单元格所在行的序列号 + var index = domUtils.getNodeIndex( cell ), + temp = cell, + rows = table.rows, + colIndex = 0; + + while( temp ) { + //获取到当前单元格在未发生单元格合并时的序列 + if( temp.nodeType === 1 ) { + colIndex += (temp.colSpan || 1); + } + temp = temp.previousSibling; + } + + temp = null; + + //记录想关的单元格 + var borderCells = []; + + utils.each(rows, function( tabRow ){ + + var cells = tabRow.cells, + currIndex = 0; + + utils.each( cells, function( tabCell ){ + + currIndex += (tabCell.colSpan || 1); + + if( currIndex === colIndex ) { + + borderCells.push({ + left: tabCell, + right: tabCell.nextSibling || null + }); + + return false; + + } else if( currIndex > colIndex ) { + + if( isContainMergeCell ) { + borderCells.push({ + left: tabCell + }); + } + + return false; + } + + + } ); + + }); + + return borderCells; + + } + + + /** + * 通过给定的单元格集合获取最小的单元格width + */ + function getMinWidthByTableCells( cells ) { + + var minWidth = Number.MAX_VALUE; + + for( var i = 0, curCell; curCell = cells[ i ] ; i++ ) { + + minWidth = Math.min( minWidth, curCell.width || getTableCellWidth( curCell ) ); + + } + + return minWidth; + + } + + function correctChangeValue( changeValue, relatedCell, cells ) { + + //为单元格的paading预留空间 + changeValue -= getTabcellSpace(); + + if( changeValue < 0 ) { + return 0; + } + + changeValue -= getTableCellWidth( relatedCell ); + + //确定方向 + var direction = changeValue < 0 ? 'left':'right'; + + changeValue = Math.abs(changeValue); + + //只关心非最后一个单元格就可以 + utils.each( cells, function( cellGroup ){ + + var curCell = cellGroup[direction]; + + //为单元格保留最小空间 + if( curCell ) { + changeValue = Math.min( changeValue, getTableCellWidth( curCell )-cellMinWidth ); + } + + + } ); + + + //修正越界 + changeValue = changeValue < 0 ? 0 : changeValue; + + return direction === 'left' ? -changeValue : changeValue; + + } + + function getTableCellWidth( cell ) { + + var width = 0, + //偏移纠正量 + offset = 0, + width = cell.offsetWidth - getTabcellSpace(); + + //最后一个节点纠正一下 + if( !cell.nextSibling ) { + + width -= getTableCellOffset( cell ); + + } + + width = width < 0 ? 0 : width; + + try { + cell.width = width; + } catch(e) { + } + + return width; + + } + + /** + * 获取单元格所在表格的最末单元格的偏移量 + */ + function getTableCellOffset( cell ) { + + tab = domUtils.findParentByTagName( cell, "table", false); + + if( tab.offsetVal === undefined ) { + + var prev = cell.previousSibling; + + if( prev ) { + + //最后一个单元格和前一个单元格的width diff结果 如果恰好为一个border width, 则条件成立 + tab.offsetVal = cell.offsetWidth - prev.offsetWidth === UT.borderWidth ? UT.borderWidth : 0; + + } else { + tab.offsetVal = 0; + } + + } + + return tab.offsetVal; + + } + + function getTabcellSpace() { + + if( UT.tabcellSpace === undefined ) { + + var cell = null, + tab = me.document.createElement("table"), + tbody = me.document.createElement("tbody"), + trow = me.document.createElement("tr"), + tabcell = me.document.createElement("td"), + mirror = null; + + tabcell.style.cssText = 'border: 0;'; + tabcell.width = 1; + + trow.appendChild( tabcell ); + trow.appendChild( mirror = tabcell.cloneNode( false ) ); + + tbody.appendChild( trow ); + + tab.appendChild( tbody ); + + tab.style.cssText = "visibility: hidden;"; + + me.body.appendChild( tab ); + + UT.paddingSpace = tabcell.offsetWidth - 1; + + var tmpTabWidth = tab.offsetWidth; + + tabcell.style.cssText = ''; + mirror.style.cssText = ''; + + UT.borderWidth = ( tab.offsetWidth - tmpTabWidth ) / 3; + + UT.tabcellSpace = UT.paddingSpace + UT.borderWidth; + + me.body.removeChild( tab ); + + } + + getTabcellSpace = function(){ return UT.tabcellSpace; }; + + return UT.tabcellSpace; + + } + + function getDragLine(editor, doc) { + if (mousedown)return; + dragLine = editor.document.createElement("div"); + domUtils.setAttributes(dragLine, { + id:"ue_tableDragLine", + unselectable:'on', + contenteditable:false, + 'onresizestart':'return false', + 'ondragstart':'return false', + 'onselectstart':'return false', + style:"background-color:blue;position:absolute;padding:0;margin:0;background-image:none;border:0px none;opacity:0;filter:alpha(opacity=0)" + }); + editor.body.appendChild(dragLine); + } + + function hideDragLine(editor) { + if (mousedown)return; + var line; + while (line = editor.document.getElementById('ue_tableDragLine')) { + domUtils.remove(line) + } + } + + /** + * 依据state(v|h)在cell位置显示横线 + * @param state + * @param cell + */ + function showDragLineAt(state, cell) { + if (!cell) return; + var table = domUtils.findParentByTagName(cell, "table"), + caption = table.getElementsByTagName('caption'), + width = table.offsetWidth, + height = table.offsetHeight - (caption.length > 0 ? caption[0].offsetHeight : 0), + tablePos = domUtils.getXY(table), + cellPos = domUtils.getXY(cell), css; + switch (state) { + case "h": + css = 'height:' + height + 'px;top:' + (tablePos.y + (caption.length > 0 ? caption[0].offsetHeight : 0)) + 'px;left:' + (cellPos.x + cell.offsetWidth); + dragLine.style.cssText = css + 'px;position: absolute;display:block;background-color:blue;width:1px;border:0; color:blue;opacity:.3;filter:alpha(opacity=30)'; + break; + case "v": + css = 'width:' + width + 'px;left:' + tablePos.x + 'px;top:' + (cellPos.y + cell.offsetHeight ); + //必须加上border:0和color:blue,否则低版ie不支持背景色显示 + dragLine.style.cssText = css + 'px;overflow:hidden;position: absolute;display:block;background-color:blue;height:1px;border:0;color:blue;opacity:.2;filter:alpha(opacity=20)'; + break; + default: + } + } + + /** + * 当表格边框颜色为白色时设置为虚线,true为添加虚线 + * @param editor + * @param flag + */ + function switchBorderColor(editor, flag) { + var tableArr = domUtils.getElementsByTagName(editor.body, "table"), color; + for (var i = 0, node; node = tableArr[i++];) { + var td = domUtils.getElementsByTagName(node, "td"); + if (td[0]) { + if (flag) { + color = (td[0].style.borderColor).replace(/\s/g, ""); + if (/(#ffffff)|(rgb\(255,255,255\))/ig.test(color)) + domUtils.addClass(node, "noBorderTable") + } else { + domUtils.removeClasses(node, "noBorderTable") + } + } + + } + } + + function getTableWidth(editor, needIEHack, defaultValue) { + var body = editor.body; + return body.offsetWidth - (needIEHack ? parseInt(domUtils.getComputedStyle(body, 'margin-left'), 10) * 2 : 0) - defaultValue.tableBorder * 2 - (editor.options.offsetWidth || 0); + } + + /** + * 获取当前拖动的单元格 + */ + function getTargetTd(editor, evt) { + + var target = domUtils.findParentByTagName(evt.target || evt.srcElement, ["td", "th"], true), + dir = null; + + if( !target ) { + return null; + } + + dir = getRelation( target, mouseCoords( evt ) ); + + //如果有前一个节点, 需要做一个修正, 否则可能会得到一个错误的td + + if( !target ) { + return null; + } + + if( dir === 'h1' && target.previousSibling ) { + + var position = domUtils.getXY( target), + cellWidth = target.offsetWidth; + + if( Math.abs( position.x + cellWidth - evt.clientX ) > cellWidth / 3 ) { + target = target.previousSibling; + } + + } else if( dir === 'v1' && target.parentNode.previousSibling ) { + + var position = domUtils.getXY( target), + cellHeight = target.offsetHeight; + + if( Math.abs( position.y + cellHeight - evt.clientY ) > cellHeight / 3 ) { + target = target.parentNode.previousSibling.firstChild; + } + + } + + + //排除了非td内部以及用于代码高亮部分的td + return target && !(editor.fireEvent("excludetable", target) === true) ? target : null; + } + +}; + + +// plugins/table.sort.js +/** + * Created with JetBrains PhpStorm. + * User: Jinqn + * Date: 13-10-12 + * Time: 上午10:20 + * To change this template use File | Settings | File Templates. + */ + +UE.UETable.prototype.sortTable = function (sortByCellIndex, compareFn) { + var table = this.table, + rows = table.rows, + trArray = [], + flag = rows[0].cells[0].tagName === "TH", + lastRowIndex = 0; + if(this.selectedTds.length){ + var range = this.cellsRange, + len = range.endRowIndex + 1; + for (var i = range.beginRowIndex; i < len; i++) { + trArray[i] = rows[i]; + } + trArray.splice(0,range.beginRowIndex); + lastRowIndex = (range.endRowIndex +1) === this.rowsNum ? 0 : range.endRowIndex +1; + }else{ + for (var i = 0,len = rows.length; i < len; i++) { + trArray[i] = rows[i]; + } + } + + var Fn = { + 'reversecurrent': function(td1,td2){ + return 1; + }, + 'orderbyasc': function(td1,td2){ + var value1 = td1.innerText||td1.textContent, + value2 = td2.innerText||td2.textContent; + return value1.localeCompare(value2); + }, + 'reversebyasc': function(td1,td2){ + var value1 = td1.innerHTML, + value2 = td2.innerHTML; + return value2.localeCompare(value1); + }, + 'orderbynum': function(td1,td2){ + var value1 = td1[browser.ie ? 'innerText':'textContent'].match(/\d+/), + value2 = td2[browser.ie ? 'innerText':'textContent'].match(/\d+/); + if(value1) value1 = +value1[0]; + if(value2) value2 = +value2[0]; + return (value1||0) - (value2||0); + }, + 'reversebynum': function(td1,td2){ + var value1 = td1[browser.ie ? 'innerText':'textContent'].match(/\d+/), + value2 = td2[browser.ie ? 'innerText':'textContent'].match(/\d+/); + if(value1) value1 = +value1[0]; + if(value2) value2 = +value2[0]; + return (value2||0) - (value1||0); + } + }; + + //对表格设置排序的标记data-sort-type + table.setAttribute('data-sort-type', compareFn && typeof compareFn === "string" && Fn[compareFn] ? compareFn:''); + + //th不参与排序 + flag && trArray.splice(0, 1); + trArray = utils.sort(trArray,function (tr1, tr2) { + var result; + if (compareFn && typeof compareFn === "function") { + result = compareFn.call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]); + } else if (compareFn && typeof compareFn === "number") { + result = 1; + } else if (compareFn && typeof compareFn === "string" && Fn[compareFn]) { + result = Fn[compareFn].call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]); + } else { + result = Fn['orderbyasc'].call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]); + } + return result; + }); + var fragment = table.ownerDocument.createDocumentFragment(); + for (var j = 0, len = trArray.length; j < len; j++) { + fragment.appendChild(trArray[j]); + } + var tbody = table.getElementsByTagName("tbody")[0]; + if(!lastRowIndex){ + tbody.appendChild(fragment); + }else{ + tbody.insertBefore(fragment,rows[lastRowIndex- range.endRowIndex + range.beginRowIndex - 1]) + } +}; + +UE.plugins['tablesort'] = function () { + var me = this, + UT = UE.UETable, + getUETable = function (tdOrTable) { + return UT.getUETable(tdOrTable); + }, + getTableItemsByRange = function (editor) { + return UT.getTableItemsByRange(editor); + }; + + + me.ready(function () { + //添加表格可排序的样式 + utils.cssRule('tablesort', + 'table.sortEnabled tr.firstRow th,table.sortEnabled tr.firstRow td{padding-right:20px;background-repeat: no-repeat;background-position: center right;' + + ' background-image:url(' + me.options.themePath + me.options.theme + '/images/sortable.png);}', + me.document); + + //做单元格合并操作时,清除可排序标识 + me.addListener("afterexeccommand", function (type, cmd) { + if( cmd == 'mergeright' || cmd == 'mergedown' || cmd == 'mergecells') { + this.execCommand('disablesort'); + } + }); + }); + + + + //表格排序 + UE.commands['sorttable'] = { + queryCommandState: function () { + var me = this, + tableItems = getTableItemsByRange(me); + if (!tableItems.cell) return -1; + var table = tableItems.table, + cells = table.getElementsByTagName("td"); + for (var i = 0, cell; cell = cells[i++];) { + if (cell.rowSpan != 1 || cell.colSpan != 1) return -1; + } + return 0; + }, + execCommand: function (cmd, fn) { + var me = this, + range = me.selection.getRange(), + bk = range.createBookmark(true), + tableItems = getTableItemsByRange(me), + cell = tableItems.cell, + ut = getUETable(tableItems.table), + cellInfo = ut.getCellInfo(cell); + ut.sortTable(cellInfo.cellIndex, fn); + range.moveToBookmark(bk); + try{ + range.select(); + }catch(e){} + } + }; + + //设置表格可排序,清除表格可排序 + UE.commands["enablesort"] = UE.commands["disablesort"] = { + queryCommandState: function (cmd) { + var table = getTableItemsByRange(this).table; + if(table && cmd=='enablesort') { + var cells = domUtils.getElementsByTagName(table, 'th td'); + for(var i = 0; i1 || cells[i].getAttribute('rowspan')>1) return -1; + } + } + + return !table ? -1: cmd=='enablesort' ^ table.getAttribute('data-sort')!='sortEnabled' ? -1:0; + }, + execCommand: function (cmd) { + var table = getTableItemsByRange(this).table; + table.setAttribute("data-sort", cmd == "enablesort" ? "sortEnabled" : "sortDisabled"); + cmd == "enablesort" ? domUtils.addClass(table,"sortEnabled"):domUtils.removeClasses(table,"sortEnabled"); + } + }; +}; + + +// plugins/contextmenu.js +///import core +///commands 右键菜单 +///commandsName ContextMenu +///commandsTitle 右键菜单 +/** + * 右键菜单 + * @function + * @name baidu.editor.plugins.contextmenu + * @author zhanyi + */ + +UE.plugins['contextmenu'] = function () { + var me = this; + me.setOpt('enableContextMenu',true); + if(me.getOpt('enableContextMenu') === false){ + return; + } + var lang = me.getLang( "contextMenu" ), + menu, + items = me.options.contextMenu || [ + {label:lang['selectall'], cmdName:'selectall'}, + { + label:lang.cleardoc, + cmdName:'cleardoc', + exec:function () { + if ( confirm( lang.confirmclear ) ) { + this.execCommand( 'cleardoc' ); + } + } + }, + '-', + { + label:lang.unlink, + cmdName:'unlink' + }, + '-', + { + group:lang.paragraph, + icon:'justifyjustify', + subMenu:[ + { + label:lang.justifyleft, + cmdName:'justify', + value:'left' + }, + { + label:lang.justifyright, + cmdName:'justify', + value:'right' + }, + { + label:lang.justifycenter, + cmdName:'justify', + value:'center' + }, + { + label:lang.justifyjustify, + cmdName:'justify', + value:'justify' + } + ] + }, + '-', + { + group:lang.table, + icon:'table', + subMenu:[ + { + label:lang.inserttable, + cmdName:'inserttable' + }, + { + label:lang.deletetable, + cmdName:'deletetable' + }, + '-', + { + label:lang.deleterow, + cmdName:'deleterow' + }, + { + label:lang.deletecol, + cmdName:'deletecol' + }, + { + label:lang.insertcol, + cmdName:'insertcol' + }, + { + label:lang.insertcolnext, + cmdName:'insertcolnext' + }, + { + label:lang.insertrow, + cmdName:'insertrow' + }, + { + label:lang.insertrownext, + cmdName:'insertrownext' + }, + '-', + { + label:lang.insertcaption, + cmdName:'insertcaption' + }, + { + label:lang.deletecaption, + cmdName:'deletecaption' + }, + { + label:lang.inserttitle, + cmdName:'inserttitle' + }, + { + label:lang.deletetitle, + cmdName:'deletetitle' + }, + { + label:lang.inserttitlecol, + cmdName:'inserttitlecol' + }, + { + label:lang.deletetitlecol, + cmdName:'deletetitlecol' + }, + '-', + { + label:lang.mergecells, + cmdName:'mergecells' + }, + { + label:lang.mergeright, + cmdName:'mergeright' + }, + { + label:lang.mergedown, + cmdName:'mergedown' + }, + '-', + { + label:lang.splittorows, + cmdName:'splittorows' + }, + { + label:lang.splittocols, + cmdName:'splittocols' + }, + { + label:lang.splittocells, + cmdName:'splittocells' + }, + '-', + { + label:lang.averageDiseRow, + cmdName:'averagedistributerow' + }, + { + label:lang.averageDisCol, + cmdName:'averagedistributecol' + }, + '-', + { + label:lang.edittd, + cmdName:'edittd', + exec:function () { + if ( UE.ui['edittd'] ) { + new UE.ui['edittd']( this ); + } + this.getDialog('edittd').open(); + } + }, + { + label:lang.edittable, + cmdName:'edittable', + exec:function () { + if ( UE.ui['edittable'] ) { + new UE.ui['edittable']( this ); + } + this.getDialog('edittable').open(); + } + }, + { + label:lang.setbordervisible, + cmdName:'setbordervisible' + } + ] + }, + { + group:lang.tablesort, + icon:'tablesort', + subMenu:[ + { + label:lang.enablesort, + cmdName:'enablesort' + }, + { + label:lang.disablesort, + cmdName:'disablesort' + }, + '-', + { + label:lang.reversecurrent, + cmdName:'sorttable', + value:'reversecurrent' + }, + { + label:lang.orderbyasc, + cmdName:'sorttable', + value:'orderbyasc' + }, + { + label:lang.reversebyasc, + cmdName:'sorttable', + value:'reversebyasc' + }, + { + label:lang.orderbynum, + cmdName:'sorttable', + value:'orderbynum' + }, + { + label:lang.reversebynum, + cmdName:'sorttable', + value:'reversebynum' + } + ] + }, + { + group:lang.borderbk, + icon:'borderBack', + subMenu:[ + { + label:lang.setcolor, + cmdName:"interlacetable", + exec:function(){ + this.execCommand("interlacetable"); + } + }, + { + label:lang.unsetcolor, + cmdName:"uninterlacetable", + exec:function(){ + this.execCommand("uninterlacetable"); + } + }, + { + label:lang.setbackground, + cmdName:"settablebackground", + exec:function(){ + this.execCommand("settablebackground",{repeat:true,colorList:["#bbb","#ccc"]}); + } + }, + { + label:lang.unsetbackground, + cmdName:"cleartablebackground", + exec:function(){ + this.execCommand("cleartablebackground"); + } + }, + { + label:lang.redandblue, + cmdName:"settablebackground", + exec:function(){ + this.execCommand("settablebackground",{repeat:true,colorList:["red","blue"]}); + } + }, + { + label:lang.threecolorgradient, + cmdName:"settablebackground", + exec:function(){ + this.execCommand("settablebackground",{repeat:true,colorList:["#aaa","#bbb","#ccc"]}); + } + } + ] + }, + { + group:lang.aligntd, + icon:'aligntd', + subMenu:[ + { + cmdName:'cellalignment', + value:{align:'left',vAlign:'top'} + }, + { + cmdName:'cellalignment', + value:{align:'center',vAlign:'top'} + }, + { + cmdName:'cellalignment', + value:{align:'right',vAlign:'top'} + }, + { + cmdName:'cellalignment', + value:{align:'left',vAlign:'middle'} + }, + { + cmdName:'cellalignment', + value:{align:'center',vAlign:'middle'} + }, + { + cmdName:'cellalignment', + value:{align:'right',vAlign:'middle'} + }, + { + cmdName:'cellalignment', + value:{align:'left',vAlign:'bottom'} + }, + { + cmdName:'cellalignment', + value:{align:'center',vAlign:'bottom'} + }, + { + cmdName:'cellalignment', + value:{align:'right',vAlign:'bottom'} + } + ] + }, + { + group:lang.aligntable, + icon:'aligntable', + subMenu:[ + { + cmdName:'tablealignment', + className: 'left', + label:lang.tableleft, + value:"left" + }, + { + cmdName:'tablealignment', + className: 'center', + label:lang.tablecenter, + value:"center" + }, + { + cmdName:'tablealignment', + className: 'right', + label:lang.tableright, + value:"right" + } + ] + }, + '-', + { + label:lang.insertparagraphbefore, + cmdName:'insertparagraph', + value:true + }, + { + label:lang.insertparagraphafter, + cmdName:'insertparagraph' + }, + { + label:lang['copy'], + cmdName:'copy' + }, + { + label:lang['paste'], + cmdName:'paste' + } + ]; + if ( !items.length ) { + return; + } + var uiUtils = UE.ui.uiUtils; + + me.addListener( 'contextmenu', function ( type, evt ) { + + var offset = uiUtils.getViewportOffsetByEvent( evt ); + me.fireEvent( 'beforeselectionchange' ); + if ( menu ) { + menu.destroy(); + } + for ( var i = 0, ti, contextItems = []; ti = items[i]; i++ ) { + var last; + (function ( item ) { + if ( item == '-' ) { + if ( (last = contextItems[contextItems.length - 1 ] ) && last !== '-' ) { + contextItems.push( '-' ); + } + } else if ( item.hasOwnProperty( "group" ) ) { + for ( var j = 0, cj, subMenu = []; cj = item.subMenu[j]; j++ ) { + (function ( subItem ) { + if ( subItem == '-' ) { + if ( (last = subMenu[subMenu.length - 1 ] ) && last !== '-' ) { + subMenu.push( '-' ); + }else{ + subMenu.splice(subMenu.length-1); + } + } else { + if ( (me.commands[subItem.cmdName] || UE.commands[subItem.cmdName] || subItem.query) && + (subItem.query ? subItem.query() : me.queryCommandState( subItem.cmdName )) > -1 ) { + subMenu.push( { + 'label':subItem.label || me.getLang( "contextMenu." + subItem.cmdName + (subItem.value || '') )||"", + 'className':'edui-for-' +subItem.cmdName + ( subItem.className ? ( ' edui-for-' + subItem.cmdName + '-' + subItem.className ) : '' ), + onclick:subItem.exec ? function () { + subItem.exec.call( me ); + } : function () { + me.execCommand( subItem.cmdName, subItem.value ); + } + } ); + } + } + })( cj ); + } + if ( subMenu.length ) { + function getLabel(){ + switch (item.icon){ + case "table": + return me.getLang( "contextMenu.table" ); + case "justifyjustify": + return me.getLang( "contextMenu.paragraph" ); + case "aligntd": + return me.getLang("contextMenu.aligntd"); + case "aligntable": + return me.getLang("contextMenu.aligntable"); + case "tablesort": + return lang.tablesort; + case "borderBack": + return lang.borderbk; + default : + return ''; + } + } + contextItems.push( { + //todo 修正成自动获取方式 + 'label':getLabel(), + className:'edui-for-' + item.icon, + 'subMenu':{ + items:subMenu, + editor:me + } + } ); + } + + } else { + //有可能commmand没有加载右键不能出来,或者没有command也想能展示出来添加query方法 + if ( (me.commands[item.cmdName] || UE.commands[item.cmdName] || item.query) && + (item.query ? item.query.call(me) : me.queryCommandState( item.cmdName )) > -1 ) { + + contextItems.push( { + 'label':item.label || me.getLang( "contextMenu." + item.cmdName ), + className:'edui-for-' + (item.icon ? item.icon : item.cmdName + (item.value || '')), + onclick:item.exec ? function () { + item.exec.call( me ); + } : function () { + me.execCommand( item.cmdName, item.value ); + } + } ); + } + + } + + })( ti ); + } + if ( contextItems[contextItems.length - 1] == '-' ) { + contextItems.pop(); + } + + menu = new UE.ui.Menu( { + items:contextItems, + className:"edui-contextmenu", + editor:me + } ); + menu.render(); + menu.showAt( offset ); + + me.fireEvent("aftershowcontextmenu",menu); + + domUtils.preventDefault( evt ); + if ( browser.ie ) { + var ieRange; + try { + ieRange = me.selection.getNative().createRange(); + } catch ( e ) { + return; + } + if ( ieRange.item ) { + var range = new dom.Range( me.document ); + range.selectNode( ieRange.item( 0 ) ).select( true, true ); + } + } + }); + + // 添加复制的flash按钮 + me.addListener('aftershowcontextmenu', function(type, menu) { + if (me.zeroclipboard) { + var items = menu.items; + for (var key in items) { + if (items[key].className == 'edui-for-copy') { + me.zeroclipboard.clip(items[key].getDom()); + } + } + } + }); + +}; + + +// plugins/shortcutmenu.js +///import core +///commands 弹出菜单 +// commandsName popupmenu +///commandsTitle 弹出菜单 +/** + * 弹出菜单 + * @function + * @name baidu.editor.plugins.popupmenu + * @author xuheng + */ + +UE.plugins['shortcutmenu'] = function () { + var me = this, + menu, + items = me.options.shortcutMenu || []; + + if (!items.length) { + return; + } + + me.addListener ('contextmenu mouseup' , function (type , e) { + var me = this, + customEvt = { + type : type , + target : e.target || e.srcElement , + screenX : e.screenX , + screenY : e.screenY , + clientX : e.clientX , + clientY : e.clientY + }; + + setTimeout (function () { + var rng = me.selection.getRange (); + if (rng.collapsed === false || type == "contextmenu") { + + if (!menu) { + menu = new baidu.editor.ui.ShortCutMenu ({ + editor : me , + items : items , + theme : me.options.theme , + className : 'edui-shortcutmenu' + }); + + menu.render (); + me.fireEvent ("afterrendershortcutmenu" , menu); + } + + menu.show (customEvt , !!UE.plugins['contextmenu']); + } + }); + + if (type == 'contextmenu') { + domUtils.preventDefault (e); + if (browser.ie9below) { + var ieRange; + try { + ieRange = me.selection.getNative().createRange(); + } catch (e) { + return; + } + if (ieRange.item) { + var range = new dom.Range (me.document); + range.selectNode (ieRange.item (0)).select (true , true); + + } + } + } + }); + + me.addListener ('keydown' , function (type) { + if (type == "keydown") { + menu && !menu.isHidden && menu.hide (); + } + + }); + +}; + + + + +// plugins/basestyle.js +/** + * B、I、sub、super命令支持 + * @file + * @since 1.2.6.1 + */ + +UE.plugins['basestyle'] = function(){ + + /** + * 字体加粗 + * @command bold + * @param { String } cmd 命令字符串 + * @remind 对已加粗的文本内容执行该命令, 将取消加粗 + * @method execCommand + * @example + * ```javascript + * //editor是编辑器实例 + * //对当前选中的文本内容执行加粗操作 + * //第一次执行, 文本内容加粗 + * editor.execCommand( 'bold' ); + * + * //第二次执行, 文本内容取消加粗 + * editor.execCommand( 'bold' ); + * ``` + */ + + + /** + * 字体倾斜 + * @command italic + * @method execCommand + * @param { String } cmd 命令字符串 + * @remind 对已倾斜的文本内容执行该命令, 将取消倾斜 + * @example + * ```javascript + * //editor是编辑器实例 + * //对当前选中的文本内容执行斜体操作 + * //第一次操作, 文本内容将变成斜体 + * editor.execCommand( 'italic' ); + * + * //再次对同一文本内容执行, 则文本内容将恢复正常 + * editor.execCommand( 'italic' ); + * ``` + */ + + /** + * 下标文本,与“superscript”命令互斥 + * @command subscript + * @method execCommand + * @remind 把选中的文本内容切换成下标文本, 如果当前选中的文本已经是下标, 则该操作会把文本内容还原成正常文本 + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * //editor是编辑器实例 + * //对当前选中的文本内容执行下标操作 + * //第一次操作, 文本内容将变成下标文本 + * editor.execCommand( 'subscript' ); + * + * //再次对同一文本内容执行, 则文本内容将恢复正常 + * editor.execCommand( 'subscript' ); + * ``` + */ + + /** + * 上标文本,与“subscript”命令互斥 + * @command superscript + * @method execCommand + * @remind 把选中的文本内容切换成上标文本, 如果当前选中的文本已经是上标, 则该操作会把文本内容还原成正常文本 + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * //editor是编辑器实例 + * //对当前选中的文本内容执行上标操作 + * //第一次操作, 文本内容将变成上标文本 + * editor.execCommand( 'superscript' ); + * + * //再次对同一文本内容执行, 则文本内容将恢复正常 + * editor.execCommand( 'superscript' ); + * ``` + */ + var basestyles = { + 'bold':['strong','b'], + 'italic':['em','i'], + 'subscript':['sub'], + 'superscript':['sup'] + }, + getObj = function(editor,tagNames){ + return domUtils.filterNodeList(editor.selection.getStartElementPath(),tagNames); + }, + me = this; + //添加快捷键 + me.addshortcutkey({ + "Bold" : "ctrl+66",//^B + "Italic" : "ctrl+73", //^I + "Underline" : "ctrl+85"//^U + }); + me.addInputRule(function(root){ + utils.each(root.getNodesByTagName('b i'),function(node){ + switch (node.tagName){ + case 'b': + node.tagName = 'strong'; + break; + case 'i': + node.tagName = 'em'; + } + }); + }); + for ( var style in basestyles ) { + (function( cmd, tagNames ) { + me.commands[cmd] = { + execCommand : function( cmdName ) { + var range = me.selection.getRange(),obj = getObj(this,tagNames); + if ( range.collapsed ) { + if ( obj ) { + var tmpText = me.document.createTextNode(''); + range.insertNode( tmpText ).removeInlineStyle( tagNames ); + range.setStartBefore(tmpText); + domUtils.remove(tmpText); + } else { + var tmpNode = range.document.createElement( tagNames[0] ); + if(cmdName == 'superscript' || cmdName == 'subscript'){ + tmpText = me.document.createTextNode(''); + range.insertNode(tmpText) + .removeInlineStyle(['sub','sup']) + .setStartBefore(tmpText) + .collapse(true); + } + range.insertNode( tmpNode ).setStart( tmpNode, 0 ); + } + range.collapse( true ); + } else { + if(cmdName == 'superscript' || cmdName == 'subscript'){ + if(!obj || obj.tagName.toLowerCase() != cmdName){ + range.removeInlineStyle(['sub','sup']); + } + } + obj ? range.removeInlineStyle( tagNames ) : range.applyInlineStyle( tagNames[0] ); + } + range.select(); + }, + queryCommandState : function() { + return getObj(this,tagNames) ? 1 : 0; + } + }; + })( style, basestyles[style] ); + } +}; + + + +// plugins/elementpath.js +/** + * 选取路径命令 + * @file + */ +UE.plugins['elementpath'] = function(){ + var currentLevel, + tagNames, + me = this; + me.setOpt('elementPathEnabled',true); + if(!me.options.elementPathEnabled){ + return; + } + me.commands['elementpath'] = { + execCommand : function( cmdName, level ) { + var start = tagNames[level], + range = me.selection.getRange(); + currentLevel = level*1; + range.selectNode(start).select(); + }, + queryCommandValue : function() { + //产生一个副本,不能修改原来的startElementPath; + var parents = [].concat(this.selection.getStartElementPath()).reverse(), + names = []; + tagNames = parents; + for(var i=0,ci;ci=parents[i];i++){ + if(ci.nodeType == 3) { + continue; + } + var name = ci.tagName.toLowerCase(); + if(name == 'img' && ci.getAttribute('anchorname')){ + name = 'anchor'; + } + names[i] = name; + if(currentLevel == i){ + currentLevel = -1; + break; + } + } + return names; + } + }; +}; + + + +// plugins/formatmatch.js +/** + * 格式刷,只格式inline的 + * @file + * @since 1.2.6.1 + */ + +/** + * 格式刷 + * @command formatmatch + * @method execCommand + * @remind 该操作不能复制段落格式 + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * //editor是编辑器实例 + * //获取格式刷 + * editor.execCommand( 'formatmatch' ); + * ``` + */ +UE.plugins['formatmatch'] = function(){ + + var me = this, + list = [],img, + flag = 0; + + me.addListener('reset',function(){ + list = []; + flag = 0; + }); + + function addList(type,evt){ + + if(browser.webkit){ + var target = evt.target.tagName == 'IMG' ? evt.target : null; + } + + function addFormat(range){ + + if(text){ + range.selectNode(text); + } + return range.applyInlineStyle(list[list.length-1].tagName,null,list); + + } + + me.undoManger && me.undoManger.save(); + + var range = me.selection.getRange(), + imgT = target || range.getClosedNode(); + if(img && imgT && imgT.tagName == 'IMG'){ + //trace:964 + + imgT.style.cssText += ';float:' + (img.style.cssFloat || img.style.styleFloat ||'none') + ';display:' + (img.style.display||'inline'); + + img = null; + }else{ + if(!img){ + var collapsed = range.collapsed; + if(collapsed){ + var text = me.document.createTextNode('match'); + range.insertNode(text).select(); + + + } + me.__hasEnterExecCommand = true; + //不能把block上的属性干掉 + //trace:1553 + var removeFormatAttributes = me.options.removeFormatAttributes; + me.options.removeFormatAttributes = ''; + me.execCommand('removeformat'); + me.options.removeFormatAttributes = removeFormatAttributes; + me.__hasEnterExecCommand = false; + //trace:969 + range = me.selection.getRange(); + if(list.length){ + addFormat(range); + } + if(text){ + range.setStartBefore(text).collapse(true); + + } + range.select(); + text && domUtils.remove(text); + } + + } + + + + + me.undoManger && me.undoManger.save(); + me.removeListener('mouseup',addList); + flag = 0; + } + + me.commands['formatmatch'] = { + execCommand : function( cmdName ) { + + if(flag){ + flag = 0; + list = []; + me.removeListener('mouseup',addList); + return; + } + + + + var range = me.selection.getRange(); + img = range.getClosedNode(); + if(!img || img.tagName != 'IMG'){ + range.collapse(true).shrinkBoundary(); + var start = range.startContainer; + list = domUtils.findParents(start,true,function(node){ + return !domUtils.isBlockElm(node) && node.nodeType == 1; + }); + //a不能加入格式刷, 并且克隆节点 + for(var i=0,ci;ci=list[i];i++){ + if(ci.tagName == 'A'){ + list.splice(i,1); + break; + } + } + + } + + me.addListener('mouseup',addList); + flag = 1; + + + }, + queryCommandState : function() { + return flag; + }, + notNeedUndo : 1 + }; +}; + + + +// plugins/searchreplace.js +///import core +///commands 查找替换 +///commandsName SearchReplace +///commandsTitle 查询替换 +///commandsDialog dialogs\searchreplace +/** + * @description 查找替换 + * @author zhanyi + */ + +UE.plugin.register('searchreplace',function(){ + var me = this; + + var _blockElm = {'table':1,'tbody':1,'tr':1,'ol':1,'ul':1}; + + function findTextInString(textContent,opt,currentIndex){ + var str = opt.searchStr; + if(opt.dir == -1){ + textContent = textContent.split('').reverse().join(''); + str = str.split('').reverse().join(''); + currentIndex = textContent.length - currentIndex; + + } + var reg = new RegExp(str,'g' + (opt.casesensitive ? '' : 'i')),match; + + while(match = reg.exec(textContent)){ + if(match.index >= currentIndex){ + return opt.dir == -1 ? textContent.length - match.index - opt.searchStr.length : match.index; + } + } + return -1 + } + function findTextBlockElm(node,currentIndex,opt){ + var textContent,index,methodName = opt.all || opt.dir == 1 ? 'getNextDomNode' : 'getPreDomNode'; + if(domUtils.isBody(node)){ + node = node.firstChild; + } + var first = 1; + while(node){ + textContent = node.nodeType == 3 ? node.nodeValue : node[browser.ie ? 'innerText' : 'textContent']; + index = findTextInString(textContent,opt,currentIndex ); + first = 0; + if(index!=-1){ + return { + 'node':node, + 'index':index + } + } + node = domUtils[methodName](node); + while(node && _blockElm[node.nodeName.toLowerCase()]){ + node = domUtils[methodName](node,true); + } + if(node){ + currentIndex = opt.dir == -1 ? (node.nodeType == 3 ? node.nodeValue : node[browser.ie ? 'innerText' : 'textContent']).length : 0; + } + + } + } + function findNTextInBlockElm(node,index,str){ + var currentIndex = 0, + currentNode = node.firstChild, + currentNodeLength = 0, + result; + while(currentNode){ + if(currentNode.nodeType == 3){ + currentNodeLength = currentNode.nodeValue.replace(/(^[\t\r\n]+)|([\t\r\n]+$)/,'').length; + currentIndex += currentNodeLength; + if(currentIndex >= index){ + return { + 'node':currentNode, + 'index': currentNodeLength - (currentIndex - index) + } + } + }else if(!dtd.$empty[currentNode.tagName]){ + currentNodeLength = currentNode[browser.ie ? 'innerText' : 'textContent'].replace(/(^[\t\r\n]+)|([\t\r\n]+$)/,'').length + currentIndex += currentNodeLength; + if(currentIndex >= index){ + result = findNTextInBlockElm(currentNode,currentNodeLength - (currentIndex - index),str); + if(result){ + return result; + } + } + } + currentNode = domUtils.getNextDomNode(currentNode); + + } + } + + function searchReplace(me,opt){ + + var rng = me.selection.getRange(), + startBlockNode, + searchStr = opt.searchStr, + span = me.document.createElement('span'); + span.innerHTML = '$$ueditor_searchreplace_key$$'; + + rng.shrinkBoundary(true); + + //判断是不是第一次选中 + if(!rng.collapsed){ + rng.select(); + var rngText = me.selection.getText(); + if(new RegExp('^' + opt.searchStr + '$',(opt.casesensitive ? '' : 'i')).test(rngText)){ + if(opt.replaceStr != undefined){ + replaceText(rng,opt.replaceStr); + rng.select(); + return true; + }else{ + rng.collapse(opt.dir == -1) + } + + } + } + + + rng.insertNode(span); + rng.enlargeToBlockElm(true); + startBlockNode = rng.startContainer; + var currentIndex = startBlockNode[browser.ie ? 'innerText' : 'textContent'].indexOf('$$ueditor_searchreplace_key$$'); + rng.setStartBefore(span); + domUtils.remove(span); + var result = findTextBlockElm(startBlockNode,currentIndex,opt); + if(result){ + var rngStart = findNTextInBlockElm(result.node,result.index,searchStr); + var rngEnd = findNTextInBlockElm(result.node,result.index + searchStr.length,searchStr); + rng.setStart(rngStart.node,rngStart.index).setEnd(rngEnd.node,rngEnd.index); + + if(opt.replaceStr !== undefined){ + replaceText(rng,opt.replaceStr) + } + rng.select(); + return true; + }else{ + rng.setCursor() + } + + } + function replaceText(rng,str){ + + str = me.document.createTextNode(str); + rng.deleteContents().insertNode(str); + + } + return { + commands:{ + 'searchreplace':{ + execCommand:function(cmdName,opt){ + utils.extend(opt,{ + all : false, + casesensitive : false, + dir : 1 + },true); + var num = 0; + if(opt.all){ + + var rng = me.selection.getRange(), + first = me.body.firstChild; + if(first && first.nodeType == 1){ + rng.setStart(first,0); + rng.shrinkBoundary(true); + }else if(first.nodeType == 3){ + rng.setStartBefore(first) + } + rng.collapse(true).select(true); + if(opt.replaceStr !== undefined){ + me.fireEvent('saveScene'); + } + while(searchReplace(this,opt)){ + num++; + } + if(num){ + me.fireEvent('saveScene'); + } + }else{ + if(opt.replaceStr !== undefined){ + me.fireEvent('saveScene'); + } + if(searchReplace(this,opt)){ + num++ + } + if(num){ + me.fireEvent('saveScene'); + } + + } + + return num; + }, + notNeedUndo:1 + } + } + } +}); + +// plugins/customstyle.js +/** + * 自定义样式 + * @file + * @since 1.2.6.1 + */ + +/** + * 根据config配置文件里“customstyle”选项的值对匹配的标签执行样式替换。 + * @command customstyle + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'customstyle' ); + * ``` + */ +UE.plugins['customstyle'] = function() { + var me = this; + me.setOpt({ 'customstyle':[ + {tag:'h1',name:'tc', style:'font-size:32px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;margin:0 0 20px 0;'}, + {tag:'h1',name:'tl', style:'font-size:32px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:left;margin:0 0 10px 0;'}, + {tag:'span',name:'im', style:'font-size:16px;font-style:italic;font-weight:bold;line-height:18px;'}, + {tag:'span',name:'hi', style:'font-size:16px;font-style:italic;font-weight:bold;color:rgb(51, 153, 204);line-height:18px;'} + ]}); + me.commands['customstyle'] = { + execCommand : function(cmdName, obj) { + var me = this, + tagName = obj.tag, + node = domUtils.findParent(me.selection.getStart(), function(node) { + return node.getAttribute('label'); + }, true), + range,bk,tmpObj = {}; + for (var p in obj) { + if(obj[p]!==undefined) + tmpObj[p] = obj[p]; + } + delete tmpObj.tag; + if (node && node.getAttribute('label') == obj.label) { + range = this.selection.getRange(); + bk = range.createBookmark(); + if (range.collapsed) { + //trace:1732 删掉自定义标签,要有p来回填站位 + if(dtd.$block[node.tagName]){ + var fillNode = me.document.createElement('p'); + domUtils.moveChild(node, fillNode); + node.parentNode.insertBefore(fillNode, node); + domUtils.remove(node); + }else{ + domUtils.remove(node,true); + } + + } else { + + var common = domUtils.getCommonAncestor(bk.start, bk.end), + nodes = domUtils.getElementsByTagName(common, tagName); + if(new RegExp(tagName,'i').test(common.tagName)){ + nodes.push(common); + } + for (var i = 0,ni; ni = nodes[i++];) { + if (ni.getAttribute('label') == obj.label) { + var ps = domUtils.getPosition(ni, bk.start),pe = domUtils.getPosition(ni, bk.end); + if ((ps & domUtils.POSITION_FOLLOWING || ps & domUtils.POSITION_CONTAINS) + && + (pe & domUtils.POSITION_PRECEDING || pe & domUtils.POSITION_CONTAINS) + ) + if (dtd.$block[tagName]) { + var fillNode = me.document.createElement('p'); + domUtils.moveChild(ni, fillNode); + ni.parentNode.insertBefore(fillNode, ni); + } + domUtils.remove(ni, true); + } + } + node = domUtils.findParent(common, function(node) { + return node.getAttribute('label') == obj.label; + }, true); + if (node) { + + domUtils.remove(node, true); + + } + + } + range.moveToBookmark(bk).select(); + } else { + if (dtd.$block[tagName]) { + this.execCommand('paragraph', tagName, tmpObj,'customstyle'); + range = me.selection.getRange(); + if (!range.collapsed) { + range.collapse(); + node = domUtils.findParent(me.selection.getStart(), function(node) { + return node.getAttribute('label') == obj.label; + }, true); + var pNode = me.document.createElement('p'); + domUtils.insertAfter(node, pNode); + domUtils.fillNode(me.document, pNode); + range.setStart(pNode, 0).setCursor(); + } + } else { + + range = me.selection.getRange(); + if (range.collapsed) { + node = me.document.createElement(tagName); + domUtils.setAttributes(node, tmpObj); + range.insertNode(node).setStart(node, 0).setCursor(); + + return; + } + + bk = range.createBookmark(); + range.applyInlineStyle(tagName, tmpObj).moveToBookmark(bk).select(); + } + } + + }, + queryCommandValue : function() { + var parent = domUtils.filterNodeList( + this.selection.getStartElementPath(), + function(node){return node.getAttribute('label')} + ); + return parent ? parent.getAttribute('label') : ''; + } + }; + //当去掉customstyle是,如果是块元素,用p代替 + me.addListener('keyup', function(type, evt) { + var keyCode = evt.keyCode || evt.which; + + if (keyCode == 32 || keyCode == 13) { + var range = me.selection.getRange(); + if (range.collapsed) { + var node = domUtils.findParent(me.selection.getStart(), function(node) { + return node.getAttribute('label'); + }, true); + if (node && dtd.$block[node.tagName] && domUtils.isEmptyNode(node)) { + var p = me.document.createElement('p'); + domUtils.insertAfter(node, p); + domUtils.fillNode(me.document, p); + domUtils.remove(node); + range.setStart(p, 0).setCursor(); + + + } + } + } + }); +}; + +// plugins/catchremoteimage.js +///import core +///commands 远程图片抓取 +///commandsName catchRemoteImage,catchremoteimageenable +///commandsTitle 远程图片抓取 +/** + * 远程图片抓取,当开启本插件时所有不符合本地域名的图片都将被抓取成为本地服务器上的图片 + */ +UE.plugins['catchremoteimage'] = function () { + var me = this, + ajax = UE.ajax; + + /* 设置默认值 */ + if (me.options.catchRemoteImageEnable === false) return; + me.setOpt({ + catchRemoteImageEnable: false + }); + + me.addListener("afterpaste", function () { + me.fireEvent("catchRemoteImage"); + }); + + me.addListener("catchRemoteImage", function () { + + var catcherLocalDomain = me.getOpt('catcherLocalDomain'), + catcherActionUrl = me.getActionUrl(me.getOpt('catcherActionName')), + catcherUrlPrefix = me.getOpt('catcherUrlPrefix'), + catcherFieldName = me.getOpt('catcherFieldName'); + + var remoteImages = [], + imgs = domUtils.getElementsByTagName(me.document, "img"), + test = function (src, urls) { + if (src.indexOf(location.host) != -1 || /(^\.)|(^\/)/.test(src)) { + return true; + } + if (urls) { + for (var j = 0, url; url = urls[j++];) { + if (src.indexOf(url) !== -1) { + return true; + } + } + } + return false; + }; + + for (var i = 0, ci; ci = imgs[i++];) { + if (ci.getAttribute("word_img")) { + continue; + } + var src = ci.getAttribute("_src") || ci.src || ""; + if (/^(https?|ftp):/i.test(src) && !test(src, catcherLocalDomain)) { + remoteImages.push(src); + } + } + + if (remoteImages.length) { + catchremoteimage(remoteImages, { + //成功抓取 + success: function (r) { + try { + var info = r.state !== undefined ? r:eval("(" + r.responseText + ")"); + } catch (e) { + return; + } + + /* 获取源路径和新路径 */ + var i, j, ci, cj, oldSrc, newSrc, list = info.list; + + for (i = 0; ci = imgs[i++];) { + oldSrc = ci.getAttribute("_src") || ci.src || ""; + for (j = 0; cj = list[j++];) { + if (oldSrc == cj.source && cj.state == "SUCCESS") { //抓取失败时不做替换处理 + newSrc = catcherUrlPrefix + cj.url; + domUtils.setAttributes(ci, { + "src": newSrc, + "_src": newSrc + }); + break; + } + } + } + me.fireEvent('catchremotesuccess') + }, + //回调失败,本次请求超时 + error: function () { + me.fireEvent("catchremoteerror"); + } + }); + } + + function catchremoteimage(imgs, callbacks) { + var params = utils.serializeParam(me.queryCommandValue('serverparam')) || '', + url = utils.formatUrl(catcherActionUrl + (catcherActionUrl.indexOf('?') == -1 ? '?':'&') + params), + isJsonp = utils.isCrossDomainUrl(url), + opt = { + 'method': 'POST', + 'dataType': isJsonp ? 'jsonp':'', + 'timeout': 60000, //单位:毫秒,回调请求超时设置。目标用户如果网速不是很快的话此处建议设置一个较大的数值 + 'onsuccess': callbacks["success"], + 'onerror': callbacks["error"] + }; + opt[catcherFieldName] = imgs; + ajax.request(url, opt); + } + + }); +}; + +// plugins/snapscreen.js +/** + * 截屏插件,为UEditor提供插入支持 + * @file + * @since 1.4.2 + */ +UE.plugin.register('snapscreen', function (){ + + var me = this; + var snapplugin; + + function getLocation(url){ + var search, + a = document.createElement('a'), + params = utils.serializeParam(me.queryCommandValue('serverparam')) || ''; + + a.href = url; + if (browser.ie) { + a.href = a.href; + } + + + search = a.search; + if (params) { + search = search + (search.indexOf('?') == -1 ? '?':'&')+ params; + search = search.replace(/[&]+/ig, '&'); + } + return { + 'port': a.port, + 'hostname': a.hostname, + 'path': a.pathname + search || + a.hash + } + } + + return { + commands:{ + /** + * 字体背景颜色 + * @command snapscreen + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand('snapscreen'); + * ``` + */ + 'snapscreen':{ + execCommand:function (cmd) { + var url, local, res; + var lang = me.getLang("snapScreen_plugin"); + + if(!snapplugin){ + var container = me.container; + var doc = me.container.ownerDocument || me.container.document; + snapplugin = doc.createElement("object"); + try{snapplugin.type = "application/x-pluginbaidusnap";}catch(e){ + return; + } + snapplugin.style.cssText = "position:absolute;left:-9999px;width:0;height:0;"; + snapplugin.setAttribute("width","0"); + snapplugin.setAttribute("height","0"); + container.appendChild(snapplugin); + } + + function onSuccess(rs){ + try{ + rs = eval("("+ rs +")"); + if(rs.state == 'SUCCESS'){ + var opt = me.options; + me.execCommand('insertimage', { + src: opt.snapscreenUrlPrefix + rs.url, + _src: opt.snapscreenUrlPrefix + rs.url, + alt: rs.title || '', + floatStyle: opt.snapscreenImgAlign + }); + } else { + alert(rs.state); + } + }catch(e){ + alert(lang.callBackErrorMsg); + } + } + url = me.getActionUrl(me.getOpt('snapscreenActionName')); + local = getLocation(url); + setTimeout(function () { + try{ + res =snapplugin.saveSnapshot(local.hostname, local.path, local.port); + }catch(e){ + me.ui._dialogs['snapscreenDialog'].open(); + return; + } + + onSuccess(res); + }, 50); + }, + queryCommandState: function(){ + return (navigator.userAgent.indexOf("Windows",0) != -1) ? 0:-1; + } + } + } + } +}); + + +// plugins/insertparagraph.js +/** + * 插入段落 + * @file + * @since 1.2.6.1 + */ + + +/** + * 插入段落 + * @command insertparagraph + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * //editor是编辑器实例 + * editor.execCommand( 'insertparagraph' ); + * ``` + */ + +UE.commands['insertparagraph'] = { + execCommand : function( cmdName,front) { + var me = this, + range = me.selection.getRange(), + start = range.startContainer,tmpNode; + while(start ){ + if(domUtils.isBody(start)){ + break; + } + tmpNode = start; + start = start.parentNode; + } + if(tmpNode){ + var p = me.document.createElement('p'); + if(front){ + tmpNode.parentNode.insertBefore(p,tmpNode) + }else{ + tmpNode.parentNode.insertBefore(p,tmpNode.nextSibling) + } + domUtils.fillNode(me.document,p); + range.setStart(p,0).setCursor(false,true); + } + } +}; + + + +// plugins/webapp.js +/** + * 百度应用 + * @file + * @since 1.2.6.1 + */ + + +/** + * 插入百度应用 + * @command webapp + * @method execCommand + * @remind 需要百度APPKey + * @remind 百度应用主页: http://app.baidu.com/ + * @param { Object } appOptions 应用所需的参数项, 支持的key有: title=>应用标题, width=>应用容器宽度, + * height=>应用容器高度,logo=>应用logo,url=>应用地址 + * @example + * ```javascript + * //editor是编辑器实例 + * //在编辑器里插入一个“植物大战僵尸”的APP + * editor.execCommand( 'webapp' , { + * title: '植物大战僵尸', + * width: 560, + * height: 465, + * logo: '应用展示的图片', + * url: '百度应用的地址' + * } ); + * ``` + */ + +//UE.plugins['webapp'] = function () { +// var me = this; +// function createInsertStr( obj, toIframe, addParagraph ) { +// return !toIframe ? +// (addParagraph ? '

    ' : '') + '' + +// (addParagraph ? '

    ' : '') +// : +// ''; +// } +// +// function switchImgAndIframe( img2frame ) { +// var tmpdiv, +// nodes = domUtils.getElementsByTagName( me.document, !img2frame ? "iframe" : "img" ); +// for ( var i = 0, node; node = nodes[i++]; ) { +// if ( node.className != "edui-faked-webapp" ){ +// continue; +// } +// tmpdiv = me.document.createElement( "div" ); +// tmpdiv.innerHTML = createInsertStr( img2frame ? {url:node.getAttribute( "_url" ), width:node.width, height:node.height,title:node.title,logo:node.style.backgroundImage.replace("url(","").replace(")","")} : {url:node.getAttribute( "src", 2 ),title:node.title, width:node.width, height:node.height,logo:node.getAttribute("logo_url")}, img2frame ? true : false,false ); +// node.parentNode.replaceChild( tmpdiv.firstChild, node ); +// } +// } +// +// me.addListener( "beforegetcontent", function () { +// switchImgAndIframe( true ); +// } ); +// me.addListener( 'aftersetcontent', function () { +// switchImgAndIframe( false ); +// } ); +// me.addListener( 'aftergetcontent', function ( cmdName ) { +// if ( cmdName == 'aftergetcontent' && me.queryCommandState( 'source' ) ){ +// return; +// } +// switchImgAndIframe( false ); +// } ); +// +// me.commands['webapp'] = { +// execCommand:function ( cmd, obj ) { +// me.execCommand( "inserthtml", createInsertStr( obj, false,true ) ); +// } +// }; +//}; + +UE.plugin.register('webapp', function (){ + var me = this; + function createInsertStr(obj,toEmbed){ + return !toEmbed ? + '' + : + '' + + } + return { + outputRule: function(root){ + utils.each(root.getNodesByTagName('img'),function(node){ + var html; + if(node.getAttr('class') == 'edui-faked-webapp'){ + html = createInsertStr({ + title:node.getAttr('title'), + 'width':node.getAttr('width'), + 'height':node.getAttr('height'), + 'align':node.getAttr('align'), + 'cssfloat':node.getStyle('float'), + 'url':node.getAttr("_url"), + 'logo':node.getAttr('_logo_url') + },true); + var embed = UE.uNode.createElement(html); + node.parentNode.replaceChild(embed,node); + } + }) + }, + inputRule:function(root){ + utils.each(root.getNodesByTagName('iframe'),function(node){ + if(node.getAttr('class') == 'edui-faked-webapp'){ + var img = UE.uNode.createElement(createInsertStr({ + title:node.getAttr('title'), + 'width':node.getAttr('width'), + 'height':node.getAttr('height'), + 'align':node.getAttr('align'), + 'cssfloat':node.getStyle('float'), + 'url':node.getAttr("src"), + 'logo':node.getAttr('logo_url') + })); + node.parentNode.replaceChild(img,node); + } + }) + + }, + commands:{ + /** + * 插入百度应用 + * @command webapp + * @method execCommand + * @remind 需要百度APPKey + * @remind 百度应用主页: http://app.baidu.com/ + * @param { Object } appOptions 应用所需的参数项, 支持的key有: title=>应用标题, width=>应用容器宽度, + * height=>应用容器高度,logo=>应用logo,url=>应用地址 + * @example + * ```javascript + * //editor是编辑器实例 + * //在编辑器里插入一个“植物大战僵尸”的APP + * editor.execCommand( 'webapp' , { + * title: '植物大战僵尸', + * width: 560, + * height: 465, + * logo: '应用展示的图片', + * url: '百度应用的地址' + * } ); + * ``` + */ + 'webapp':{ + execCommand:function (cmd, obj) { + + var me = this, + str = createInsertStr(utils.extend(obj,{ + align:'none' + }), false); + me.execCommand("inserthtml",str); + }, + queryCommandState:function () { + var me = this, + img = me.selection.getRange().getClosedNode(), + flag = img && (img.className == "edui-faked-webapp"); + return flag ? 1 : 0; + } + } + } + } +}); + +// plugins/template.js +///import core +///import plugins\inserthtml.js +///import plugins\cleardoc.js +///commands 模板 +///commandsName template +///commandsTitle 模板 +///commandsDialog dialogs\template +UE.plugins['template'] = function () { + UE.commands['template'] = { + execCommand:function (cmd, obj) { + obj.html && this.execCommand("inserthtml", obj.html); + } + }; + this.addListener("click", function (type, evt) { + var el = evt.target || evt.srcElement, + range = this.selection.getRange(); + var tnode = domUtils.findParent(el, function (node) { + if (node.className && domUtils.hasClass(node, "ue_t")) { + return node; + } + }, true); + tnode && range.selectNode(tnode).shrinkBoundary().select(); + }); + this.addListener("keydown", function (type, evt) { + var range = this.selection.getRange(); + if (!range.collapsed) { + if (!evt.ctrlKey && !evt.metaKey && !evt.shiftKey && !evt.altKey) { + var tnode = domUtils.findParent(range.startContainer, function (node) { + if (node.className && domUtils.hasClass(node, "ue_t")) { + return node; + } + }, true); + if (tnode) { + domUtils.removeClasses(tnode, ["ue_t"]); + } + } + } + }); +}; + + +// plugins/music.js +/** + * 插入音乐命令 + * @file + */ +UE.plugin.register('music', function (){ + var me = this; + function creatInsertStr(url,width,height,align,cssfloat,toEmbed){ + return !toEmbed ? + '' + : + ''; + } + return { + outputRule: function(root){ + utils.each(root.getNodesByTagName('img'),function(node){ + var html; + if(node.getAttr('class') == 'edui-faked-music'){ + var cssfloat = node.getStyle('float'); + var align = node.getAttr('align'); + html = creatInsertStr(node.getAttr("_url"), node.getAttr('width'), node.getAttr('height'), align, cssfloat, true); + var embed = UE.uNode.createElement(html); + node.parentNode.replaceChild(embed,node); + } + }) + }, + inputRule:function(root){ + utils.each(root.getNodesByTagName('embed'),function(node){ + if(node.getAttr('class') == 'edui-faked-music'){ + var cssfloat = node.getStyle('float'); + var align = node.getAttr('align'); + html = creatInsertStr(node.getAttr("src"), node.getAttr('width'), node.getAttr('height'), align, cssfloat,false); + var img = UE.uNode.createElement(html); + node.parentNode.replaceChild(img,node); + } + }) + + }, + commands:{ + /** + * 插入音乐 + * @command music + * @method execCommand + * @param { Object } musicOptions 插入音乐的参数项, 支持的key有: url=>音乐地址; + * width=>音乐容器宽度;height=>音乐容器高度;align=>音乐文件的对齐方式, 可选值有: left, center, right, none + * @example + * ```javascript + * //editor是编辑器实例 + * //在编辑器里插入一个“植物大战僵尸”的APP + * editor.execCommand( 'music' , { + * width: 400, + * height: 95, + * align: "center", + * url: "音乐地址" + * } ); + * ``` + */ + 'music':{ + execCommand:function (cmd, musicObj) { + var me = this, + str = creatInsertStr(musicObj.url, musicObj.width || 400, musicObj.height || 95, "none", false); + me.execCommand("inserthtml",str); + }, + queryCommandState:function () { + var me = this, + img = me.selection.getRange().getClosedNode(), + flag = img && (img.className == "edui-faked-music"); + return flag ? 1 : 0; + } + } + } + } +}); + +// plugins/autoupload.js +/** + * @description + * 1.拖放文件到编辑区域,自动上传并插入到选区 + * 2.插入粘贴板的图片,自动上传并插入到选区 + * @author Jinqn + * @date 2013-10-14 + */ +UE.plugin.register('autoupload', function (){ + + function sendAndInsertFile(file, editor) { + var me = editor; + //模拟数据 + var fieldName, urlPrefix, maxSize, allowFiles, actionUrl, + loadingHtml, errorHandler, successHandler, + filetype = /image\/\w+/i.test(file.type) ? 'image':'file', + loadingId = 'loading_' + (+new Date()).toString(36); + + fieldName = me.getOpt(filetype + 'FieldName'); + urlPrefix = me.getOpt(filetype + 'UrlPrefix'); + maxSize = me.getOpt(filetype + 'MaxSize'); + allowFiles = me.getOpt(filetype + 'AllowFiles'); + actionUrl = me.getActionUrl(me.getOpt(filetype + 'ActionName')); + errorHandler = function(title) { + var loader = me.document.getElementById(loadingId); + loader && domUtils.remove(loader); + me.fireEvent('showmessage', { + 'id': loadingId, + 'content': title, + 'type': 'error', + 'timeout': 4000 + }); + }; + + if (filetype == 'image') { + loadingHtml = ''; + successHandler = function(data) { + var link = urlPrefix + data.url, + loader = me.document.getElementById(loadingId); + if (loader) { + loader.setAttribute('src', link); + loader.setAttribute('_src', link); + loader.setAttribute('title', data.title || ''); + loader.setAttribute('alt', data.original || ''); + loader.removeAttribute('id'); + domUtils.removeClasses(loader, 'loadingclass'); + } + }; + } else { + loadingHtml = '

    ' + + '' + + '

    '; + successHandler = function(data) { + var link = urlPrefix + data.url, + loader = me.document.getElementById(loadingId); + + var rng = me.selection.getRange(), + bk = rng.createBookmark(); + rng.selectNode(loader).select(); + me.execCommand('insertfile', {'url': link}); + rng.moveToBookmark(bk).select(); + }; + } + + /* 插入loading的占位符 */ + me.execCommand('inserthtml', loadingHtml); + + /* 判断后端配置是否没有加载成功 */ + if (!me.getOpt(filetype + 'ActionName')) { + errorHandler(me.getLang('autoupload.errorLoadConfig')); + return; + } + /* 判断文件大小是否超出限制 */ + if(file.size > maxSize) { + errorHandler(me.getLang('autoupload.exceedSizeError')); + return; + } + /* 判断文件格式是否超出允许 */ + var fileext = file.name ? file.name.substr(file.name.lastIndexOf('.')):''; + if ((fileext && filetype != 'image') || (allowFiles && (allowFiles.join('') + '.').indexOf(fileext.toLowerCase() + '.') == -1)) { + errorHandler(me.getLang('autoupload.exceedTypeError')); + return; + } + + /* 创建Ajax并提交 */ + var xhr = new XMLHttpRequest(), + fd = new FormData(), + params = utils.serializeParam(me.queryCommandValue('serverparam')) || '', + url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + params); + + fd.append(fieldName, file, file.name || ('blob.' + file.type.substr('image/'.length))); + fd.append('type', 'ajax'); + xhr.open("post", url, true); + xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + xhr.addEventListener('load', function (e) { + try{ + var json = (new Function("return " + utils.trim(e.target.response)))(); + if (json.state == 'SUCCESS' && json.url) { + successHandler(json); + } else { + errorHandler(json.state); + } + }catch(er){ + errorHandler(me.getLang('autoupload.loadError')); + } + }); + xhr.send(fd); + } + + function getPasteImage(e){ + return e.clipboardData && e.clipboardData.items && e.clipboardData.items.length == 1 && /^image\//.test(e.clipboardData.items[0].type) ? e.clipboardData.items:null; + } + function getDropImage(e){ + return e.dataTransfer && e.dataTransfer.files ? e.dataTransfer.files:null; + } + + return { + outputRule: function(root){ + utils.each(root.getNodesByTagName('img'),function(n){ + if (/\b(loaderrorclass)|(bloaderrorclass)\b/.test(n.getAttr('class'))) { + n.parentNode.removeChild(n); + } + }); + utils.each(root.getNodesByTagName('p'),function(n){ + if (/\bloadpara\b/.test(n.getAttr('class'))) { + n.parentNode.removeChild(n); + } + }); + }, + bindEvents:{ + //插入粘贴板的图片,拖放插入图片 + 'ready':function(e){ + var me = this; + if(window.FormData && window.FileReader) { + domUtils.on(me.body, 'paste drop', function(e){ + var hasImg = false, + items; + //获取粘贴板文件列表或者拖放文件列表 + items = e.type == 'paste' ? getPasteImage(e):getDropImage(e); + if(items){ + var len = items.length, + file; + while (len--){ + file = items[len]; + if(file.getAsFile) file = file.getAsFile(); + if(file && file.size > 0) { + sendAndInsertFile(file, me); + hasImg = true; + } + } + hasImg && e.preventDefault(); + } + + }); + //取消拖放图片时出现的文字光标位置提示 + domUtils.on(me.body, 'dragover', function (e) { + if(e.dataTransfer.types[0] == 'Files') { + e.preventDefault(); + } + }); + + //设置loading的样式 + utils.cssRule('loading', + '.loadingclass{display:inline-block;cursor:default;background: url(\'' + + this.options.themePath + + this.options.theme +'/images/loading.gif\') no-repeat center center transparent;border:1px solid #cccccc;margin-left:1px;height: 22px;width: 22px;}\n' + + '.loaderrorclass{display:inline-block;cursor:default;background: url(\'' + + this.options.themePath + + this.options.theme +'/images/loaderror.png\') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;' + + '}', + this.document); + } + } + } + } +}); + +// plugins/autosave.js +UE.plugin.register('autosave', function (){ + + var me = this, + //无限循环保护 + lastSaveTime = new Date(), + //最小保存间隔时间 + MIN_TIME = 20, + //auto save key + saveKey = null; + + function save ( editor ) { + + var saveData; + + if ( new Date() - lastSaveTime < MIN_TIME ) { + return; + } + + if ( !editor.hasContents() ) { + //这里不能调用命令来删除, 会造成事件死循环 + saveKey && me.removePreferences( saveKey ); + return; + } + + lastSaveTime = new Date(); + + editor._saveFlag = null; + + saveData = me.body.innerHTML; + + if ( editor.fireEvent( "beforeautosave", { + content: saveData + } ) === false ) { + return; + } + + me.setPreferences( saveKey, saveData ); + + editor.fireEvent( "afterautosave", { + content: saveData + } ); + + } + + return { + defaultOptions: { + //默认间隔时间 + saveInterval: 500 + }, + bindEvents:{ + 'ready':function(){ + + var _suffix = "-drafts-data", + key = null; + + if ( me.key ) { + key = me.key + _suffix; + } else { + key = ( me.container.parentNode.id || 'ue-common' ) + _suffix; + } + + //页面地址+编辑器ID 保持唯一 + saveKey = ( location.protocol + location.host + location.pathname ).replace( /[.:\/]/g, '_' ) + key; + + }, + + 'contentchange': function () { + + if ( !saveKey ) { + return; + } + + if ( me._saveFlag ) { + window.clearTimeout( me._saveFlag ); + } + + if ( me.options.saveInterval > 0 ) { + + me._saveFlag = window.setTimeout( function () { + + save( me ); + + }, me.options.saveInterval ); + + } else { + + save(me); + + } + + + } + }, + commands:{ + 'clearlocaldata':{ + execCommand:function (cmd, name) { + if ( saveKey && me.getPreferences( saveKey ) ) { + me.removePreferences( saveKey ) + } + }, + notNeedUndo: true, + ignoreContentChange:true + }, + + 'getlocaldata':{ + execCommand:function (cmd, name) { + return saveKey ? me.getPreferences( saveKey ) || '' : ''; + }, + notNeedUndo: true, + ignoreContentChange:true + }, + + 'drafts':{ + execCommand:function (cmd, name) { + if ( saveKey ) { + me.body.innerHTML = me.getPreferences( saveKey ) || '

    '+domUtils.fillHtml+'

    '; + me.focus(true); + } + }, + queryCommandState: function () { + return saveKey ? ( me.getPreferences( saveKey ) === null ? -1 : 0 ) : -1; + }, + notNeedUndo: true, + ignoreContentChange:true + } + } + } + +}); + +// plugins/charts.js +UE.plugin.register('charts', function (){ + + var me = this; + + return { + bindEvents: { + 'chartserror': function () { + } + }, + commands:{ + 'charts': { + execCommand: function ( cmd, data ) { + + var tableNode = domUtils.findParentByTagName(this.selection.getRange().startContainer, 'table', true), + flagText = [], + config = {}; + + if ( !tableNode ) { + return false; + } + + if ( !validData( tableNode ) ) { + me.fireEvent( "chartserror" ); + return false; + } + + config.title = data.title || ''; + config.subTitle = data.subTitle || ''; + config.xTitle = data.xTitle || ''; + config.yTitle = data.yTitle || ''; + config.suffix = data.suffix || ''; + config.tip = data.tip || ''; + //数据对齐方式 + config.dataFormat = data.tableDataFormat || ''; + //图表类型 + config.chartType = data.chartType || 0; + + for ( var key in config ) { + + if ( !config.hasOwnProperty( key ) ) { + continue; + } + + flagText.push( key+":"+config[ key ] ); + + } + + tableNode.setAttribute( "data-chart", flagText.join( ";" ) ); + domUtils.addClass( tableNode, "edui-charts-table" ); + + + + }, + queryCommandState: function ( cmd, name ) { + + var tableNode = domUtils.findParentByTagName(this.selection.getRange().startContainer, 'table', true); + return tableNode && validData( tableNode ) ? 0 : -1; + + } + } + }, + inputRule:function(root){ + utils.each(root.getNodesByTagName('table'),function( tableNode ){ + + if ( tableNode.getAttr("data-chart") !== undefined ) { + tableNode.setAttr("style"); + } + + }) + + }, + outputRule:function(root){ + utils.each(root.getNodesByTagName('table'),function( tableNode ){ + + if ( tableNode.getAttr("data-chart") !== undefined ) { + tableNode.setAttr("style", "display: none;"); + } + + }) + + } + } + + function validData ( table ) { + + var firstRows = null, + cellCount = 0; + + //行数不够 + if ( table.rows.length < 2 ) { + return false; + } + + //列数不够 + if ( table.rows[0].cells.length < 2 ) { + return false; + } + + //第一行所有cell必须是th + firstRows = table.rows[ 0 ].cells; + cellCount = firstRows.length; + + for ( var i = 0, cell; cell = firstRows[ i ]; i++ ) { + + if ( cell.tagName.toLowerCase() !== 'th' ) { + return false; + } + + } + + for ( var i = 1, row; row = table.rows[ i ]; i++ ) { + + //每行单元格数不匹配, 返回false + if ( row.cells.length != cellCount ) { + return false; + } + + //第一列不是th也返回false + if ( row.cells[0].tagName.toLowerCase() !== 'th' ) { + return false; + } + + for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) { + + var value = utils.trim( ( cell.innerText || cell.textContent || '' ) ); + + value = value.replace( new RegExp( UE.dom.domUtils.fillChar, 'g' ), '' ).replace( /^\s+|\s+$/g, '' ); + + //必须是数字 + if ( !/^\d*\.?\d+$/.test( value ) ) { + return false; + } + + } + + } + + return true; + + } + +}); + +// plugins/section.js +/** + * 目录大纲支持插件 + * @file + * @since 1.3.0 + */ +UE.plugin.register('section', function (){ + /* 目录节点对象 */ + function Section(option){ + this.tag = ''; + this.level = -1, + this.dom = null; + this.nextSection = null; + this.previousSection = null; + this.parentSection = null; + this.startAddress = []; + this.endAddress = []; + this.children = []; + } + function getSection(option) { + var section = new Section(); + return utils.extend(section, option); + } + function getNodeFromAddress(startAddress, root) { + var current = root; + for(var i = 0;i < startAddress.length; i++) { + if(!current.childNodes) return null; + current = current.childNodes[startAddress[i]]; + } + return current; + } + + var me = this; + + return { + bindMultiEvents:{ + type: 'aftersetcontent afterscencerestore', + handler: function(){ + me.fireEvent('updateSections'); + } + }, + bindEvents:{ + /* 初始化、拖拽、粘贴、执行setcontent之后 */ + 'ready': function (){ + me.fireEvent('updateSections'); + domUtils.on(me.body, 'drop paste', function(){ + me.fireEvent('updateSections'); + }); + }, + /* 执行paragraph命令之后 */ + 'afterexeccommand': function (type, cmd) { + if(cmd == 'paragraph') { + me.fireEvent('updateSections'); + } + }, + /* 部分键盘操作,触发updateSections事件 */ + 'keyup': function (type, e) { + var me = this, + range = me.selection.getRange(); + if(range.collapsed != true) { + me.fireEvent('updateSections'); + } else { + var keyCode = e.keyCode || e.which; + if(keyCode == 13 || keyCode == 8 || keyCode == 46) { + me.fireEvent('updateSections'); + } + } + } + }, + commands:{ + 'getsections': { + execCommand: function (cmd, levels) { + var levelFn = levels || ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']; + + for (var i = 0; i < levelFn.length; i++) { + if (typeof levelFn[i] == 'string') { + levelFn[i] = function(fn){ + return function(node){ + return node.tagName == fn.toUpperCase() + }; + }(levelFn[i]); + } else if (typeof levelFn[i] != 'function') { + levelFn[i] = function (node) { + return null; + } + } + } + function getSectionLevel(node) { + for (var i = 0; i < levelFn.length; i++) { + if (levelFn[i](node)) return i; + } + return -1; + } + + var me = this, + Directory = getSection({'level':-1, 'title':'root'}), + previous = Directory; + + function traversal(node, Directory) { + var level, + tmpSection = null, + parent, + child, + children = node.childNodes; + for (var i = 0, len = children.length; i < len; i++) { + child = children[i]; + level = getSectionLevel(child); + if (level >= 0) { + var address = me.selection.getRange().selectNode(child).createAddress(true).startAddress, + current = getSection({ + 'tag': child.tagName, + 'title': child.innerText || child.textContent || '', + 'level': level, + 'dom': child, + 'startAddress': utils.clone(address, []), + 'endAddress': utils.clone(address, []), + 'children': [] + }); + previous.nextSection = current; + current.previousSection = previous; + parent = previous; + while(level <= parent.level){ + parent = parent.parentSection; + } + current.parentSection = parent; + parent.children.push(current); + tmpSection = previous = current; + } else { + child.nodeType === 1 && traversal(child, Directory); + tmpSection && tmpSection.endAddress[tmpSection.endAddress.length - 1] ++; + } + } + } + traversal(me.body, Directory); + return Directory; + }, + notNeedUndo: true + }, + 'movesection': { + execCommand: function (cmd, sourceSection, targetSection, isAfter) { + + var me = this, + targetAddress, + target; + + if(!sourceSection || !targetSection || targetSection.level == -1) return; + + targetAddress = isAfter ? targetSection.endAddress:targetSection.startAddress; + target = getNodeFromAddress(targetAddress, me.body); + + /* 判断目标地址是否被源章节包含 */ + if(!targetAddress || !target || isContainsAddress(sourceSection.startAddress, sourceSection.endAddress, targetAddress)) return; + + var startNode = getNodeFromAddress(sourceSection.startAddress, me.body), + endNode = getNodeFromAddress(sourceSection.endAddress, me.body), + current, + nextNode; + + if(isAfter) { + current = endNode; + while ( current && !(domUtils.getPosition( startNode, current ) & domUtils.POSITION_FOLLOWING) ) { + nextNode = current.previousSibling; + domUtils.insertAfter(target, current); + if(current == startNode) break; + current = nextNode; + } + } else { + current = startNode; + while ( current && !(domUtils.getPosition( current, endNode ) & domUtils.POSITION_FOLLOWING) ) { + nextNode = current.nextSibling; + target.parentNode.insertBefore(current, target); + if(current == endNode) break; + current = nextNode; + } + } + + me.fireEvent('updateSections'); + + /* 获取地址的包含关系 */ + function isContainsAddress(startAddress, endAddress, addressTarget){ + var isAfterStartAddress = false, + isBeforeEndAddress = false; + for(var i = 0; i< startAddress.length; i++){ + if(i >= addressTarget.length) break; + if(addressTarget[i] > startAddress[i]) { + isAfterStartAddress = true; + break; + } else if(addressTarget[i] < startAddress[i]) { + break; + } + } + for(var i = 0; i< endAddress.length; i++){ + if(i >= addressTarget.length) break; + if(addressTarget[i] < startAddress[i]) { + isBeforeEndAddress = true; + break; + } else if(addressTarget[i] > startAddress[i]) { + break; + } + } + return isAfterStartAddress && isBeforeEndAddress; + } + } + }, + 'deletesection': { + execCommand: function (cmd, section, keepChildren) { + var me = this; + + if(!section) return; + + function getNodeFromAddress(startAddress) { + var current = me.body; + for(var i = 0;i < startAddress.length; i++) { + if(!current.childNodes) return null; + current = current.childNodes[startAddress[i]]; + } + return current; + } + + var startNode = getNodeFromAddress(section.startAddress), + endNode = getNodeFromAddress(section.endAddress), + current = startNode, + nextNode; + + if(!keepChildren) { + while ( current && domUtils.inDoc(endNode, me.document) && !(domUtils.getPosition( current, endNode ) & domUtils.POSITION_FOLLOWING) ) { + nextNode = current.nextSibling; + domUtils.remove(current); + current = nextNode; + } + } else { + domUtils.remove(current); + } + + me.fireEvent('updateSections'); + } + }, + 'selectsection': { + execCommand: function (cmd, section) { + if(!section && !section.dom) return false; + var me = this, + range = me.selection.getRange(), + address = { + 'startAddress':utils.clone(section.startAddress, []), + 'endAddress':utils.clone(section.endAddress, []) + }; + address.endAddress[address.endAddress.length - 1]++; + range.moveToAddress(address).select().scrollToView(); + return true; + }, + notNeedUndo: true + }, + 'scrolltosection': { + execCommand: function (cmd, section) { + if(!section && !section.dom) return false; + var me = this, + range = me.selection.getRange(), + address = { + 'startAddress':section.startAddress, + 'endAddress':section.endAddress + }; + address.endAddress[address.endAddress.length - 1]++; + range.moveToAddress(address).scrollToView(); + return true; + }, + notNeedUndo: true + } + } + } +}); + +// plugins/simpleupload.js +/** + * @description + * 简单上传:点击按钮,直接选择文件上传 + * @author Jinqn + * @date 2014-03-31 + */ +UE.plugin.register('simpleupload', function (){ + var me = this, + isLoaded = false, + containerBtn; + + function initUploadBtn(){ + var w = containerBtn.offsetWidth || 20, + h = containerBtn.offsetHeight || 20, + btnIframe = document.createElement('iframe'), + btnStyle = 'display:block;width:' + w + 'px;height:' + h + 'px;overflow:hidden;border:0;margin:0;padding:0;position:absolute;top:0;left:0;filter:alpha(opacity=0);-moz-opacity:0;-khtml-opacity: 0;opacity: 0;cursor:pointer;'; + + domUtils.on(btnIframe, 'load', function(){ + + var timestrap = (+new Date()).toString(36), + wrapper, + btnIframeDoc, + btnIframeBody; + + btnIframeDoc = (btnIframe.contentDocument || btnIframe.contentWindow.document); + btnIframeBody = btnIframeDoc.body; + wrapper = btnIframeDoc.createElement('div'); + + wrapper.innerHTML = '
    ' + + '' + + '
    ' + + ''; + + wrapper.className = 'edui-' + me.options.theme; + wrapper.id = me.ui.id + '_iframeupload'; + btnIframeBody.style.cssText = btnStyle; + btnIframeBody.style.width = w + 'px'; + btnIframeBody.style.height = h + 'px'; + btnIframeBody.appendChild(wrapper); + + if (btnIframeBody.parentNode) { + btnIframeBody.parentNode.style.width = w + 'px'; + btnIframeBody.parentNode.style.height = w + 'px'; + } + + var form = btnIframeDoc.getElementById('edui_form_' + timestrap); + var input = btnIframeDoc.getElementById('edui_input_' + timestrap); + var iframe = btnIframeDoc.getElementById('edui_iframe_' + timestrap); + + domUtils.on(input, 'change', function(){ + if(!input.value) return; + var loadingId = 'loading_' + (+new Date()).toString(36); + var params = utils.serializeParam(me.queryCommandValue('serverparam')) || ''; + + var imageActionUrl = me.getActionUrl(me.getOpt('imageActionName')); + var allowFiles = me.getOpt('imageAllowFiles'); + + me.focus(); + me.execCommand('inserthtml', ''); + + function callback(){ + try{ + var link, json, loader, + body = (iframe.contentDocument || iframe.contentWindow.document).body, + result = body.innerText || body.textContent || ''; + json = (new Function("return " + result))(); + link = me.options.imageUrlPrefix + json.url; + if(json.state == 'SUCCESS' && json.url) { + loader = me.document.getElementById(loadingId); + loader.setAttribute('src', link); + loader.setAttribute('_src', link); + loader.setAttribute('title', json.title || ''); + loader.setAttribute('alt', json.original || ''); + loader.removeAttribute('id'); + domUtils.removeClasses(loader, 'loadingclass'); + } else { + showErrorLoader && showErrorLoader(json.state); + } + }catch(er){ + showErrorLoader && showErrorLoader(me.getLang('simpleupload.loadError')); + } + form.reset(); + domUtils.un(iframe, 'load', callback); + } + function showErrorLoader(title){ + if(loadingId) { + var loader = me.document.getElementById(loadingId); + loader && domUtils.remove(loader); + me.fireEvent('showmessage', { + 'id': loadingId, + 'content': title, + 'type': 'error', + 'timeout': 4000 + }); + } + } + + /* 判断后端配置是否没有加载成功 */ + if (!me.getOpt('imageActionName')) { + errorHandler(me.getLang('autoupload.errorLoadConfig')); + return; + } + // 判断文件格式是否错误 + var filename = input.value, + fileext = filename ? filename.substr(filename.lastIndexOf('.')):''; + if (!fileext || (allowFiles && (allowFiles.join('') + '.').indexOf(fileext.toLowerCase() + '.') == -1)) { + showErrorLoader(me.getLang('simpleupload.exceedTypeError')); + return; + } + + domUtils.on(iframe, 'load', callback); + form.action = utils.formatUrl(imageActionUrl + (imageActionUrl.indexOf('?') == -1 ? '?':'&') + params); + form.submit(); + }); + + var stateTimer; + me.addListener('selectionchange', function () { + clearTimeout(stateTimer); + stateTimer = setTimeout(function() { + var state = me.queryCommandState('simpleupload'); + if (state == -1) { + input.disabled = 'disabled'; + } else { + input.disabled = false; + } + }, 400); + }); + isLoaded = true; + }); + + btnIframe.style.cssText = btnStyle; + containerBtn.appendChild(btnIframe); + } + + return { + bindEvents:{ + 'ready': function() { + //设置loading的样式 + utils.cssRule('loading', + '.loadingclass{display:inline-block;cursor:default;background: url(\'' + + this.options.themePath + + this.options.theme +'/images/loading.gif\') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}\n' + + '.loaderrorclass{display:inline-block;cursor:default;background: url(\'' + + this.options.themePath + + this.options.theme +'/images/loaderror.png\') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;' + + '}', + this.document); + }, + /* 初始化简单上传按钮 */ + 'simpleuploadbtnready': function(type, container) { + containerBtn = container; + me.afterConfigReady(initUploadBtn); + } + }, + outputRule: function(root){ + utils.each(root.getNodesByTagName('img'),function(n){ + if (/\b(loaderrorclass)|(bloaderrorclass)\b/.test(n.getAttr('class'))) { + n.parentNode.removeChild(n); + } + }); + }, + commands: { + 'simpleupload': { + queryCommandState: function () { + return isLoaded ? 0:-1; + } + } + } + } +}); + +// plugins/serverparam.js +/** + * 服务器提交的额外参数列表设置插件 + * @file + * @since 1.2.6.1 + */ +UE.plugin.register('serverparam', function (){ + + var me = this, + serverParam = {}; + + return { + commands:{ + /** + * 修改服务器提交的额外参数列表,清除所有项 + * @command serverparam + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand('serverparam'); + * editor.queryCommandValue('serverparam'); //返回空 + * ``` + */ + /** + * 修改服务器提交的额外参数列表,删除指定项 + * @command serverparam + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } key 要清除的属性 + * @example + * ```javascript + * editor.execCommand('serverparam', 'name'); //删除属性name + * ``` + */ + /** + * 修改服务器提交的额外参数列表,使用键值添加项 + * @command serverparam + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } key 要添加的属性 + * @param { String } value 要添加属性的值 + * @example + * ```javascript + * editor.execCommand('serverparam', 'name', 'hello'); + * editor.queryCommandValue('serverparam'); //返回对象 {'name': 'hello'} + * ``` + */ + /** + * 修改服务器提交的额外参数列表,传入键值对对象添加多项 + * @command serverparam + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { Object } key 传入的键值对对象 + * @example + * ```javascript + * editor.execCommand('serverparam', {'name': 'hello'}); + * editor.queryCommandValue('serverparam'); //返回对象 {'name': 'hello'} + * ``` + */ + /** + * 修改服务器提交的额外参数列表,使用自定义函数添加多项 + * @command serverparam + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { Function } key 自定义获取参数的函数 + * @example + * ```javascript + * editor.execCommand('serverparam', function(editor){ + * return {'key': 'value'}; + * }); + * editor.queryCommandValue('serverparam'); //返回对象 {'key': 'value'} + * ``` + */ + + /** + * 获取服务器提交的额外参数列表 + * @command serverparam + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.queryCommandValue( 'serverparam' ); //返回对象 {'key': 'value'} + * ``` + */ + 'serverparam':{ + execCommand:function (cmd, key, value) { + if (key === undefined || key === null) { //不传参数,清空列表 + serverParam = {}; + } else if (utils.isString(key)) { //传入键值 + if(value === undefined || value === null) { + delete serverParam[key]; + } else { + serverParam[key] = value; + } + } else if (utils.isObject(key)) { //传入对象,覆盖列表项 + utils.extend(serverParam, key, true); + } else if (utils.isFunction(key)){ //传入函数,添加列表项 + utils.extend(serverParam, key(), true); + } + }, + queryCommandValue: function(){ + return serverParam || {}; + } + } + } + } +}); + + +// plugins/insertfile.js +/** + * 插入附件 + */ +UE.plugin.register('insertfile', function (){ + + var me = this; + + function getFileIcon(url){ + var ext = url.substr(url.lastIndexOf('.') + 1).toLowerCase(), + maps = { + "rar":"icon_rar.gif", + "zip":"icon_rar.gif", + "tar":"icon_rar.gif", + "gz":"icon_rar.gif", + "bz2":"icon_rar.gif", + "doc":"icon_doc.gif", + "docx":"icon_doc.gif", + "pdf":"icon_pdf.gif", + "mp3":"icon_mp3.gif", + "xls":"icon_xls.gif", + "chm":"icon_chm.gif", + "ppt":"icon_ppt.gif", + "pptx":"icon_ppt.gif", + "avi":"icon_mv.gif", + "rmvb":"icon_mv.gif", + "wmv":"icon_mv.gif", + "flv":"icon_mv.gif", + "swf":"icon_mv.gif", + "rm":"icon_mv.gif", + "exe":"icon_exe.gif", + "psd":"icon_psd.gif", + "txt":"icon_txt.gif", + "jpg":"icon_jpg.gif", + "png":"icon_jpg.gif", + "jpeg":"icon_jpg.gif", + "gif":"icon_jpg.gif", + "ico":"icon_jpg.gif", + "bmp":"icon_jpg.gif" + }; + return maps[ext] ? maps[ext]:maps['txt']; + } + + return { + commands:{ + 'insertfile': { + execCommand: function (command, filelist){ + filelist = utils.isArray(filelist) ? filelist : [filelist]; + + var i, item, icon, title, + html = '', + URL = me.getOpt('UEDITOR_HOME_URL'), + iconDir = URL + (URL.substr(URL.length - 1) == '/' ? '':'/') + 'dialogs/attachment/fileTypeImages/'; + for (i = 0; i < filelist.length; i++) { + item = filelist[i]; + icon = iconDir + getFileIcon(item.url); + title = item.title || item.url.substr(item.url.lastIndexOf('/') + 1); + html += '

    ' + + '' + + '' + title + '' + + '

    '; + } + me.execCommand('insertHtml', html); + } + } + } + } +}); + + + + +// ui/ui.js +var baidu = baidu || {}; +baidu.editor = baidu.editor || {}; +UE.ui = baidu.editor.ui = {}; + +// ui/uiutils.js +(function (){ + var browser = baidu.editor.browser, + domUtils = baidu.editor.dom.domUtils; + + var magic = '$EDITORUI'; + var root = window[magic] = {}; + var uidMagic = 'ID' + magic; + var uidCount = 0; + + var uiUtils = baidu.editor.ui.uiUtils = { + uid: function (obj){ + return (obj ? obj[uidMagic] || (obj[uidMagic] = ++ uidCount) : ++ uidCount); + }, + hook: function ( fn, callback ) { + var dg; + if (fn && fn._callbacks) { + dg = fn; + } else { + dg = function (){ + var q; + if (fn) { + q = fn.apply(this, arguments); + } + var callbacks = dg._callbacks; + var k = callbacks.length; + while (k --) { + var r = callbacks[k].apply(this, arguments); + if (q === undefined) { + q = r; + } + } + return q; + }; + dg._callbacks = []; + } + dg._callbacks.push(callback); + return dg; + }, + createElementByHtml: function (html){ + var el = document.createElement('div'); + el.innerHTML = html; + el = el.firstChild; + el.parentNode.removeChild(el); + return el; + }, + getViewportElement: function (){ + return (browser.ie && browser.quirks) ? + document.body : document.documentElement; + }, + getClientRect: function (element){ + var bcr; + //trace IE6下在控制编辑器显隐时可能会报错,catch一下 + try{ + bcr = element.getBoundingClientRect(); + }catch(e){ + bcr={left:0,top:0,height:0,width:0} + } + var rect = { + left: Math.round(bcr.left), + top: Math.round(bcr.top), + height: Math.round(bcr.bottom - bcr.top), + width: Math.round(bcr.right - bcr.left) + }; + var doc; + while ((doc = element.ownerDocument) !== document && + (element = domUtils.getWindow(doc).frameElement)) { + bcr = element.getBoundingClientRect(); + rect.left += bcr.left; + rect.top += bcr.top; + } + rect.bottom = rect.top + rect.height; + rect.right = rect.left + rect.width; + return rect; + }, + getViewportRect: function (){ + var viewportEl = uiUtils.getViewportElement(); + var width = (window.innerWidth || viewportEl.clientWidth) | 0; + var height = (window.innerHeight ||viewportEl.clientHeight) | 0; + return { + left: 0, + top: 0, + height: height, + width: width, + bottom: height, + right: width + }; + }, + setViewportOffset: function (element, offset){ + var rect; + var fixedLayer = uiUtils.getFixedLayer(); + if (element.parentNode === fixedLayer) { + element.style.left = offset.left + 'px'; + element.style.top = offset.top + 'px'; + } else { + domUtils.setViewportOffset(element, offset); + } + }, + getEventOffset: function (evt){ + var el = evt.target || evt.srcElement; + var rect = uiUtils.getClientRect(el); + var offset = uiUtils.getViewportOffsetByEvent(evt); + return { + left: offset.left - rect.left, + top: offset.top - rect.top + }; + }, + getViewportOffsetByEvent: function (evt){ + var el = evt.target || evt.srcElement; + var frameEl = domUtils.getWindow(el).frameElement; + var offset = { + left: evt.clientX, + top: evt.clientY + }; + if (frameEl && el.ownerDocument !== document) { + var rect = uiUtils.getClientRect(frameEl); + offset.left += rect.left; + offset.top += rect.top; + } + return offset; + }, + setGlobal: function (id, obj){ + root[id] = obj; + return magic + '["' + id + '"]'; + }, + unsetGlobal: function (id){ + delete root[id]; + }, + copyAttributes: function (tgt, src){ + var attributes = src.attributes; + var k = attributes.length; + while (k --) { + var attrNode = attributes[k]; + if ( attrNode.nodeName != 'style' && attrNode.nodeName != 'class' && (!browser.ie || attrNode.specified) ) { + tgt.setAttribute(attrNode.nodeName, attrNode.nodeValue); + } + } + if (src.className) { + domUtils.addClass(tgt,src.className); + } + if (src.style.cssText) { + tgt.style.cssText += ';' + src.style.cssText; + } + }, + removeStyle: function (el, styleName){ + if (el.style.removeProperty) { + el.style.removeProperty(styleName); + } else if (el.style.removeAttribute) { + el.style.removeAttribute(styleName); + } else throw ''; + }, + contains: function (elA, elB){ + return elA && elB && (elA === elB ? false : ( + elA.contains ? elA.contains(elB) : + elA.compareDocumentPosition(elB) & 16 + )); + }, + startDrag: function (evt, callbacks,doc){ + var doc = doc || document; + var startX = evt.clientX; + var startY = evt.clientY; + function handleMouseMove(evt){ + var x = evt.clientX - startX; + var y = evt.clientY - startY; + callbacks.ondragmove(x, y,evt); + if (evt.stopPropagation) { + evt.stopPropagation(); + } else { + evt.cancelBubble = true; + } + } + if (doc.addEventListener) { + function handleMouseUp(evt){ + doc.removeEventListener('mousemove', handleMouseMove, true); + doc.removeEventListener('mouseup', handleMouseUp, true); + window.removeEventListener('mouseup', handleMouseUp, true); + callbacks.ondragstop(); + } + doc.addEventListener('mousemove', handleMouseMove, true); + doc.addEventListener('mouseup', handleMouseUp, true); + window.addEventListener('mouseup', handleMouseUp, true); + + evt.preventDefault(); + } else { + var elm = evt.srcElement; + elm.setCapture(); + function releaseCaptrue(){ + elm.releaseCapture(); + elm.detachEvent('onmousemove', handleMouseMove); + elm.detachEvent('onmouseup', releaseCaptrue); + elm.detachEvent('onlosecaptrue', releaseCaptrue); + callbacks.ondragstop(); + } + elm.attachEvent('onmousemove', handleMouseMove); + elm.attachEvent('onmouseup', releaseCaptrue); + elm.attachEvent('onlosecaptrue', releaseCaptrue); + evt.returnValue = false; + } + callbacks.ondragstart(); + }, + getFixedLayer: function (){ + var layer = document.getElementById('edui_fixedlayer'); + if (layer == null) { + layer = document.createElement('div'); + layer.id = 'edui_fixedlayer'; + document.body.appendChild(layer); + if (browser.ie && browser.version <= 8) { + layer.style.position = 'absolute'; + bindFixedLayer(); + setTimeout(updateFixedOffset); + } else { + layer.style.position = 'fixed'; + } + layer.style.left = '0'; + layer.style.top = '0'; + layer.style.width = '0'; + layer.style.height = '0'; + } + return layer; + }, + makeUnselectable: function (element){ + if (browser.opera || (browser.ie && browser.version < 9)) { + element.unselectable = 'on'; + if (element.hasChildNodes()) { + for (var i=0; i
    '; + } + }; + utils.inherits(Separator, UIBase); + +})(); + + +// ui/mask.js +///import core +///import uicore +(function (){ + var utils = baidu.editor.utils, + domUtils = baidu.editor.dom.domUtils, + UIBase = baidu.editor.ui.UIBase, + uiUtils = baidu.editor.ui.uiUtils; + + var Mask = baidu.editor.ui.Mask = function (options){ + this.initOptions(options); + this.initUIBase(); + }; + Mask.prototype = { + getHtmlTpl: function (){ + return '
    '; + }, + postRender: function (){ + var me = this; + domUtils.on(window, 'resize', function (){ + setTimeout(function (){ + if (!me.isHidden()) { + me._fill(); + } + }); + }); + }, + show: function (zIndex){ + this._fill(); + this.getDom().style.display = ''; + this.getDom().style.zIndex = zIndex; + }, + hide: function (){ + this.getDom().style.display = 'none'; + this.getDom().style.zIndex = ''; + }, + isHidden: function (){ + return this.getDom().style.display == 'none'; + }, + _onMouseDown: function (){ + return false; + }, + _onClick: function (e, target){ + this.fireEvent('click', e, target); + }, + _fill: function (){ + var el = this.getDom(); + var vpRect = uiUtils.getViewportRect(); + el.style.width = vpRect.width + 'px'; + el.style.height = vpRect.height + 'px'; + } + }; + utils.inherits(Mask, UIBase); +})(); + + +// ui/popup.js +///import core +///import uicore +(function () { + var utils = baidu.editor.utils, + uiUtils = baidu.editor.ui.uiUtils, + domUtils = baidu.editor.dom.domUtils, + UIBase = baidu.editor.ui.UIBase, + Popup = baidu.editor.ui.Popup = function (options){ + this.initOptions(options); + this.initPopup(); + }; + + var allPopups = []; + function closeAllPopup( evt,el ){ + for ( var i = 0; i < allPopups.length; i++ ) { + var pop = allPopups[i]; + if (!pop.isHidden()) { + if (pop.queryAutoHide(el) !== false) { + if(evt&&/scroll/ig.test(evt.type)&&pop.className=="edui-wordpastepop") return; + pop.hide(); + } + } + } + + if(allPopups.length) + pop.editor.fireEvent("afterhidepop"); + } + + Popup.postHide = closeAllPopup; + + var ANCHOR_CLASSES = ['edui-anchor-topleft','edui-anchor-topright', + 'edui-anchor-bottomleft','edui-anchor-bottomright']; + Popup.prototype = { + SHADOW_RADIUS: 5, + content: null, + _hidden: false, + autoRender: true, + canSideLeft: true, + canSideUp: true, + initPopup: function (){ + this.initUIBase(); + allPopups.push( this ); + }, + getHtmlTpl: function (){ + return '
    ' + + '
    ' + + ' ' + + '
    ' + + '
    ' + + this.getContentHtmlTpl() + + '
    ' + + '
    ' + + '
    '; + }, + getContentHtmlTpl: function (){ + if(this.content){ + if (typeof this.content == 'string') { + return this.content; + } + return this.content.renderHtml(); + }else{ + return '' + } + + }, + _UIBase_postRender: UIBase.prototype.postRender, + postRender: function (){ + + + if (this.content instanceof UIBase) { + this.content.postRender(); + } + + //捕获鼠标滚轮 + if( this.captureWheel && !this.captured ) { + + this.captured = true; + + var winHeight = ( document.documentElement.clientHeight || document.body.clientHeight ) - 80, + _height = this.getDom().offsetHeight, + _top = uiUtils.getClientRect( this.combox.getDom() ).top, + content = this.getDom('content'), + ifr = this.getDom('body').getElementsByTagName('iframe'), + me = this; + + ifr.length && ( ifr = ifr[0] ); + + while( _top + _height > winHeight ) { + _height -= 30; + } + content.style.height = _height + 'px'; + //同步更改iframe高度 + ifr && ( ifr.style.height = _height + 'px' ); + + //阻止在combox上的鼠标滚轮事件, 防止用户的正常操作被误解 + if( window.XMLHttpRequest ) { + + domUtils.on( content, ( 'onmousewheel' in document.body ) ? 'mousewheel' :'DOMMouseScroll' , function(e){ + + if(e.preventDefault) { + e.preventDefault(); + } else { + e.returnValue = false; + } + + if( e.wheelDelta ) { + + content.scrollTop -= ( e.wheelDelta / 120 )*60; + + } else { + + content.scrollTop -= ( e.detail / -3 )*60; + + } + + }); + + } else { + + //ie6 + domUtils.on( this.getDom(), 'mousewheel' , function(e){ + + e.returnValue = false; + + me.getDom('content').scrollTop -= ( e.wheelDelta / 120 )*60; + + }); + + } + + } + this.fireEvent('postRenderAfter'); + this.hide(true); + this._UIBase_postRender(); + }, + _doAutoRender: function (){ + if (!this.getDom() && this.autoRender) { + this.render(); + } + }, + mesureSize: function (){ + var box = this.getDom('content'); + return uiUtils.getClientRect(box); + }, + fitSize: function (){ + if( this.captureWheel && this.sized ) { + return this.__size; + } + this.sized = true; + var popBodyEl = this.getDom('body'); + popBodyEl.style.width = ''; + popBodyEl.style.height = ''; + var size = this.mesureSize(); + if( this.captureWheel ) { + popBodyEl.style.width = -(-20 -size.width) + 'px'; + var height = parseInt( this.getDom('content').style.height, 10 ); + !window.isNaN( height ) && ( size.height = height ); + } else { + popBodyEl.style.width = size.width + 'px'; + } + popBodyEl.style.height = size.height + 'px'; + this.__size = size; + this.captureWheel && (this.getDom('content').style.overflow = 'auto'); + return size; + }, + showAnchor: function ( element, hoz ){ + this.showAnchorRect( uiUtils.getClientRect( element ), hoz ); + }, + showAnchorRect: function ( rect, hoz, adj ){ + this._doAutoRender(); + var vpRect = uiUtils.getViewportRect(); + this.getDom().style.visibility = 'hidden'; + this._show(); + var popSize = this.fitSize(); + + var sideLeft, sideUp, left, top; + if (hoz) { + sideLeft = this.canSideLeft && (rect.right + popSize.width > vpRect.right && rect.left > popSize.width); + sideUp = this.canSideUp && (rect.top + popSize.height > vpRect.bottom && rect.bottom > popSize.height); + left = (sideLeft ? rect.left - popSize.width : rect.right); + top = (sideUp ? rect.bottom - popSize.height : rect.top); + } else { + sideLeft = this.canSideLeft && (rect.right + popSize.width > vpRect.right && rect.left > popSize.width); + sideUp = this.canSideUp && (rect.top + popSize.height > vpRect.bottom && rect.bottom > popSize.height); + left = (sideLeft ? rect.right - popSize.width : rect.left); + top = (sideUp ? rect.top - popSize.height : rect.bottom); + } + + var popEl = this.getDom(); + uiUtils.setViewportOffset(popEl, { + left: left, + top: top + }); + domUtils.removeClasses(popEl, ANCHOR_CLASSES); + popEl.className += ' ' + ANCHOR_CLASSES[(sideUp ? 1 : 0) * 2 + (sideLeft ? 1 : 0)]; + if(this.editor){ + popEl.style.zIndex = this.editor.container.style.zIndex * 1 + 10; + baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex = popEl.style.zIndex - 1; + } + this.getDom().style.visibility = 'visible'; + + }, + showAt: function (offset) { + var left = offset.left; + var top = offset.top; + var rect = { + left: left, + top: top, + right: left, + bottom: top, + height: 0, + width: 0 + }; + this.showAnchorRect(rect, false, true); + }, + _show: function (){ + if (this._hidden) { + var box = this.getDom(); + box.style.display = ''; + this._hidden = false; +// if (box.setActive) { +// box.setActive(); +// } + this.fireEvent('show'); + } + }, + isHidden: function (){ + return this._hidden; + }, + show: function (){ + this._doAutoRender(); + this._show(); + }, + hide: function (notNofity){ + if (!this._hidden && this.getDom()) { + this.getDom().style.display = 'none'; + this._hidden = true; + if (!notNofity) { + this.fireEvent('hide'); + } + } + }, + queryAutoHide: function (el){ + return !el || !uiUtils.contains(this.getDom(), el); + } + }; + utils.inherits(Popup, UIBase); + + domUtils.on( document, 'mousedown', function ( evt ) { + var el = evt.target || evt.srcElement; + closeAllPopup( evt,el ); + } ); + domUtils.on( window, 'scroll', function (evt,el) { + closeAllPopup( evt,el ); + } ); + +})(); + + +// ui/colorpicker.js +///import core +///import uicore +(function (){ + var utils = baidu.editor.utils, + UIBase = baidu.editor.ui.UIBase, + ColorPicker = baidu.editor.ui.ColorPicker = function (options){ + this.initOptions(options); + this.noColorText = this.noColorText || this.editor.getLang("clearColor"); + this.initUIBase(); + }; + + ColorPicker.prototype = { + getHtmlTpl: function (){ + return genColorPicker(this.noColorText,this.editor); + }, + _onTableClick: function (evt){ + var tgt = evt.target || evt.srcElement; + var color = tgt.getAttribute('data-color'); + if (color) { + this.fireEvent('pickcolor', color); + } + }, + _onTableOver: function (evt){ + var tgt = evt.target || evt.srcElement; + var color = tgt.getAttribute('data-color'); + if (color) { + this.getDom('preview').style.backgroundColor = color; + } + }, + _onTableOut: function (){ + this.getDom('preview').style.backgroundColor = ''; + }, + _onPickNoColor: function (){ + this.fireEvent('picknocolor'); + } + }; + utils.inherits(ColorPicker, UIBase); + + var COLORS = ( + 'ffffff,000000,eeece1,1f497d,4f81bd,c0504d,9bbb59,8064a2,4bacc6,f79646,' + + 'f2f2f2,7f7f7f,ddd9c3,c6d9f0,dbe5f1,f2dcdb,ebf1dd,e5e0ec,dbeef3,fdeada,' + + 'd8d8d8,595959,c4bd97,8db3e2,b8cce4,e5b9b7,d7e3bc,ccc1d9,b7dde8,fbd5b5,' + + 'bfbfbf,3f3f3f,938953,548dd4,95b3d7,d99694,c3d69b,b2a2c7,92cddc,fac08f,' + + 'a5a5a5,262626,494429,17365d,366092,953734,76923c,5f497a,31859b,e36c09,' + + '7f7f7f,0c0c0c,1d1b10,0f243e,244061,632423,4f6128,3f3151,205867,974806,' + + 'c00000,ff0000,ffc000,ffff00,92d050,00b050,00b0f0,0070c0,002060,7030a0,').split(','); + + function genColorPicker(noColorText,editor){ + var html = '
    ' + + '
    ' + + '
    ' + + '
    '+ noColorText +'
    ' + + '
    ' + + '' + + ''+ + ''; + for (var i=0; i':'')+''; + } + html += i<70 ? '':''; + } + html += '
    '+editor.getLang("themeColor")+'
    '+editor.getLang("standardColor")+'
    '; + return html; + } +})(); + + +// ui/tablepicker.js +///import core +///import uicore +(function (){ + var utils = baidu.editor.utils, + uiUtils = baidu.editor.ui.uiUtils, + UIBase = baidu.editor.ui.UIBase; + + var TablePicker = baidu.editor.ui.TablePicker = function (options){ + this.initOptions(options); + this.initTablePicker(); + }; + TablePicker.prototype = { + defaultNumRows: 10, + defaultNumCols: 10, + maxNumRows: 20, + maxNumCols: 20, + numRows: 10, + numCols: 10, + lengthOfCellSide: 22, + initTablePicker: function (){ + this.initUIBase(); + }, + getHtmlTpl: function (){ + var me = this; + return '
    ' + + '
    ' + + '
    ' + + '' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    '; + }, + _UIBase_render: UIBase.prototype.render, + render: function (holder){ + this._UIBase_render(holder); + this.getDom('label').innerHTML = '0'+this.editor.getLang("t_row")+' x 0'+this.editor.getLang("t_col"); + }, + _track: function (numCols, numRows){ + var style = this.getDom('overlay').style; + var sideLen = this.lengthOfCellSide; + style.width = numCols * sideLen + 'px'; + style.height = numRows * sideLen + 'px'; + var label = this.getDom('label'); + label.innerHTML = numCols +this.editor.getLang("t_col")+' x ' + numRows + this.editor.getLang("t_row"); + this.numCols = numCols; + this.numRows = numRows; + }, + _onMouseOver: function (evt, el){ + var rel = evt.relatedTarget || evt.fromElement; + if (!uiUtils.contains(el, rel) && el !== rel) { + this.getDom('label').innerHTML = '0'+this.editor.getLang("t_col")+' x 0'+this.editor.getLang("t_row"); + this.getDom('overlay').style.visibility = ''; + } + }, + _onMouseOut: function (evt, el){ + var rel = evt.relatedTarget || evt.toElement; + if (!uiUtils.contains(el, rel) && el !== rel) { + this.getDom('label').innerHTML = '0'+this.editor.getLang("t_col")+' x 0'+this.editor.getLang("t_row"); + this.getDom('overlay').style.visibility = 'hidden'; + } + }, + _onMouseMove: function (evt, el){ + var style = this.getDom('overlay').style; + var offset = uiUtils.getEventOffset(evt); + var sideLen = this.lengthOfCellSide; + var numCols = Math.ceil(offset.left / sideLen); + var numRows = Math.ceil(offset.top / sideLen); + this._track(numCols, numRows); + }, + _onClick: function (){ + this.fireEvent('picktable', this.numCols, this.numRows); + } + }; + utils.inherits(TablePicker, UIBase); +})(); + + +// ui/stateful.js +(function (){ + var browser = baidu.editor.browser, + domUtils = baidu.editor.dom.domUtils, + uiUtils = baidu.editor.ui.uiUtils; + + var TPL_STATEFUL = 'onmousedown="$$.Stateful_onMouseDown(event, this);"' + + ' onmouseup="$$.Stateful_onMouseUp(event, this);"' + + ( browser.ie ? ( + ' onmouseenter="$$.Stateful_onMouseEnter(event, this);"' + + ' onmouseleave="$$.Stateful_onMouseLeave(event, this);"' ) + : ( + ' onmouseover="$$.Stateful_onMouseOver(event, this);"' + + ' onmouseout="$$.Stateful_onMouseOut(event, this);"' )); + + baidu.editor.ui.Stateful = { + alwalysHoverable: false, + target:null,//目标元素和this指向dom不一样 + Stateful_init: function (){ + this._Stateful_dGetHtmlTpl = this.getHtmlTpl; + this.getHtmlTpl = this.Stateful_getHtmlTpl; + }, + Stateful_getHtmlTpl: function (){ + var tpl = this._Stateful_dGetHtmlTpl(); + // 使用function避免$转义 + return tpl.replace(/stateful/g, function (){ return TPL_STATEFUL; }); + }, + Stateful_onMouseEnter: function (evt, el){ + this.target=el; + if (!this.isDisabled() || this.alwalysHoverable) { + this.addState('hover'); + this.fireEvent('over'); + } + }, + Stateful_onMouseLeave: function (evt, el){ + if (!this.isDisabled() || this.alwalysHoverable) { + this.removeState('hover'); + this.removeState('active'); + this.fireEvent('out'); + } + }, + Stateful_onMouseOver: function (evt, el){ + var rel = evt.relatedTarget; + if (!uiUtils.contains(el, rel) && el !== rel) { + this.Stateful_onMouseEnter(evt, el); + } + }, + Stateful_onMouseOut: function (evt, el){ + var rel = evt.relatedTarget; + if (!uiUtils.contains(el, rel) && el !== rel) { + this.Stateful_onMouseLeave(evt, el); + } + }, + Stateful_onMouseDown: function (evt, el){ + if (!this.isDisabled()) { + this.addState('active'); + } + }, + Stateful_onMouseUp: function (evt, el){ + if (!this.isDisabled()) { + this.removeState('active'); + } + }, + Stateful_postRender: function (){ + if (this.disabled && !this.hasState('disabled')) { + this.addState('disabled'); + } + }, + hasState: function (state){ + return domUtils.hasClass(this.getStateDom(), 'edui-state-' + state); + }, + addState: function (state){ + if (!this.hasState(state)) { + this.getStateDom().className += ' edui-state-' + state; + } + }, + removeState: function (state){ + if (this.hasState(state)) { + domUtils.removeClasses(this.getStateDom(), ['edui-state-' + state]); + } + }, + getStateDom: function (){ + return this.getDom('state'); + }, + isChecked: function (){ + return this.hasState('checked'); + }, + setChecked: function (checked){ + if (!this.isDisabled() && checked) { + this.addState('checked'); + } else { + this.removeState('checked'); + } + }, + isDisabled: function (){ + return this.hasState('disabled'); + }, + setDisabled: function (disabled){ + if (disabled) { + this.removeState('hover'); + this.removeState('checked'); + this.removeState('active'); + this.addState('disabled'); + } else { + this.removeState('disabled'); + } + } + }; +})(); + + +// ui/button.js +///import core +///import uicore +///import ui/stateful.js +(function (){ + var utils = baidu.editor.utils, + UIBase = baidu.editor.ui.UIBase, + Stateful = baidu.editor.ui.Stateful, + Button = baidu.editor.ui.Button = function (options){ + if(options.name){ + var btnName = options.name; + var cssRules = options.cssRules; + if(!options.className){ + options.className = 'edui-for-' + btnName; + } + options.cssRules = '.edui-default .edui-for-'+ btnName +' .edui-icon {'+ cssRules +'}' + } + this.initOptions(options); + this.initButton(); + }; + Button.prototype = { + uiName: 'button', + label: '', + title: '', + showIcon: true, + showText: true, + cssRules:'', + initButton: function (){ + this.initUIBase(); + this.Stateful_init(); + if(this.cssRules){ + utils.cssRule('edui-customize-'+this.name+'-style',this.cssRules); + } + }, + getHtmlTpl: function (){ + return '
    ' + + '
    ' + + '
    ' + + (this.showIcon ? '
    ' : '') + + (this.showText ? '
    ' + this.label + '
    ' : '') + + '
    ' + + '
    ' + + '
    '; + }, + postRender: function (){ + this.Stateful_postRender(); + this.setDisabled(this.disabled) + }, + _onMouseDown: function (e){ + var target = e.target || e.srcElement, + tagName = target && target.tagName && target.tagName.toLowerCase(); + if (tagName == 'input' || tagName == 'object' || tagName == 'object') { + return false; + } + }, + _onClick: function (){ + if (!this.isDisabled()) { + this.fireEvent('click'); + } + }, + setTitle: function(text){ + var label = this.getDom('label'); + label.innerHTML = text; + } + }; + utils.inherits(Button, UIBase); + utils.extend(Button.prototype, Stateful); + +})(); + + +// ui/splitbutton.js +///import core +///import uicore +///import ui/stateful.js +(function (){ + var utils = baidu.editor.utils, + uiUtils = baidu.editor.ui.uiUtils, + domUtils = baidu.editor.dom.domUtils, + UIBase = baidu.editor.ui.UIBase, + Stateful = baidu.editor.ui.Stateful, + SplitButton = baidu.editor.ui.SplitButton = function (options){ + this.initOptions(options); + this.initSplitButton(); + }; + SplitButton.prototype = { + popup: null, + uiName: 'splitbutton', + title: '', + initSplitButton: function (){ + this.initUIBase(); + this.Stateful_init(); + var me = this; + if (this.popup != null) { + var popup = this.popup; + this.popup = null; + this.setPopup(popup); + } + }, + _UIBase_postRender: UIBase.prototype.postRender, + postRender: function (){ + this.Stateful_postRender(); + this._UIBase_postRender(); + }, + setPopup: function (popup){ + if (this.popup === popup) return; + if (this.popup != null) { + this.popup.dispose(); + } + popup.addListener('show', utils.bind(this._onPopupShow, this)); + popup.addListener('hide', utils.bind(this._onPopupHide, this)); + popup.addListener('postrender', utils.bind(function (){ + popup.getDom('body').appendChild( + uiUtils.createElementByHtml('
    ') + ); + popup.getDom().className += ' ' + this.className; + }, this)); + this.popup = popup; + }, + _onPopupShow: function (){ + this.addState('opened'); + }, + _onPopupHide: function (){ + this.removeState('opened'); + }, + getHtmlTpl: function (){ + return '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    '; + }, + showPopup: function (){ + // 当popup往上弹出的时候,做特殊处理 + var rect = uiUtils.getClientRect(this.getDom()); + rect.top -= this.popup.SHADOW_RADIUS; + rect.height += this.popup.SHADOW_RADIUS; + this.popup.showAnchorRect(rect); + }, + _onArrowClick: function (event, el){ + if (!this.isDisabled()) { + this.showPopup(); + } + }, + _onButtonClick: function (){ + if (!this.isDisabled()) { + this.fireEvent('buttonclick'); + } + } + }; + utils.inherits(SplitButton, UIBase); + utils.extend(SplitButton.prototype, Stateful, true); + +})(); + + +// ui/colorbutton.js +///import core +///import uicore +///import ui/colorpicker.js +///import ui/popup.js +///import ui/splitbutton.js +(function (){ + var utils = baidu.editor.utils, + uiUtils = baidu.editor.ui.uiUtils, + ColorPicker = baidu.editor.ui.ColorPicker, + Popup = baidu.editor.ui.Popup, + SplitButton = baidu.editor.ui.SplitButton, + ColorButton = baidu.editor.ui.ColorButton = function (options){ + this.initOptions(options); + this.initColorButton(); + }; + ColorButton.prototype = { + initColorButton: function (){ + var me = this; + this.popup = new Popup({ + content: new ColorPicker({ + noColorText: me.editor.getLang("clearColor"), + editor:me.editor, + onpickcolor: function (t, color){ + me._onPickColor(color); + }, + onpicknocolor: function (t, color){ + me._onPickNoColor(color); + } + }), + editor:me.editor + }); + this.initSplitButton(); + }, + _SplitButton_postRender: SplitButton.prototype.postRender, + postRender: function (){ + this._SplitButton_postRender(); + this.getDom('button_body').appendChild( + uiUtils.createElementByHtml('
    ') + ); + this.getDom().className += ' edui-colorbutton'; + }, + setColor: function (color){ + this.getDom('colorlump').style.backgroundColor = color; + this.color = color; + }, + _onPickColor: function (color){ + if (this.fireEvent('pickcolor', color) !== false) { + this.setColor(color); + this.popup.hide(); + } + }, + _onPickNoColor: function (color){ + if (this.fireEvent('picknocolor') !== false) { + this.popup.hide(); + } + } + }; + utils.inherits(ColorButton, SplitButton); + +})(); + + +// ui/tablebutton.js +///import core +///import uicore +///import ui/popup.js +///import ui/tablepicker.js +///import ui/splitbutton.js +(function (){ + var utils = baidu.editor.utils, + Popup = baidu.editor.ui.Popup, + TablePicker = baidu.editor.ui.TablePicker, + SplitButton = baidu.editor.ui.SplitButton, + TableButton = baidu.editor.ui.TableButton = function (options){ + this.initOptions(options); + this.initTableButton(); + }; + TableButton.prototype = { + initTableButton: function (){ + var me = this; + this.popup = new Popup({ + content: new TablePicker({ + editor:me.editor, + onpicktable: function (t, numCols, numRows){ + me._onPickTable(numCols, numRows); + } + }), + 'editor':me.editor + }); + this.initSplitButton(); + }, + _onPickTable: function (numCols, numRows){ + if (this.fireEvent('picktable', numCols, numRows) !== false) { + this.popup.hide(); + } + } + }; + utils.inherits(TableButton, SplitButton); + +})(); + + +// ui/autotypesetpicker.js +///import core +///import uicore +(function () { + var utils = baidu.editor.utils, + UIBase = baidu.editor.ui.UIBase; + + var AutoTypeSetPicker = baidu.editor.ui.AutoTypeSetPicker = function (options) { + this.initOptions(options); + this.initAutoTypeSetPicker(); + }; + AutoTypeSetPicker.prototype = { + initAutoTypeSetPicker:function () { + this.initUIBase(); + }, + getHtmlTpl:function () { + var me = this.editor, + opt = me.options.autotypeset, + lang = me.getLang("autoTypeSet"); + + var textAlignInputName = 'textAlignValue' + me.uid, + imageBlockInputName = 'imageBlockLineValue' + me.uid, + symbolConverInputName = 'symbolConverValue' + me.uid; + + return '
    ' + + '
    ' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '
    ' + lang.mergeLine + '' + lang.delLine + '
    ' + lang.removeFormat + '' + lang.indent + '
    ' + lang.alignment + '' + + '' + me.getLang("justifyleft") + + '' + me.getLang("justifycenter") + + '' + me.getLang("justifyright") + + '
    ' + lang.imageFloat + '' + + '' + me.getLang("default") + + '' + me.getLang("justifyleft") + + '' + me.getLang("justifycenter") + + '' + me.getLang("justifyright") + + '
    ' + lang.removeFontsize + '' + lang.removeFontFamily + '
    ' + lang.removeHtml + '
    ' + lang.pasteFilter + '
    ' + lang.symbol + '' + + '' + lang.bdc2sb + + '' + lang.tobdc + '' + + '
    ' + + '
    ' + + '
    '; + + + }, + _UIBase_render:UIBase.prototype.render + }; + utils.inherits(AutoTypeSetPicker, UIBase); +})(); + + +// ui/autotypesetbutton.js +///import core +///import uicore +///import ui/popup.js +///import ui/autotypesetpicker.js +///import ui/splitbutton.js +(function (){ + var utils = baidu.editor.utils, + Popup = baidu.editor.ui.Popup, + AutoTypeSetPicker = baidu.editor.ui.AutoTypeSetPicker, + SplitButton = baidu.editor.ui.SplitButton, + AutoTypeSetButton = baidu.editor.ui.AutoTypeSetButton = function (options){ + this.initOptions(options); + this.initAutoTypeSetButton(); + }; + function getPara(me){ + + var opt = {}, + cont = me.getDom(), + editorId = me.editor.uid, + inputType = null, + attrName = null, + ipts = domUtils.getElementsByTagName(cont,"input"); + for(var i=ipts.length-1,ipt;ipt=ipts[i--];){ + inputType = ipt.getAttribute("type"); + if(inputType=="checkbox"){ + attrName = ipt.getAttribute("name"); + opt[attrName] && delete opt[attrName]; + if(ipt.checked){ + var attrValue = document.getElementById( attrName + "Value" + editorId ); + if(attrValue){ + if(/input/ig.test(attrValue.tagName)){ + opt[attrName] = attrValue.value; + } else { + var iptChilds = attrValue.getElementsByTagName("input"); + for(var j=iptChilds.length-1,iptchild;iptchild=iptChilds[j--];){ + if(iptchild.checked){ + opt[attrName] = iptchild.value; + break; + } + } + } + } else { + opt[attrName] = true; + } + } else { + opt[attrName] = false; + } + } else { + opt[ipt.getAttribute("value")] = ipt.checked; + } + + } + + var selects = domUtils.getElementsByTagName(cont,"select"); + for(var i=0,si;si=selects[i++];){ + var attr = si.getAttribute('name'); + opt[attr] = opt[attr] ? si.value : ''; + } + + utils.extend(me.editor.options.autotypeset,opt); + + me.editor.setPreferences('autotypeset', opt); + } + + AutoTypeSetButton.prototype = { + initAutoTypeSetButton: function (){ + + var me = this; + this.popup = new Popup({ + //传入配置参数 + content: new AutoTypeSetPicker({editor:me.editor}), + 'editor':me.editor, + hide : function(){ + if (!this._hidden && this.getDom()) { + getPara(this); + this.getDom().style.display = 'none'; + this._hidden = true; + this.fireEvent('hide'); + } + } + }); + var flag = 0; + this.popup.addListener('postRenderAfter',function(){ + var popupUI = this; + if(flag)return; + var cont = this.getDom(), + btn = cont.getElementsByTagName('button')[0]; + + btn.onclick = function(){ + getPara(popupUI); + me.editor.execCommand('autotypeset'); + popupUI.hide() + }; + + domUtils.on(cont, 'click', function(e) { + var target = e.target || e.srcElement, + editorId = me.editor.uid; + if (target && target.tagName == 'INPUT') { + + // 点击图片浮动的checkbox,去除对应的radio + if (target.name == 'imageBlockLine' || target.name == 'textAlign' || target.name == 'symbolConver') { + var checked = target.checked, + radioTd = document.getElementById( target.name + 'Value' + editorId), + radios = radioTd.getElementsByTagName('input'), + defalutSelect = { + 'imageBlockLine': 'none', + 'textAlign': 'left', + 'symbolConver': 'tobdc' + }; + + for (var i = 0; i < radios.length; i++) { + if (checked) { + if (radios[i].value == defalutSelect[target.name]) { + radios[i].checked = 'checked'; + } + } else { + radios[i].checked = false; + } + } + } + // 点击radio,选中对应的checkbox + if (target.name == ('imageBlockLineValue' + editorId) || target.name == ('textAlignValue' + editorId) || target.name == 'bdc') { + var checkboxs = target.parentNode.previousSibling.getElementsByTagName('input'); + checkboxs && (checkboxs[0].checked = true); + } + + getPara(popupUI); + } + }); + + flag = 1; + }); + this.initSplitButton(); + } + }; + utils.inherits(AutoTypeSetButton, SplitButton); + +})(); + + +// ui/cellalignpicker.js +///import core +///import uicore +(function () { + var utils = baidu.editor.utils, + Popup = baidu.editor.ui.Popup, + Stateful = baidu.editor.ui.Stateful, + UIBase = baidu.editor.ui.UIBase; + + /** + * 该参数将新增一个参数: selected, 参数类型为一个Object, 形如{ 'align': 'center', 'valign': 'top' }, 表示单元格的初始 + * 对齐状态为: 竖直居上,水平居中; 其中 align的取值为:'center', 'left', 'right'; valign的取值为: 'top', 'middle', 'bottom' + * @update 2013/4/2 hancong03@baidu.com + */ + var CellAlignPicker = baidu.editor.ui.CellAlignPicker = function (options) { + this.initOptions(options); + this.initSelected(); + this.initCellAlignPicker(); + }; + CellAlignPicker.prototype = { + //初始化选中状态, 该方法将根据传递进来的参数获取到应该选中的对齐方式图标的索引 + initSelected: function(){ + + var status = { + + valign: { + top: 0, + middle: 1, + bottom: 2 + }, + align: { + left: 0, + center: 1, + right: 2 + }, + count: 3 + + }, + result = -1; + + if( this.selected ) { + this.selectedIndex = status.valign[ this.selected.valign ] * status.count + status.align[ this.selected.align ]; + } + + }, + initCellAlignPicker:function () { + this.initUIBase(); + this.Stateful_init(); + }, + getHtmlTpl:function () { + + var alignType = [ 'left', 'center', 'right' ], + COUNT = 9, + tempClassName = null, + tempIndex = -1, + tmpl = []; + + + for( var i= 0; i'); + + tmpl.push( '
    ' + + tmpl.join('') + + '
    ' + + '' + + ''; + }, + getStateDom: function (){ + return this.target; + }, + _onClick: function (evt){ + var target= evt.target || evt.srcElement; + if(/icon/.test(target.className)){ + this.items[target.parentNode.getAttribute("index")].onclick(); + Popup.postHide(evt); + } + }, + _UIBase_render:UIBase.prototype.render + }; + utils.inherits(CellAlignPicker, UIBase); + utils.extend(CellAlignPicker.prototype, Stateful,true); +})(); + + + + + +// ui/pastepicker.js +///import core +///import uicore +(function () { + var utils = baidu.editor.utils, + Stateful = baidu.editor.ui.Stateful, + uiUtils = baidu.editor.ui.uiUtils, + UIBase = baidu.editor.ui.UIBase; + + var PastePicker = baidu.editor.ui.PastePicker = function (options) { + this.initOptions(options); + this.initPastePicker(); + }; + PastePicker.prototype = { + initPastePicker:function () { + this.initUIBase(); + this.Stateful_init(); + }, + getHtmlTpl:function () { + return '

    ' + + '
    ' + + '
    ' + this.editor.getLang("pasteOpt") + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '' + }, + getStateDom:function () { + return this.target; + }, + format:function (param) { + this.editor.ui._isTransfer = true; + this.editor.fireEvent('pasteTransfer', param); + }, + _onClick:function (cur) { + var node = domUtils.getNextDomNode(cur), + screenHt = uiUtils.getViewportRect().height, + subPop = uiUtils.getClientRect(node); + + if ((subPop.top + subPop.height) > screenHt) + node.style.top = (-subPop.height - cur.offsetHeight) + "px"; + else + node.style.top = ""; + + if (/hidden/ig.test(domUtils.getComputedStyle(node, "visibility"))) { + node.style.visibility = "visible"; + domUtils.addClass(cur, "edui-state-opened"); + } else { + node.style.visibility = "hidden"; + domUtils.removeClasses(cur, "edui-state-opened") + } + }, + _UIBase_render:UIBase.prototype.render + }; + utils.inherits(PastePicker, UIBase); + utils.extend(PastePicker.prototype, Stateful, true); +})(); + + + + + + +// ui/toolbar.js +(function (){ + var utils = baidu.editor.utils, + uiUtils = baidu.editor.ui.uiUtils, + UIBase = baidu.editor.ui.UIBase, + Toolbar = baidu.editor.ui.Toolbar = function (options){ + this.initOptions(options); + this.initToolbar(); + }; + Toolbar.prototype = { + items: null, + initToolbar: function (){ + this.items = this.items || []; + this.initUIBase(); + }, + add: function (item,index){ + if(index === undefined){ + this.items.push(item); + }else{ + this.items.splice(index,0,item) + } + + }, + getHtmlTpl: function (){ + var buff = []; + for (var i=0; i' + + buff.join('') + + '' + }, + postRender: function (){ + var box = this.getDom(); + for (var i=0; i
    '; + }, + postRender:function () { + }, + queryAutoHide:function () { + return true; + } + }; + Menu.prototype = { + items:null, + uiName:'menu', + initMenu:function () { + this.items = this.items || []; + this.initPopup(); + this.initItems(); + }, + initItems:function () { + for (var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + if (item == '-') { + this.items[i] = this.getSeparator(); + } else if (!(item instanceof MenuItem)) { + item.editor = this.editor; + item.theme = this.editor.options.theme; + this.items[i] = this.createItem(item); + } + } + }, + getSeparator:function () { + return menuSeparator; + }, + createItem:function (item) { + //新增一个参数menu, 该参数存储了menuItem所对应的menu引用 + item.menu = this; + return new MenuItem(item); + }, + _Popup_getContentHtmlTpl:Popup.prototype.getContentHtmlTpl, + getContentHtmlTpl:function () { + if (this.items.length == 0) { + return this._Popup_getContentHtmlTpl(); + } + var buff = []; + for (var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + buff[i] = item.renderHtml(); + } + return ('
    ' + buff.join('') + '
    '); + }, + _Popup_postRender:Popup.prototype.postRender, + postRender:function () { + var me = this; + for (var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + item.ownerMenu = this; + item.postRender(); + } + domUtils.on(this.getDom(), 'mouseover', function (evt) { + evt = evt || event; + var rel = evt.relatedTarget || evt.fromElement; + var el = me.getDom(); + if (!uiUtils.contains(el, rel) && el !== rel) { + me.fireEvent('over'); + } + }); + this._Popup_postRender(); + }, + queryAutoHide:function (el) { + if (el) { + if (uiUtils.contains(this.getDom(), el)) { + return false; + } + for (var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + if (item.queryAutoHide(el) === false) { + return false; + } + } + } + }, + clearItems:function () { + for (var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + clearTimeout(item._showingTimer); + clearTimeout(item._closingTimer); + if (item.subMenu) { + item.subMenu.destroy(); + } + } + this.items = []; + }, + destroy:function () { + if (this.getDom()) { + domUtils.remove(this.getDom()); + } + this.clearItems(); + }, + dispose:function () { + this.destroy(); + } + }; + utils.inherits(Menu, Popup); + + /** + * @update 2013/04/03 hancong03 新增一个参数menu, 该参数存储了menuItem所对应的menu引用 + * @type {Function} + */ + var MenuItem = baidu.editor.ui.MenuItem = function (options) { + this.initOptions(options); + this.initUIBase(); + this.Stateful_init(); + if (this.subMenu && !(this.subMenu instanceof Menu)) { + if (options.className && options.className.indexOf("aligntd") != -1) { + var me = this; + + //获取单元格对齐初始状态 + this.subMenu.selected = this.editor.queryCommandValue( 'cellalignment' ); + + this.subMenu = new Popup({ + content:new CellAlignPicker(this.subMenu), + parentMenu:me, + editor:me.editor, + destroy:function () { + if (this.getDom()) { + domUtils.remove(this.getDom()); + } + } + }); + this.subMenu.addListener("postRenderAfter", function () { + domUtils.on(this.getDom(), "mouseover", function () { + me.addState('opened'); + }); + }); + } else { + this.subMenu = new Menu(this.subMenu); + } + } + }; + MenuItem.prototype = { + label:'', + subMenu:null, + ownerMenu:null, + uiName:'menuitem', + alwalysHoverable:true, + getHtmlTpl:function () { + return '
    ' + + '
    ' + + this.renderLabelHtml() + + '
    ' + + '
    '; + }, + postRender:function () { + var me = this; + this.addListener('over', function () { + me.ownerMenu.fireEvent('submenuover', me); + if (me.subMenu) { + me.delayShowSubMenu(); + } + }); + if (this.subMenu) { + this.getDom().className += ' edui-hassubmenu'; + this.subMenu.render(); + this.addListener('out', function () { + me.delayHideSubMenu(); + }); + this.subMenu.addListener('over', function () { + clearTimeout(me._closingTimer); + me._closingTimer = null; + me.addState('opened'); + }); + this.ownerMenu.addListener('hide', function () { + me.hideSubMenu(); + }); + this.ownerMenu.addListener('submenuover', function (t, subMenu) { + if (subMenu !== me) { + me.delayHideSubMenu(); + } + }); + this.subMenu._bakQueryAutoHide = this.subMenu.queryAutoHide; + this.subMenu.queryAutoHide = function (el) { + if (el && uiUtils.contains(me.getDom(), el)) { + return false; + } + return this._bakQueryAutoHide(el); + }; + } + this.getDom().style.tabIndex = '-1'; + uiUtils.makeUnselectable(this.getDom()); + this.Stateful_postRender(); + }, + delayShowSubMenu:function () { + var me = this; + if (!me.isDisabled()) { + me.addState('opened'); + clearTimeout(me._showingTimer); + clearTimeout(me._closingTimer); + me._closingTimer = null; + me._showingTimer = setTimeout(function () { + me.showSubMenu(); + }, 250); + } + }, + delayHideSubMenu:function () { + var me = this; + if (!me.isDisabled()) { + me.removeState('opened'); + clearTimeout(me._showingTimer); + if (!me._closingTimer) { + me._closingTimer = setTimeout(function () { + if (!me.hasState('opened')) { + me.hideSubMenu(); + } + me._closingTimer = null; + }, 400); + } + } + }, + renderLabelHtml:function () { + return '
    ' + + '
    ' + + '
    ' + (this.label || '') + '
    '; + }, + getStateDom:function () { + return this.getDom(); + }, + queryAutoHide:function (el) { + if (this.subMenu && this.hasState('opened')) { + return this.subMenu.queryAutoHide(el); + } + }, + _onClick:function (event, this_) { + if (this.hasState('disabled')) return; + if (this.fireEvent('click', event, this_) !== false) { + if (this.subMenu) { + this.showSubMenu(); + } else { + Popup.postHide(event); + } + } + }, + showSubMenu:function () { + var rect = uiUtils.getClientRect(this.getDom()); + rect.right -= 5; + rect.left += 2; + rect.width -= 7; + rect.top -= 4; + rect.bottom += 4; + rect.height += 8; + this.subMenu.showAnchorRect(rect, true, true); + }, + hideSubMenu:function () { + this.subMenu.hide(); + } + }; + utils.inherits(MenuItem, UIBase); + utils.extend(MenuItem.prototype, Stateful, true); +})(); + + +// ui/combox.js +///import core +///import uicore +///import ui/menu.js +///import ui/splitbutton.js +(function (){ + // todo: menu和item提成通用list + var utils = baidu.editor.utils, + uiUtils = baidu.editor.ui.uiUtils, + Menu = baidu.editor.ui.Menu, + SplitButton = baidu.editor.ui.SplitButton, + Combox = baidu.editor.ui.Combox = function (options){ + this.initOptions(options); + this.initCombox(); + }; + Combox.prototype = { + uiName: 'combox', + onbuttonclick:function () { + this.showPopup(); + }, + initCombox: function (){ + var me = this; + this.items = this.items || []; + for (var i=0; i vpRect.right) { + left = vpRect.right - rect.width; + } + var top = offset.top; + if (top + rect.height > vpRect.bottom) { + top = vpRect.bottom - rect.height; + } + el.style.left = Math.max(left, 0) + 'px'; + el.style.top = Math.max(top, 0) + 'px'; + }, + showAtCenter: function (){ + + var vpRect = uiUtils.getViewportRect(); + + if ( !this.fullscreen ) { + this.getDom().style.display = ''; + var popSize = this.fitSize(); + var titleHeight = this.getDom('titlebar').offsetHeight | 0; + var left = vpRect.width / 2 - popSize.width / 2; + var top = vpRect.height / 2 - (popSize.height - titleHeight) / 2 - titleHeight; + var popEl = this.getDom(); + this.safeSetOffset({ + left: Math.max(left | 0, 0), + top: Math.max(top | 0, 0) + }); + if (!domUtils.hasClass(popEl, 'edui-state-centered')) { + popEl.className += ' edui-state-centered'; + } + } else { + var dialogWrapNode = this.getDom(), + contentNode = this.getDom('content'); + + dialogWrapNode.style.display = "block"; + + var wrapRect = UE.ui.uiUtils.getClientRect( dialogWrapNode ), + contentRect = UE.ui.uiUtils.getClientRect( contentNode ); + dialogWrapNode.style.left = "-100000px"; + + contentNode.style.width = ( vpRect.width - wrapRect.width + contentRect.width ) + "px"; + contentNode.style.height = ( vpRect.height - wrapRect.height + contentRect.height ) + "px"; + + dialogWrapNode.style.width = vpRect.width + "px"; + dialogWrapNode.style.height = vpRect.height + "px"; + dialogWrapNode.style.left = 0; + + //保存环境的overflow值 + this._originalContext = { + html: { + overflowX: document.documentElement.style.overflowX, + overflowY: document.documentElement.style.overflowY + }, + body: { + overflowX: document.body.style.overflowX, + overflowY: document.body.style.overflowY + } + }; + + document.documentElement.style.overflowX = 'hidden'; + document.documentElement.style.overflowY = 'hidden'; + document.body.style.overflowX = 'hidden'; + document.body.style.overflowY = 'hidden'; + + } + + this._show(); + }, + getContentHtml: function (){ + var contentHtml = ''; + if (typeof this.content == 'string') { + contentHtml = this.content; + } else if (this.iframeUrl) { + contentHtml = ''; + } + return contentHtml; + }, + getHtmlTpl: function (){ + var footHtml = ''; + + if (this.buttons) { + var buff = []; + for (var i=0; i' + buff.join('') + '' + + ''; + } + + return '
    ' + + '
    ' + + '
    ' + + '
    ' + + '' + (this.title || '') + '' + + '
    ' + + this.closeButton.renderHtml() + + '
    ' + + '
    '+ ( this.autoReset ? '' : this.getContentHtml()) +'
    ' + + footHtml + + '
    '; + }, + postRender: function (){ + // todo: 保持居中/记住上次关闭位置选项 + if (!this.modalMask.getDom()) { + this.modalMask.render(); + this.modalMask.hide(); + } + if (!this.dragMask.getDom()) { + this.dragMask.render(); + this.dragMask.hide(); + } + var me = this; + this.addListener('show', function (){ + me.modalMask.show(this.getDom().style.zIndex - 2); + }); + this.addListener('hide', function (){ + me.modalMask.hide(); + }); + if (this.buttons) { + for (var i=0; i'; + me.editor.container.style.zIndex && (this.getDom().style.zIndex = me.editor.container.style.zIndex * 1 + 1); + } + } + // canSideUp:false, + // canSideLeft:false + }); + this.onbuttonclick = function(){ + this.showPopup(); + }; + this.initSplitButton(); + } + + }; + + utils.inherits(MultiMenuPop, SplitButton); +})(); + + +// ui/shortcutmenu.js +(function () { + var UI = baidu.editor.ui, + UIBase = UI.UIBase, + uiUtils = UI.uiUtils, + utils = baidu.editor.utils, + domUtils = baidu.editor.dom.domUtils; + + var allMenus = [],//存储所有快捷菜单 + timeID, + isSubMenuShow = false;//是否有子pop显示 + + var ShortCutMenu = UI.ShortCutMenu = function (options) { + this.initOptions (options); + this.initShortCutMenu (); + }; + + ShortCutMenu.postHide = hideAllMenu; + + ShortCutMenu.prototype = { + isHidden : true , + SPACE : 5 , + initShortCutMenu : function () { + this.items = this.items || []; + this.initUIBase (); + this.initItems (); + this.initEvent (); + allMenus.push (this); + } , + initEvent : function () { + var me = this, + doc = me.editor.document; + + domUtils.on (doc , "mousemove" , function (e) { + if (me.isHidden === false) { + //有pop显示就不隐藏快捷菜单 + if (me.getSubMenuMark () || me.eventType == "contextmenu") return; + + + var flag = true, + el = me.getDom (), + wt = el.offsetWidth, + ht = el.offsetHeight, + distanceX = wt / 2 + me.SPACE,//距离中心X标准 + distanceY = ht / 2,//距离中心Y标准 + x = Math.abs (e.screenX - me.left),//离中心距离横坐标 + y = Math.abs (e.screenY - me.top);//离中心距离纵坐标 + + clearTimeout (timeID); + timeID = setTimeout (function () { + if (y > 0 && y < distanceY) { + me.setOpacity (el , "1"); + } else if (y > distanceY && y < distanceY + 70) { + me.setOpacity (el , "0.5"); + flag = false; + } else if (y > distanceY + 70 && y < distanceY + 140) { + me.hide (); + } + + if (flag && x > 0 && x < distanceX) { + me.setOpacity (el , "1") + } else if (x > distanceX && x < distanceX + 70) { + me.setOpacity (el , "0.5") + } else if (x > distanceX + 70 && x < distanceX + 140) { + me.hide (); + } + }); + } + }); + + //ie\ff下 mouseout不准 + if (browser.chrome) { + domUtils.on (doc , "mouseout" , function (e) { + var relatedTgt = e.relatedTarget || e.toElement; + + if (relatedTgt == null || relatedTgt.tagName == "HTML") { + me.hide (); + } + }); + } + + me.editor.addListener ("afterhidepop" , function () { + if (!me.isHidden) { + isSubMenuShow = true; + } + }); + + } , + initItems : function () { + if (utils.isArray (this.items)) { + for (var i = 0, len = this.items.length ; i < len ; i++) { + var item = this.items[i].toLowerCase (); + + if (UI[item]) { + this.items[i] = new UI[item] (this.editor); + this.items[i].className += " edui-shortcutsubmenu "; + } + } + } + } , + setOpacity : function (el , value) { + if (browser.ie && browser.version < 9) { + el.style.filter = "alpha(opacity = " + parseFloat (value) * 100 + ");" + } else { + el.style.opacity = value; + } + } , + getSubMenuMark : function () { + isSubMenuShow = false; + var layerEle = uiUtils.getFixedLayer (); + var list = domUtils.getElementsByTagName (layerEle , "div" , function (node) { + return domUtils.hasClass (node , "edui-shortcutsubmenu edui-popup") + }); + + for (var i = 0, node ; node = list[i++] ;) { + if (node.style.display != "none") { + isSubMenuShow = true; + } + } + return isSubMenuShow; + } , + show : function (e , hasContextmenu) { + var me = this, + offset = {}, + el = this.getDom (), + fixedlayer = uiUtils.getFixedLayer (); + + function setPos (offset) { + if (offset.left < 0) { + offset.left = 0; + } + if (offset.top < 0) { + offset.top = 0; + } + el.style.cssText = "position:absolute;left:" + offset.left + "px;top:" + offset.top + "px;"; + } + + function setPosByCxtMenu (menu) { + if (!menu.tagName) { + menu = menu.getDom (); + } + offset.left = parseInt (menu.style.left); + offset.top = parseInt (menu.style.top); + offset.top -= el.offsetHeight + 15; + setPos (offset); + } + + + me.eventType = e.type; + el.style.cssText = "display:block;left:-9999px"; + + if (e.type == "contextmenu" && hasContextmenu) { + var menu = domUtils.getElementsByTagName (fixedlayer , "div" , "edui-contextmenu")[0]; + if (menu) { + setPosByCxtMenu (menu) + } else { + me.editor.addListener ("aftershowcontextmenu" , function (type , menu) { + setPosByCxtMenu (menu); + }); + } + } else { + offset = uiUtils.getViewportOffsetByEvent (e); + offset.top -= el.offsetHeight + me.SPACE; + offset.left += me.SPACE + 20; + setPos (offset); + me.setOpacity (el , 0.2); + } + + + me.isHidden = false; + me.left = e.screenX + el.offsetWidth / 2 - me.SPACE; + me.top = e.screenY - (el.offsetHeight / 2) - me.SPACE; + + if (me.editor) { + el.style.zIndex = me.editor.container.style.zIndex * 1 + 10; + fixedlayer.style.zIndex = el.style.zIndex - 1; + } + } , + hide : function () { + if (this.getDom ()) { + this.getDom ().style.display = "none"; + } + this.isHidden = true; + } , + postRender : function () { + if (utils.isArray (this.items)) { + for (var i = 0, item ; item = this.items[i++] ;) { + item.postRender (); + } + } + } , + getHtmlTpl : function () { + var buff; + if (utils.isArray (this.items)) { + buff = []; + for (var i = 0 ; i < this.items.length ; i++) { + buff[i] = this.items[i].renderHtml (); + } + buff = buff.join (""); + } else { + buff = this.items; + } + + return '
    ' + + buff + + '
    '; + } + }; + + utils.inherits (ShortCutMenu , UIBase); + + function hideAllMenu (e) { + var tgt = e.target || e.srcElement, + cur = domUtils.findParent (tgt , function (node) { + return domUtils.hasClass (node , "edui-shortcutmenu") || domUtils.hasClass (node , "edui-popup"); + } , true); + + if (!cur) { + for (var i = 0, menu ; menu = allMenus[i++] ;) { + menu.hide () + } + } + } + + domUtils.on (document , 'mousedown' , function (e) { + hideAllMenu (e); + }); + + domUtils.on (window , 'scroll' , function (e) { + hideAllMenu (e); + }); + +}) (); + + +// ui/breakline.js +(function (){ + var utils = baidu.editor.utils, + UIBase = baidu.editor.ui.UIBase, + Breakline = baidu.editor.ui.Breakline = function (options){ + this.initOptions(options); + this.initSeparator(); + }; + Breakline.prototype = { + uiName: 'Breakline', + initSeparator: function (){ + this.initUIBase(); + }, + getHtmlTpl: function (){ + return '
    '; + } + }; + utils.inherits(Breakline, UIBase); + +})(); + + +// ui/message.js +///import core +///import uicore +(function () { + var utils = baidu.editor.utils, + domUtils = baidu.editor.dom.domUtils, + UIBase = baidu.editor.ui.UIBase, + Message = baidu.editor.ui.Message = function (options){ + this.initOptions(options); + this.initMessage(); + }; + + Message.prototype = { + initMessage: function (){ + this.initUIBase(); + }, + getHtmlTpl: function (){ + return '
    ' + + '
    ×
    ' + + '
    ' + + ' ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    '; + }, + reset: function(opt){ + var me = this; + if (!opt.keepshow) { + clearTimeout(this.timer); + me.timer = setTimeout(function(){ + me.hide(); + }, opt.timeout || 4000); + } + + opt.content !== undefined && me.setContent(opt.content); + opt.type !== undefined && me.setType(opt.type); + + me.show(); + }, + postRender: function(){ + var me = this, + closer = this.getDom('closer'); + closer && domUtils.on(closer, 'click', function(){ + me.hide(); + }); + }, + setContent: function(content){ + this.getDom('content').innerHTML = content; + }, + setType: function(type){ + type = type || 'info'; + var body = this.getDom('body'); + body.className = body.className.replace(/edui-message-type-[\w-]+/, 'edui-message-type-' + type); + }, + getContent: function(){ + return this.getDom('content').innerHTML; + }, + getType: function(){ + var arr = this.getDom('body').match(/edui-message-type-([\w-]+)/); + return arr ? arr[1]:''; + }, + show: function (){ + this.getDom().style.display = 'block'; + }, + hide: function (){ + var dom = this.getDom(); + if (dom) { + dom.style.display = 'none'; + dom.parentNode && dom.parentNode.removeChild(dom); + } + } + }; + + utils.inherits(Message, UIBase); + +})(); + + +// adapter/editorui.js +//ui跟编辑器的适配層 +//那个按钮弹出是dialog,是下拉筐等都是在这个js中配置 +//自己写的ui也要在这里配置,放到baidu.editor.ui下边,当编辑器实例化的时候会根据ueditor.config中的toolbars找到相应的进行实例化 +(function () { + var utils = baidu.editor.utils; + var editorui = baidu.editor.ui; + var _Dialog = editorui.Dialog; + editorui.buttons = {}; + + editorui.Dialog = function (options) { + var dialog = new _Dialog(options); + dialog.addListener('hide', function () { + + if (dialog.editor) { + var editor = dialog.editor; + try { + if (browser.gecko) { + var y = editor.window.scrollY, + x = editor.window.scrollX; + editor.body.focus(); + editor.window.scrollTo(x, y); + } else { + editor.focus(); + } + + + } catch (ex) { + } + } + }); + return dialog; + }; + + var iframeUrlMap = { + 'anchor':'~/dialogs/anchor/anchor.html', + 'insertimage':'~/dialogs/image/image.html', + 'link':'~/dialogs/link/link.html', + 'spechars':'~/dialogs/spechars/spechars.html', + 'searchreplace':'~/dialogs/searchreplace/searchreplace.html', + 'map':'~/dialogs/map/map.html', + 'gmap':'~/dialogs/gmap/gmap.html', + 'insertvideo':'~/dialogs/video/video.html', + 'help':'~/dialogs/help/help.html', + 'preview':'~/dialogs/preview/preview.html', + 'emotion':'~/dialogs/emotion/emotion.html', + 'wordimage':'~/dialogs/wordimage/wordimage.html', + 'attachment':'~/dialogs/attachment/attachment.html', + 'insertframe':'~/dialogs/insertframe/insertframe.html', + 'edittip':'~/dialogs/table/edittip.html', + 'edittable':'~/dialogs/table/edittable.html', + 'edittd':'~/dialogs/table/edittd.html', + 'webapp':'~/dialogs/webapp/webapp.html', + 'snapscreen':'~/dialogs/snapscreen/snapscreen.html', + 'scrawl':'~/dialogs/scrawl/scrawl.html', + 'music':'~/dialogs/music/music.html', + 'template':'~/dialogs/template/template.html', + 'background':'~/dialogs/background/background.html', + 'charts': '~/dialogs/charts/charts.html' + }; + //为工具栏添加按钮,以下都是统一的按钮触发命令,所以写在一起 + var btnCmds = ['undo', 'redo', 'formatmatch', + 'bold', 'italic', 'underline', 'fontborder', 'touppercase', 'tolowercase', + 'strikethrough', 'subscript', 'superscript', 'source', 'indent', 'outdent', + 'blockquote', 'pasteplain', 'pagebreak', + 'selectall', 'print','horizontal', 'removeformat', 'time', 'date', 'unlink', + 'insertparagraphbeforetable', 'insertrow', 'insertcol', 'mergeright', 'mergedown', 'deleterow', + 'deletecol', 'splittorows', 'splittocols', 'splittocells', 'mergecells', 'deletetable', 'drafts']; + + for (var i = 0, ci; ci = btnCmds[i++];) { + ci = ci.toLowerCase(); + editorui[ci] = function (cmd) { + return function (editor) { + var ui = new editorui.Button({ + className:'edui-for-' + cmd, + title:editor.options.labelMap[cmd] || editor.getLang("labelMap." + cmd) || '', + onclick:function () { + editor.execCommand(cmd); + }, + theme:editor.options.theme, + showText:false + }); + editorui.buttons[cmd] = ui; + editor.addListener('selectionchange', function (type, causeByUi, uiReady) { + var state = editor.queryCommandState(cmd); + if (state == -1) { + ui.setDisabled(true); + ui.setChecked(false); + } else { + if (!uiReady) { + ui.setDisabled(false); + ui.setChecked(state); + } + } + }); + return ui; + }; + }(ci); + } + + //清除文档 + editorui.cleardoc = function (editor) { + var ui = new editorui.Button({ + className:'edui-for-cleardoc', + title:editor.options.labelMap.cleardoc || editor.getLang("labelMap.cleardoc") || '', + theme:editor.options.theme, + onclick:function () { + if (confirm(editor.getLang("confirmClear"))) { + editor.execCommand('cleardoc'); + } + } + }); + editorui.buttons["cleardoc"] = ui; + editor.addListener('selectionchange', function () { + ui.setDisabled(editor.queryCommandState('cleardoc') == -1); + }); + return ui; + }; + + //排版,图片排版,文字方向 + var typeset = { + 'justify':['left', 'right', 'center', 'justify'], + 'imagefloat':['none', 'left', 'center', 'right'], + 'directionality':['ltr', 'rtl'] + }; + + for (var p in typeset) { + + (function (cmd, val) { + for (var i = 0, ci; ci = val[i++];) { + (function (cmd2) { + editorui[cmd.replace('float', '') + cmd2] = function (editor) { + var ui = new editorui.Button({ + className:'edui-for-' + cmd.replace('float', '') + cmd2, + title:editor.options.labelMap[cmd.replace('float', '') + cmd2] || editor.getLang("labelMap." + cmd.replace('float', '') + cmd2) || '', + theme:editor.options.theme, + onclick:function () { + editor.execCommand(cmd, cmd2); + } + }); + editorui.buttons[cmd] = ui; + editor.addListener('selectionchange', function (type, causeByUi, uiReady) { + ui.setDisabled(editor.queryCommandState(cmd) == -1); + ui.setChecked(editor.queryCommandValue(cmd) == cmd2 && !uiReady); + }); + return ui; + }; + })(ci) + } + })(p, typeset[p]) + } + + //字体颜色和背景颜色 + for (var i = 0, ci; ci = ['backcolor', 'forecolor'][i++];) { + editorui[ci] = function (cmd) { + return function (editor) { + var ui = new editorui.ColorButton({ + className:'edui-for-' + cmd, + color:'default', + title:editor.options.labelMap[cmd] || editor.getLang("labelMap." + cmd) || '', + editor:editor, + onpickcolor:function (t, color) { + editor.execCommand(cmd, color); + }, + onpicknocolor:function () { + editor.execCommand(cmd, 'default'); + this.setColor('transparent'); + this.color = 'default'; + }, + onbuttonclick:function () { + editor.execCommand(cmd, this.color); + } + }); + editorui.buttons[cmd] = ui; + editor.addListener('selectionchange', function () { + ui.setDisabled(editor.queryCommandState(cmd) == -1); + }); + return ui; + }; + }(ci); + } + + + var dialogBtns = { + noOk:['searchreplace', 'help', 'spechars', 'webapp','preview'], + ok:['attachment', 'anchor', 'link', 'insertimage', 'map', 'gmap', 'insertframe', 'wordimage', + 'insertvideo', 'insertframe', 'edittip', 'edittable', 'edittd', 'scrawl', 'template', 'music', 'background', 'charts'] + }; + + for (var p in dialogBtns) { + (function (type, vals) { + for (var i = 0, ci; ci = vals[i++];) { + //todo opera下存在问题 + if (browser.opera && ci === "searchreplace") { + continue; + } + (function (cmd) { + editorui[cmd] = function (editor, iframeUrl, title) { + iframeUrl = iframeUrl || (editor.options.iframeUrlMap || {})[cmd] || iframeUrlMap[cmd]; + title = editor.options.labelMap[cmd] || editor.getLang("labelMap." + cmd) || ''; + + var dialog; + //没有iframeUrl不创建dialog + if (iframeUrl) { + dialog = new editorui.Dialog(utils.extend({ + iframeUrl:editor.ui.mapUrl(iframeUrl), + editor:editor, + className:'edui-for-' + cmd, + title:title, + holdScroll: cmd === 'insertimage', + fullscreen: /charts|preview/.test(cmd), + closeDialog:editor.getLang("closeDialog") + }, type == 'ok' ? { + buttons:[ + { + className:'edui-okbutton', + label:editor.getLang("ok"), + editor:editor, + onclick:function () { + dialog.close(true); + } + }, + { + className:'edui-cancelbutton', + label:editor.getLang("cancel"), + editor:editor, + onclick:function () { + dialog.close(false); + } + } + ] + } : {})); + + editor.ui._dialogs[cmd + "Dialog"] = dialog; + } + + var ui = new editorui.Button({ + className:'edui-for-' + cmd, + title:title, + onclick:function () { + if (dialog) { + switch (cmd) { + case "wordimage": + var images = editor.execCommand("wordimage"); + if (images && images.length) { + dialog.render(); + dialog.open(); + } + break; + case "scrawl": + if (editor.queryCommandState("scrawl") != -1) { + dialog.render(); + dialog.open(); + } + + break; + default: + dialog.render(); + dialog.open(); + } + } + }, + theme:editor.options.theme, + disabled:(cmd == 'scrawl' && editor.queryCommandState("scrawl") == -1) || ( cmd == 'charts' ) + }); + editorui.buttons[cmd] = ui; + editor.addListener('selectionchange', function () { + //只存在于右键菜单而无工具栏按钮的ui不需要检测状态 + var unNeedCheckState = {'edittable':1}; + if (cmd in unNeedCheckState)return; + + var state = editor.queryCommandState(cmd); + if (ui.getDom()) { + ui.setDisabled(state == -1); + ui.setChecked(state); + } + + }); + + return ui; + }; + })(ci.toLowerCase()) + } + })(p, dialogBtns[p]); + } + + editorui.snapscreen = function (editor, iframeUrl, title) { + title = editor.options.labelMap['snapscreen'] || editor.getLang("labelMap.snapscreen") || ''; + var ui = new editorui.Button({ + className:'edui-for-snapscreen', + title:title, + onclick:function () { + editor.execCommand("snapscreen"); + }, + theme:editor.options.theme + + }); + editorui.buttons['snapscreen'] = ui; + iframeUrl = iframeUrl || (editor.options.iframeUrlMap || {})["snapscreen"] || iframeUrlMap["snapscreen"]; + if (iframeUrl) { + var dialog = new editorui.Dialog({ + iframeUrl:editor.ui.mapUrl(iframeUrl), + editor:editor, + className:'edui-for-snapscreen', + title:title, + buttons:[ + { + className:'edui-okbutton', + label:editor.getLang("ok"), + editor:editor, + onclick:function () { + dialog.close(true); + } + }, + { + className:'edui-cancelbutton', + label:editor.getLang("cancel"), + editor:editor, + onclick:function () { + dialog.close(false); + } + } + ] + + }); + dialog.render(); + editor.ui._dialogs["snapscreenDialog"] = dialog; + } + editor.addListener('selectionchange', function () { + ui.setDisabled(editor.queryCommandState('snapscreen') == -1); + }); + return ui; + }; + + editorui.insertcode = function (editor, list, title) { + list = editor.options['insertcode'] || []; + title = editor.options.labelMap['insertcode'] || editor.getLang("labelMap.insertcode") || ''; + // if (!list.length) return; + var items = []; + utils.each(list,function(key,val){ + items.push({ + label:key, + value:val, + theme:editor.options.theme, + renderLabelHtml:function () { + return '
    ' + (this.label || '') + '
    '; + } + }); + }); + + var ui = new editorui.Combox({ + editor:editor, + items:items, + onselect:function (t, index) { + editor.execCommand('insertcode', this.items[index].value); + }, + onbuttonclick:function () { + this.showPopup(); + }, + title:title, + initValue:title, + className:'edui-for-insertcode', + indexByValue:function (value) { + if (value) { + for (var i = 0, ci; ci = this.items[i]; i++) { + if (ci.value.indexOf(value) != -1) + return i; + } + } + + return -1; + } + }); + editorui.buttons['insertcode'] = ui; + editor.addListener('selectionchange', function (type, causeByUi, uiReady) { + if (!uiReady) { + var state = editor.queryCommandState('insertcode'); + if (state == -1) { + ui.setDisabled(true); + } else { + ui.setDisabled(false); + var value = editor.queryCommandValue('insertcode'); + if(!value){ + ui.setValue(title); + return; + } + //trace:1871 ie下从源码模式切换回来时,字体会带单引号,而且会有逗号 + value && (value = value.replace(/['"]/g, '').split(',')[0]); + ui.setValue(value); + + } + } + + }); + return ui; + }; + editorui.fontfamily = function (editor, list, title) { + + list = editor.options['fontfamily'] || []; + title = editor.options.labelMap['fontfamily'] || editor.getLang("labelMap.fontfamily") || ''; + if (!list.length) return; + for (var i = 0, ci, items = []; ci = list[i]; i++) { + var langLabel = editor.getLang('fontfamily')[ci.name] || ""; + (function (key, val) { + items.push({ + label:key, + value:val, + theme:editor.options.theme, + renderLabelHtml:function () { + return '
    ' + (this.label || '') + '
    '; + } + }); + })(ci.label || langLabel, ci.val) + } + var ui = new editorui.Combox({ + editor:editor, + items:items, + onselect:function (t, index) { + editor.execCommand('FontFamily', this.items[index].value); + }, + onbuttonclick:function () { + this.showPopup(); + }, + title:title, + initValue:title, + className:'edui-for-fontfamily', + indexByValue:function (value) { + if (value) { + for (var i = 0, ci; ci = this.items[i]; i++) { + if (ci.value.indexOf(value) != -1) + return i; + } + } + + return -1; + } + }); + editorui.buttons['fontfamily'] = ui; + editor.addListener('selectionchange', function (type, causeByUi, uiReady) { + if (!uiReady) { + var state = editor.queryCommandState('FontFamily'); + if (state == -1) { + ui.setDisabled(true); + } else { + ui.setDisabled(false); + var value = editor.queryCommandValue('FontFamily'); + //trace:1871 ie下从源码模式切换回来时,字体会带单引号,而且会有逗号 + value && (value = value.replace(/['"]/g, '').split(',')[0]); + ui.setValue(value); + + } + } + + }); + return ui; + }; + + editorui.fontsize = function (editor, list, title) { + title = editor.options.labelMap['fontsize'] || editor.getLang("labelMap.fontsize") || ''; + list = list || editor.options['fontsize'] || []; + if (!list.length) return; + var items = []; + for (var i = 0; i < list.length; i++) { + var size = list[i] + 'px'; + items.push({ + label:size, + value:size, + theme:editor.options.theme, + renderLabelHtml:function () { + return '
    ' + (this.label || '') + '
    '; + } + }); + } + var ui = new editorui.Combox({ + editor:editor, + items:items, + title:title, + initValue:title, + onselect:function (t, index) { + editor.execCommand('FontSize', this.items[index].value); + }, + onbuttonclick:function () { + this.showPopup(); + }, + className:'edui-for-fontsize' + }); + editorui.buttons['fontsize'] = ui; + editor.addListener('selectionchange', function (type, causeByUi, uiReady) { + if (!uiReady) { + var state = editor.queryCommandState('FontSize'); + if (state == -1) { + ui.setDisabled(true); + } else { + ui.setDisabled(false); + ui.setValue(editor.queryCommandValue('FontSize')); + } + } + + }); + return ui; + }; + + editorui.paragraph = function (editor, list, title) { + title = editor.options.labelMap['paragraph'] || editor.getLang("labelMap.paragraph") || ''; + list = editor.options['paragraph'] || []; + if (utils.isEmptyObject(list)) return; + var items = []; + for (var i in list) { + items.push({ + value:i, + label:list[i] || editor.getLang("paragraph")[i], + theme:editor.options.theme, + renderLabelHtml:function () { + return '
    ' + (this.label || '') + '
    '; + } + }) + } + var ui = new editorui.Combox({ + editor:editor, + items:items, + title:title, + initValue:title, + className:'edui-for-paragraph', + onselect:function (t, index) { + editor.execCommand('Paragraph', this.items[index].value); + }, + onbuttonclick:function () { + this.showPopup(); + } + }); + editorui.buttons['paragraph'] = ui; + editor.addListener('selectionchange', function (type, causeByUi, uiReady) { + if (!uiReady) { + var state = editor.queryCommandState('Paragraph'); + if (state == -1) { + ui.setDisabled(true); + } else { + ui.setDisabled(false); + var value = editor.queryCommandValue('Paragraph'); + var index = ui.indexByValue(value); + if (index != -1) { + ui.setValue(value); + } else { + ui.setValue(ui.initValue); + } + } + } + + }); + return ui; + }; + + + //自定义标题 + editorui.customstyle = function (editor) { + var list = editor.options['customstyle'] || [], + title = editor.options.labelMap['customstyle'] || editor.getLang("labelMap.customstyle") || ''; + if (!list.length)return; + var langCs = editor.getLang('customstyle'); + for (var i = 0, items = [], t; t = list[i++];) { + (function (t) { + var ck = {}; + ck.label = t.label ? t.label : langCs[t.name]; + ck.style = t.style; + ck.className = t.className; + ck.tag = t.tag; + items.push({ + label:ck.label, + value:ck, + theme:editor.options.theme, + renderLabelHtml:function () { + return '
    ' + '<' + ck.tag + ' ' + (ck.className ? ' class="' + ck.className + '"' : "") + + (ck.style ? ' style="' + ck.style + '"' : "") + '>' + ck.label + "<\/" + ck.tag + ">" + + '
    '; + } + }); + })(t); + } + + var ui = new editorui.Combox({ + editor:editor, + items:items, + title:title, + initValue:title, + className:'edui-for-customstyle', + onselect:function (t, index) { + editor.execCommand('customstyle', this.items[index].value); + }, + onbuttonclick:function () { + this.showPopup(); + }, + indexByValue:function (value) { + for (var i = 0, ti; ti = this.items[i++];) { + if (ti.label == value) { + return i - 1 + } + } + return -1; + } + }); + editorui.buttons['customstyle'] = ui; + editor.addListener('selectionchange', function (type, causeByUi, uiReady) { + if (!uiReady) { + var state = editor.queryCommandState('customstyle'); + if (state == -1) { + ui.setDisabled(true); + } else { + ui.setDisabled(false); + var value = editor.queryCommandValue('customstyle'); + var index = ui.indexByValue(value); + if (index != -1) { + ui.setValue(value); + } else { + ui.setValue(ui.initValue); + } + } + } + + }); + return ui; + }; + editorui.inserttable = function (editor, iframeUrl, title) { + title = editor.options.labelMap['inserttable'] || editor.getLang("labelMap.inserttable") || ''; + var ui = new editorui.TableButton({ + editor:editor, + title:title, + className:'edui-for-inserttable', + onpicktable:function (t, numCols, numRows) { + editor.execCommand('InsertTable', {numRows:numRows, numCols:numCols, border:1}); + }, + onbuttonclick:function () { + this.showPopup(); + } + }); + editorui.buttons['inserttable'] = ui; + editor.addListener('selectionchange', function () { + ui.setDisabled(editor.queryCommandState('inserttable') == -1); + }); + return ui; + }; + + editorui.lineheight = function (editor) { + var val = editor.options.lineheight || []; + if (!val.length)return; + for (var i = 0, ci, items = []; ci = val[i++];) { + items.push({ + //todo:写死了 + label:ci, + value:ci, + theme:editor.options.theme, + onclick:function () { + editor.execCommand("lineheight", this.value); + } + }) + } + var ui = new editorui.MenuButton({ + editor:editor, + className:'edui-for-lineheight', + title:editor.options.labelMap['lineheight'] || editor.getLang("labelMap.lineheight") || '', + items:items, + onbuttonclick:function () { + var value = editor.queryCommandValue('LineHeight') || this.value; + editor.execCommand("LineHeight", value); + } + }); + editorui.buttons['lineheight'] = ui; + editor.addListener('selectionchange', function () { + var state = editor.queryCommandState('LineHeight'); + if (state == -1) { + ui.setDisabled(true); + } else { + ui.setDisabled(false); + var value = editor.queryCommandValue('LineHeight'); + value && ui.setValue((value + '').replace(/cm/, '')); + ui.setChecked(state) + } + }); + return ui; + }; + + var rowspacings = ['top', 'bottom']; + for (var r = 0, ri; ri = rowspacings[r++];) { + (function (cmd) { + editorui['rowspacing' + cmd] = function (editor) { + var val = editor.options['rowspacing' + cmd] || []; + if (!val.length) return null; + for (var i = 0, ci, items = []; ci = val[i++];) { + items.push({ + label:ci, + value:ci, + theme:editor.options.theme, + onclick:function () { + editor.execCommand("rowspacing", this.value, cmd); + } + }) + } + var ui = new editorui.MenuButton({ + editor:editor, + className:'edui-for-rowspacing' + cmd, + title:editor.options.labelMap['rowspacing' + cmd] || editor.getLang("labelMap.rowspacing" + cmd) || '', + items:items, + onbuttonclick:function () { + var value = editor.queryCommandValue('rowspacing', cmd) || this.value; + editor.execCommand("rowspacing", value, cmd); + } + }); + editorui.buttons[cmd] = ui; + editor.addListener('selectionchange', function () { + var state = editor.queryCommandState('rowspacing', cmd); + if (state == -1) { + ui.setDisabled(true); + } else { + ui.setDisabled(false); + var value = editor.queryCommandValue('rowspacing', cmd); + value && ui.setValue((value + '').replace(/%/, '')); + ui.setChecked(state) + } + }); + return ui; + } + })(ri) + } + //有序,无序列表 + var lists = ['insertorderedlist', 'insertunorderedlist']; + for (var l = 0, cl; cl = lists[l++];) { + (function (cmd) { + editorui[cmd] = function (editor) { + var vals = editor.options[cmd], + _onMenuClick = function () { + editor.execCommand(cmd, this.value); + }, items = []; + for (var i in vals) { + items.push({ + label:vals[i] || editor.getLang()[cmd][i] || "", + value:i, + theme:editor.options.theme, + onclick:_onMenuClick + }) + } + var ui = new editorui.MenuButton({ + editor:editor, + className:'edui-for-' + cmd, + title:editor.getLang("labelMap." + cmd) || '', + 'items':items, + onbuttonclick:function () { + var value = editor.queryCommandValue(cmd) || this.value; + editor.execCommand(cmd, value); + } + }); + editorui.buttons[cmd] = ui; + editor.addListener('selectionchange', function () { + var state = editor.queryCommandState(cmd); + if (state == -1) { + ui.setDisabled(true); + } else { + ui.setDisabled(false); + var value = editor.queryCommandValue(cmd); + ui.setValue(value); + ui.setChecked(state) + } + }); + return ui; + }; + })(cl) + } + + editorui.fullscreen = function (editor, title) { + title = editor.options.labelMap['fullscreen'] || editor.getLang("labelMap.fullscreen") || ''; + var ui = new editorui.Button({ + className:'edui-for-fullscreen', + title:title, + theme:editor.options.theme, + onclick:function () { + if (editor.ui) { + editor.ui.setFullScreen(!editor.ui.isFullScreen()); + } + this.setChecked(editor.ui.isFullScreen()); + } + }); + editorui.buttons['fullscreen'] = ui; + editor.addListener('selectionchange', function () { + var state = editor.queryCommandState('fullscreen'); + ui.setDisabled(state == -1); + ui.setChecked(editor.ui.isFullScreen()); + }); + return ui; + }; + + // 表情 + editorui["emotion"] = function (editor, iframeUrl) { + var cmd = "emotion"; + var ui = new editorui.MultiMenuPop({ + title:editor.options.labelMap[cmd] || editor.getLang("labelMap." + cmd + "") || '', + editor:editor, + className:'edui-for-' + cmd, + iframeUrl:editor.ui.mapUrl(iframeUrl || (editor.options.iframeUrlMap || {})[cmd] || iframeUrlMap[cmd]) + }); + editorui.buttons[cmd] = ui; + + editor.addListener('selectionchange', function () { + ui.setDisabled(editor.queryCommandState(cmd) == -1) + }); + return ui; + }; + + editorui.autotypeset = function (editor) { + var ui = new editorui.AutoTypeSetButton({ + editor:editor, + title:editor.options.labelMap['autotypeset'] || editor.getLang("labelMap.autotypeset") || '', + className:'edui-for-autotypeset', + onbuttonclick:function () { + editor.execCommand('autotypeset') + } + }); + editorui.buttons['autotypeset'] = ui; + editor.addListener('selectionchange', function () { + ui.setDisabled(editor.queryCommandState('autotypeset') == -1); + }); + return ui; + }; + + /* 简单上传插件 */ + editorui["simpleupload"] = function (editor) { + var name = 'simpleupload', + ui = new editorui.Button({ + className:'edui-for-' + name, + title:editor.options.labelMap[name] || editor.getLang("labelMap." + name) || '', + onclick:function () {}, + theme:editor.options.theme, + showText:false + }); + editorui.buttons[name] = ui; + editor.addListener('ready', function() { + var b = ui.getDom('body'), + iconSpan = b.children[0]; + editor.fireEvent('simpleuploadbtnready', iconSpan); + }); + editor.addListener('selectionchange', function (type, causeByUi, uiReady) { + var state = editor.queryCommandState(name); + if (state == -1) { + ui.setDisabled(true); + ui.setChecked(false); + } else { + if (!uiReady) { + ui.setDisabled(false); + ui.setChecked(state); + } + } + }); + return ui; + }; + +})(); + + +// adapter/editor.js +///import core +///commands 全屏 +///commandsName FullScreen +///commandsTitle 全屏 +(function () { + var utils = baidu.editor.utils, + uiUtils = baidu.editor.ui.uiUtils, + UIBase = baidu.editor.ui.UIBase, + domUtils = baidu.editor.dom.domUtils; + var nodeStack = []; + + function EditorUI(options) { + this.initOptions(options); + this.initEditorUI(); + } + + EditorUI.prototype = { + uiName:'editor', + initEditorUI:function () { + this.editor.ui = this; + this._dialogs = {}; + this.initUIBase(); + this._initToolbars(); + var editor = this.editor, + me = this; + + editor.addListener('ready', function () { + //提供getDialog方法 + editor.getDialog = function (name) { + return editor.ui._dialogs[name + "Dialog"]; + }; + domUtils.on(editor.window, 'scroll', function (evt) { + baidu.editor.ui.Popup.postHide(evt); + }); + //提供编辑器实时宽高(全屏时宽高不变化) + editor.ui._actualFrameWidth = editor.options.initialFrameWidth; + + UE.browser.ie && UE.browser.version === 6 && editor.container.ownerDocument.execCommand("BackgroundImageCache", false, true); + + //display bottom-bar label based on config + if (editor.options.elementPathEnabled) { + editor.ui.getDom('elementpath').innerHTML = '
    ' + editor.getLang("elementPathTip") + ':
    '; + } + if (editor.options.wordCount) { + function countFn() { + setCount(editor,me); + domUtils.un(editor.document, "click", arguments.callee); + } + domUtils.on(editor.document, "click", countFn); + editor.ui.getDom('wordcount').innerHTML = editor.getLang("wordCountTip"); + } + editor.ui._scale(); + if (editor.options.scaleEnabled) { + if (editor.autoHeightEnabled) { + editor.disableAutoHeight(); + } + me.enableScale(); + } else { + me.disableScale(); + } + if (!editor.options.elementPathEnabled && !editor.options.wordCount && !editor.options.scaleEnabled) { + editor.ui.getDom('elementpath').style.display = "none"; + editor.ui.getDom('wordcount').style.display = "none"; + editor.ui.getDom('scale').style.display = "none"; + } + + if (!editor.selection.isFocus())return; + editor.fireEvent('selectionchange', false, true); + + + }); + + editor.addListener('mousedown', function (t, evt) { + var el = evt.target || evt.srcElement; + baidu.editor.ui.Popup.postHide(evt, el); + baidu.editor.ui.ShortCutMenu.postHide(evt); + + }); + editor.addListener("delcells", function () { + if (UE.ui['edittip']) { + new UE.ui['edittip'](editor); + } + editor.getDialog('edittip').open(); + }); + + var pastePop, isPaste = false, timer; + editor.addListener("afterpaste", function () { + if(editor.queryCommandState('pasteplain')) + return; + if(baidu.editor.ui.PastePicker){ + pastePop = new baidu.editor.ui.Popup({ + content:new baidu.editor.ui.PastePicker({editor:editor}), + editor:editor, + className:'edui-wordpastepop' + }); + pastePop.render(); + } + isPaste = true; + }); + + editor.addListener("afterinserthtml", function () { + clearTimeout(timer); + timer = setTimeout(function () { + if (pastePop && (isPaste || editor.ui._isTransfer)) { + if(pastePop.isHidden()){ + var span = domUtils.createElement(editor.document, 'span', { + 'style':"line-height:0px;", + 'innerHTML':'\ufeff' + }), + range = editor.selection.getRange(); + range.insertNode(span); + var tmp= getDomNode(span, 'firstChild', 'previousSibling'); + tmp && pastePop.showAnchor(tmp.nodeType == 3 ? tmp.parentNode : tmp); + domUtils.remove(span); + }else{ + pastePop.show(); + } + delete editor.ui._isTransfer; + isPaste = false; + } + }, 200) + }); + editor.addListener('contextmenu', function (t, evt) { + baidu.editor.ui.Popup.postHide(evt); + }); + editor.addListener('keydown', function (t, evt) { + if (pastePop) pastePop.dispose(evt); + var keyCode = evt.keyCode || evt.which; + if(evt.altKey&&keyCode==90){ + UE.ui.buttons['fullscreen'].onclick(); + } + }); + editor.addListener('wordcount', function (type) { + setCount(this,me); + }); + function setCount(editor,ui) { + editor.setOpt({ + wordCount:true, + maximumWords:10000, + wordCountMsg:editor.options.wordCountMsg || editor.getLang("wordCountMsg"), + wordOverFlowMsg:editor.options.wordOverFlowMsg || editor.getLang("wordOverFlowMsg") + }); + var opt = editor.options, + max = opt.maximumWords, + msg = opt.wordCountMsg , + errMsg = opt.wordOverFlowMsg, + countDom = ui.getDom('wordcount'); + if (!opt.wordCount) { + return; + } + var count = editor.getContentLength(true); + if (count > max) { + countDom.innerHTML = errMsg; + editor.fireEvent("wordcountoverflow"); + } else { + countDom.innerHTML = msg.replace("{#leave}", max - count).replace("{#count}", count); + } + } + + editor.addListener('selectionchange', function () { + if (editor.options.elementPathEnabled) { + me[(editor.queryCommandState('elementpath') == -1 ? 'dis' : 'en') + 'ableElementPath']() + } + if (editor.options.scaleEnabled) { + me[(editor.queryCommandState('scale') == -1 ? 'dis' : 'en') + 'ableScale'](); + + } + }); + var popup = new baidu.editor.ui.Popup({ + editor:editor, + content:'', + className:'edui-bubble', + _onEditButtonClick:function () { + this.hide(); + editor.ui._dialogs.linkDialog.open(); + }, + _onImgEditButtonClick:function (name) { + this.hide(); + editor.ui._dialogs[name] && editor.ui._dialogs[name].open(); + + }, + _onImgSetFloat:function (value) { + this.hide(); + editor.execCommand("imagefloat", value); + + }, + _setIframeAlign:function (value) { + var frame = popup.anchorEl; + var newFrame = frame.cloneNode(true); + switch (value) { + case -2: + newFrame.setAttribute("align", ""); + break; + case -1: + newFrame.setAttribute("align", "left"); + break; + case 1: + newFrame.setAttribute("align", "right"); + break; + } + frame.parentNode.insertBefore(newFrame, frame); + domUtils.remove(frame); + popup.anchorEl = newFrame; + popup.showAnchor(popup.anchorEl); + }, + _updateIframe:function () { + var frame = editor._iframe = popup.anchorEl; + if(domUtils.hasClass(frame, 'ueditor_baidumap')) { + editor.selection.getRange().selectNode(frame).select(); + editor.ui._dialogs.mapDialog.open(); + popup.hide(); + } else { + editor.ui._dialogs.insertframeDialog.open(); + popup.hide(); + } + }, + _onRemoveButtonClick:function (cmdName) { + editor.execCommand(cmdName); + this.hide(); + }, + queryAutoHide:function (el) { + if (el && el.ownerDocument == editor.document) { + if (el.tagName.toLowerCase() == 'img' || domUtils.findParentByTagName(el, 'a', true)) { + return el !== popup.anchorEl; + } + } + return baidu.editor.ui.Popup.prototype.queryAutoHide.call(this, el); + } + }); + popup.render(); + if (editor.options.imagePopup) { + editor.addListener('mouseover', function (t, evt) { + evt = evt || window.event; + var el = evt.target || evt.srcElement; + if (editor.ui._dialogs.insertframeDialog && /iframe/ig.test(el.tagName)) { + var html = popup.formatHtml( + '' + editor.getLang("property") + ': ' + editor.getLang("default") + '  ' + editor.getLang("justifyleft") + '  ' + editor.getLang("justifyright") + '  ' + + ' ' + editor.getLang("modify") + ''); + if (html) { + popup.getDom('content').innerHTML = html; + popup.anchorEl = el; + popup.showAnchor(popup.anchorEl); + } else { + popup.hide(); + } + } + }); + editor.addListener('selectionchange', function (t, causeByUi) { + if (!causeByUi) return; + var html = '', str = "", + img = editor.selection.getRange().getClosedNode(), + dialogs = editor.ui._dialogs; + if (img && img.tagName == 'IMG') { + var dialogName = 'insertimageDialog'; + if (img.className.indexOf("edui-faked-video") != -1 || img.className.indexOf("edui-upload-video") != -1) { + dialogName = "insertvideoDialog" + } + if (img.className.indexOf("edui-faked-webapp") != -1) { + dialogName = "webappDialog" + } + if (img.src.indexOf("http://api.map.baidu.com") != -1) { + dialogName = "mapDialog" + } + if (img.className.indexOf("edui-faked-music") != -1) { + dialogName = "musicDialog" + } + if (img.src.indexOf("http://maps.google.com/maps/api/staticmap") != -1) { + dialogName = "gmapDialog" + } + if (img.getAttribute("anchorname")) { + dialogName = "anchorDialog"; + html = popup.formatHtml( + '' + editor.getLang("property") + ': ' + editor.getLang("modify") + '  ' + + '' + editor.getLang("delete") + ''); + } + if (img.getAttribute("word_img")) { + //todo 放到dialog去做查询 + editor.word_img = [img.getAttribute("word_img")]; + dialogName = "wordimageDialog" + } + if(domUtils.hasClass(img, 'loadingclass') || domUtils.hasClass(img, 'loaderrorclass')) { + dialogName = ""; + } + if (!dialogs[dialogName]) { + return; + } + str = '' + editor.getLang("property") + ': '+ + '' + editor.getLang("default") + '  ' + + '' + editor.getLang("justifyleft") + '  ' + + '' + editor.getLang("justifyright") + '  ' + + '' + editor.getLang("justifycenter") + '  '+ + '' + editor.getLang("modify") + ''; + + !html && (html = popup.formatHtml(str)) + + } + if (editor.ui._dialogs.linkDialog) { + var link = editor.queryCommandValue('link'); + var url; + if (link && (url = (link.getAttribute('_href') || link.getAttribute('href', 2)))) { + var txt = url; + if (url.length > 30) { + txt = url.substring(0, 20) + "..."; + } + if (html) { + html += '
    ' + } + html += popup.formatHtml( + '' + editor.getLang("anthorMsg") + ': ' + txt + '' + + ' ' + editor.getLang("modify") + '' + + ' ' + editor.getLang("clear") + ''); + popup.showAnchor(link); + } + } + + if (html) { + popup.getDom('content').innerHTML = html; + popup.anchorEl = img || link; + popup.showAnchor(popup.anchorEl); + } else { + popup.hide(); + } + }); + } + + }, + _initToolbars:function () { + var editor = this.editor; + var toolbars = this.toolbars || []; + var toolbarUis = []; + for (var i = 0; i < toolbars.length; i++) { + var toolbar = toolbars[i]; + var toolbarUi = new baidu.editor.ui.Toolbar({theme:editor.options.theme}); + for (var j = 0; j < toolbar.length; j++) { + var toolbarItem = toolbar[j]; + var toolbarItemUi = null; + if (typeof toolbarItem == 'string') { + toolbarItem = toolbarItem.toLowerCase(); + if (toolbarItem == '|') { + toolbarItem = 'Separator'; + } + if(toolbarItem == '||'){ + toolbarItem = 'Breakline'; + } + if (baidu.editor.ui[toolbarItem]) { + toolbarItemUi = new baidu.editor.ui[toolbarItem](editor); + } + + //fullscreen这里单独处理一下,放到首行去 + if (toolbarItem == 'fullscreen') { + if (toolbarUis && toolbarUis[0]) { + toolbarUis[0].items.splice(0, 0, toolbarItemUi); + } else { + toolbarItemUi && toolbarUi.items.splice(0, 0, toolbarItemUi); + } + + continue; + + + } + } else { + toolbarItemUi = toolbarItem; + } + if (toolbarItemUi && toolbarItemUi.id) { + + toolbarUi.add(toolbarItemUi); + } + } + toolbarUis[i] = toolbarUi; + } + + //接受外部定制的UI + + utils.each(UE._customizeUI,function(obj,key){ + var itemUI,index; + if(obj.id && obj.id != editor.key){ + return false; + } + itemUI = obj.execFn.call(editor,editor,key); + if(itemUI){ + index = obj.index; + if(index === undefined){ + index = toolbarUi.items.length; + } + toolbarUi.add(itemUI,index) + } + }); + + this.toolbars = toolbarUis; + }, + getHtmlTpl:function () { + return '
    ' + + '
    ' + + (this.toolbars.length ? + '
    ' + + this.renderToolbarBoxHtml() + + '
    ' : '') + + '' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + //modify wdcount by matao + '
    ' + + '' + + '' + + '' + + '
    ' + + '
    ' + + '
    '; + }, + showWordImageDialog:function () { + this._dialogs['wordimageDialog'].open(); + }, + renderToolbarBoxHtml:function () { + var buff = []; + for (var i = 0; i < this.toolbars.length; i++) { + buff.push(this.toolbars[i].renderHtml()); + } + return buff.join(''); + }, + setFullScreen:function (fullscreen) { + + var editor = this.editor, + container = editor.container.parentNode.parentNode; + if (this._fullscreen != fullscreen) { + this._fullscreen = fullscreen; + this.editor.fireEvent('beforefullscreenchange', fullscreen); + if (baidu.editor.browser.gecko) { + var bk = editor.selection.getRange().createBookmark(); + } + if (fullscreen) { + while (container.tagName != "BODY") { + var position = baidu.editor.dom.domUtils.getComputedStyle(container, "position"); + nodeStack.push(position); + container.style.position = "static"; + container = container.parentNode; + } + this._bakHtmlOverflow = document.documentElement.style.overflow; + this._bakBodyOverflow = document.body.style.overflow; + this._bakAutoHeight = this.editor.autoHeightEnabled; + this._bakScrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop); + + this._bakEditorContaninerWidth = editor.iframe.parentNode.offsetWidth; + if (this._bakAutoHeight) { + //当全屏时不能执行自动长高 + editor.autoHeightEnabled = false; + this.editor.disableAutoHeight(); + } + + document.documentElement.style.overflow = 'hidden'; + //修复,滚动条不收起的问题 + + window.scrollTo(0,window.scrollY); + this._bakCssText = this.getDom().style.cssText; + this._bakCssText1 = this.getDom('iframeholder').style.cssText; + editor.iframe.parentNode.style.width = ''; + this._updateFullScreen(); + } else { + while (container.tagName != "BODY") { + container.style.position = nodeStack.shift(); + container = container.parentNode; + } + this.getDom().style.cssText = this._bakCssText; + this.getDom('iframeholder').style.cssText = this._bakCssText1; + if (this._bakAutoHeight) { + editor.autoHeightEnabled = true; + this.editor.enableAutoHeight(); + } + + document.documentElement.style.overflow = this._bakHtmlOverflow; + document.body.style.overflow = this._bakBodyOverflow; + editor.iframe.parentNode.style.width = this._bakEditorContaninerWidth + 'px'; + window.scrollTo(0, this._bakScrollTop); + } + if (browser.gecko && editor.body.contentEditable === 'true') { + var input = document.createElement('input'); + document.body.appendChild(input); + editor.body.contentEditable = false; + setTimeout(function () { + input.focus(); + setTimeout(function () { + editor.body.contentEditable = true; + editor.fireEvent('fullscreenchanged', fullscreen); + editor.selection.getRange().moveToBookmark(bk).select(true); + baidu.editor.dom.domUtils.remove(input); + fullscreen && window.scroll(0, 0); + }, 0) + }, 0) + } + + if(editor.body.contentEditable === 'true'){ + this.editor.fireEvent('fullscreenchanged', fullscreen); + this.triggerLayout(); + } + + } + }, + _updateFullScreen:function () { + if (this._fullscreen) { + var vpRect = uiUtils.getViewportRect(); + this.getDom().style.cssText = 'border:0;position:absolute;left:0;top:' + (this.editor.options.topOffset || 0) + 'px;width:' + vpRect.width + 'px;height:' + vpRect.height + 'px;z-index:' + (this.getDom().style.zIndex * 1 + 100); + uiUtils.setViewportOffset(this.getDom(), { left:0, top:this.editor.options.topOffset || 0 }); + this.editor.setHeight(vpRect.height - this.getDom('toolbarbox').offsetHeight - this.getDom('bottombar').offsetHeight - (this.editor.options.topOffset || 0),true); + //不手动调一下,会导致全屏失效 + if(browser.gecko){ + try{ + window.onresize(); + }catch(e){ + + } + + } + } + }, + _updateElementPath:function () { + var bottom = this.getDom('elementpath'), list; + if (this.elementPathEnabled && (list = this.editor.queryCommandValue('elementpath'))) { + + var buff = []; + for (var i = 0, ci; ci = list[i]; i++) { + buff[i] = this.formatHtml('' + ci + ''); + } + bottom.innerHTML = '
    ' + this.editor.getLang("elementPathTip") + ': ' + buff.join(' > ') + '
    '; + + } else { + bottom.style.display = 'none' + } + }, + disableElementPath:function () { + var bottom = this.getDom('elementpath'); + bottom.innerHTML = ''; + bottom.style.display = 'none'; + this.elementPathEnabled = false; + + }, + enableElementPath:function () { + var bottom = this.getDom('elementpath'); + bottom.style.display = ''; + this.elementPathEnabled = true; + this._updateElementPath(); + }, + _scale:function () { + var doc = document, + editor = this.editor, + editorHolder = editor.container, + editorDocument = editor.document, + toolbarBox = this.getDom("toolbarbox"), + bottombar = this.getDom("bottombar"), + scale = this.getDom("scale"), + scalelayer = this.getDom("scalelayer"); + + var isMouseMove = false, + position = null, + minEditorHeight = 0, + minEditorWidth = editor.options.minFrameWidth, + pageX = 0, + pageY = 0, + scaleWidth = 0, + scaleHeight = 0; + + function down() { + position = domUtils.getXY(editorHolder); + + if (!minEditorHeight) { + minEditorHeight = editor.options.minFrameHeight + toolbarBox.offsetHeight + bottombar.offsetHeight; + } + + scalelayer.style.cssText = "position:absolute;left:0;display:;top:0;background-color:#41ABFF;opacity:0.4;filter: Alpha(opacity=40);width:" + editorHolder.offsetWidth + "px;height:" + + editorHolder.offsetHeight + "px;z-index:" + (editor.options.zIndex + 1); + + domUtils.on(doc, "mousemove", move); + domUtils.on(editorDocument, "mouseup", up); + domUtils.on(doc, "mouseup", up); + } + + var me = this; + //by xuheng 全屏时关掉缩放 + this.editor.addListener('fullscreenchanged', function (e, fullScreen) { + if (fullScreen) { + me.disableScale(); + + } else { + if (me.editor.options.scaleEnabled) { + me.enableScale(); + var tmpNode = me.editor.document.createElement('span'); + me.editor.body.appendChild(tmpNode); + me.editor.body.style.height = Math.max(domUtils.getXY(tmpNode).y, me.editor.iframe.offsetHeight - 20) + 'px'; + domUtils.remove(tmpNode) + } + } + }); + function move(event) { + clearSelection(); + var e = event || window.event; + pageX = e.pageX || (doc.documentElement.scrollLeft + e.clientX); + pageY = e.pageY || (doc.documentElement.scrollTop + e.clientY); + scaleWidth = pageX - position.x; + scaleHeight = pageY - position.y; + + if (scaleWidth >= minEditorWidth) { + isMouseMove = true; + scalelayer.style.width = scaleWidth + 'px'; + } + if (scaleHeight >= minEditorHeight) { + isMouseMove = true; + scalelayer.style.height = scaleHeight + "px"; + } + } + + function up() { + if (isMouseMove) { + isMouseMove = false; + editor.ui._actualFrameWidth = scalelayer.offsetWidth - 2; + editorHolder.style.width = editor.ui._actualFrameWidth + 'px'; + + editor.setHeight(scalelayer.offsetHeight - bottombar.offsetHeight - toolbarBox.offsetHeight - 2,true); + } + if (scalelayer) { + scalelayer.style.display = "none"; + } + clearSelection(); + domUtils.un(doc, "mousemove", move); + domUtils.un(editorDocument, "mouseup", up); + domUtils.un(doc, "mouseup", up); + } + + function clearSelection() { + if (browser.ie) + doc.selection.clear(); + else + window.getSelection().removeAllRanges(); + } + + this.enableScale = function () { + //trace:2868 + if (editor.queryCommandState("source") == 1) return; + scale.style.display = ""; + this.scaleEnabled = true; + domUtils.on(scale, "mousedown", down); + }; + this.disableScale = function () { + scale.style.display = "none"; + this.scaleEnabled = false; + domUtils.un(scale, "mousedown", down); + }; + }, + isFullScreen:function () { + return this._fullscreen; + }, + postRender:function () { + UIBase.prototype.postRender.call(this); + for (var i = 0; i < this.toolbars.length; i++) { + this.toolbars[i].postRender(); + } + var me = this; + var timerId, + domUtils = baidu.editor.dom.domUtils, + updateFullScreenTime = function () { + clearTimeout(timerId); + timerId = setTimeout(function () { + me._updateFullScreen(); + }); + }; + domUtils.on(window, 'resize', updateFullScreenTime); + + me.addListener('destroy', function () { + domUtils.un(window, 'resize', updateFullScreenTime); + clearTimeout(timerId); + }) + }, + showToolbarMsg:function (msg, flag) { + this.getDom('toolbarmsg_label').innerHTML = msg; + this.getDom('toolbarmsg').style.display = ''; + // + if (!flag) { + var w = this.getDom('upload_dialog'); + w.style.display = 'none'; + } + }, + hideToolbarMsg:function () { + this.getDom('toolbarmsg').style.display = 'none'; + }, + mapUrl:function (url) { + return url ? url.replace('~/', this.editor.options.UEDITOR_HOME_URL || '') : '' + }, + triggerLayout:function () { + var dom = this.getDom(); + if (dom.style.zoom == '1') { + dom.style.zoom = '100%'; + } else { + dom.style.zoom = '1'; + } + } + }; + utils.inherits(EditorUI, baidu.editor.ui.UIBase); + + + var instances = {}; + + + UE.ui.Editor = function (options) { + var editor = new UE.Editor(options); + editor.options.editor = editor; + utils.loadFile(document, { + href:editor.options.themePath + editor.options.theme + "/css/ueditor.css", + tag:"link", + type:"text/css", + rel:"stylesheet" + }); + + var oldRender = editor.render; + editor.render = function (holder) { + if (holder.constructor === String) { + editor.key = holder; + instances[holder] = editor; + } + utils.domReady(function () { + editor.langIsReady ? renderUI() : editor.addListener("langReady", renderUI); + function renderUI() { + editor.setOpt({ + labelMap:editor.options.labelMap || editor.getLang('labelMap') + }); + new EditorUI(editor.options); + if (holder) { + if (holder.constructor === String) { + holder = document.getElementById(holder); + } + holder && holder.getAttribute('name') && ( editor.options.textarea = holder.getAttribute('name')); + if (holder && /script|textarea/ig.test(holder.tagName)) { + var newDiv = document.createElement('div'); + holder.parentNode.insertBefore(newDiv, holder); + var cont = holder.value || holder.innerHTML; + editor.options.initialContent = /^[\t\r\n ]*$/.test(cont) ? editor.options.initialContent : + cont.replace(/>[\n\r\t]+([ ]{4})+/g, '>') + .replace(/[\n\r\t]+([ ]{4})+[\n\r\t]+<'); + holder.className && (newDiv.className = holder.className); + holder.style.cssText && (newDiv.style.cssText = holder.style.cssText); + if (/textarea/i.test(holder.tagName)) { + editor.textarea = holder; + editor.textarea.style.display = 'none'; + + + } else { + holder.parentNode.removeChild(holder); + + + } + if(holder.id){ + newDiv.id = holder.id; + domUtils.removeAttributes(holder,'id'); + } + holder = newDiv; + holder.innerHTML = ''; + } + + } + domUtils.addClass(holder, "edui-" + editor.options.theme); + editor.ui.render(holder); + var opt = editor.options; + //给实例添加一个编辑器的容器引用 + editor.container = editor.ui.getDom(); + var parents = domUtils.findParents(holder,true); + var displays = []; + for(var i = 0 ,ci;ci=parents[i];i++){ + displays[i] = ci.style.display; + ci.style.display = 'block' + } + if (opt.initialFrameWidth) { + opt.minFrameWidth = opt.initialFrameWidth; + } else { + opt.minFrameWidth = opt.initialFrameWidth = holder.offsetWidth; + var styleWidth = holder.style.width; + if(/%$/.test(styleWidth)) { + opt.initialFrameWidth = styleWidth; + } + } + if (opt.initialFrameHeight) { + opt.minFrameHeight = opt.initialFrameHeight; + } else { + opt.initialFrameHeight = opt.minFrameHeight = holder.offsetHeight; + } + for(var i = 0 ,ci;ci=parents[i];i++){ + ci.style.display = displays[i] + } + //编辑器最外容器设置了高度,会导致,编辑器不占位 + //todo 先去掉,没有找到原因 + if(holder.style.height){ + holder.style.height = '' + } + editor.container.style.width = opt.initialFrameWidth + (/%$/.test(opt.initialFrameWidth) ? '' : 'px'); + editor.container.style.zIndex = opt.zIndex; + oldRender.call(editor, editor.ui.getDom('iframeholder')); + editor.fireEvent("afteruiready"); + } + }) + }; + return editor; + }; + + + /** + * @file + * @name UE + * @short UE + * @desc UEditor的顶部命名空间 + */ + /** + * @name getEditor + * @since 1.2.4+ + * @grammar UE.getEditor(id,[opt]) => Editor实例 + * @desc 提供一个全局的方法得到编辑器实例 + * + * * ''id'' 放置编辑器的容器id, 如果容器下的编辑器已经存在,就直接返回 + * * ''opt'' 编辑器的可选参数 + * @example + * UE.getEditor('containerId',{onready:function(){//创建一个编辑器实例 + * this.setContent('hello') + * }}); + * UE.getEditor('containerId'); //返回刚创建的实例 + * + */ + UE.getEditor = function (id, opt) { + var editor = instances[id]; + if (!editor) { + editor = instances[id] = new UE.ui.Editor(opt); + editor.render(id); + } + return editor; + }; + + + UE.delEditor = function (id) { + var editor; + if (editor = instances[id]) { + editor.key && editor.destroy(); + delete instances[id] + } + }; + + UE.registerUI = function(uiName,fn,index,editorId){ + utils.each(uiName.split(/\s+/), function (name) { + UE._customizeUI[name] = { + id : editorId, + execFn:fn, + index:index + }; + }) + + } + +})(); + +// adapter/message.js +UE.registerUI('message', function(editor) { + + var editorui = baidu.editor.ui; + var Message = editorui.Message; + var holder; + var _messageItems = []; + var me = editor; + + me.addListener('ready', function(){ + holder = document.getElementById(me.ui.id + '_message_holder'); + updateHolderPos(); + setTimeout(function(){ + updateHolderPos(); + }, 500); + }); + + me.addListener('showmessage', function(type, opt){ + opt = utils.isString(opt) ? { + 'content': opt + } : opt; + var message = new Message({ + 'timeout': opt.timeout, + 'type': opt.type, + 'content': opt.content, + 'keepshow': opt.keepshow, + 'editor': me + }), + mid = opt.id || ('msg_' + (+new Date()).toString(36)); + message.render(holder); + _messageItems[mid] = message; + message.reset(opt); + updateHolderPos(); + return mid; + }); + + me.addListener('updatemessage',function(type, id, opt){ + opt = utils.isString(opt) ? { + 'content': opt + } : opt; + var message = _messageItems[id]; + message.render(holder); + message && message.reset(opt); + }); + + me.addListener('hidemessage',function(type, id){ + var message = _messageItems[id]; + message && message.hide(); + }); + + function updateHolderPos(){ + var toolbarbox = me.ui.getDom('toolbarbox'); + if (toolbarbox) { + holder.style.top = toolbarbox.offsetHeight + 3 + 'px'; + } + holder.style.zIndex = Math.max(me.options.zIndex, me.iframe.style.zIndex) + 1; + } + +}); + + +// adapter/autosave.js +UE.registerUI('autosave', function(editor) { + var timer = null,uid = null; + editor.on('afterautosave',function(){ + clearTimeout(timer); + + timer = setTimeout(function(){ + if(uid){ + editor.trigger('hidemessage',uid); + } + uid = editor.trigger('showmessage',{ + content : editor.getLang('autosave.success'), + timeout : 2000 + }); + + },2000) + }) + +}); + + + +})(); diff --git a/public/vendor/ueditor/ueditor.all.min.js b/public/vendor/ueditor/ueditor.all.min.js new file mode 100644 index 0000000..5833d0a --- /dev/null +++ b/public/vendor/ueditor/ueditor.all.min.js @@ -0,0 +1,709 @@ +(function(){function X(d,b,c){var a;b=b.toLowerCase();return(a=d.__allListeners||c&&(d.__allListeners={}))&&(a[b]||c&&(a[b]=[]))}function Y(d,b,c,a,e,h){a=a&&d[b];var g;for(!a&&(a=d[c]);!a&&(g=(g||d).parentNode);){if("BODY"==g.tagName||h&&!h(g))return null;a=g[c]}return a&&e&&!e(a)?Y(a,b,c,!1,e):a}UEDITOR_CONFIG=window.UEDITOR_CONFIG||{};var t=window.baidu||{};window.baidu=t;window.UE=t.editor=window.UE||{};UE.plugins={};UE.commands={};UE.instants={};UE.I18N={};UE._customizeUI={};UE.version="1.4.3"; +var M=UE.dom={},r=UE.browser=function(){var d=navigator.userAgent.toLowerCase(),b=window.opera,c={ie:/(msie\s|trident.*rv:)([\w.]+)/.test(d),opera:!!b&&b.version,webkit:-1a||c.quirks;c.ie9above=8a;c.ie11above=10a}c.gecko&&(e=d.match(/rv:([\d\.]+)/))&&(e=e[1].split("."),a=1E4*e[0]+100*(e[1]||0)+1*(e[2]||0));/chrome\/(\d+\.\d)/i.test(d)&&(c.chrome=+RegExp.$1);/(\d+\.\d)?(?:\.\d)?\s+safari\/?(\d+\.\d+)?/i.test(d)&&!/chrome/i.test(d)&& +(c.safari=+(RegExp.$1||RegExp.$2));c.opera&&(a=parseFloat(b.version()));c.webkit&&(a=parseFloat(d.match(/ applewebkit\/(\d+)/)[1]));c.version=a;c.isCompatible=!c.mobile&&(c.ie&&6<=a||c.gecko&&10801<=a||c.opera&&9.5<=a||c.air&&1<=a||c.webkit&&522<=a||!1);return c}(),J=r.ie,ma=r.opera,p=UE.utils={each:function(d,b,c){if(null!=d)if(d.length===+d.length)for(var a=0,e=d.length;a=c&&e===b)return a=h,!1});return a},removeItem:function(d,b){for(var c=0,a=d.length;c'](?:(amp|lt|quot|gt|#39|nbsp|#\d+);)?/g, +function(c,a){return a?c:{"<":"<","&":"&",'"':""",">":">","'":"'"}[c]}):""},html:function(d){return d?d.replace(/&((g|l|quo)t|amp|#39|nbsp);/g,function(b){return{"<":"<","&":"&",""":'"',">":">","'":"'"," ":" "}[b]}):""},cssStyleToDomStyle:function(){var d=document.createElement("div").style,b={"float":void 0!=d.cssFloat?"cssFloat":void 0!=d.styleFloat?"styleFloat":"float"};return function(c){return b[c]||(b[c]=c.toLowerCase().replace(/-./g,function(a){return a.charAt(1).toUpperCase()}))}}(), +loadFile:function(){function d(c,a){try{for(var e=0,h;h=b[e++];)if(h.doc===c&&h.url==(a.src||a.href))return h}catch(g){return null}}var b=[];return function(c,a,e){var h=d(c,a);if(h)h.ready?e&&e():h.funs.push(e);else if(b.push({doc:c,url:a.src||a.href,funs:[e]}),!c.body){e=[];for(var g in a)"tag"!=g&&e.push(g+'="'+a[g]+'"');c.write("<"+a.tag+" "+e.join(" ")+" >")}else if(!a.id||!c.getElementById(a.id)){var l=c.createElement(a.tag);delete a.tag;for(g in a)l.setAttribute(g,a[g]);l.onload= +l.onreadystatechange=function(){if(!this.readyState||/loaded|complete/.test(this.readyState)){h=d(c,a);if(0a?"0"+a:a},b=function(a){/["\\\x00-\x1f]/.test(a)&&(a=a.replace(/["\\\x00-\x1f]/g,function(a){var b=c[a]; +if(b)return b;b=a.charCodeAt();return"\\u00"+Math.floor(b/16).toString(16)+(b%16).toString(16)}));return'"'+a+'"'},c={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};return function(a){switch(typeof a){case "undefined":return"undefined";case "number":return isFinite(a)?String(a):"null";case "string":return b(a);case "boolean":return String(a);default:if(null===a)return"null";if(p.isArray(a)){var e=["["],c=a.length,g,l,k;for(l=0;lr.version?{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder"}:{tabindex:"tabIndex",readonly:"readOnly"},oa=p.listToMap("-webkit-box -moz-box block list-item table table-row-group table-header-group table-footer-group table-row table-column-group table-column table-cell table-caption".split(" ")), +f=M.domUtils={NODE_ELEMENT:1,NODE_DOCUMENT:9,NODE_TEXT:3,NODE_COMMENT:8,NODE_DOCUMENT_FRAGMENT:11,POSITION_IDENTICAL:0,POSITION_DISCONNECTED:1,POSITION_FOLLOWING:2,POSITION_PRECEDING:4,POSITION_IS_CONTAINED:8,POSITION_CONTAINS:16,fillChar:J&&"6"==r.version?"\ufeff":"\u200b",keys:{8:1,46:1,16:1,17:1,18:1,37:1,38:1,39:1,40:1,13:1},getPosition:function(d,b){if(d===b)return 0;var c,a=[d],e=[b];for(c=d;c=c.parentNode;){if(c===b)return 10;a.push(c)}for(c=b;c=c.parentNode;){if(c===d)return 20;e.push(c)}a.reverse(); +e.reverse();if(a[0]!==e[0])return 1;for(c=-1;c++,a[c]===e[c];);d=a[c];for(b=e[c];d=d.nextSibling;)if(d===b)return 4;return 2},getNodeIndex:function(d,b){for(var c=d,a=0;c=c.previousSibling;)b&&3==c.nodeType?c.nodeType!=c.nextSibling.nodeType&&a++:a++;return a},inDoc:function(d,b){return 10==f.getPosition(d,b)},findParent:function(d,b,c){if(d&&!f.isBody(d))for(d=c?d:d.parentNode;d;){if(!b||b(d)||f.isBody(d))return b&&!b(d)&&f.isBody(d)?null:d;d=d.parentNode}return null},findParentByTagName:function(d, +b,c,a){b=p.listToMap(p.isArray(b)?b:[b]);return f.findParent(d,function(e){return b[e.tagName]&&!(a&&a(e))},c)},findParents:function(d,b,c,a){for(b=b&&(c&&c(d)||!c)?[d]:[];d=f.findParent(d,c);)b.push(d);return a?b:b.reverse()},insertAfter:function(d,b){return d.nextSibling?d.parentNode.insertBefore(b,d.nextSibling):d.parentNode.appendChild(b)},remove:function(d,b){var c=d.parentNode,a;if(c){if(b&&d.hasChildNodes())for(;a=d.firstChild;)c.insertBefore(a,d);c.removeChild(d)}return d},getNextDomNode:function(d, +b,c,a){return Y(d,"firstChild","nextSibling",b,c,a)},getPreDomNode:function(d,b,c,a){return Y(d,"lastChild","previousSibling",b,c,a)},isBookmarkNode:function(d){return 1==d.nodeType&&d.id&&/^_baidu_bookmark_/i.test(d.id)},getWindow:function(d){d=d.ownerDocument||d;return d.defaultView||d.parentWindow},getCommonAncestor:function(d,b){if(d===b)return d;for(var c=[d],a=[b],e=d,h=-1;e=e.parentNode;){if(e===b)return e;c.push(e)}for(e=b;e=e.parentNode;){if(e===d)return e;a.push(e)}c.reverse();for(a.reverse();h++, +c[h]===a[h];);return 0==h?null:c[h-1]},clearEmptySibling:function(d,b,c){function a(a,b){for(var g;a&&!f.isBookmarkNode(a)&&(f.isEmptyInlineElement(a)||!(new RegExp("[^\t\n\r"+f.fillChar+"]")).test(a.nodeValue));)g=a[b],f.remove(a),a=g}!b&&a(d.nextSibling,"nextSibling");!c&&a(d.previousSibling,"previousSibling")},split:function(d,b){var c=d.ownerDocument;if(r.ie&&b==d.nodeValue.length){var a=c.createTextNode("");return f.insertAfter(d,a)}a=d.splitText(b);r.ie8&&(c=c.createTextNode(""),f.insertAfter(a, +c),f.remove(c));return a},isWhitespace:function(d){return!(new RegExp("[^ \t\n\r"+f.fillChar+"]")).test(d.nodeValue)},getXY:function(d){for(var b=0,c=0;d.offsetParent;)c+=d.offsetTop,b+=d.offsetLeft,d=d.offsetParent;return{x:b,y:c}},on:function(d,b,c){var a=p.isArray(b)?b:p.trim(b).split(/\s+/),e=a.length;if(e)for(;e--;)if(b=a[e],d.addEventListener)d.addEventListener(b,c,!1);else{c._d||(c._d={els:[]});var h=b+c.toString(),g=p.indexOf(c._d.els,d);c._d[h]&&-1!=g||(-1==g&&c._d.els.push(d),c._d[h]||(c._d[h]= +function(a){return c.call(a.srcElement,a||window.event)}),d.attachEvent("on"+b,c._d[h]))}d=null},un:function(d,b,c){var a=p.isArray(b)?b:p.trim(b).split(/\s+/),e=a.length;if(e)for(;e--;)if(b=a[e],d.removeEventListener)d.removeEventListener(b,c,!1);else{var h=b+c.toString();try{d.detachEvent("on"+b,c._d?c._d[h]:c)}catch(g){}c._d&&c._d[h]&&(b=p.indexOf(c._d.els,d),-1!=b&&c._d.els.splice(b,1),0==c._d.els.length&&delete c._d[h])}},isSameElement:function(d,b){if(d.tagName!=b.tagName)return!1;var c=d.attributes, +a=b.attributes;if(!J&&c.length!=a.length)return!1;for(var e,h,g=0,l=0,k=0;e=c[k++];){if("style"==e.nodeName)if(e.specified&&g++,f.isSameStyle(d,b))continue;else return!1;if(J)if(e.specified)g++,h=a.getNamedItem(e.nodeName);else continue;else h=b.attributes[e.nodeName];if(!h.specified||e.nodeValue!=h.nodeValue)return!1}if(J){for(k=0;h=a[k++];)h.specified&&l++;if(g!=l)return!1}return!0},isSameStyle:function(d,b){var c=d.style.cssText.replace(/( ?; ?)/g,";").replace(/( ?: ?)/g,":"),a=b.style.cssText.replace(/( ?; ?)/g, +";").replace(/( ?: ?)/g,":");if(r.opera){c=d.style;a=b.style;if(c.length!=a.length)return!1;for(var e in c)if(!/^(\d+|csstext)$/i.test(e)&&c[e]!=a[e])return!1;return!0}if(!c||!a)return c==a;c=c.split(";");a=a.split(";");if(c.length!=a.length)return!1;e=0;for(var h;h=c[e++];)if(-1==p.indexOf(a,h))return!1;return!0},isBlockElm:function(d){return 1==d.nodeType&&(w.$block[d.tagName]||oa[f.getComputedStyle(d,"display")])&&!w.$nonChild[d.tagName]},isBody:function(d){return d&&1==d.nodeType&&"body"==d.tagName.toLowerCase()}, +breakParent:function(d,b){var c,a=d,e=d,h,g;do{a=a.parentNode;h?(c=a.cloneNode(!1),c.appendChild(h),h=c,c=a.cloneNode(!1),c.appendChild(g),g=c):(h=a.cloneNode(!1),g=h.cloneNode(!1));for(;c=e.previousSibling;)h.insertBefore(c,h.firstChild);for(;c=e.nextSibling;)g.appendChild(c);e=a}while(b!==a);c=b.parentNode;c.insertBefore(h,b);c.insertBefore(g,b);c.insertBefore(d,g);f.remove(b);return d},isEmptyInlineElement:function(d){if(1!=d.nodeType||!w.$removeEmpty[d.tagName])return 0;for(d=d.firstChild;d;){if(f.isBookmarkNode(d)|| +1==d.nodeType&&!f.isEmptyInlineElement(d)||3==d.nodeType&&!f.isWhitespace(d))return 0;d=d.nextSibling}return 1},trimWhiteTextNode:function(d){function b(b){for(var a;(a=d[b])&&3==a.nodeType&&f.isWhitespace(a);)d.removeChild(a)}b("firstChild");b("lastChild")},mergeChild:function(d,b,c){b=f.getElementsByTagName(d,d.tagName.toLowerCase());for(var a=0,e;e=b[a++];)if(e.parentNode&&!f.isBookmarkNode(e))if("span"==e.tagName.toLowerCase()){if(d===e.parentNode&&(f.trimWhiteTextNode(d),1==d.childNodes.length)){d.style.cssText= +e.style.cssText+";"+d.style.cssText;f.remove(e,!0);continue}e.style.cssText=d.style.cssText+";"+e.style.cssText;if(c){var h=c.style;if(h)for(var h=h.split(";"),g=0,l;l=h[g++];)e.style[p.cssStyleToDomStyle(l.split(":")[0])]=l.split(":")[1]}f.isSameStyle(e,d)&&f.remove(e,!0)}else f.isSameElement(d,e)&&f.remove(e,!0)},getElementsByTagName:function(d,b,c){if(c&&p.isString(c)){var a=c;c=function(e){return f.hasClass(e,a)}}b=p.trim(b).replace(/[ ]{2,}/g," ").split(" ");for(var e=[],h=0,g;g=b[h++];){g=d.getElementsByTagName(g); +for(var l=0,k;k=g[l++];)c&&!c(k)||e.push(k)}return e},mergeToParent:function(d){for(var b=d.parentNode;b&&w.$removeEmpty[b.tagName];){if(b.tagName==d.tagName||"A"==b.tagName){f.trimWhiteTextNode(b);if("SPAN"==b.tagName&&!f.isSameStyle(b,d)||"A"==b.tagName&&"SPAN"==d.tagName)if(1r.version&&"font-size"==b&&!d.style.fontSize&&!w.$empty[d.tagName]&&!w.$nonChild[d.tagName]){var c=d.ownerDocument.createElement("span");c.style.cssText="padding:0;border:0;font-family:simsun;";c.innerHTML=".";d.appendChild(c);var a=c.offsetHeight;d.removeChild(c);c=null;return a+"px"}try{c=f.getStyle(d,b)||(window.getComputedStyle?f.getWindow(d).getComputedStyle(d, +"").getPropertyValue(b):(d.currentStyle||d.style)[p.cssStyleToDomStyle(b)])}catch(e){return""}return p.transUnitToPx(p.fixColor(b,c))},removeClasses:function(d,b){b=p.isArray(b)?b:p.trim(b).replace(/[ ]{2,}/g," ").split(" ");for(var c=0,a,e=d.className;a=b[c++];)e=e.replace(new RegExp("\\b"+a+"\\b"),"");(e=p.trim(e).replace(/[ ]{2,}/g," "))?d.className=e:f.removeAttributes(d,["class"])},addClass:function(d,b){if(d){b=p.trim(b).replace(/[ ]{2,}/g," ").split(" ");for(var c=0,a,e=d.className;a=b[c++];)(new RegExp("\\b"+ +a+"\\b")).test(e)||(e+=" "+a);d.className=p.trim(e)}},hasClass:function(d,b){if(p.isRegExp(b))return b.test(d.className);b=p.trim(b).replace(/[ ]{2,}/g," ").split(" ");for(var c=0,a,e=d.className;a=b[c++];)if(!(new RegExp("\\b"+a+"\\b","i")).test(e))return!1;return c-1==b.length},preventDefault:function(d){d.preventDefault?d.preventDefault():d.returnValue=!1},removeStyle:function(d,b){r.ie?("color"==b&&(b="(^|;)"+b),d.style.cssText=d.style.cssText.replace(new RegExp(b+"[^:]*:[^;]+;?","ig"),"")):d.style.removeProperty? +d.style.removeProperty(b):d.style.removeAttribute(p.cssStyleToDomStyle(b));d.style.cssText||f.removeAttributes(d,["style"])},getStyle:function(d,b){var c=d.style[p.cssStyleToDomStyle(b)];return p.fixColor(b,c)},setStyle:function(d,b,c){d.style[p.cssStyleToDomStyle(b)]=c;p.trim(d.style.cssText)||this.removeAttributes(d,"style")},setStyles:function(d,b){for(var c in b)b.hasOwnProperty(c)&&f.setStyle(d,c,b[c])},removeDirtyAttr:function(d){for(var b=0,c,a=d.getElementsByTagName("*");c=a[b++];)c.removeAttribute("_moz_dirty"); +d.removeAttribute("_moz_dirty")},getChildCount:function(d,b){var c=0,a=d.firstChild;for(b=b||function(){return 1};a;)b(a)&&c++,a=a.nextSibling;return c},isEmptyNode:function(d){return!d.firstChild||0==f.getChildCount(d,function(b){return!f.isBr(b)&&!f.isBookmarkNode(b)&&!f.isWhitespace(b)})},clearSelectedArr:function(d){for(var b;b=d.pop();)f.removeAttributes(b,["class"])},scrollToView:function(d,b,c){var a=function(){var a=b.document,c="CSS1Compat"==a.compatMode;return{width:(c?a.documentElement.clientWidth: +a.body.clientWidth)||0,height:(c?a.documentElement.clientHeight:a.body.clientHeight)||0}}().height;c=-1*a+c+(d.offsetHeight||0);d=f.getXY(d);c+=d.y;d=function(a){if("pageXOffset"in a)return{x:a.pageXOffset||0,y:a.pageYOffset||0};a=a.document;return{x:a.documentElement.scrollLeft||a.body.scrollLeft||0,y:a.documentElement.scrollTop||a.body.scrollTop||0}}(b).y;(c>d||cc?-20:20))},isBr:function(d){return 1==d.nodeType&&"BR"==d.tagName},isFillChar:function(d,b){if(3!=d.nodeType)return!1; +var c=d.nodeValue;return b?(new RegExp("^"+f.fillChar)).test(c):!c.replace(new RegExp(f.fillChar,"g"),"").length},isStartInblock:function(d){d=d.cloneRange();var b=0,c=d.startContainer,a;if(1==c.nodeType&&c.childNodes[d.startOffset])for(var c=c.childNodes[d.startOffset],e=c.previousSibling;e&&f.isFillChar(e);)c=e,e=e.previousSibling;this.isFillChar(c,!0)&&1==d.startOffset&&(d.setStartBefore(c),c=d.startContainer);for(;c&&f.isFillChar(c);)a=c,c=c.previousSibling;a&&(d.setStartBefore(a),c=d.startContainer); +for(1==c.nodeType&&f.isEmptyNode(c)&&1==d.startOffset&&d.setStart(c,0).collapse(!0);!d.startOffset;){c=d.startContainer;if(f.isBlockElm(c)||f.isBody(c)){b=1;break}var e=d.startContainer.previousSibling,h;if(e){for(;e&&f.isFillChar(e);)h=e,e=e.previousSibling;h?d.setStartBefore(h):d.setStartBefore(d.startContainer)}else d.setStartBefore(d.startContainer)}return b&&!f.isBody(d.startContainer)?1:0},isEmptyBlock:function(d,b){if(1!=d.nodeType)return 0;b=b||new RegExp("[ \u00a0\t\r\n"+f.fillChar+"]","g"); +if(0/.test(d.outerHTML):0==d.attributes.length},isCustomeNode:function(d){return 1==d.nodeType&&d.getAttribute("_ue_custom_node_")},isTagNode:function(d,b){return 1==d.nodeType&&(new RegExp("\\b"+d.tagName+"\\b","i")).test(b)},filterNodeList:function(d,b,c){var a=[];if(!p.isFunction(b)){var e=b;b=function(a){return-1!=p.indexOf(p.isArray(e)?e:e.split(" "),a.tagName.toLowerCase())}}p.each(d, +function(e){b(e)&&a.push(e)});return 0==a.length?null:1!=a.length&&c?a:a[0]},isInNodeEndBoundary:function(d,b){var c=d.startContainer;if(3==c.nodeType&&d.startOffset!=c.nodeValue.length||1==c.nodeType&&d.startOffset!=c.childNodes.length)return 0;for(;c!==b;){if(c.nextSibling)return 0;c=c.parentNode}return 1},isBoundaryNode:function(d,b){for(var c;!f.isBody(d);)if(c=d,d=d.parentNode,c!==d[b])return!1;return!0},fillHtml:r.ie11below?" ":"
    "},Q=new RegExp(f.fillChar,"g");(function(){function d(a){return!a.collapsed&& +1==a.startContainer.nodeType&&a.startContainer===a.endContainer&&1==a.endOffset-a.startOffset}function b(a,g,e,b){1==g.nodeType&&(w.$empty[g.tagName]||w.$nonChild[g.tagName])&&(e=f.getNodeIndex(g)+(a?0:1),g=g.parentNode);a?(b.startContainer=g,b.startOffset=e,b.endContainer||b.collapse(!0)):(b.endContainer=g,b.endOffset=e,b.startContainer||b.collapse(!1));b.collapsed=b.startContainer&&b.endContainer&&b.startContainer===b.endContainer&&b.startOffset==b.endOffset;return b}function c(a,g){var b=a.startContainer, +e=a.endContainer,c=a.startOffset,l=a.endOffset,k=a.document,h=k.createDocumentFragment(),d,p;1==b.nodeType&&(b=b.childNodes[c]||(d=b.appendChild(k.createTextNode(""))));1==e.nodeType&&(e=e.childNodes[l]||(p=e.appendChild(k.createTextNode(""))));if(b===e&&3==b.nodeType)return h.appendChild(k.createTextNode(b.substringData(c,l-c))),g&&(b.deleteData(c,l-c),a.collapse(!0)),h;for(var B,O,r=h,t=f.findParents(b,!0),w=f.findParents(e,!0),A=0;t[A]==w[A];)A++;for(var I=A,E;E=t[I];I++){B=E.nextSibling;E==b? +d||(3==a.startContainer.nodeType?(r.appendChild(k.createTextNode(b.nodeValue.slice(c))),g&&b.deleteData(c,b.nodeValue.length-c)):r.appendChild(g?b:b.cloneNode(!0))):(O=E.cloneNode(!1),r.appendChild(O));for(;B&&B!==e&&B!==w[I];)E=B.nextSibling,r.appendChild(g?B:B.cloneNode(!0)),B=E;r=O}r=h;t[A]||(r.appendChild(t[A-1].cloneNode(!1)),r=r.firstChild);for(I=A;c=w[I];I++){B=c.previousSibling;c==e?p||3!=a.endContainer.nodeType||(r.appendChild(k.createTextNode(e.substringData(0,l))),g&&e.deleteData(0,l)): +(O=c.cloneNode(!1),r.appendChild(O));if(I!=A||!t[A])for(;B&&B!==b;)c=B.previousSibling,r.insertBefore(g?B:B.cloneNode(!0),r.firstChild),B=c;r=O}g&&a.setStartBefore(w[A]?t[A]?w[A]:t[A-1]:w[A-1]).collapse(!0);d&&f.remove(d);p&&f.remove(p);return h}function a(a,g){try{if(l&&f.inDoc(l,a))if(l.nodeValue.replace(Q,"").length)l.nodeValue=l.nodeValue.replace(Q,"");else{var b=l.parentNode;for(f.remove(l);b&&f.isEmptyInlineElement(b)&&(r.safari?!(f.getPosition(b,g)&f.POSITION_CONTAINS):!b.contains(g));)l=b.parentNode, +f.remove(b),b=l}}catch(e){}}function e(a,b){var g;for(a=a[b];a&&f.isFillChar(a);)g=a[b],f.remove(a),a=g}var h=0,g=f.fillChar,l,k=M.Range=function(a){this.startContainer=this.startOffset=this.endContainer=this.endOffset=null;this.document=a;this.collapsed=!0};k.prototype={cloneContents:function(){return this.collapsed?null:c(this,0)},deleteContents:function(){var a;this.collapsed||c(this,1);r.webkit&&(a=this.startContainer,3!=a.nodeType||a.nodeValue.length||(this.setStartBefore(a).collapse(!0),f.remove(a))); +return this},extractContents:function(){return this.collapsed?null:c(this,2)},setStart:function(a,g){return b(!0,a,g,this)},setEnd:function(a,g){return b(!1,a,g,this)},setStartAfter:function(a){return this.setStart(a.parentNode,f.getNodeIndex(a)+1)},setStartBefore:function(a){return this.setStart(a.parentNode,f.getNodeIndex(a))},setEndAfter:function(a){return this.setEnd(a.parentNode,f.getNodeIndex(a)+1)},setEndBefore:function(a){return this.setEnd(a.parentNode,f.getNodeIndex(a))},setStartAtFirst:function(a){return this.setStart(a, +0)},setStartAtLast:function(a){return this.setStart(a,3==a.nodeType?a.nodeValue.length:a.childNodes.length)},setEndAtFirst:function(a){return this.setEnd(a,0)},setEndAtLast:function(a){return this.setEnd(a,3==a.nodeType?a.nodeValue.length:a.childNodes.length)},selectNode:function(a){return this.setStartBefore(a).setEndAfter(a)},selectNodeContents:function(a){return this.setStart(a,0).setEndAtLast(a)},cloneRange:function(){return(new k(this.document)).setStart(this.startContainer,this.startOffset).setEnd(this.endContainer, +this.endOffset)},collapse:function(a){a?(this.endContainer=this.startContainer,this.endOffset=this.startOffset):(this.startContainer=this.endContainer,this.startOffset=this.endOffset);this.collapsed=!0;return this},shrinkBoundary:function(a){function g(a){return 1==a.nodeType&&!f.isBookmarkNode(a)&&!w.$empty[a.tagName]&&!w.$nonChild[a.tagName]}for(var b,e=this.collapsed;1==this.startContainer.nodeType&&(b=this.startContainer.childNodes[this.startOffset])&&g(b);)this.setStart(b,0);if(e)return this.collapse(!0); +if(!a)for(;1==this.endContainer.nodeType&&0=g.nodeValue.length)this.setStartAfter(g);else{var l=f.split(g,b);g===c?this.setEnd(l,this.endOffset-b):g.parentNode===c&&(this.endOffset+=1);this.setStartBefore(l)}if(e)return this.collapse(!0)}a||(b=this.endOffset,c=this.endContainer,3==c.nodeType&&(0==b?this.setEndBefore(c):(b=e.nodeValue.length)a["set"+b.replace(/(\w)/,function(a){return a.toUpperCase()})+"After"](e)}if(a||!this.collapsed)g(this,"start"),g(this,"end");return this},insertNode:function(a){var g=a,b=1;11==a.nodeType&&(g=a.firstChild,b=a.childNodes.length);this.trimBoundary(!0);var e=this.startContainer,c=e.childNodes[this.startOffset];c?e.insertBefore(a,c):e.appendChild(a);g.parentNode===this.endContainer&&(this.endOffset+=b);return this.setStartBefore(g)}, +setCursor:function(a,g){return this.collapse(!a).select(g)},createBookmark:function(a,g){var b,e=this.document.createElement("span");e.style.cssText="display:none;line-height:0px;";e.appendChild(this.document.createTextNode("\u200d"));e.id="_baidu_bookmark_start_"+(g?"":h++);this.collapsed||(b=e.cloneNode(!0),b.id="_baidu_bookmark_end_"+(g?"":h++));this.insertNode(e);b&&this.collapse().insertNode(b).setEndBefore(b);this.setStartAfter(e);return{start:a?e.id:e,end:b?a?b.id:b:null,id:a}},moveToBookmark:function(a){var g= +a.id?this.document.getElementById(a.start):a.start;a=a.end&&a.id?this.document.getElementById(a.end):a.end;this.setStartBefore(g);f.remove(g);a?(this.setEndBefore(a),f.remove(a)):this.collapse(!0);return this},enlarge:function(a,g){var b=f.isBody,e,c,l=this.document.createTextNode("");if(a){c=this.startContainer;1==c.nodeType?c.childNodes[this.startOffset]?e=c=c.childNodes[this.startOffset]:(c.appendChild(l),e=c=l):e=c;for(;;){if(f.isBlockElm(c)){for(c=e;(e=c.previousSibling)&&!f.isBlockElm(e);)c= +e;this.setStartBefore(c);break}e=c;c=c.parentNode}c=this.endContainer;1==c.nodeType?((e=c.childNodes[this.endOffset])?c.insertBefore(l,e):c.appendChild(l),e=c=l):e=c;for(;;){if(f.isBlockElm(c)){for(c=e;(e=c.nextSibling)&&!f.isBlockElm(e);)c=e;this.setEndAfter(c);break}e=c;c=c.parentNode}l.parentNode===this.endContainer&&this.endOffset--;f.remove(l)}if(!this.collapsed){for(;!(0!=this.startOffset||g&&g(this.startContainer)||b(this.startContainer));)this.setStartBefore(this.startContainer);for(;!(this.endOffset!= +(1==this.endContainer.nodeType?this.endContainer.childNodes.length:this.endContainer.nodeValue.length)||g&&g(this.endContainer)||b(this.endContainer));)this.setEndAfter(this.endContainer)}return this},enlargeToBlockElm:function(a){for(;!f.isBlockElm(this.startContainer);)this.setStartBefore(this.startContainer);if(!a)for(;!f.isBlockElm(this.endContainer);)this.setEndAfter(this.endContainer);return this},adjustmentBoundary:function(){if(!this.collapsed){for(;!f.isBody(this.startContainer)&&this.startOffset== +this.startContainer[3==this.startContainer.nodeType?"nodeValue":"childNodes"].length&&this.startContainer[3==this.startContainer.nodeType?"nodeValue":"childNodes"].length;)this.setStartAfter(this.startContainer);for(;!f.isBody(this.endContainer)&&!this.endOffset&&this.endContainer[3==this.endContainer.nodeType?"nodeValue":"childNodes"].length;)this.setEndBefore(this.endContainer)}return this},applyInlineStyle:function(a,g,b){if(this.collapsed)return this;this.trimBoundary().enlarge(!1,function(a){return 1== +a.nodeType&&f.isBlockElm(a)}).adjustmentBoundary();for(var e=this.createBookmark(),c=e.end,l=function(a){return 1==a.nodeType?"br"!=a.tagName.toLowerCase():!f.isWhitespace(a)},k=f.getNextDomNode(e.start,!1,l),h,d,p=this.cloneRange();k&&f.getPosition(k,c)&f.POSITION_PRECEDING;)if(3==k.nodeType||w[a][k.tagName]){p.setStartBefore(k);for(h=k;h&&(3==h.nodeType||w[a][h.tagName])&&h!==c;)d=h,h=f.getNextDomNode(h,1==h.nodeType,null,function(g){return w[a][g.tagName]});var k=p.setEndAfter(d).extractContents(), +B;if(b&&0k&&(k=0);l.push(k);return l}var e={},c=this;e.startAddress=g(!0);a||(e.endAddress=c.collapsed?[].concat(e.startAddress):g());return e},moveToAddress:function(a, +b){function g(a,b){for(var c=e.document.body,k,l,h=0,d,n=a.length;hx)n=u+1;else return{container:g,offset:c(k)}}if(-1== +u){d.moveToElementText(g);d.setEndPoint("StartToStart",a);d=d.text.replace(/(\r\n|\r)/g,"\n").length;l=g.childNodes;if(!d)return k=l[l.length-1],{container:k,offset:k.nodeValue.length};for(c=l.length;0r.version?"":"")+""+(b.iframeCssUrl?"":"")+(b.initialStyle?"":"")+" +@endpush \ No newline at end of file diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php new file mode 100644 index 0000000..b8fe61f --- /dev/null +++ b/resources/views/layouts/app.blade.php @@ -0,0 +1,82 @@ + + + + + {{ config('app.name', '') }} + + + + + + +
    +
    +
    + +
    +
    +
    + + + +
    +
    +
      +
    • 首页
    • + + @foreach ($all_categorys as $cate) +
    • id==$parent->id) class="active" @endif> + {{ $cate->title }} +
    • + @endforeach +
    +
    +
    + + +@section('content') +@show + + + + + + +
    +
    +
    + 版权所有:黑龙江省科学院自动化研究所 + 黑ICP备11004102号 +
    +
    + +
    +
    +
    + + + + + + + +@stack('script') + + + diff --git a/resources/views/layouts/pagination.blade.php b/resources/views/layouts/pagination.blade.php new file mode 100644 index 0000000..2c5ae3c --- /dev/null +++ b/resources/views/layouts/pagination.blade.php @@ -0,0 +1,32 @@ +@if ($paginator->hasPages()) +
    + + {{-- Previous Page Link --}} + @if ($paginator->onFirstPage()) + 上一页 + @else + 上一页 + @endif + + {{-- Pagination Elements --}} + @foreach ($elements as $element) + {{-- Array Of Links --}} + @if (is_array($element)) + @foreach ($element as $page => $url) + @if ($page == $paginator->currentPage()) + {{ $page }} + @else + {{ $page }} + @endif + @endforeach + @endif + @endforeach + + {{-- Next Page Link --}} + @if ($paginator->hasMorePages()) + 下一页 + @else + 下一页 + @endif +
    +@endif diff --git a/resources/views/vendor/pagination/bootstrap-4.blade.php b/resources/views/vendor/pagination/bootstrap-4.blade.php new file mode 100644 index 0000000..63c6f56 --- /dev/null +++ b/resources/views/vendor/pagination/bootstrap-4.blade.php @@ -0,0 +1,46 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/customize.blade.php b/resources/views/vendor/pagination/customize.blade.php new file mode 100644 index 0000000..63f0b57 --- /dev/null +++ b/resources/views/vendor/pagination/customize.blade.php @@ -0,0 +1,30 @@ +@if ($paginator->hasPages()) +
      + @if ($paginator->onFirstPage()) +
    • 首页
    • + @else +
    • 上一页
    • + @endif + @foreach ($elements as $element) + {{-- "Three Dots" Separator --}} + @if (is_string($element)) +
    • {{ $element }}
    • + @endif + {{-- Array Of Links --}} + @if (is_array($element)) + @foreach ($element as $page => $url) + @if ($page == $paginator->currentPage()) +
    • {{ $page }}
    • + @else +
    • {{ $page }}
    • + @endif + @endforeach + @endif + @endforeach + @if ($paginator->hasMorePages()) +
    • 下一页
    • + @else +
    • + @endif +
    +@endif diff --git a/resources/views/vendor/pagination/default.blade.php b/resources/views/vendor/pagination/default.blade.php new file mode 100644 index 0000000..0db70b5 --- /dev/null +++ b/resources/views/vendor/pagination/default.blade.php @@ -0,0 +1,46 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/semantic-ui.blade.php b/resources/views/vendor/pagination/semantic-ui.blade.php new file mode 100644 index 0000000..ef0dbb1 --- /dev/null +++ b/resources/views/vendor/pagination/semantic-ui.blade.php @@ -0,0 +1,36 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-bootstrap-4.blade.php b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php new file mode 100644 index 0000000..4bb4917 --- /dev/null +++ b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php @@ -0,0 +1,27 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-default.blade.php b/resources/views/vendor/pagination/simple-default.blade.php new file mode 100644 index 0000000..36bdbc1 --- /dev/null +++ b/resources/views/vendor/pagination/simple-default.blade.php @@ -0,0 +1,19 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-tailwind.blade.php b/resources/views/vendor/pagination/simple-tailwind.blade.php new file mode 100644 index 0000000..1c5e52f --- /dev/null +++ b/resources/views/vendor/pagination/simple-tailwind.blade.php @@ -0,0 +1,25 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/tailwind.blade.php b/resources/views/vendor/pagination/tailwind.blade.php new file mode 100644 index 0000000..feeab11 --- /dev/null +++ b/resources/views/vendor/pagination/tailwind.blade.php @@ -0,0 +1,102 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/ueditor/assets.blade.php b/resources/views/vendor/ueditor/assets.blade.php new file mode 100644 index 0000000..51c081f --- /dev/null +++ b/resources/views/vendor/ueditor/assets.blade.php @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php new file mode 100644 index 0000000..3fb48cc --- /dev/null +++ b/resources/views/welcome.blade.php @@ -0,0 +1,100 @@ + + + + + + + Laravel + + + + + + + + +
    + @if (Route::has('login')) + + @endif + +
    +
    + Laravel +
    + + +
    +
    + + diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 0000000..c641ca5 --- /dev/null +++ b/routes/api.php @@ -0,0 +1,18 @@ +get('/user', function (Request $request) { + return $request->user(); +}); diff --git a/routes/channels.php b/routes/channels.php new file mode 100644 index 0000000..f16a20b --- /dev/null +++ b/routes/channels.php @@ -0,0 +1,16 @@ +id === (int) $id; +}); diff --git a/routes/console.php b/routes/console.php new file mode 100644 index 0000000..75dd0cd --- /dev/null +++ b/routes/console.php @@ -0,0 +1,18 @@ +comment(Inspiring::quote()); +})->describe('Display an inspiring quote'); diff --git a/routes/web.php b/routes/web.php new file mode 100644 index 0000000..3fd18c7 --- /dev/null +++ b/routes/web.php @@ -0,0 +1,23 @@ +name('index'); +Route::get('articles/{category}/index', 'ArticleController@index')->name('article.index'); +Route::get('articles/{article}', 'ArticleController@show')->name('article.show'); + +Route::get('category/{category}', 'CategoryController@index')->name('category.show'); + +//以下为导入数据 +Route::get('test/set_category', 'TestController@set_category'); +Route::get('test/set_article', 'TestController@set_article'); +Route::get('test/set_cate_article', 'TestController@setCateArticle'); +Route::get('test/check_article', 'TestController@checkArticle'); diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php new file mode 100644 index 0000000..547152f --- /dev/null +++ b/tests/CreatesApplication.php @@ -0,0 +1,22 @@ +make(Kernel::class)->bootstrap(); + + return $app; + } +} diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php new file mode 100644 index 0000000..cdb5111 --- /dev/null +++ b/tests/Feature/ExampleTest.php @@ -0,0 +1,21 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 0000000..2932d4a --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } +}