新增命令行进度条

This commit is contained in:
JaguarJack 2020-06-21 10:50:29 +08:00
parent 11f6419b4f
commit dc08715bc7

View File

@ -8,3 +8,116 @@
* @copyright By CatchAdmin
* @license https://github.com/yanwenwu/catch-admin/blob/master/LICENSE.txt
*/
namespace catcher\library;
use think\console\Output;
class ProgressBar
{
protected $output;
protected $total;
protected $current = 0;
protected $header = '[x] ';
protected $length= 100;
protected $average;
public function __construct(Output $output, int $total)
{
$this->output = $output;
$this->total = $total;
$this->average = $this->length/$total;
}
/**
* 开始
*
* @time 2020年06月20日
* @return void
*/
public function start()
{
$this->write();
}
/**
* 前进
*
* @time 2020年06月20日
* @param int $step
* @return void
*/
public function advance($step = 1)
{
$this->current += $step;
$this->write();
}
/**
* 结束
*
* @time 2020年06月20日
* @return void
*/
public function finished()
{
$this->write(true);
$this->current = 1;
}
/**
* 输出
*
* @time 2020年06月20日
* @param bool $end
* @return void
*/
protected function write($end = false)
{
$bar = $this->bar() . ($end ? '' : "\r");
$this->output->write(sprintf('<info>%s</info>', $bar), false);
}
/**
* 进度条
*
* @time 2020年06月20日
* @return string
*/
protected function bar()
{
$left = $this->total - $this->current;
$empty = str_repeat(' ', $left * $this->average);
$bar = str_repeat('>', $this->current * $this->average);
$percent = ((int)(sprintf('%.2f', $this->current/$this->total) * 100)) . '%';
return $this->header . $bar . $empty . ' ' . $percent;
}
/**
* 设置头信息
*
* @time 2020年06月20日
* @param $header
* @return $this
*/
public function setHeader($header)
{
$this->header = $header;
return $this;
}
}