Files

139 lines
3.5 KiB
PHP
Raw Permalink Normal View History

2026-06-03 12:10:25 +08:00
<?php
declare(strict_types=1);
namespace app\admin\model\split;
use app\common\library\CountryIso;
use think\Model;
/**
* 分流链接模型
*/
class Link extends Model
{
protected $name = 'split_link';
protected $autoWriteTimestamp = 'integer';
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
protected $deleteTime = false;
protected $append = [
'countries_text',
'auto_reply_text',
'ip_protect_text',
'random_shuffle_text',
'status_text',
];
public function getIpProtectList(): array
{
return [
'0' => __('Ip protect off'),
'1' => __('Ip protect on'),
];
}
public function getRandomShuffleList(): array
{
return [
'0' => __('Random shuffle off'),
'1' => __('Random shuffle on'),
];
}
public function getStatusList(): array
{
return [
'normal' => __('Status normal'),
'hidden' => __('Status hidden'),
];
}
public function setCountriesAttr($value): string
{
if (is_array($value)) {
return CountryIso::codesToStorage($value);
}
return CountryIso::codesToStorage(explode(',', (string)$value));
}
/**
* 分流链接码统一为小写
*/
public function setLinkCodeAttr($value): string
{
return strtolower(trim((string) $value));
}
/**
* 自动回复:存储为一行一条(换行分隔)
*
* @param mixed $value
*/
public function setAutoReplyAttr($value): string
{
return \app\common\service\SplitAutoReplyService::formatStorage($value);
}
/**
* 自动回复语句数组
*
* @return array<int, string>
*/
public function getAutoReplyLines(): array
{
return \app\common\service\SplitAutoReplyService::parseLines((string) $this->getAttr('auto_reply'));
}
public function getCountriesTextAttr($value, $data): string
{
return CountryIso::codesToText((string)($data['countries'] ?? ''));
}
/**
2026-06-05 04:22:29 +08:00
* 列表「回复语」列预览(最多 50 字 + ...,悬停用原始 auto_reply 换行展示)
2026-06-03 12:10:25 +08:00
*/
public function getAutoReplyTextAttr($value, $data): string
{
2026-06-05 04:22:29 +08:00
return \app\common\service\SplitAutoReplyService::previewForList((string) ($data['auto_reply'] ?? ''));
2026-06-03 12:10:25 +08:00
}
public function getIpProtectTextAttr($value, $data): string
{
$value = $value !== '' && $value !== null ? $value : ($data['ip_protect'] ?? '');
$list = $this->getIpProtectList();
return $list[(string)$value] ?? '';
}
public function getRandomShuffleTextAttr($value, $data): string
{
$value = $value !== '' && $value !== null ? $value : ($data['random_shuffle'] ?? '');
$list = $this->getRandomShuffleList();
return $list[(string)$value] ?? '';
}
public function getStatusTextAttr($value, $data): string
{
$value = $value ?: ($data['status'] ?? '');
$list = $this->getStatusList();
return $list[$value] ?? '';
}
/**
* 已选国家 ISO 代码数组(供编辑表单多选回显)
*
* @return array<int, string>
*/
public function getSelectedCountries(): array
{
$countries = (string)$this->getAttr('countries');
if ($countries === '') {
return [];
}
return CountryIso::normalizeCodes(explode(',', $countries));
}
}