- 重构后台所有管理页面工具栏,移除图标改用纯文字按钮 - 新增商户管理的批量审核功能与商家详情/审核页面 - 新增帖子管理的批量审核/上下架功能与帖子详情/审核页面 - 新增多媒体相册字段的前后台处理逻辑 - 新增微信订阅消息兼容导出层 - 更新站点版本号并优化品牌色变量 - 新增商户/帖子控制器的详情与审核方法 - 新增 .sql 文件忽略规则
114 行
2.9 KiB
PHP
114 行
2.9 KiB
PHP
<?php
|
|
|
|
namespace app\admin\model;
|
|
|
|
use think\Model;
|
|
use traits\model\SoftDelete;
|
|
use app\common\library\FcRelation;
|
|
|
|
class FcPost extends Model
|
|
{
|
|
|
|
use SoftDelete;
|
|
|
|
|
|
|
|
// 表名
|
|
protected $name = 'fc_post';
|
|
|
|
// 自动写入时间戳字段
|
|
protected $autoWriteTimestamp = 'integer';
|
|
|
|
// 定义时间戳字段名
|
|
protected $createTime = 'createtime';
|
|
protected $updateTime = 'updatetime';
|
|
protected $deleteTime = 'deletetime';
|
|
|
|
// 追加属性
|
|
protected $append = [
|
|
'user_name',
|
|
'category_name',
|
|
];
|
|
|
|
public function getUserNameAttr($value, $data)
|
|
{
|
|
return FcRelation::userName(isset($data['user_id']) ? $data['user_id'] : 0);
|
|
}
|
|
|
|
public function getCategoryNameAttr($value, $data)
|
|
{
|
|
return FcRelation::categoryName(isset($data['category_id']) ? $data['category_id'] : 0);
|
|
}
|
|
|
|
/**
|
|
* 读取多媒体相册属性(兼容 JSON 数组与逗号分隔格式,供后台上传控件预览)
|
|
*
|
|
* @param mixed $value 数据库原始值
|
|
* @return string 逗号分隔的图片路径字符串
|
|
*/
|
|
public function getMediaAttr($value)
|
|
{
|
|
if (empty($value)) {
|
|
return '';
|
|
}
|
|
if (is_array($value)) {
|
|
return implode(',', array_filter($value));
|
|
}
|
|
$decoded = json_decode((string)$value, true);
|
|
if (is_array($decoded)) {
|
|
return implode(',', array_filter($decoded));
|
|
}
|
|
return (string)$value;
|
|
}
|
|
|
|
/**
|
|
* 写入多媒体相册属性(保存为标准 JSON 字符串,兼容移动端与接口)
|
|
*
|
|
* @param mixed $value 前端提交的值
|
|
* @return string 标准 JSON 格式存储
|
|
*/
|
|
public function setMediaAttr($value)
|
|
{
|
|
if (is_array($value)) {
|
|
return json_encode(array_values(array_filter($value)), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
|
}
|
|
if (is_string($value)) {
|
|
$trimmed = trim($value);
|
|
if ($trimmed === '') {
|
|
return '[]';
|
|
}
|
|
if (strpos($trimmed, '[') === 0) {
|
|
return $trimmed;
|
|
}
|
|
$arr = array_filter(array_map('trim', explode(',', $trimmed)));
|
|
return json_encode(array_values($arr), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
|
}
|
|
return '[]';
|
|
}
|
|
|
|
protected static function init()
|
|
{
|
|
$syncArea = function ($row) {
|
|
$name = isset($row['area']) ? trim((string)$row['area']) : '';
|
|
if ($name === '') {
|
|
$row['district_id'] = 0;
|
|
return;
|
|
}
|
|
$area = \think\Db::name('fc_area')->where('district', $name)->find();
|
|
$row['district_id'] = $area ? (int)$area['id'] : 0;
|
|
};
|
|
self::beforeInsert($syncArea);
|
|
self::beforeUpdate($syncArea);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|