|
@@ -1,217 +0,0 @@
|
|
|
-<?php
|
|
|
-
|
|
|
-namespace Dcat\Admin\Widgets\DataCard;
|
|
|
-
|
|
|
-use Dcat\Admin\Admin;
|
|
|
-use Dcat\Admin\Widgets\Dropdown;
|
|
|
-use Dcat\Admin\Widgets\HasAjaxRequest;
|
|
|
-use Dcat\Admin\Widgets\Widget;
|
|
|
-use Illuminate\Contracts\Support\Renderable;
|
|
|
-use Illuminate\Support\Str;
|
|
|
-
|
|
|
-class Card extends Widget
|
|
|
-{
|
|
|
- use HasAjaxRequest;
|
|
|
-
|
|
|
- protected $view = 'admin::widgets.data-card';
|
|
|
-
|
|
|
- protected $options = [
|
|
|
- 'title' => null,
|
|
|
- 'description' => null,
|
|
|
- 'tools' => [],
|
|
|
- 'progress' => [],
|
|
|
- 'content' => ['left' => '', 'right' => ''],
|
|
|
-
|
|
|
- 'show_tool_shadow' => false,
|
|
|
- ];
|
|
|
-
|
|
|
- public function __construct($title = null, $description = null)
|
|
|
- {
|
|
|
- $this->title($title);
|
|
|
- $this->description($description);
|
|
|
-
|
|
|
- $this->class('card-box')
|
|
|
- ->style('height:160px')
|
|
|
- ->id('smc_'.Str::random(8));
|
|
|
- }
|
|
|
-
|
|
|
- public function showToolShadow()
|
|
|
- {
|
|
|
- $this->options['show_tool_shadow'] = true;
|
|
|
-
|
|
|
- return $this;
|
|
|
- }
|
|
|
-
|
|
|
- public function title($title)
|
|
|
- {
|
|
|
- $this->options['title'] = $title;
|
|
|
-
|
|
|
- return $this;
|
|
|
- }
|
|
|
-
|
|
|
- public function description($content)
|
|
|
- {
|
|
|
- $this->options['description'] = $content;
|
|
|
-
|
|
|
- return $this;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @param $number
|
|
|
- *
|
|
|
- * @return $this
|
|
|
- */
|
|
|
- public function number($number)
|
|
|
- {
|
|
|
- return $this->content("<number>$number</number>");
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @param string|\Closure|Renderable $content
|
|
|
- * @param string $position
|
|
|
- *
|
|
|
- * @return $this
|
|
|
- */
|
|
|
- public function content($content, string $position = 'left')
|
|
|
- {
|
|
|
- $this->options['content'][$position] = $this->toString($content);
|
|
|
-
|
|
|
- return $this;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @param string|\Closure|Renderable $content
|
|
|
- *
|
|
|
- * @return $this
|
|
|
- */
|
|
|
- public function rightContent($content)
|
|
|
- {
|
|
|
- return $this->content($content, 'right');
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @param int $number
|
|
|
- * @param string $style
|
|
|
- *
|
|
|
- * @return $this
|
|
|
- */
|
|
|
- public function progress($number, $style = 'primary')
|
|
|
- {
|
|
|
- $this->options['progress'] = [
|
|
|
- 'percent' => $number,
|
|
|
- 'style' => $style,
|
|
|
- ];
|
|
|
-
|
|
|
- return $this;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @param string|\Closure|Renderable $content
|
|
|
- *
|
|
|
- * @return $this
|
|
|
- */
|
|
|
- public function tool($content)
|
|
|
- {
|
|
|
- $this->options['tools'][] = $this->toString($content);
|
|
|
-
|
|
|
- return $this;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @param array $options
|
|
|
- * @param \Closure $builder
|
|
|
- * @param string|null $defaultLabel
|
|
|
- *
|
|
|
- * @return $this
|
|
|
- */
|
|
|
- public function dropdown(array $options, \Closure $builder, ?string $defaultLabel = null)
|
|
|
- {
|
|
|
- return $this->tool(
|
|
|
- Dropdown::make($options)
|
|
|
- ->click()
|
|
|
- ->button($defaultLabel)
|
|
|
- ->buttonClass('btn btn-xs btn-light')
|
|
|
- ->map($builder)
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Setup scripts.
|
|
|
- *
|
|
|
- * @return string
|
|
|
- */
|
|
|
- protected function script()
|
|
|
- {
|
|
|
- if (! $this->allowBuildRequestScript()) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- $this->setupFetchScript();
|
|
|
-
|
|
|
- return $this->buildRequestScript();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @return void
|
|
|
- */
|
|
|
- protected function setupFetchScript()
|
|
|
- {
|
|
|
- $id = $this->getHtmlAttribute('id');
|
|
|
-
|
|
|
- $this->fetching(
|
|
|
- <<<JS
|
|
|
-var card = $('#{$id}');
|
|
|
-card.loading({style:'bottom:20px'})
|
|
|
-JS
|
|
|
- );
|
|
|
-
|
|
|
- $this->fetched(
|
|
|
- <<<'JS'
|
|
|
-if (!response.status) {
|
|
|
- return Dcat.error(response.message || 'Server internal error.');
|
|
|
-}
|
|
|
-var w = (response.progress || 0) + '%', pg = card.find('.progress-bar');
|
|
|
-
|
|
|
-card.loading(false)
|
|
|
-card.find('.right-content').html(response.content.right || '');
|
|
|
-card.find('.main-content').html(response.content.left || '');
|
|
|
-pg.css({width: 0});
|
|
|
-setTimeout(function(){ pg.css({width: w});}, 150);
|
|
|
-JS
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @return string
|
|
|
- */
|
|
|
- public function render()
|
|
|
- {
|
|
|
- $this->script = $this->script();
|
|
|
-
|
|
|
- return parent::render(); // TODO: Change the autogenerated stub
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @return array
|
|
|
- */
|
|
|
- public function buildJsonResponseArray()
|
|
|
- {
|
|
|
- return [
|
|
|
- 'status' => 1,
|
|
|
- 'content' => &$this->options['content'],
|
|
|
- 'progress' => $this->options['progress']['percent'] ?? 0,
|
|
|
- ];
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Return JsonResponse instance.
|
|
|
- *
|
|
|
- * @param array $data
|
|
|
- *
|
|
|
- * @return \Illuminate\Http\JsonResponse
|
|
|
- */
|
|
|
- public function toJsonResponse(array $data = [])
|
|
|
- {
|
|
|
- return response()->json(array_merge($this->buildJsonResponseArray(), $data));
|
|
|
- }
|
|
|
-}
|