chore: 添加静态资源文件和版本配置文件

添加大量图片、字体、音频等静态资源文件,包括用户界面图片、模板文件和安装界面素材
添加系统版本配置文件(.version)和常量定义文件(.constant)
更新供应商依赖文件,包括Symfony VarDumper组件和相关许可证文件
添加验证码配置文件(captcha.php)和.gitignore规则
This commit is contained in:
2026-03-06 20:14:23 +08:00
commit c9a98f342c
4485 changed files with 490986 additions and 0 deletions

View File

@@ -0,0 +1,172 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity;
use app\model\activity\seckill\StoreSeckill;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 活动model
* Class StoreActivity
* @package app\model\activity
*/
class StoreActivity extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_activity';
/**
* 时间段ID
* @param $value
* @return string
*/
protected function setTimeIdAttr($value)
{
if ($value) {
return is_array($value) ? implode(',', $value) : $value;
}
return '';
}
/**
* 时间段ID
* @param $value
* @return array|false|string[]
*/
protected function getTimeIdAttr($value)
{
if ($value) {
return is_string($value) ? array_map('intval', array_filter(explode(',', $value))) : $value;
}
return [];
}
/**
* 适用门店信息
* @param $value
* @return string
*/
protected function setApplicableStoreIdAttr($value)
{
if ($value) {
return is_array($value) ? implode(',', $value) : $value;
}
return '';
}
/**
* 适用门店信息
* @param $value
* @return array|false|string[]
*/
protected function getApplicableStoreIdAttr($value)
{
if ($value) {
return is_string($value) ? array_map('intval', array_filter(explode(',', $value))) : $value;
}
return [];
}
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
protected function getAddTimeAttr($value)
{
if ($value) return date('Y-m-d H:i:s', (int)$value);
return '';
}
/**
* @return \think\model\relation\HasMany
*/
public function seckill()
{
return $this->hasMany(StoreSeckill::class, 'activity_id', 'id')->where('is_show', 1)->where('is_del', 0);
}
/**
* 秒杀商品名称搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchNameAttr($query, $value, $data)
{
if ($value) $query->where('title|id', 'like', '%' . $value . '%');
}
/**
* 状态搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchStatusAttr($query, $value, $data)
{
if ($value != '') $query->where('status', $value);
}
/**
* 适用门店类型搜索器
* @param Model $query
* @param $value
*/
public function searchApplicableTypeAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('applicable_type', $value);
} else {
if ($value !== '') $query->where('applicable_type', $value);
}
}
/**
* 秒杀时间段
* @param $query
* @param $value
*/
public function searchTimeIdAttr($query, $value)
{
if ($value) $query->where('find_in_set(' . $value . ',`time_id`)');
}
/**
* 是否删除
* @param $query
* @param $value
* @return void
*/
public function searchIsDelAttr($query, $value)
{
if ($value !== '') $query->where('is_del', $value);
}
}

View File

@@ -0,0 +1,256 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\bargain;
use app\model\product\product\StoreDescription;
use app\model\product\product\StoreProduct;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 砍价商品Model
* Class StoreBargain
* @package app\model\activity\bargain
*/
class StoreBargain extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_bargain';
public function getImagesAttr($value)
{
return json_decode($value, true) ?? [];
}
/**
* 配送信息
* @param $value
* @return false|string
*/
protected function setDeliveryTypeAttr($value)
{
if ($value) {
return is_array($value) ? implode(',', $value) : $value;
}
return '';
}
/**
* 配送信息
* @param $value
* @param $data
* @return mixed
*/
protected function getDeliveryTypeAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 配送信息
* @param $value
* @param $data
* @return mixed
*/
protected function getCustomFormAttr($value)
{
if ($value) {
return is_string($value) ? json_decode($value, true) : $value;
}
return [];
}
/**
* 商品标签
* @param $value
* @return array|mixed
*/
protected function getLabelIdAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* @param $value
* @return array|mixed
*/
public function getStoreLabelIdAttr($value)
{
if ($value) {
return is_string($value) ? array_map('intval', array_filter(explode(',', $value))) : $value;
}
return [];
}
/**
* 商品保障服务
* @param $value
* @return array|mixed
*/
protected function getEnsureIdAttr($value)
{
if ($value) {
return is_string($value) ? array_map('intval', array_filter(explode(',', $value))) : $value;
}
return [];
}
/**
* 参数信息
* @param $value
* @return array|mixed
*/
protected function getSpecsAttr($value)
{
if ($value) {
return is_string($value) ? json_decode($value, true) : $value;
}
return [];
}
/**
* 一对一关联
* 商品关联商品商品详情
* @return \think\model\relation\HasOne
*/
public function descriptions()
{
return $this->hasOne(StoreDescription::class, 'product_id', 'id')->where('type', 2)->bind(['description']);
}
/**
* 原价
* @return \think\model\relation\HasOne
*/
public function product()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id')->field(['id', 'ot_price'])->bind(['ot_price']);
}
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
protected function getAddTimeAttr($value)
{
if ($value) return date('Y-m-d H:i:s', (int)$value);
return '';
}
/**
* 砍价商品名称搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchStoreNameAttr($query, $value, $data)
{
if ($value != '') $query->where('title|id', 'like', '%' . $value . '%');
}
/**
* 状态搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchStatusAttr($query, $value, $data)
{
if ($value != '') $query->where('status', $value ?? 1);
}
/**
* 是否推荐搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsHotAttr($query, $value, $data)
{
$query->where('is_hot', $value ?? 0);
}
/**
* 是否删除搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsDelAttr($query, $value, $data)
{
$query->where('is_del', $value ?? 0);
}
/**
* 商品ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchProductIdAttr($query, $value, $data)
{
if ($value) {
if (is_array($value)) {
$query->whereIn('product_id', $value);
} else {
$query->where('product_id', $value);
}
}
}
/**
* 活动有效时间搜索器
* @param $query
* @param $value
*/
public function searchBargainTimeAttr($query, $value)
{
if ($value == 1) {
$time = time();
$query->where('start_time', '<=', $time)->where('stop_time', '>=', $time);
}
}
/**
* 系统表单搜索器
* @param Model $query
* @param $value
*/
public function searchSystemFormIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('system_form_id', $value);
} else {
if ($value !== '') $query->where('system_form_id', $value);
}
}
}

View File

@@ -0,0 +1,103 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\bargain;
use app\model\user\User;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 参与砍价Model
* Class StoreBargainUser
* @package app\model\activity\bargain
*/
class StoreBargainUser extends BaseModel
{
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_bargain_user';
use ModelTrait;
/**
* 一对一关联
* 商品关联商品商品详情
* @return \think\model\relation\HasOne
*/
public function getBargain()
{
return $this->hasOne(StoreBargain::class, 'id', 'bargain_id')->bind(['title', 'image', 'datatime' => 'stop_time', 'people_num']);
}
/**
* 一对一关联
* 获取砍价用户
* @return \think\model\relation\HasOne
*/
public function getUser()
{
return $this->hasOne(User::class, 'uid', 'uid', false)->bind(['avatar', 'nickname', 'delete_time']);
}
/**
* 用户搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchUidAttr($query, $value, $data)
{
$query->where('uid', $value);
}
/**
* 商品ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchBargainIdAttr($query, $value, $data)
{
$query->where('bargain_id', $value);
}
/**
* 状态搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchStatusAttr($query, $value, $data)
{
if ($value != '') $query->where('status', $value);
}
/**
* 是否删除搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsDelAttr($query, $value, $data)
{
$query->where('is_del', $value);
}
}

View File

@@ -0,0 +1,92 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\bargain;
use app\model\user\User;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 砍价帮砍Model
* Class StoreBargainUserHelp
* @package app\model\activity\bargain
*/
class StoreBargainUserHelp extends BaseModel
{
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_bargain_user_help';
use ModelTrait;
/**
* 关联用户
* @return \crmeb\basic\BaseHasOne
*/
public function getUser()
{
return $this->hasOne(User::class, 'uid', 'uid', false)->bind(['nickname', 'avatar', 'delete_time']);
}
/**
* 用户搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchUidAttr($query, $value, $data)
{
$query->where('uid', $value);
}
/**
* 商品ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchBargainIdAttr($query, $value, $data)
{
$query->where('bargain_id', $value);
}
/**
* 砍价ID搜索器
* @param $query
* @param $value
*/
public function searchBargainUserIdAttr($query, $value)
{
$query->where('bargain_user_id', $value);
}
/**
* 砍价ID搜索器
* @param $query
* @param $value
*/
public function searchTypeAttr($query, $value)
{
$query->where('type', $value);
}
}

View File

@@ -0,0 +1,112 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace app\model\activity\card;
use crmeb\traits\ModelTrait;
use crmeb\basic\BaseModel;
/**
* 卡次批次模型
* Class CardBatch
* @package app\model\activity\card
*/
class CardBatch extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'card_batch';
//查询器时间戳转时间
public function getAddTimeAttr($value)
{
return date('Y-m-d H:i:s', $value);
}
/**
* 搜索器 - 根据卡次名称搜索
* @param $query
* @param $value
*/
public function searchNameAttr($query, $value)
{
if ($value) {
$query->where('name', 'like', '%' . $value . '%');
}
}
//id搜索器
public function searchIdAttr($query, $value)
{
if ($value !== '') {
if (is_array($value)) {
$query->whereIn('id', $value);
} else {
$query->where('id', $value);
}
}
}
/**
* 搜索器 - 根据卡号前缀搜索
* @param $query
* @param $value
*/
public function searchCardPrefixAttr($query, $value)
{
if ($value !== '') {
$query->where('card_prefix', $value);
}
}
public function searchPrefixAttr($query, $value)
{
if ($value !== '') {
$query->where('prefix', $value);
}
}
/**
* 搜索器 - 根据卡号后缀搜索
* @param $query
* @param $value
*/
public function searchCardSuffixAttr($query, $value)
{
if ($value !== '') {
$query->where('card_suffix', $value);
}
}
/**
* 搜索器 - 根据删除状态搜索
* @param $query
* @param $value
*/
public function searchIsDelAttr($query, $value)
{
if ($value !== '') {
$query->where('is_del', $value);
}
}
}

View File

@@ -0,0 +1,118 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace app\model\activity\card;
use crmeb\traits\ModelTrait;
use crmeb\basic\BaseModel;
use think\Model;
/**
* 礼品卡模型
* Class CardGift
* @package appmodelactivitycard
*/
class CardCode extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'card_code';
public function setAddTimeAttr()
{
return time();
}
//查询器时间戳转时间
public function getAddTimeAttr($value)
{
return $value ? date('Y-m-d H:i:s', $value) : '';
}
public function getActiveTimeAttr($value)
{
return $value ? date('Y-m-d H:i:s', $value) : '';
}
//id搜索器
public function searchIdAttr($query, $value)
{
if ($value !== '') {
if (is_array($value)) {
$query->whereIn('id', $value);
} else {
$query->where('id', $value);
}
}
}
//uid搜索器
public function searchUidAttr($query, $value)
{
if ($value !== '') {
$query->where('uid', $value);
}
}
//type搜索器
public function searchTypeAttr($query, $value)
{
if ($value !== '') {
$query->where('type', $value);
}
}
//status搜索器
public function searchStatusAttr($query, $value)
{
if ($value !== '') {
$query->where('status', $value);
}
}
//card_id搜索器
public function searchCardIdAttr($query, $value)
{
if ($value !== '') {
$query->where('card_id', $value);
}
}
//batch_id
public function searchBatchIdAttr($query, $value)
{
if ($value !== '') {
$query->where('batch_id', $value);
}
}
//active_time搜索器
public function searchActiveTimeAttr($query, $value)
{
if ($value !== '') {
$active_time = explode('-', $value);
$active_time[0] = isset($active_time[0]) ? strtotime($active_time[0]) : 0;
$active_time[1] = isset($active_time[1]) ? strtotime($active_time[1]) : 0;
$query->whereBetween('active_time', [$active_time[0], $active_time[1]]);
}
}
}

