文件
fenleixinxi/application/admin/model/FcPost.php
MiAn 3a2fcf7142 feat: 重构后台管理界面样式并新增商户/帖子审核功能
- 重构后台所有管理页面工具栏,移除图标改用纯文字按钮
- 新增商户管理的批量审核功能与商家详情/审核页面
- 新增帖子管理的批量审核/上下架功能与帖子详情/审核页面
- 新增多媒体相册字段的前后台处理逻辑
- 新增微信订阅消息兼容导出层
- 更新站点版本号并优化品牌色变量
- 新增商户/帖子控制器的详情与审核方法
- 新增 .sql 文件忽略规则
2026-10-23 09:26:22 +08:00

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);
}
}