View File

@@ -0,0 +1,109 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace app\model\activity\card;
use crmeb\traits\ModelTrait;
use crmeb\basic\BaseModel;
use think\Model;
/**
* 礼品卡模型
* Class CardGift
* @package appmodelactivitycard
*/
class CardGift extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'card_gift';
public function setAddTimeAttr()
{
return time();
}
//查询器时间戳转时间
public function getAddTimeAttr($value)
{
return date('Y-m-d H:i:s', $value);
}
//id搜索器
public function searchIdAttr($query, $value)
{
if ($value !== '') {
if (is_array($value)) {
$query->whereIn('id', $value);
} else {
$query->where('id', $value);
}
}
}
/**
* 搜索器 - 根据礼品卡名称搜索
* @param $query
* @param $value
*/
public function searchNameAttr($query, $value)
{
if ($value !== '') {
$query->where('name', 'like', '%' . $value . '%');
}
}
/**
* 搜索器 - 根据礼品卡类型搜索
* @param $query
* @param $value
*/
public function searchTypeAttr($query, $value)
{
if ($value !== '') {
$query->where('type', $value);
}
}
/**
* 搜索器 - 根据礼品卡状态搜索
* @param $query
* @param $value
*/
public function searchStatusAttr($query, $value)
{
if ($value !== '') {
$query->where('status', $value);
}
}
/**
* 搜索器 - 根据有效期类型搜索
* @param $query
* @param $value
*/
public function searchValidTypeAttr($query, $value)
{
if ($value !== '') {
$query->where('valid_type', $value);
}
}
}

View File

@@ -0,0 +1,64 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace app\model\activity\card;
use crmeb\traits\ModelTrait;
use crmeb\basic\BaseModel;
use think\Model;
/**
* 礼品卡模型
* Class CardGift
* @package appmodelactivitycard
*/
class CardGiftAuxiliary extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'card_gift_auxiliary';
//id搜索器
public function searchGiftIdAttr($query, $value)
{
if ($value !== '') {
if (is_array($value)) {
$query->whereIn('gift_id', $value);
} else {
$query->where('gift_id', $value);
}
}
}
public function searchProductIdAttr($query, $value)
{
if ($value !== '') {
if (is_array($value)) {
$query->whereIn('product_id', $value);
} else {
$query->where('product_id', $value);
}
}
}
}

View File

@@ -0,0 +1,76 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace app\model\activity\card;
use crmeb\traits\ModelTrait;
use crmeb\basic\BaseModel;
use think\Model;
/**
* 礼品卡记录
* Class CardGift
* @package appmodelactivitycard
*/
class CardGiftRecord extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'card_gift_record';
public function setAddTimeAttr()
{
return time();
}
//查询器时间戳转时间
public function getAddTimeAttr($value)
{
return $value ? date('Y-m-d H:i:s', $value) : '';
}
//id搜索器
public function searchIdAttr($query, $value)
{
if ($value !== '') {
if (is_array($value)) {
$query->whereIn('id', $value);
} else {
$query->where('id', $value);
}
}
}
//gift_id搜索器
public function searchGiftIdAttr($query, $value)
{
if ($value !== '') {
if (is_array($value)) {
$query->whereIn('gift_id', $value);
} else {
$query->where('gift_id', $value);
}
}
}
}

View File

@@ -0,0 +1,260 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\combination;
use app\model\product\product\StoreDescription;
use app\model\product\product\StoreProduct;
use crmeb\traits\ModelTrait;
use crmeb\basic\BaseModel;
use think\Model;
/**
* 拼团商品Model
* Class StoreCombination
* @package app\model\activity\combination
*/
class StoreCombination extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_combination';
/**
* 配送信息
* @param $value
* @return false|string
*/
protected function setDeliveryTypeAttr($value)
{
if ($value) {
return is_array($value) ? implode(',', $value) : $value;
}
return '';
}
/**
* 配送信息
* @param $value
* @param $data
* @return mixed
*/
protected function getDeliveryTypeAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 配送信息
* @param $value
* @param $data
* @return mixed
*/
protected function getCustomFormAttr($value)
{
if ($value) {
return is_string($value) ? json_decode($value, true) : $value;
}
return [];
}
/**
* @param $value
* @return array|mixed
*/
public function getStoreLabelIdAttr($value)
{
if ($value) {
return is_string($value) ? array_map('intval', array_filter(explode(',', $value))) : $value;
}
return [];
}
/**
* 商品标签
* @param $value
* @return array|mixed
*/
protected function getLabelIdAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 商品保障服务
* @param $value
* @return array|mixed
*/
protected function getEnsureIdAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 参数信息
* @param $value
* @return array|mixed
*/
protected function getSpecsAttr($value)
{
if ($value) {
return is_string($value) ? json_decode($value, true) : $value;
}
return [];
}
/**
* 一对一获取原价
* @return \think\model\relation\HasOne
*/
public function getPrice()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id')->field(['id', 'ot_price', 'price'])->bind(['ot_price', 'product_price' => 'price']);
}
/**
* 一对一关联
* 商品关联商品商品详情
* @return \think\model\relation\HasOne
*/
public function total()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id')->where('is_del', 0)->field(['(sales+ficti) as total', 'id', 'price'])->bind([
'total' => 'total', 'product_price' => 'price',
]);
}
/**
* 一对一关联
* 商品关联商品商品详情
* @return \think\model\relation\HasOne
*/
public function descriptions()
{
return $this->hasOne(StoreDescription::class, 'product_id', 'id')->where('type', 3)->bind(['description']);
}
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
protected function getAddTimeAttr($value)
{
if ($value) return date('Y-m-d H:i:s', (int)$value);
return '';
}
/**
* 轮播图获取器
* @param $value
* @return mixed
*/
public function getImagesAttr($value)
{
return json_decode($value, true) ?? [];
}
/**
* 拼团商品名称搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchStoreNameAttr($query, $value, $data)
{
if ($value) $query->where('title|id', 'like', '%' . $value . '%');
}
/**
* 是否推荐搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsHostAttr($query, $value, $data)
{
$query->where('is_host', $value ?? 1);
}
/**
* 状态搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsShowAttr($query, $value, $data)
{
if ($value != '') $query->where('is_show', $value ?: 0);
}
/**
* 是否删除搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsDelAttr($query, $value, $data)
{
$query->where('is_del', $value ?? 0);
}
/**
* 商品ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchProductIdAttr($query, $value, $data)
{
if ($value) {
if (is_array($value)) {
$query->whereIn('product_id', $value);
} else {
$query->where('product_id', $value);
}
}
}
/**
* 系统表单搜索器
* @param Model $query
* @param $value
*/
public function searchSystemFormIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('system_form_id', $value);
} else {
if ($value !== '') $query->where('system_form_id', $value);
}
}
}

View File

@@ -0,0 +1,139 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\combination;
use app\model\product\product\StoreProduct;use app\model\user\User;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 拼团Model
* Class StorePink
* @package app\model\activity\combination
*/
class StorePink extends BaseModel
{
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_pink';
use ModelTrait;
/**
* 用户一对一关联
* @return \think\model\relation\HasOne
*/
public function getUser()
{
return $this->hasOne(User::class, 'uid', 'uid', false)->bind(['delete_time']);
}
public function getProduct()
{
return $this->hasOne(StoreCombination::class, 'id', 'cid')->bind(['title']);
}
/**
* 一对一获取原价
* @return \think\model\relation\HasOne
*/
public function getPrice()
{
return $this->hasOne(StoreProduct::class, 'id', 'pid')->field(['id', 'ot_price', 'price', 'quota_show', 'quota'])->bind(['ot_price', 'product_price' => 'price', 'quota_show', 'quota']);
}
/**
* 订单号搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchOrderIdAttr($query, $value, $data)
{
$query->where('order_id', $value);
}
/**
* 订单编号搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchOrderIdKeyAttr($query, $value, $data)
{
$query->where('order_id_key', $value);
}
/**
* 拼团商品ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchCidAttr($query, $value, $data)
{
$query->where('cid', $value);
}
/**
* 商品ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchPidAttr($query, $value, $data)
{
$query->where('pid', $value);
}
/**
* 是否团长搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchKIdAttr($query, $value, $data)
{
$query->where('k_id', $value);
}
/**
* 是否退款搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsRefundAttr($query, $value, $data)
{
$query->where('is_refund', $value ?? 0);
}
/**
* 状态搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchStatusAttr($query, $value, $data)
{
if ($value != '') $query->where('status', $value);
}
}

View File

@@ -0,0 +1,140 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\coupon;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 优惠券模板Model
* Class StoreCoupon
* @package app\model\activity\coupon
*/
class StoreCoupon extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_coupon';
/**
* 优惠卷类型
* @var string[]
*/
protected $couponType = [0 => '通用券', 1 => '品类券', 2 => '商品券'];
/**
* 一对多关联
* @return \think\model\relation\HasMany
*/
public function productId()
{
return $this->hasMany(StoreCouponProduct::class, 'coupon_id', 'id');
}
/**
* 优惠券类型获取器
* @param $value
* @return string
*/
public function getTypeAttr($value)
{
return $this->couponType[$value];
}
/**
* 优惠券模板标题搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchTitleAttr($query, $value, $data)
{
if ($value) $query->where('title', 'like', '%' . $value . '%');
}
/**
* 优惠券模板状态搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchStatusAttr($query, $value, $data)
{
if ($value != '') $query->where('status', $value);
}
/**
* 最低消费金额搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchUseMinPriceAttr($query, $value, $data)
{
$query->where('use_min_price', $value);
}
/**
* 优惠券面值搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchCouponPriceAttr($query, $value, $data)
{
$query->where('coupon_price', $value);
}
/**
* 是否删除搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsDelAttr($query, $value, $data)
{
$query->where('is_del', $value ?? 0);
}
/**
* 优惠券类型搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchTypeAttr($query, $value, $data)
{
$query->where('type', $value ?? 0);
}
/**
* 分类ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchCategoryIdAttr($query, $value, $data)
{
$query->where('category_id', $value);
}
}

View File

@@ -0,0 +1,193 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\coupon;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 发布优惠券Model
* Class StoreCouponIssue
* @package app\model\activity\coupon
*/
class StoreCouponIssue extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_coupon_issue';
/**
* 用户是否拥有
* @return \think\model\relation\HasMany
*/
public function used()
{
return $this->hasMany(StoreCouponUser::class, 'cid', 'id')
->field('id,cid,uid,start_time,end_time,use_time,status,is_fail');
}
/**
* id
* @param Model $query
* @param $value
*/
public function searchIdAttr($query, $value)
{
if (is_array($value))
$query->whereIn('id', $value);
else
$query->where('id', $value);
}
/**
* 优惠券模板搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchCidAttr($query, $value, $data)
{
if ($value != '') $query->where('cid', $value);
}
/**
* type
* @param Model $query
* @param $value
*/
public function searchTypeAttr($query, $value)
{
if ($value) {
if (is_array($value))
$query->whereIn('type', $value);
else
$query->where('type', $value);
}
}
/**
* 优惠类型搜索器
* @param Model $query
* @param $value
*/
public function searchCouponTypeAttr($query, $value)
{
if ($value != '') $query->where('coupon_type', $value);
}
/**
* receive_type
* @param Model $query
* @param $value
*/
public function searchReceiveTypeAttr($query, $value)
{
if ($value) {
if (is_array($value))
$query->whereIn('receive_type', $value);
else
$query->where('receive_type', $value);
}
}
/**
* 优惠券是否不限量
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsPermanentAttr($query, $value, $data)
{
if ($value !== '') $query->where('is_permanent', $value);
}
/**
* 优惠券是否新人券
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsGiveSubscribeAttr($query, $value, $data)
{
if ($value !== '') $query->where('is_give_subscribe', $value);
}
/**
* 优惠券是否满赠
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsFullGiveAttr($query, $value, $data)
{
if ($value !== '') $query->where('is_full_give', $value);
}
/**
* 优惠券状态
* @param Model $query
* @param $value
* @param $data
*/
public function searchStatusAttr($query, $value, $data)
{
if ($value != '') $query->where('status', $value);
}
/**
* 优惠券是否删除
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsDelAttr($query, $value, $data)
{
if ($value !== '') $query->where('is_del', $value ?? 0);
}
/**
* 优惠券名称
* @param Model $query
* @param $value
* @param $data
*/
public function searchCouponTitleAttr($query, $value, $data)
{
if ($value) $query->whereLike('coupon_title', '%' . $value . '%');
}
/**
* type
* @param Model $query
* @param $value
*/
public function searchCategoryAttr($query, $value)
{
if ($value) {
if (is_array($value))
$query->whereIn('category', $value);
else
$query->where('category', $value);
}
}
}

View File

@@ -0,0 +1,74 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\coupon;
use app\model\user\User;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 优惠券前台用户领取Model
* Class StoreCouponIssueUser
* @package app\model\activity\coupon
*/
class StoreCouponIssueUser extends BaseModel
{
use ModelTrait;
/**
* 模型名称
* @var string
*/
protected $name = 'store_coupon_issue_user';
/**
* 获取领取人名称头像
* @return \think\model\relation\HasOne
*/
public function userInfo()
{
return $this->hasOne(User::class, 'uid', 'uid')->field('uid,nickname,avatar')->bind(['nickname', 'avatar']);
}
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
public function getAddTimeAttr($value)
{
return date('Y-m-d H:i:s', $value);
}
/**
* 领取用户搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchUidAttr($query, $value, $data)
{
$query->where('uid', $value);
}
/**
* 领取优惠券搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIssueCouponIdAttr($query, $value, $data)
{
$query->where('issue_coupon_id', $value);
}
}

View File

@@ -0,0 +1,31 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\coupon;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
/**
* 优惠券关联商品Model
* Class StoreCouponProduct
* @package app\model\activity\coupon
*/
class StoreCouponProduct extends BaseModel
{
use ModelTrait;
/**
* 表名
* @var string
*/
protected $name = 'store_coupon_product';
}

View File

@@ -0,0 +1,206 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\coupon;
use app\model\user\User;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 优惠券发放Model
* Class StoreCouponUser
* @package app\model\activity\coupon
*/
class StoreCouponUser extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_coupon_user';
/**
* 获取类型
* @var string[]
*/
protected array $gainType = [
'send' => '后台发放',
'get' => '手动领取',
'newcomer' => '新人礼赠送',
'activate_level' => '会员卡激活赠送',
'user_first' => '用户注册赠送',
'order' => '下单赠送',
'luck_lottery' => '抽奖赠送'
];
/**
* 类型获取器
* @param $value
* @return string
*/
public function getTypeAttr($value)
{
return $this->gainType[$value] ?? '';
}
/**
* 使用状态
* @var string[]
*/
protected $statusType = [0 => '未使用', 1 => '已使用', 2 => '已过期'];
/**
* 状态获取器
* @param $value
* @return string
*/
public function getStatusAttr($value)
{
return $this->statusType[$value];
}
/**
* @return \think\model\relation\HasOne
*/
public function issue()
{
return $this->hasOne(StoreCouponIssue::class, 'id', 'cid')->field(['id', 'end_use_time', 'start_use_time', 'coupon_type', 'type', 'coupon_time', 'product_id', 'category_id', 'brand_id', 'receive_type', 'rule'])->bind([
'applicable_type' => 'type',
'coupon_time' => 'coupon_time',
'product_id',
'category_id',
'brand_id',
'receive_type',
'coupon_type',
'start_use_time',
'end_use_time',
'rule',
]);
}
/**
* 获取领取人名称头像
* @return \think\model\relation\HasOne
*/
public function userInfo()
{
return $this->hasOne(User::class, 'uid', 'uid')->field('uid,nickname,avatar')->bind(['nickname', 'avatar']);
}
/**
* id
* @param Model $query
* @param $value
*/
public function searchIdAttr($query, $value)
{
if (is_array($value))
$query->whereIn('id', $value);
else
$query->where('id', $value);
}
/**
* 优惠券ID搜索器
* @param Model $query
* @param $value
*/
public function searchCidAttr($query, $value)
{
if (is_array($value))
$query->whereIn('cid', $value);
else
$query->where('cid', $value);
}
/**
* 用户ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchUidAttr($query, $value, $data)
{
$query->where('uid', $value);
}
/**
* 优惠券名称搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchCouponTitleAttr($query, $value, $data)
{
$query->where('coupon_title', 'like', '%' . $value . '%');
}
/**
* 获取方式搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchTypeAttr($query, $value, $data)
{
$query->where('type', $value);
}
/**
* 用户ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchStatusAttr($query, $value, $data)
{
if ($value !== '' && $value != -1) {
if (is_array($value)) {
$query->whereIn('status', $value);
} else {
$query->where('status', $value);
}
}
}
/**
* 是否失效
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsFailAttr($query, $value, $data)
{
$query->where('is_fail', $value);
}
/**
* 是否在使用期限内搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchTimeAttr($query, $value, $data)
{
$query->whereTime('add_time', '>=', $value)->whereTime('end_time', '<=', $value);
}
}

View File

@@ -0,0 +1,103 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\discounts;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 优惠套餐
* Class StoreDiscounts
* @package app\model\activity\discounts
*/
class StoreDiscounts extends BaseModel
{
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_discounts';
use ModelTrait;
/**
* 套餐商品关联
* @return \think\model\relation\HasMany
*/
public function products()
{
return $this->hasMany(StoreDiscountsProducts::class, 'discount_id', 'id');
}
/**
* 类型搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchTypeAttr($query, $value)
{
if ($value != '') $query->where('type', $value);
}
/**
* 名称搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchTitleAttr($query, $value)
{
if ($value != '') $query->where('title', 'like', '%' . $value . '%');
}
/**
* 状态搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchStatusAttr($query, $value)
{
if ($value !== '') $query->where('status', $value);
}
/**
* 是否删除搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsDelAttr($query, $value)
{
if ($value !== '') $query->where('is_del', $value);
}
/**
* 商品id搜索器
* @param Model $query
* @param $value
*/
public function searchProductIdsAttr($query, $value)
{
if ($value) $query->whereFindInSet('product_ids', $value);
}
}

View File

@@ -0,0 +1,70 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\discounts;
use app\model\product\product\StoreProduct;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 优惠套餐商品
* Class StoreDiscountsProducts
* @package app\model\activity\discounts
*/
class StoreDiscountsProducts extends BaseModel
{
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_discounts_products';
use ModelTrait;
/**
* 一对一关联商品表
* @return \think\model\relation\HasOne
*/
public function product()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id')->field(['id', 'pid', 'type', 'cate_id', 'relation_id', 'freight', 'postage', 'temp_id', 'delivery_type', 'price'])->bind([
'pid',
'cate_id',
'plat_type' => 'type',
'relation_id' => 'relation_id',
'freight' => 'freight',
'postage' => 'postage',
'p_temp_id' => 'temp_id',
'delivery_type',
'price'
]);
}
/**
* 状态搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchDiscountIdAttr($query, $value)
{
if ($value != '') $query->where('discount_id', $value);
}
}

View File

@@ -0,0 +1,637 @@
<?php
declare (strict_types=1);
namespace app\model\activity\holiday;
use app\model\user\User;
use crmeb\basic\BaseModel;
use think\Model;
/**
* 节日有礼模型
* Class HolidayGift
* @package app\model\activity
*/
class HolidayGift extends BaseModel
{
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'holiday_gift';
/**
* 自动写入时间戳
* @var bool
*/
protected $autoWriteTimestamp = false;
/**
* 任务类型
* @var array
*/
public const TASK_TYPE = [
1 => '用户生日',
2 => '活动日期'
];
/**
* 活动日期类型
* @var array
*/
public const ACTIVITY_DATE_TYPE = [
1 => '自定义日期',
2 => '每月',
3 => '每周'
];
/**
* 生日类型
* @var array
*/
public const BIRTHDAY_TYPE = [
1 => '生日当天',
2 => '生日当周',
3 => '生日当月',
0 => '无'
];
/**
* 推送时段类型
* @var array
*/
public const PUSH_TIME_TYPE = [
1 => '全时段',
2 => '指定时段'
];
/**
* 推送人群类型
* @var array
*/
public const PUSH_USER_TYPE = [
1 => '全部人群',
2 => '指定人群'
];
/**
* 条件满足类型
* @var array
*/
public const CONDITION_TYPE = [
1 => '满足任一条件',
2 => '满足全部条件'
];
/**
* 礼品类型
* @var array
*/
public const GIFT_TYPE = [
1 => '优惠券',
2 => '积分',
3 => '多倍积分',
4 => '余额',
5 => '全场包邮'
];
/**
* 推送渠道
* @var array
*/
public const PUSH_CHANNEL = [
1 => '短信',
2 => '公众号',
3 => '弹框广告'
];
/**
* 推送频次
* @var array
*/
public const PUSH_FREQUENCY = [
1 => '永久一次',
2 => '每次进入',
3 => '每天',
4 => '每月',
5 => '每周'
];
/**
* 显示页面
* @var array
*/
public const SHOW_PAGE = [
1 => '商城首页',
2 => '分类页',
3 => '购物车',
4 => '个人中心',
5 => '支付成功',
6 => '专题页面'
];
/**
* 状态
* @var array
*/
public const STATUS = [
0 => '关闭',
1 => '开启'
];
/**
* 是否提前推送
* @var array
*/
public const ADVANCE_PUSH = [
0 => '否',
1 => '是'
];
/**
* 是否永久
* @var array
*/
public const IS_PERMANENT = [
0 => '否',
1 => '是'
];
/**
* 推送类型
* @var array
*/
public const PUSH_TYPE = [
1 => '短信',
2 => '公众号',
3 => '弹框广告'
];
/**
* 推送状态
* @var array
*/
public const PUSH_STATUS = [
0 => '推送失败',
1 => '推送成功'
];
/**
* 记录状态
* @var array
*/
public const RECORD_STATUS = [
0 => '未使用',
1 => '已使用'
];
public function getAddTimeAttr($value)
{
return $value ? date('Y-m-d H:i:s', $value) : '';
}
/**
* 获取用户标签属性
* 将逗号分隔的字符串转换为数组,并将字符串数字转为整型
* @param string|null $value 原始值
* @return array 用户标签数组
*/
public function getUserLabelAttr($value)
{
if (!$value) return [];
$array = explode(',', $value);
return $this->convertNumericStringsToInt($array);
}
/**
* 设置用户标签属性
* 将数组转换为逗号分隔的字符串
* @param array|string $value 用户标签数组或字符串
* @return string 逗号分隔的字符串
*/
public function setUserLabelAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
/**
* 获取用户自定义标签属性
* 将逗号分隔的字符串转换为数组,并将字符串数字转为整型
* @param string|null $value 原始值
* @return array 用户自定义标签数组
*/
public function getUserTagAttr($value)
{
if (!$value) return [];
$array = explode(',', $value);
return $this->convertNumericStringsToInt($array);
}
public function getUserLevelAttr($value)
{
if (!$value) return [];
$array = explode(',', $value);
return $this->convertNumericStringsToInt($array);
}
public function setUserLevelAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
/**
* 设置用户自定义标签属性
* 将数组转换为逗号分隔的字符串
* @param array|string $value 用户自定义标签数组或字符串
* @return string 逗号分隔的字符串
*/
public function setUserTagAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
/**
* 获取礼品类型属性
* 将逗号分隔的字符串转换为数组,并将字符串数字转为整型
* @param string|null $value 原始值
* @return array 礼品类型数组
*/
public function getGiftTypeAttr($value)
{
if (!$value) return [];
$array = explode(',', $value);
return $this->convertNumericStringsToInt($array);
}
/**
* 设置礼品类型属性
* 将数组转换为逗号分隔的字符串
* @param array|string $value 礼品类型数组或字符串
* @return string 逗号分隔的字符串
*/
public function setGiftTypeAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
/**
* 获取优惠券ID属性
* 将逗号分隔的字符串转换为数组,并将字符串数字转为整型
* @param string|null $value 原始值
* @return array 优惠券ID数组
*/
public function getCouponIdsAttr($value)
{
if (!$value) return [];
$array = explode(',', $value);
return $this->convertNumericStringsToInt($array);
}
/**
* 设置优惠券ID属性
* 将数组转换为逗号分隔的字符串
* @param array|string $value 优惠券ID数组或字符串
* @return string 逗号分隔的字符串
*/
public function setCouponIdsAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
/**
* 获取推送渠道属性
* 将逗号分隔的字符串转换为数组,并将字符串数字转为整型
* @param string|null $value 原始值
* @return array 推送渠道数组
*/
public function getPushChannelAttr($value)
{
if (!$value) return [];
$array = explode(',', $value);
return $this->convertNumericStringsToInt($array);
}
/**
* 设置推送渠道属性
* 将数组转换为逗号分隔的字符串
* @param array|string $value 推送渠道数组或字符串
* @return string 逗号分隔的字符串
*/
public function setPushChannelAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
/**
* 获取推送周期属性
* 将逗号分隔的字符串转换为数组,并将字符串数字转为整型
* @param string|null $value 原始值
* @return array 推送周期数组
*/
public function getPushWeekDaysAttr($value)
{
if (!$value) return [];
$array = explode(',', $value);
return $this->convertNumericStringsToInt($array);
}
/**
* 设置推送周期属性
* 将数组转换为逗号分隔的字符串
* @param array|string $value 推送周期数组或字符串
* @return string 逗号分隔的字符串
*/
public function setPushWeekDaysAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
/**
* 获取显示页面属性
* 将逗号分隔的字符串转换为数组,并将字符串数字转为整型
* @param string|null $value 原始值
* @return array 显示页面数组
*/
public function getShowPageAttr($value)
{
if (!$value) return [];
$array = explode(',', $value);
return $this->convertNumericStringsToInt($array);
}
/**
* 设置展示页面属性
* 将数组转换为逗号分隔的字符串
* @param array|string $value 展示页面数组或字符串
* @return string 逗号分隔的字符串
*/
public function setShowPageAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
/**
* 获取微信图片属性
* 将JSON字符串转换为数组,并将字符串数字转为整型
* @param string|null $value 原始值
* @return array 微信图片数组
*/
public function getWechatImageAttr($value)
{
if (!$value) return [];
$array = json_decode($value, true);
return $this->convertNumericStringsToInt($array);
}
/**
* 递归将数组中的数字字符串转换为整型
* @param array $array 需要处理的数组
* @return array|int
*/
private function convertNumericStringsToInt($array)
{
if (!is_array($array)) {
return is_numeric($array) ? (int)$array : $array;
}
foreach ($array as $key => $value) {
if (is_array($value)) {
$array[$key] = $this->convertNumericStringsToInt($value);
} else if (is_numeric($value)) {
$array[$key] = (int)$value;
}
}
return $array;
}
/**
* 设置微信图片属性
* 将数组转换为JSON字符串
* @param array|string $value 微信图片数组或字符串
* @return string JSON格式的字符串
*/
public function setWechatImageAttr($value)
{
return is_array($value) ? json_encode($value, JSON_UNESCAPED_UNICODE) : $value;
}
/**
* 获取话题ID属性
* 将逗号分隔的字符串转换为数组,并将字符串数字转为整型
* @param string|null $value 原始值
* @return array 话题ID数组
*/
public function getTopicIdsAttr($value)
{
if (!$value) return [];
$array = explode(',', $value);
return $this->convertNumericStringsToInt($array);
}
/**
* 设置专题ID属性
* 将数组转换为逗号分隔的字符串
* @param array|string $value 专题ID数组或字符串
* @return string 逗号分隔的字符串
*/
public function setTopicIdsAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
/**
* 获取活动月份日期属性
* 将逗号分隔的字符串转换为数组,并将字符串数字转为整型
* @param string|null $value 原始值
* @return array 活动月份日期数组
*/
public function getActivityMonthDaysAttr($value)
{
if (!$value) return [];
$array = explode(',', $value);
return $this->convertNumericStringsToInt($array);
}
/**
* 设置活动月份日期属性
* 将数组转换为逗号分隔的字符串
* @param array|string $value 活动月份日期数组或字符串
* @return string 逗号分隔的字符串
*/
public function setActivityMonthDaysAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
/**
* 获取活动周日期属性
* 将逗号分隔的字符串转换为数组,并将字符串数字转为整型
* @param string|null $value 原始值
* @return array 活动周日期数组
*/
public function getActivityWeekDaysAttr($value)
{
if (!$value) return [];
$array = explode(',', $value);
return $this->convertNumericStringsToInt($array);
}
/**
* 设置活动周日期属性
* 将数组转换为逗号分隔的字符串
* @param array|string $value 活动周日期数组或字符串
* @return string 逗号分隔的字符串
*/
public function setActivityWeekDaysAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
/**
* 根据ID搜索
* @param Model $query 查询对象
* @param mixed $value 搜索值
* @return Model
*/
public function searchIdAttr($query, $value)
{
if ($value !== '') {
if (is_array($value)) {
$query->whereIn('id', $value);
} else {
$query->where('id', $value);
}
}
return $query;
}
/**
* 根据名称搜索
* @param Model $query 查询对象
* @param mixed $value 搜索值
* @return Model
*/
public function searchNameAttr($query, $value)
{
if ($value !== '') {
$query->whereLike('name', '%' . $value . '%');
}
return $query;
}
/**
* 根据删除状态搜索
* @param Model $query 查询对象
* @param mixed $value 搜索值
* @return Model
*/
public function searchIsDelAttr($query, $value)
{
if ($value !== '') {
$query->where('is_del', $value);
}
return $query;
}
/**
* 根据状态搜索
* @param Model $query 查询对象
* @param mixed $value 搜索值
* @return Model
*/
public function searchStatusAttr($query, $value)
{
if ($value !== '') {
$query->where('status', $value);
}
return $query;
}
/**
* 根据任务类型搜索
* @param Model $query 查询对象
* @param mixed $value 搜索值
* @return Model
*/
public function searchTaskTypeAttr($query, $value)
{
if ($value !== '') {
$query->where('task_type', $value);
}
return $query;
}
/**
* 根据生日类型搜索
* @param Model $query 查询对象
* @param mixed $value 搜索值
* @return Model
*/
public function searchBirthdayTypeAttr($query, $value)
{
if ($value !== '') {
$query->where('birthday_type', $value);
}
return $query;
}
/**
* 搜索有效期内的活动
* @param Model $query 查询对象
* @param mixed $value 是否在有效期内,true表示在有效期内,false表示不限制
* @return Model
*/
public function searchIsValidAttr($query, $value = true)
{
if ($value !== '') {
$query->where(function ($query) {
$query->where('is_permanent', 1)->whereOr(function ($query) {
$now = time();
$query->where('start_time', '<=', $now)
->where('end_time', '>=', $now);
});
});
}
return $query;
}
public function searchGiftTimeAttr($query, $value = true)
{
if ($value !== '') {
$time = explode('-', $value);
$start_time = strtotime($time[0]);
$end_time = strtotime($time[1]);
$query->where('start_time', '<=', $start_time)
->where('end_time', '>=', $end_time);
}
return $query;
}
/**
* 推送渠道,多个用逗号分隔:1-短信,2-公众号,3-弹框广告',
*
* @param $query
* @param $value
* @return mixed
* User: liusl
* DateTime: 2025/8/12 15:34
*/
public function searchPushChannelsAttr($query, $value = true)
{
if ($value !== '') {
$query->whereLike('push_channel', '%' . $value . '%');
}
return $query;
}
}

View File

@@ -0,0 +1,99 @@
<?php
declare (strict_types=1);
namespace app\model\activity\holiday;
use app\model\user\User;
use crmeb\basic\BaseModel;
use think\Model;
/**
* 节日有礼推送记录模型
* Class HolidayGiftPush
* @package app\model\activity
*/
class HolidayGiftPush extends BaseModel
{
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'holiday_gift_push';
/**
* 自动写入时间戳
* @var bool
*/
protected $autoWriteTimestamp = false;
/**
* 添加时间获取器
* @param $value
* @return string
*/
public function getAddTimeAttr($value)
{
return $value ? date('Y-m-d H:i:s', (int)$value) : '';
}
/**
* 推送时间获取器
* @param $value
* @return string
*/
public function getPushTimeAttr($value)
{
return $value ? date('Y-m-d H:i:s', (int)$value) : '';
}
/**
* 推送类型获取器
* @param $value
* @return string
*/
public function getPushTypeNameAttr($value, $data)
{
return HolidayGift::$pushChannelMap[$data['push_type']] ?? '';
}
/**
* 状态获取器
* @param $value
* @return string
*/
public function getStatusNameAttr($value, $data)
{
return $data['status'] ? '推送成功' : '推送失败';
}
/**
* 关联用户表
* @return \think\model\relation\HasOne
*/
public function user()
{
return $this->hasOne(User::class, 'uid', 'uid')->bind([
'nickname',
'avatar',
'phone'
]);
}
/**
* 关联节日有礼表
* @return \think\model\relation\HasOne
*/
public function holidayGift()
{
return $this->hasOne(HolidayGift::class, 'id', 'gift_id')->bind([
'gift_name' => 'name'
]);
}
}

View File

@@ -0,0 +1,222 @@
<?php
declare (strict_types=1);
namespace app\model\activity\holiday;
use app\model\user\User;
use crmeb\basic\BaseModel;
use think\Model;
/**
* 节日有礼领取记录模型
* Class HolidayGiftRecord
* @package app\model\activity
*/
class HolidayGiftRecord extends BaseModel
{
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'holiday_gift_record';
/**
* 自动写入时间戳
* @var bool
*/
protected $autoWriteTimestamp = false;
/**
* 添加时间获取器
* @param $value
* @return string
*/
public function getAddTimeAttr($value)
{
return $value ? date('Y-m-d H:i:s', (int)$value) : '';
}
/**
* 领取时间获取器
* @param $value
* @return string
*/
public function getReceiveTimeAttr($value)
{
return $value ? date('Y-m-d H:i:s', (int)$value) : '';
}
/**
* 使用时间获取器
* @param $value
* @return string
*/
public function getUseTimeAttr($value)
{
return $value ? date('Y-m-d H:i:s', (int)$value) : '';
}
/**
* 状态获取器
* @param $value
* @return string
*/
public function getStatusNameAttr($value, $data)
{
return $data['status'] ? '已使用' : '未使用';
}
/**
* 关联用户表
* @return \think\model\relation\HasOne
*/
public function user()
{
return $this->hasOne(User::class, 'uid', 'uid')->bind([
'nickname',
'avatar',
'phone'
]);
}
/**
* 关联节日有礼表
* @return \think\model\relation\HasOne
*/
public function holidayGift()
{
return $this->hasOne(HolidayGift::class, 'id', 'gift_id')->bind([
'gift_name' => 'name'
]);
}
/**
* 赠送内容类型获取器
* @param $value
* @return array
*/
public function getGiftTypeNameAttr($value, $data)
{
$giftTypes = explode(',', $data['gift_type']);
$names = [];
foreach ($giftTypes as $type) {
if (isset(HolidayGift::$giftTypeMap[$type])) {
$names[] = HolidayGift::$giftTypeMap[$type];
}
}
return $names;
}
/**
* 节日有礼活动ID搜索器
* @param $query
* @param $value
* @return void
*/
public function searchGiftIdAttr($query, $value)
{
if ($value !== '' && $value !== null) {
$query->where('gift_id', $value);
}
}
/**
* 用户ID搜索器
* @param $query
* @param $value
* @return void
*/
public function searchUidAttr($query, $value)
{
if ($value !== '' && $value !== null) {
$query->where('uid', $value);
}
}
/**
* 领取时间搜索器
* @param $query
* @param $value
* @return void
*/
public function searchReceiveTimeAttr($query, $value)
{
if (is_array($value) && count($value) == 2) {
$query->whereBetween('receive_time', $value);
} elseif ($value !== '' && $value !== null) {
$query->where('receive_time', $value);
}
}
/**
* 添加时间搜索器
* @param $query
* @param $value
* @return void
*/
public function searchAddTimeAttr($query, $value)
{
if (is_array($value) && count($value) == 2) {
$query->whereBetween('add_time', $value);
} elseif ($value !== '' && $value !== null) {
$query->where('add_time', $value);
}
}
/**
* 礼物类型搜索器
* @param $query
* @param $value
* @return void
*/
public function searchGiftTypeAttr($query, $value)
{
if ($value !== '' && $value !== null) {
if (is_array($value)) {
$query->where(function ($q) use ($value) {
foreach ($value as $type) {
$q->whereOr('gift_type', 'like', '%' . $type . '%');
}
});
} else {
$query->where('gift_type', 'like', '%' . $value . '%');
}
}
}
/**
* 时间范围搜索器(通用)
* @param $query
* @param $value
* @param $field
* @return void
*/
public function searchTimeRangeAttr($query, $value, $field = 'add_time')
{
if (is_array($value) && count($value) == 2) {
$startTime = is_numeric($value[0]) ? $value[0] : strtotime($value[0]);
$endTime = is_numeric($value[1]) ? $value[1] : strtotime($value[1]);
$query->whereBetween($field, [$startTime, $endTime]);
}
}
/**
* 关键词搜索器(搜索礼品内容)
* @param $query
* @param $value
* @return void
*/
public function searchKeywordAttr($query, $value)
{
if ($value !== '' && $value !== null) {
$query->where('gift_content', 'like', '%' . $value . '%');
}
}
}

View File

@@ -0,0 +1,257 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\integral;
use app\model\product\product\StoreDescription;
use app\model\product\product\StoreProduct;
use crmeb\traits\ModelTrait;
use crmeb\basic\BaseModel;
use think\Model;
/**
* 积分商品Model
* Class StoreIntegral
* @package app\model\activity\integral
*/
class StoreIntegral extends BaseModel
{
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_integral';
use ModelTrait;
/**
* 配送信息
* @param $value
* @return false|string
*/
protected function setDeliveryTypeAttr($value)
{
if ($value) {
return is_array($value) ? implode(',', $value) : $value;
}
return '';
}
/**
* 配送信息
* @param $value
* @param $data
* @return mixed
*/
protected function getDeliveryTypeAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 配送信息
* @param $value
* @param $data
* @return mixed
*/
protected function getCustomFormAttr($value)
{
if ($value) {
return is_string($value) ? json_decode($value, true) : $value;
}
return [];
}
/**
* @param $value
* @return array|mixed
*/
public function getStoreLabelIdAttr($value)
{
if ($value) {
return is_string($value) ? array_map('intval', array_filter(explode(',', $value))) : $value;
}
return [];
}
/**
* 商品标签
* @param $value
* @return array|mixed
*/
protected function getLabelIdAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 商品保障服务
* @param $value
* @return array|mixed
*/
protected function getEnsureIdAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 参数信息
* @param $value
* @return array|mixed
*/
protected function getSpecsAttr($value)
{
if ($value) {
return is_string($value) ? json_decode($value, true) : $value;
}
return [];
}
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
protected function getAddTimeAttr($value)
{
if ($value) return date('Y-m-d H:i:s', (int)$value);
return '';
}
/**
* 轮播图获取器
* @param $value
* @return mixed
*/
public function getImagesAttr($value)
{
return json_decode($value, true) ?? [];
}
/**
* 一对一关联商品表
* @return \think\model\relation\HasOne
*/
public function product()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id');
}
/**
* 一对一获取原价
* @return \think\model\relation\HasOne
*/
public function getPrice()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id')->bind(['ot_price', 'product_price' => 'price']);
}
/**
* 一对一关联
* 商品关联商品商品详情
* @return \think\model\relation\HasOne
*/
public function descriptions()
{
return $this->hasOne(StoreDescription::class, 'product_id', 'id')->where('type', 4)->bind(['description']);
}
/**
* 积分商品名称搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchStoreNameAttr($query, $value, $data)
{
if ($value) $query->where('title|id', 'like', '%' . $value . '%');
}
/**
* 是否推荐搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsHostAttr($query, $value, $data)
{
$query->where('is_host', $value ?? 1);
}
/**
* 状态搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsShowAttr($query, $value, $data)
{
if ($value != '') $query->where('is_show', $value ?: 0);
}
/**
* 是否删除搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsDelAttr($query, $value, $data)
{
$query->where('is_del', $value ?? 0);
}
/**
* 商品ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchProductIdAttr($query, $value, $data)
{
if ($value) {
if (is_array($value)) {
$query->whereIn('product_id', $value);
} else {
$query->where('product_id', $value);
}
}
}
/**
* 系统表单搜索器
* @param Model $query
* @param $value
*/
public function searchSystemFormIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('system_form_id', $value);
} else {
if ($value !== '') $query->where('system_form_id', $value);
}
}
}

View File

@@ -0,0 +1,207 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\integral;
use app\model\product\sku\StoreProductVirtual;
use app\model\user\User;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 订单Model
* Class StoreIntegralOrder
* @package app\model\activity\integral
*/
class StoreIntegralOrder extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_integral_order';
protected $insert = ['add_time'];
/**
* 更新时间
* @var bool | string | int
*/
protected $updateTime = false;
/**
* 创建时间修改器
* @return int
*/
protected function setAddTimeAttr()
{
return time();
}
/**
* 购物车信息获取器
* @param $value
* @return array|mixed
*/
public function getCartInfoAttr($value)
{
return is_string($value) ? json_decode($value, true) ?? [] : [];
}
/**
* 配送信息
* @param $value
* @param $data
* @return mixed
*/
protected function getCustomFormAttr($value)
{
if ($value) {
return is_string($value) ? json_decode($value, true) : $value;
}
return [];
}
/**
* 一对一关联用户表
* @return \think\model\relation\HasOne
*/
public function user()
{
return $this->hasOne(User::class, 'uid', 'uid')->field(['uid', 'nickname', 'phone', 'spread_uid'])->bind([
'nickname' => 'nickname',
'phone' => 'phone',
'spread_uid' => 'spread_uid',
]);
}
/**
* 关联卡密
* @return \think\model\relation\HasMany
*/
public function virtual()
{
return $this->hasMany(StoreProductVirtual::class, 'order_id', 'order_id')->where('order_type', 2);
}
/**
* 关联订单记录
* @return \think\model\relation\HasMany
*/
public function orderStatus()
{
return $this->hasMany(StoreIntegralOrderStatus::class, 'oid', 'id');
}
/**
* 订单ID搜索器
* @param Model $query
* @param $value
*/
public function searchOrderIdAttr($query, $value)
{
$query->where('order_id', $value);
}
/**
* 订单状态搜索器
* @param Model $query
* @param $value
*/
public function searchStatusAttr($query, $value)
{
if ($value !== '') {
$query->where('status', $value);
}
}
/**
* 商品id搜索器
* @param Model $query
* @param $value
*/
public function searchProductIdAttr($query, $value)
{
if ($value !== '') {
if (is_array($value)) {
$query->whereIn('product_id', $value);
} else {
$query->where('product_id', $value);
}
}
}
/**
* 核销码搜索器
* @param Model $query
* @param $value
*/
public function searchVerifyCodeAttr($query, $value)
{
$query->where('verify_code', $value);
}
/**
* @param Model $query
* @param $value
*/
public function searchIdAttr($query, $value)
{
if (is_array($value)) {
$query->whereIn('id', $value);
} else {
$query->where('id', $value);
}
}
/**
* 订单id或者用户名搜索器
* @param $query
* @param $value
*/
public function searchOrderIdRealNameAttr($query, $value)
{
$query->where('order_id|real_name', $value);
}
/**
* 用户ID搜索器
* @param Model $query
* @param $value
*/
public function searchUidAttr($query, $value)
{
if (is_array($value))
$query->whereIn('uid', $value);
else
$query->where('uid', $value);
}
/**
* 用户来源
* @param Model $query
* @param $value
*/
public function searchChannelTypeAttr($query, $value)
{
if ($value != '') $query->where('channel_type', $value);
}
}

View File

@@ -0,0 +1,57 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\integral;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 订单修改状态记录Model
* Class StoreIntegralOrderStatus
* @package app\model\activity\integral
*/
class StoreIntegralOrderStatus extends BaseModel
{
use ModelTrait;
/**
* 模型名称
* @var string
*/
protected $name = 'store_integral_order_status';
protected $autoWriteTimestamp = 'int';
protected $createTime = 'change_time';
/**
* 订单ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchOidAttr($query, $value, $data)
{
$query->where('oid', $value);
}
/**
* 变动类型搜索器
* @param Model $query
* @param $value
*/
public function searchChangeTypeAttr($query, $value)
{
$query->where('change_type', $value);
}
}

View File

@@ -0,0 +1,83 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\live;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 主播
* Class LiveAnchor
* @package app\model\activity\live
*/
class LiveAnchor extends BaseModel
{
use ModelTrait;
protected $pk = 'id';
protected $name = 'live_anchor';
protected $autoWriteTimestamp = 'int';
protected $createTime = 'add_time';
protected function setAddTimeAttr()
{
return time();
}
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
public function getAddTimeAttr($value)
{
if (!empty($value)) {
return date('Y-m-d H:i:s', (int)$value);
}
return '';
}
public function room()
{
return $this->hasOne(LiveRoom::class, 'anchor_wechat', 'wechat');
}
public function searchKerwordAttr($query, $value)
{
if ($value !== '') $query->whereLike('id|name|wechat|phone', "%{$value}%");
}
/**
* @param Model $query
* @param $value
*/
public function searchIsShowAttr($query, $value)
{
if ($value !== '') $query->where('is_show', $value);
}
/**
* @param Model $query
* @param $value
*/
public function searchIsDelAttr($query, $value)
{
if ($value !== '') $query->where('is_del', $value);
}
}

View File

@@ -0,0 +1,129 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\live;
use app\model\product\product\StoreProduct;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 直播商品
* Class LiveGoods
* @package app\model\activity\live
*/
class LiveGoods extends BaseModel
{
use ModelTrait;
protected $pk = 'id';
protected $name = 'live_goods';
protected $autoWriteTimestamp = 'int';
protected $createTime = 'add_time';
protected function setAddTimeAttr()
{
return time();
}
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
public function getAddTimeAttr($value)
{
if (!empty($value)) {
return date('Y-m-d H:i:s', (int)$value);
}
return '';
}
public function product()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id');
}
/**
* 微信商品id
* @param Model $query
* @param $value
*/
public function searchGoodIdAttr($query, $value)
{
if (is_array($value))
$query->whereIn('goods_id', $value);
else
$query->where('good_id', $value);
}
/**
* @param Model $query
* @param $value
*/
public function searchKerwordAttr($query, $value)
{
if ($value !== '') $query->whereLike('id|goods_id|product_id|name', "%{$value}%");
}
/**
* @param Model $query
* @param $value
*/
public function searchIsDelAttr($query, $value)
{
if ($value !== '') $query->where('is_del', $value);
}
/**
* @param Model $query
* @param $value
*/
public function searchIsShowAttr($query, $value)
{
if ($value !== '') $query->where('is_show', $value);
}
/**
* @param Model $query
* @param $value
*/
public function searchStatusAttr($query, $value)
{
if ($value !== '') {
switch ($value) {
case 1:
$query->where('audit_status', 2);
break;
case -1:
$query->where('audit_status', 3);
break;
case 0:
$query->whereIn('audit_status', [0, 1]);
break;
}
}
}
public function searchLiveIdAttr($query, $value)
{
if ($value > 0) {
$query->whereNotIn('id', function ($query) use ($value) {
$query->name('live_room_goods')->where('live_room_id', $value)->field('live_goods_id')->select();
});
}
}
}

View File

@@ -0,0 +1,155 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\live;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 直播间
* Class LiveRoom
* @package app\model\activity\live
*/
class LiveRoom extends BaseModel
{
use ModelTrait;
protected $pk = 'id';
protected $name = 'live_room';
protected $autoWriteTimestamp = 'int';
protected $createTime = 'add_time';
protected function setAddTimeAttr()
{
return time();
}
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
public function getAddTimeAttr($value)
{
if (!empty($value)) {
return date('Y-m-d H:i:s', (int)$value);
}
return '';
}
public function getStartTimeAttr($value)
{
if (!empty($value)) {
return date('Y-m-d H:i:s', (int)$value);
}
return '';
}
public function getEndTimeAttr($value)
{
if (!empty($value)) {
return date('Y-m-d H:i:s', (int)$value);
}
return '';
}
public function roomGoods()
{
return $this->hasMany(LiveRoomGoods::class, 'live_room_id', 'id');
}
public function anchor()
{
return $this->hasOne(LiveAnchor::class, 'wechat', 'anchor_wechat')->where('is_show', 1)->where('is_del', 0)->bind(['anchor_img' => 'cover_img']);
}
/**
* 直播间id
* @param Model $query
* @param $value
*/
public function searchRoomIdAttr($query, $value)
{
if (is_array($value))
$query->whereIn('room_id', $value);
else
$query->where('room_id', $value);
}
/**
* @param Model $query
* @param $value
*/
public function searchIsShowAttr($query, $value)
{
if ($value !== '') $query->where('is_show', $value);
}
/**
* @param Model $query
* @param $value
*/
public function searchIsDelAttr($query, $value)
{
if ($value !== '') $query->where('is_del', $value);
}
/**
* @param Model $query
* @param $value
*/
public function searchKerwordAttr($query, $value)
{
if ($value !== '') $query->whereLike('id|room_id|name|anchor_name|anchor_wechat', "%{$value}%");
}
/**
* 直播状态
* @param Model $query
* @param $value
*/
public function searchLiveStatusAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('live_status', $value);
} else {
if ($value !== '') $query->where('live_status', $value);
}
}
/**
* @param Model $query
* @param $value
*/
public function searchStatusAttr($query, $value)
{
if ($value !== '') {
switch ($value) {
case 1:
$query->whereIn('live_status', [101, 105, 106]);
break;
case 2:
$query->whereIn('live_status', [102]);
break;
case 3:
$query->whereIn('live_status', [103, 104, 107]);
break;
}
}
}
}

View File

@@ -0,0 +1,38 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\live;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
/**
* 直播间关联商品
* Class LiveRoomGoods
* @package app\model\activity\live
*/
class LiveRoomGoods extends BaseModel
{
use ModelTrait;
protected $name = 'live_room_goods';
public function goods()
{
return $this->hasOne(LiveGoods::class, 'id', 'live_goods_id');
}
public function room()
{
return $this->hasOne(LiveRoom::class, 'id', 'live_room_id');
}
}

View File

@@ -0,0 +1,152 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace app\model\activity\lottery;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 抽奖活动
* Class LuckLottery
* @package app\model\activity\lottery
*/
class LuckLottery extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'luck_lottery';
/**
* 抽奖用户等级修改器
* @param $value
* @return false|string
*/
protected function setUserLevelAttr($value)
{
if ($value) {
return is_array($value) ? json_encode($value) : $value;
}
return '';
}
/**
* 抽奖用户等级获取器
* @param $value
* @param $data
* @return mixed
*/
protected function getUserLevelAttr($value)
{
return $value ? json_decode($value, true) : [];
}
/**
* 抽奖用户标签修改器
* @param $value
* @return false|string
*/
protected function setUserLabelAttr($value)
{
if ($value) {
return is_array($value) ? json_encode($value) : $value;
}
return '';
}
/**
* 抽奖用户标签获取器
* @param $value
* @param $data
* @return mixed
*/
protected function getUserLabelAttr($value)
{
return $value ? json_decode($value, true) : [];
}
/**
* 关联奖品
* @return \think\model\relation\HasOne
*/
public function prize()
{
return $this->hasMany(LuckPrize::class, 'lottery_id', 'id')->where('status', 1)->where('is_del', 0)->order('sort asc,id asc');
}
/**
* 关键词搜索器
* @param $query Model
* @param $value
*/
public function searchKeywordAttr($query, $value)
{
if ($value !== '') $query->where('id|name|desc|content', 'like', '%' . $value . '%');
}
/**
* 抽奖形式搜索器
* @param $query Model
* @param $value
*/
public function searchTypeAttr($query, $value)
{
if ($value) $query->where('type', $value);
}
/**
* 抽奖类型搜索器
* @param $query Model
* @param $value
*/
public function searchFactorAttr($query, $value)
{
if ($value !== '') $query->where('factor', $value);
}
/**
* 状态搜索器
* @param $query Model
* @param $value
*/
public function searchStatusAttr($query, $value)
{
if ($value !== '') $query->where('status', $value);
}
/**
* 是否删除搜索器
* @param $query Model
* @param $value
*/
public function searchIsDelAttr($query, $value)
{
if ($value !== '') $query->where('is_del', $value);
}
public function records()
{
return $this->hasMany(LuckLotteryRecord::class, 'lottery_id', 'id');
}
}

View File

@@ -0,0 +1,218 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace app\model\activity\lottery;
use app\model\user\User;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
*
* Class LuckLotteryRecordDao
* @package app\model\activity\lottery
*/
class LuckLotteryRecord extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'luck_lottery_record';
/**
* 收货信息修改器
* @param $value
* @return false|string
*/
protected function setReceiveInfoAttr($value)
{
if ($value) {
return is_array($value) ? json_encode($value) : $value;
}
return '';
}
/**
* 收货信息获取器
* @param $value
* @param $data
* @return mixed
*/
protected function getReceiveInfoAttr($value)
{
return $value ? json_decode($value, true) : [];
}
/**
* 发货信息修改器
* @param $value
* @return false|string
*/
protected function setDeliverInfoAttr($value)
{
if ($value) {
return is_array($value) ? json_encode($value) : $value;
}
return '';
}
/**
* 发货信息获取器
* @param $value
* @param $data
* @return mixed
*/
protected function getDeliverInfoAttr($value)
{
return $value ? json_decode($value, true) : [];
}
/**
* 关联抽奖
* @return \think\model\relation\HasOne
*/
public function lottery()
{
return $this->hasOne(LuckLottery::class, 'id', 'lottery_id');
}
/**
* 关联奖品
* @return \think\model\relation\HasOne
*/
public function prize()
{
return $this->hasOne(LuckPrize::class, 'id', 'prize_id');
}
/**
* 关联用户
* @return \think\model\relation\HasOne
*/
public function user()
{
return $this->hasOne(User::class, 'uid', 'uid', false)->field('uid,real_name,nickname,phone,delete_time');
}
/**
* 用户uid搜索器
* @param $query Model
* @param $value
*/
public function searchUidAttr($query, $value)
{
if ($value) $query->where('uid', $value);
}
/**
* 关键词搜索器
* @param $query Model
* @param $value
*/
public function searchKeywordAttr($query, $value)
{
if ($value !== '') {
$query->where(function ($query1) use ($value) {
$query1->where('id|uid|lottery_id|prize_id', 'LIKE', '%' . $value . '%')->whereOr('uid', 'IN', function ($query1) use ($value) {
$query1->name('user')->field('uid')->where('account|nickname|phone|real_name|uid', 'LIKE', "%$value%")->select();
})->whereOr('lottery_id', 'IN', function ($query1) use ($value) {
$query1->name('luck_lottery')->field('id')->where('name|desc|content', 'LIKE', "%$value%")->select();
})->whereOr('prize_id', 'IN', function ($query1) use ($value) {
$query1->name('luck_prize')->field('id')->where('name|prompt', 'LIKE', "%$value%")->select();
});
});
}
}
/**
* 抽奖id搜索器
* @param $query Model
* @param $value
*/
public function searchLotteryIdAttr($query, $value)
{
if ($value) $query->where('lottery_id', $value);
}
/**
* 奖品id搜索器
* @param $query Model
* @param $value
*/
public function searchPrizeIdAttr($query, $value)
{
if ($value) $query->where('prize_id', $value);
}
/**
* 奖品类型搜索器
* @param $query Model
* @param $value
*/
public function searchTypeAttr($query, $value)
{
if ($value) {
if (is_array($value)) {
$query->whereIn('type', $value);
} else {
$query->where('type', $value);
}
}
}
/**
* 奖品不再这个类型中搜索器
* @param $query Model
* @param $value
*/
public function searchNotTypeAttr($query, $value)
{
if ($value) {
if (is_array($value)) {
$query->whereNotIn('type', $value);
} else {
$query->where('type', '<>', $value);
}
}
}
/**
* 是否领取
* @param $query Model
* @param $value
*/
public function searchIsReceiveAttr($query, $value)
{
if ($value !== '') $query->where('is_receive', $value);
}
/**
* 是否发货处理
* @param $query Model
* @param $value
*/
public function searchIsDeliverAttr($query, $value)
{
if ($value !== '') $query->where('is_deliver', $value);
}
}

View File

@@ -0,0 +1,90 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace app\model\activity\lottery;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
*
* Class LuckPrizeDao
* @package app\model\activity\lottery
*/
class LuckPrize extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'luck_prize';
/**
* 关联抽奖
* @return \think\model\relation\HasOne
*/
public function lottery()
{
return $this->hasOne(LuckLottery::class, 'id', 'lottery_id');
}
/**
* 抽奖id搜索器
* @param $query Model
* @param $value
*/
public function searchLotteryIdAttr($query, $value)
{
if ($value) $query->where('lottery_id', $value);
}
/**
* 奖品类型搜索器
* @param $query Model
* @param $value
*/
public function searchTypeAttr($query, $value)
{
if ($value) $query->where('type', $value);
}
/**
* 状态搜索器
* @param $query Model
* @param $value
*/
public function searchStatusAttr($query, $value)
{
if ($value !== '') $query->where('status', $value);
}
/**
* 是否删除搜索器
* @param $query Model
* @param $value
*/
public function searchIsDelAttr($query, $value)
{
if ($value !== '') $query->where('is_del', $value);
}
}

View File

@@ -0,0 +1,104 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\newcomer;
use app\model\product\product\StoreDescription;
use app\model\product\product\StoreProduct;
use app\model\product\sku\StoreProductAttrValue;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 新人礼商品Model
* Class StoreNewcomer
* @package app\model\activity\newcomer
*/
class StoreNewcomer extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_newcomer';
protected $updateTime = false;
/**
* 一对一关联
* 商品关联商品商品详情
* @return \think\model\relation\HasOne
*/
public function descriptions()
{
return $this->hasOne(StoreDescription::class, 'product_id', 'product_id')->where('type', 1)->bind(['description']);
}
/**
* 一对一关联
* 商品关联商品商品详情
* @return \think\model\relation\HasOne
*/
public function product()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id')->where('is_show', 1)->where('is_del', 0)->where('is_verify', 1);
}
/**
* sku一对多
* @return \think\model\relation\HasMany
*/
public function attrValue()
{
return $this->hasMany(StoreProductAttrValue::class, 'product_id', 'id')->where('type', 7);
}
/**
* 商品ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchProductIdAttr($query, $value, $data)
{
if ($value) {
if (is_array($value)) {
$query->whereIn('product_id', $value);
} else {
$query->where('product_id', $value);
}
}
}
/**
* 是否删除
* @param $query
* @param $value
*/
public function searchIsDelAttr($query, $value)
{
if ($value !== '') {
$query->where('is_del', $value);
}
}
}

View File

@@ -0,0 +1,409 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\promotions;
use app\model\activity\coupon\StoreCouponIssue;
use app\model\product\product\StoreProduct;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 促销活动活动
* Class StorePromotions
* @package app\model\activity\promotions
*/
class StorePromotions extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_promotions';
protected $updateTime = false;
/**
* 优惠叠加
* @param $value
* @return string
*/
protected function setDiscountUseAttr($value)
{
if ($value) {
return is_array($value) ? implode(',', $value) : $value;
}
return '';
}
/**
* 优惠叠加
* @param $value
* @return array|false|string[]
*/
protected function getDiscountUseAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 标签
* @param $value
* @return array|mixed
*/
protected function getLabelIdAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 关联商品
* @param $value
* @return array|mixed
*/
protected function getProductIdAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 叠加使用
* @param $value
* @return array|mixed
*/
protected function getOverlayAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 赠送优惠券
* @param $value
* @return array|mixed
*/
protected function getIGiveCouponIdAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 赠送商品
* @param $value
* @return array|mixed
*/
protected function getIGiveProductIdAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 赠送商品
* @param $value
* @return array|mixed
*/
protected function getIGiveProductUniqueAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
protected function getAddTimeAttr($value)
{
if ($value) return date('Y-m-d H:i:s', (int)$value);
return '';
}
/**
* 关联商品
* @return \think\model\relation\HasMany
*/
public function products()
{
return $this->hasMany(StorePromotionsAuxiliary::class, 'promotions_id', 'id')->where('type',1)->where('product_partake_type', 2);
}
/**
* 关联优惠券
* @return \think\model\relation\HasOne
*/
public function giveCoupon()
{
return $this->hasMany(StorePromotionsAuxiliary::class, 'promotions_id', 'id')->where('type',2);
}
/**
* 赠送商品
* @return \think\model\relation\HasOne
*/
public function giveProducts()
{
return $this->hasMany(StorePromotionsAuxiliary::class, 'promotions_id', 'id')->where('type',3);
}
/**
* 阶梯优惠
* @return \think\model\relation\HasMany
*/
public function promotions()
{
return $this->hasMany(self::class, 'pid', 'id')->order('id asc');
}
/**
* 关联品牌
* @return \think\model\relation\HasMany
*/
public function brands()
{
return $this->hasMany(StorePromotionsAuxiliary::class, 'promotions_id', 'id')->where('type',1)->where('product_partake_type', 4);
}
/**
* 关联商品标签
* @return \think\model\relation\HasMany
*/
public function productLabels()
{
return $this->hasMany(StorePromotionsAuxiliary::class, 'promotions_id', 'id')->where('type',1)->where('product_partake_type', 5);
}
/**
* ID搜索器
* @param Model $query
* @param $value
*/
public function searchIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('id', $value);
} else {
if ($value) $query->where('id', $value);
}
}
/**
* pid搜索器
* @param Model $query
* @param $value
*/
public function searchPidAttr($query, $value)
{
if ($value !== '') $query->where('pid', $value);
}
/**
* type搜索器
* @param Model $query
* @param $value
*/
public function searchTypeAttr($query, $value)
{
if ($value) $query->where('type', $value);
}
/**
* store_id搜索器
* @param $query
* @param $value
*/
public function searchStoreIdAttr($query, $value)
{
if ($value !== '') $query->where('store_id', $value);
}
/**
* promotions_type搜索器
* @param $query
* @param $value
*/
public function searchPromotionsTypeAttr($query, $value)
{
if ($value !== '') {
if (is_array($value)) {
if ($value) $query->whereIn('promotions_type', $value);
} else {
if ($value) $query->where('promotions_type', $value);
}
}
}
/**
* promotions_cate搜索器
* @param Model $query
* @param $value
*/
public function searchPromotionsCateAttr($query, $value)
{
if ($value !== '') $query->where('promotions_cate', $value);
}
/**
* name搜索器
* @param Model $query
* @param $value
*/
public function searchNameAttr($query, $value)
{
if ($value !== '') $query->whereLike('id|name|desc', "%" . $value . "%");
}
/**
* threshold_type搜索器
* @param Model $query
* @param $value
*/
public function searchThresholdTypeAttr($query, $value)
{
if ($value !== '') $query->where('threshold_type', $value);
}
/**
* discount_type搜索器
* @param Model $query
* @param $value
*/
public function searchDiscountTypeAttr($query, $value)
{
if ($value !== '') $query->where('discount_type', $value);
}
/**
* n_piece_n_discount搜索器
* @param Model $query
* @param $value
*/
public function searchNPieceNDiscountAttr($query, $value)
{
if ($value !== '') $query->where('n_piece_n_discount', $value);
}
/**
* product_partake_type搜索器
* @param Model $query
* @param $value
*/
public function searchProductPartakeTypeAttr($query, $value)
{
if ($value !== '') {
if (is_array($value)) {
if ($value) $query->whereIn('product_partake_type', $value);
} else {
if ($value) $query->where('product_partake_type', $value);
}
}
}
/**
* 是否删除搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsDelAttr($query, $value, $data)
{
$query->where('is_del', $value ?? 0);
}
/**
* 状态搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchStatusAttr($query, $value, $data)
{
if ($value != '') $query->where('status', $value);
}
/**
* 活动事件搜索器
* @param $query
* @param $value
* @param $data
* @return void
*/
public function searchActivityTimeAttr($query, $value, $data)
{
if ($value) {
$startTime = $endTime = 0;
if (is_array($value)) {
$startTime = trim($value[0] ?? 0);
$endTime = trim($value[1] ?? 0);
} elseif (is_string($value)) {
if (strstr($value, '-') !== false) {
[$startTime, $endTime] = explode('-', $value);
$startTime = trim($startTime);
$endTime = trim($endTime);
}
}
if ($startTime || $endTime) {
try {
date('Y-m-d', $startTime);
} catch (\Throwable $e) {
$startTime = strtotime($startTime);
}
try {
date('Y-m-d', $endTime);
} catch (\Throwable $e) {
$endTime = strtotime($endTime);
}
if ($startTime == $endTime || $endTime == strtotime(date('Y-m-d', $endTime))) {
$endTime = $endTime + 86399;
}
$query->where(function ($b) use($startTime, $endTime) {
$b->whereBetween('start_time', [$startTime, $endTime])->whereOr(function ($q) use ($startTime, $endTime) {
$q->whereBetween('stop_time', [$startTime, $endTime]);
})->whereOr(function ($q) use ($startTime, $endTime) {
$q->where('start_time', '<=', $startTime)->where('stop_time', '>=', $endTime);
});
});
}
}
}
}

View File

@@ -0,0 +1,215 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\promotions;
use app\model\activity\coupon\StoreCouponIssue;
use app\model\product\brand\StoreBrand;use app\model\product\label\StoreProductLabel;use app\model\product\product\StoreProduct;
use app\model\product\sku\StoreProductAttrValue;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;use think\Model;
/**
* 优惠活动辅助表
*/
class StorePromotionsAuxiliary extends BaseModel
{
use ModelTrait;
/**
* @var string
*/
protected $key = 'id';
/**
* @var string
*/
protected $name = 'store_promotions_auxiliary';
/**
* 商品规格
* @param $value
* @return array|mixed
*/
protected function getUniqueAttr($value, $data)
{
if ($value) {
return is_string($value) && (!isset($data['type']) || $data['type'] != 3) ? explode(',', $value) : $value;
}
return [];
}
/**
* 关联优惠券
* @return \think\model\relation\HasOne
*/
public function coupon()
{
return $this->hasOne(StoreCouponIssue::class, 'id', 'coupon_id');
}
/**
* 关联商品
* @return \think\model\relation\HasOne
*/
public function productInfo()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id');
}
/**
* 赠送sku一对一
* @return \think\model\relation\hasOne
*/
public function giveAttrValue()
{
return $this->hasOne(StoreProductAttrValue::class, 'unique', 'unique')->where('type', 0);
}
/**
* sku一对多
* @return \think\model\relation\HasMany
*/
public function attrValue()
{
return $this->hasMany(StoreProductAttrValue::class, 'product_id', 'product_id')->where('type', 0);
}
/**
* 关联商品品牌
* @return \think\model\relation\HasOne
*/
public function brandInfo()
{
return $this->hasOne(StoreBrand::class, 'id', 'brand_id');
}
/**
* 关联商品标签
* @return \think\model\relation\HasOne
*/
public function productLabelInfo()
{
return $this->hasOne(StoreProductLabel::class, 'id', 'store_label_id');
}
/**
* type搜索器
* @param Model $query
* @param $value
*/
public function searchTypeAttr($query, $value)
{
if ($value) $query->where('type', $value);
}
/**
* product_partake_type搜索器
* @param Model $query
* @param $value
*/
public function searchProductPartakeTypeAttr($query, $value)
{
if ($value !== '') {
if (is_array($value)) {
if ($value) $query->whereIn('product_partake_type', $value);
} else {
if ($value) $query->where('product_partake_type', $value);
}
}
}
/**
* promotions_id搜索器
* @param $query
* @param $value
*/
public function searchPromotionsIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('promotions_id', $value);
} else {
if ($value !== '') $query->where('promotions_id', $value);
}
}
/**
* coupon_id搜索器
* @param $query
* @param $value
*/
public function searchCouponIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('coupon_id', $value);
} else {
if ($value !== '') $query->where('coupon_id', $value);
}
}
/**
* product_id搜索器
* @param $query
* @param $value
*/
public function searchProductIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('product_id', $value);
} else {
if ($value !== '') $query->where('product_id', $value);
}
}
/**
* is_all搜索器
* @param $query
* @param $value
*/
public function searchIsAllAttr($query, $value)
{
if ($value !== '') {
$query->where('is_all', $value);
}
}
/**
* brand_id
* @param $query
* @param $value
*/
public function searchBrandIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('brand_id', $value);
} else {
if ($value !== '') $query->where('brand_id', $value);
}
}
/**
* store_label_id
* @param $query
* @param $value
*/
public function searchStoreLabelIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('store_label_id', $value);
} else {
if ($value !== '') $query->where('store_label_id', $value);
}
}
}

View File

@@ -0,0 +1,347 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\seckill;
use app\model\activity\StoreActivity;
use app\model\product\product\StoreDescription;
use app\model\product\product\StoreProduct;
use app\model\product\sku\StoreProductAttrValue;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 秒杀商品Model
* Class StoreSeckill
* @package app\model\activity\seckill
*/
class StoreSeckill extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_seckill';
/**
* 配送信息
* @param $value
* @return false|string
*/
protected function setDeliveryTypeAttr($value)
{
if ($value) {
return is_array($value) ? implode(',', $value) : $value;
}
return '';
}
/**
* 配送信息
* @param $value
* @param $data
* @return mixed
*/
protected function getDeliveryTypeAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 配送信息
* @param $value
* @param $data
* @return mixed
*/
protected function getCustomFormAttr($value)
{
if ($value) {
return is_string($value) ? json_decode($value, true) : $value;
}
return [];
}
/**
* 商品标签
* @param $value
* @return array|mixed
*/
protected function getStoreLabelIdAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 商品保障服务
* @param $value
* @return array|mixed
*/
protected function getEnsureIdAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 参数信息
* @param $value
* @return array|mixed
*/
protected function getSpecsAttr($value)
{
if ($value) {
return is_string($value) ? json_decode($value, true) : $value;
}
return [];
}
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
protected function getAddTimeAttr($value)
{
if ($value) return date('Y-m-d H:i:s', (int)$value);
return '';
}
/**
* 图片获取器
* @param $value
* @return array|mixed
*/
protected function getImagesAttr($value)
{
return json_decode($value, true) ?: [];
}
/**
* 时间段ID
* @param $value
* @return string
*/
protected function setTimeIdAttr($value)
{
if ($value) {
return is_array($value) ? implode(',', $value) : $value;
}
return '';
}
/**
* 时间段ID
* @param $value
* @return array|false|string[]
*/
protected function getTimeIdAttr($value)
{
if ($value) {
return is_string($value) ? array_map('intval', array_filter(explode(',', $value))) : $value;
}
return [];
}
/**
* 一对一关联
* 商品关联商品商品详情
* @return \think\model\relation\HasOne
*/
public function descriptions()
{
return $this->hasOne(StoreDescription::class, 'product_id', 'id')->where('type', 1)->bind(['description']);
}
/**
* 一对一关联
* 商品关联商品商品详情
* @return \think\model\relation\HasOne
*/
public function product()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id')->where('is_show', 1)->where('is_del', 0)->field(['(sales+ficti) as total', 'id'])->bind([
'total' => 'total'
]);
}
/**
* sku一对多
* @return \think\model\relation\HasMany
*/
public function attrValue()
{
return $this->hasMany(StoreProductAttrValue::class, 'product_id', 'id')->where('type', 1);
}
/**
* 一对一关联
* 商品关联活动
* @return \think\model\relation\HasOne
*/
public function activity()
{
return $this->hasOne(StoreActivity::class, 'id', 'activity_id');
}
/**
* 一对一关联
* 商品关联活动
* @return \think\model\relation\HasOne
*/
public function activityName()
{
return $this->hasOne(StoreActivity::class, 'id', 'activity_id')->field(['id', 'name'])->bind([
'activity_name' => 'name'
]);
}
/**
* 活动ID搜索器
* @param Model $query
* @param $value
*/
public function searchActivityIdAttr($query, $value)
{
if ($value) {
if (is_array($value)) {
$query->whereIn('activity_id', $value);
} else {
$query->where('activity_id', $value);
}
}
}
/**
* 秒杀时间段
* @param $query
* @param $value
*/
public function searchTimeIdAttr($query, $value)
{
if ($value) $query->where('find_in_set(' . $value . ',`time_id`)');
}
/**
* 秒杀商品名称搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchStoreNameAttr($query, $value, $data)
{
if ($value) $query->where('title|id', 'like', '%' . $value . '%');
}
/**
* 是否推荐搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsHotAttr($query, $value, $data)
{
$query->where('is_hot', $value ?? 1);
}
/**
* 状态搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsShowAttr($query, $value, $data)
{
$query->where('is_show', $value ?? 1);
}
/**
* 是否删除搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsDelAttr($query, $value, $data)
{
$query->where('is_del', $value ?? 0);
}
/**
* 状态搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchStatusAttr($query, $value, $data)
{
if ($value != '') $query->where('status', $value);
}
/**
* 商品ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchProductIdAttr($query, $value, $data)
{
if ($value) {
if (is_array($value)) {
$query->whereIn('product_id', $value);
} else {
$query->where('product_id', $value);
}
}
}
/**
* 活动有效时间搜索器
* @param $query
* @param $value
*/
public function searchSeckillTimeAttr($query, $value)
{
if ($value == 1) {
$time = time();
$query->where('start_time', '<=', $time)->where('stop_time', '>=', $time - 86400);
}
}
/**
* 系统表单搜索器
* @param Model $query
* @param $value
*/
public function searchSystemFormIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('system_form_id', $value);
} else {
if ($value !== '') $query->where('system_form_id', $value);
}
}
}

View File

@@ -0,0 +1,100 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\seckill;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 秒杀时间Model
* Class StoreSeckillTime
* @package app\model\activity\seckill
*/
class StoreSeckillTime extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_seckill_time';
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
protected function getAddTimeAttr($value)
{
if ($value) return date('Y-m-d H:i:s', (int)$value);
return '';
}
/**
* ID搜索器
* @param Model $query
* @param $value
*/
public function searchIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('id', $value);
} else {
if ($value) $query->where('id', $value);
}
}
/**
* 秒杀商品名称搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchTitleAttr($query, $value, $data)
{
if ($value !== '') $query->where('title|id', 'like', '%' . $value . '%');
}
/**
* 秒杀商品名称搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchNameAttr($query, $value, $data)
{
if ($value !== '') $query->where('title|id', 'like', '%' . $value . '%');
}
/**
* 状态搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchStatusAttr($query, $value, $data)
{
if ($value != '') $query->where('status', $value);
}
}

View File

@@ -0,0 +1,137 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\video;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 视频Model
* Class StoreSeckill
* @package app\model\activity\seckill
*/
class Video extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'video';
/**
* 关联商品ID
* @param $value
* @return false|string
*/
protected function setProductIdAttr($value)
{
if ($value) {
return is_array($value) ? implode(',', $value) : $value;
}
return '';
}
/**
* 关联商品ID
* @param $value
* @return mixed
*/
protected function getProductIdAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 商户搜索器
* @param Model $query
* @param $value
*/
public function searchTypeAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('type', $value);
} else {
if ($value !== '') $query->where('type', $value);
}
}
/**
* 关联门店ID、供应商ID搜索器
* @param Model $query
* @param $value
*/
public function searchRelationIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value);
} else {
if ($value !== '') $query->where('relation_id', $value);
}
}
/**
* 状态搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsShowAttr($query, $value, $data)
{
$query->where('is_show', $value ?? 1);
}
/**
* 推荐搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsRecommendAttr($query, $value, $data)
{
$query->where('is_recommend', $value ?? 1);
}
/**
* 是否审核搜索器
* @param $query
* @param $value
*/
public function searchIsVerifyAttr($query, $value)
{
if ($value !== '') $query->where('is_verify', $value ?? 1);
}
/**
* 是否删除搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsDelAttr($query, $value, $data)
{
$query->where('is_del', $value ?? 0);
}
}

View File

@@ -0,0 +1,195 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\activity\video;
use app\model\user\User;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 视频评价Model
* Class VideoComment
* @package app\model\activity\video
*/
class VideoComment extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'video_comment';
/**
* @var bool
*/
protected $autoWriteTimestamp = false;
/**
* 一对一关联
* 视频评论关联视频
* @return \think\model\relation\HasOne
*/
public function video()
{
return $this->hasOne(Video::class, 'id', 'video_id');
}
/**
* 一对一关联
* 视频评论关联用户
* @return \think\model\relation\HasOne
*/
public function user()
{
return $this->hasOne(User::class, 'uid', 'uid');
}
/**
* 一对一关联
* 视频评论关联用户
* @return \think\model\relation\HasOne
*/
public function userVip()
{
return $this->hasOne(User::class, 'uid', 'uid')->field('uid,avatar,nickname,is_money_level')->bind(['is_money_level']);
}
/**
* 管理回复
* @return \think\model\relation\HasOne
*/
public function reply()
{
return $this->hasOne(self::class, 'pid', 'id')->where('is_del', 0)->where('uid', 0);
}
/**
* 管理回复
* @return \think\model\relation\HasOne
*/
public function replyContent()
{
return $this->hasOne(self::class, 'pid', 'id')->field('id,pid,content')->where('is_del', 0)->where('uid', 0)->bind(['reply' => 'content']);
}
/**
* @return \think\model\relation\hasMany
*/
public function children()
{
return $this->hasMany(self::class, 'pid', 'id')->where('is_del', 0);
}
/**
* 商户搜索器
* @param Model $query
* @param $value
*/
public function searchTypeAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('type', $value);
} else {
if ($value !== '') $query->where('type', $value);
}
}
/**
* 关联门店ID、供应商ID搜索器
* @param Model $query
* @param $value
*/
public function searchRelationIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value);
} else {
if ($value !== '') $query->where('relation_id', $value);
}
}
/**
* 上级评论搜索器
* @param Model $query
* @param $value
*/
public function searchPidAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('pid', $value);
} else {
if ($value !== '') $query->where('pid', $value);
}
}
/**
* 视频ID搜索器
* @param Model $query
* @param $value
*/
public function searchVideoIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('video_id', $value);
} else {
if ($value) $query->where('video_id', $value);
}
}
/**
* UID搜索器
* @param Model $query
* @param $value
*/
public function searchUidAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('uid', $value);
} else {
if ($value !== '') $query->where('uid', $value);
}
}
/**
* is_reply搜索器
* @param Model $query
* @param $value
*/
public function searchIsReplyAttr($query, $value)
{
if ($value !== '') $query->where('is_reply', $value);
}
/**
* is_del搜索器
* @param Model $query
* @param $value
*/
public function searchIsDelAttr($query, $value)
{
if ($value !== '') $query->where('is_del', $value);
}
}