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,130 @@
<?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\product\brand;
use app\model\product\product\StoreProduct;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 商品品牌Model
* Class StoreCategory
* @package app\model\product\product
*/
class StoreBrand extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_brand';
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
protected function getAddTimeAttr($value)
{
return date('Y-m-d H:i:s', $value);
}
/**
* 获取子集分类查询条件
* @return \think\model\relation\HasMany
*/
public function children()
{
return $this->hasMany(self::class, 'pid', 'id')->order('sort DESC,id DESC');
}
/**
* 一对一关联
* 商品关联品牌
* @return \think\model\relation\HasOne
*/
public function product()
{
return $this->hasMany(StoreProduct::class, 'brand_id', 'id');
}
/**
* 品牌是否显示搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsShowAttr($query, $value, $data)
{
if ($value !== '') $query->where('is_show', $value);
}
/**
* 品牌是否显示搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsDelAttr($query, $value, $data)
{
if ($value !== '') $query->where('is_del', $value);
}
/**
* 分类是否显示搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchPidAttr($query, $value, $data)
{
if ($value !== '') $query->where('pid', $value);
}
/**
* 分类是否显示搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchBrandNameAttr($query, $value, $data)
{
if ($value !== '') $query->where('brand_name', 'like', '%' . $value . '%');
}
/**
* 分类是否显示搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIdAttr($query, $value)
{
if ($value !== '') {
if (is_array($value)) {
$query->whereIn('id', $value);
} else {
$query->where('id', $value);
}
}
}
}

View File

@@ -0,0 +1,186 @@
<?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\product\category;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 商品分类Model
* Class StoreProductCategory
* @package app\model\product\product
*/
class StoreProductCategory extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_category';
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
protected function getAddTimeAttr($value)
{
return date('Y-m-d H:i:s', $value);
}
/**
* 父级
* @return \think\model\relation\HasOne
*/
public function parentCate()
{
return $this->hasOne(self::class, 'id', 'pid')->where('is_show', 1);
}
/**
* 父级
* @return \think\model\relation\HasOne
*/
public function parentCateName()
{
return $this->hasOne(self::class, 'id', 'pid')->field('id,pid,cate_name')->where('is_show', 1)->bind(['one' => 'cate_name']);
}
/**
* 获取子集分类查询条件
* @return \think\model\relation\HasMany
*/
public function AdminChildren()
{
return $this->hasMany(self::class, 'pid', 'id')->order('sort DESC,id DESC');
}
/**
* 获取子集分类查询条件
* @return \think\model\relation\HasMany
*/
public function children()
{
return $this->hasMany(self::class, 'pid', 'id')->where('is_show', 1)->order('sort DESC,id DESC');
}
/**
* 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 searchPidAttr($query, $value, $data)
{
if (is_array($value)) {
if ($value) $query->whereIn('pid', $value);
} else {
if ($value !== '') $query->where('pid', $value);
}
}
/**
* @param $query
* @param $value
* @return void
*/
public function searchLevelAttr($query, $value){
if (is_array($value)) {
if ($value) $query->whereIn('level', $value);
} else {
if(in_array($value, [1, -1, 0])) {
switch ($value) {
case -1://所有
break;
case 0://所有一级
$query->where('level', 0);
break;
case 1://所有二级
$query->whereIn('level', [0, 1]);
break;
}
}
}
}
/**
* 分类是否显示搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchCateNameAttr($query, $value, $data)
{
if ($value !== '') $query->where('cate_name', 'like', '%' . $value . '%');
}
/**
* 类型搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchTypeAttr($query, $value)
{
if ($value !== '') $query->where('type', $value);
}
/**
* 关联ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchRelationIdAttr($query, $value)
{
if ($value !== '') $query->where('relation_id', $value);
}
/**
* 分类是否显示搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsShowAttr($query, $value, $data)
{
if ($value !== '') $query->where('is_show', $value);
}
}

View File

@@ -0,0 +1,141 @@
<?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\product\ensure;
use app\model\product\product\StoreProduct;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 商品保障服务
* Class StoreProductEnsure
* @package app\model\product\label
*/
class StoreProductEnsure extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_ensure';
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
protected function getAddTimeAttr($value)
{
return date('Y-m-d H:i:s', $value);
}
/**
* @param Model $query
* @param $value
*/
public function searchNameAttr($query, $value)
{
$query->whereLike('id|name', '%' . $value . '%');
}
/**
* 商户搜索器
* @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 searchSupplierIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value)->where('type', 2);
} else {
if ($value !== '') $query->where('relation_id', $value)->where('type', 2);
}
}
/**
* 门店
* @param Model $query
* @param $value
*/
public function searchStoreIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value)->where('type', 1);
} else {
if ($value !== '') $query->where('relation_id', $value)->where('type', 1);
}
}
/**
* status搜索器
* @param Model $query
* @param $value
*/
public function searchStatusAttr($query, $value)
{
if ($value !== '') $query->where('status', $value);
}
/**
* @param $query
* @param $value
* @author 等风来
* @email 136327134@qq.com
* @date 2022/11/2
*/
public function searchIdsAttr($query, $value)
{
if (is_array($value)) {
$query->whereIn('id', $value);
}
}
}

View File

@@ -0,0 +1,178 @@
<?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\product\label;
use app\model\product\product\StoreProduct;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 商品标签
* Class StoreProductLabel
* @package app\model\product\label
*/
class StoreProductLabel extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_label';
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
protected function getAddTimeAttr($value)
{
return date('Y-m-d H:i:s', $value);
}
/**
* 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 \think\Model $query
* @param $value
*/
public function searchLabelCateAttr($query, $value)
{
if (is_array($value)) {
$query->whereIn('label_cate', $value);
} else {
if ($value) {
$query->where('label_cate', $value);
}
}
}
/**
* 商户搜索器
* @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 searchSupplierIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value)->where('type', 2);
} else {
if ($value !== '') $query->where('relation_id', $value)->where('type', 2);
}
}
/**
* 门店
* @param Model $query
* @param $value
*/
public function searchStoreIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value)->where('type', 1);
} else {
if ($value !== '') $query->where('relation_id', $value)->where('type', 1);
}
}
/**
* ids搜索器
* @param Model $query
* @param $value
*/
public function searchIdsAttr($query, $value)
{
if ($value) $query->whereIn('id', $value);
}
/**
* 样式搜索器
* @param Model $query
* @param $value
*/
public function searchStyleTypeAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('style_type', $value);
} else {
if ($value !== '') $query->where('style_type', $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 !== '') $query->where('status', $value);
}
}

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\product\label;
use app\model\product\sku\StoreProductAttrValue;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
/**
* 标签辅助表
* Class StoreProductLabelAuxiliary
* @package app\model\product\label
*/
class StoreProductLabelAuxiliary extends BaseModel
{
use ModelTrait;
/**
* @var string
*/
protected $key = 'id';
/**
* @var string
*/
protected $name = 'store_product_label_auxiliary';
}

View File

@@ -0,0 +1,56 @@
<?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\product\product;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
/**
* 商品详情Model
* Class StoreDescription
* @package app\model\product\product
*/
class StoreDescription extends BaseModel
{
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_description';
use ModelTrait;
public function getDescriptionAttr($value)
{
return htmlspecialchars_decode($value);
}
/**
* 商品ID搜索器
* @param $query
* @param $value
*/
public function searchProductIdAttr($query, $value)
{
if ($value) $query->where('product_id', $value);
}
/**
* 类型搜索器
* @param $query
* @param $value
*/
public function searchTypeAttr($query, $value)
{
$query->where('type', $value);
}
}

View File

@@ -0,0 +1,812 @@
<?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\product\product;
use app\model\product\brand\StoreBrand;
use app\model\product\sku\StoreProductAttrValue;
use app\model\store\product\Product;
use app\model\store\SystemStore;
use app\model\supplier\SystemSupplier;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use app\model\activity\coupon\StoreCouponProduct;
use think\Model;
/**
* 商品Model
* Class StoreProduct
* @package app\model\product\product
*/
class StoreProduct extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_product';
/**
* 配送信息
* @param $value
* @return string
*/
protected function setDeliveryTypeAttr($value)
{
if ($value) {
return is_array($value) ? implode(',', $value) : $value;
}
return '';
}
/**
* 配送信息
* @param $value
* @return array|false|string[]
*/
protected function getDeliveryTypeAttr($value)
{
if ($value) {
return is_string($value) ? explode(',', $value) : $value;
}
return [];
}
/**
* 自定义表单信息
* @param $value
* @return array|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) ? array_map('intval', array_filter(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 storeBranchProduct()
{
return $this->hasOne(Product::class, 'product_id', 'id');
}
/**
* 一对一关联
* 商品关联商品商品详情
* @return \think\model\relation\HasOne
*/
public function descriptions()
{
return $this->hasOne(StoreDescription::class, 'product_id', 'id')->where('type', 0)->bind(['description']);
}
/**
* 一对一关联
* 商品关联商品商品品牌
* @return \think\model\relation\HasOne
*/
public function brand()
{
return $this->hasOne(StoreBrand::class, 'id', 'brand_id')->field('id,brand_name')->where(['is_show' => 1, 'is_del' => 0])->bind(['brand_name']);
}
/**
* 一对一关联
* 商品关联供应商
* @return \think\model\relation\HasOne
*/
public function supplier()
{
return $this->hasOne(SystemSupplier::class, 'id', 'relation_id')->where('type', 2)->field('id,supplier_name')->where(['is_show' => 1, 'is_del' => 0])->bind(['supplier_name']);
}
/**
* 一对一关联
* 商品关联供应商
* @return \think\model\relation\HasOne
*/
public function supplierInfo()
{
return $this->hasOne(SystemSupplier::class, 'id', 'relation_id')->where(['is_show' => 1, 'is_del' => 0]);
}
/**
* 一对一关联
* 商品关联门店
* @return \think\model\relation\HasOne
*/
public function store()
{
return $this->hasOne(SystemStore::class, 'id', 'relation_id')->field('id,name,is_store')->where(['is_show' => 1, 'is_del' => 0])->bind(['store_name' => 'name', 'store_is_store' => 'is_store']);
}
/**
* 一对一关联
* 商品关联门店
* @return \think\model\relation\HasOne
*/
public function storeInfo()
{
return $this->hasOne(SystemStore::class, 'id', 'relation_id')->where(['is_show' => 1, 'is_del' => 0]);
}
/**
* 一对多关联
* 商品关联优惠卷模板id
* @return \think\model\relation\HasMany
*/
public function couponId()
{
return $this->hasMany(StoreCouponProduct::class, 'product_id', 'id')->field(['product_id']);
}
/**
* 优惠券名称一对多
* @return \think\model\relation\HasMany
*/
public function coupons()
{
return $this->hasMany(StoreProductCoupon::class, 'product_id', 'id');
}
/**
* 评论一对多
* @return \think\model\relation\HasMany
*/
public function star()
{
return $this->hasMany(StoreProductReply::class, 'product_id', 'id')->where('is_del', 0)->field('product_score,product_id');
}
/**
* 分类一对多
* @return \think\model\relation\HasMany
*/
public function cateName()
{
return $this->hasMany(StoreProductCate::class, 'product_id', 'id')->with('cateName');
}
/**
* sku一对多
* @return \think\model\relation\HasMany
*/
public function attrValue()
{
return $this->hasMany(StoreProductAttrValue::class, 'product_id', 'id')->where('type', 0);
}
/**
* 轮播图获取器
* @param $value
* @return array|mixed
*/
public function getSliderImageAttr($value)
{
return is_string($value) ? json_decode($value, true) : [];
}
/**
* @param $value
* @return bool
*/
public function getStoreDeliveryAttr($value)
{
//1=快递,2=门店自提,3=门店配送
return in_array(3, $this->delivery_type);
}
/**
* @param $value
* @return bool
*/
public function getStoreMentionAttr($value)
{
//1=快递,2=门店自提,3=门店配送
return in_array(2, $this->delivery_type);
}
/**
* @param $value
* @return bool
*/
public function getExpressDeliveryAttr($value)
{
//1=快递,2=门店自提,3=门店配送
return in_array(1, $this->delivery_type);
}
/**
* 配送方式
* @param $query
* @param $value
*/
public function searchDeliveryTypeAttr($query, $value)
{
if (in_array($value, [1, 2, 3])) {
$query->where('find_in_set(' . $value . ',`delivery_type`)');
}
}
/**
* 商品类型搜索器
* @param $query
* @param $value
*/
public function searchProductTypeAttr($query, $value)
{
if ($value !== '') {
if (is_array($value)) {
$query->whereIn('product_type', $value);
} else {
$query->where('product_type', $value ?? 0);
}
}
}
/**
* 是否开启会员价
* @param $query
* @param $value
*/
public function searchIsVipAttr($query, $value)
{
if ($value !== '') {
$query->where('is_vip', $value ?? 0);
}
}
/**
* 规格
* @param $query
* @param $value
* @return void
* User: liusl
* DateTime: 2024/10/28 10:55
*/
public function searchSpecTypeAttr($query, $value)
{
if ($value !== '') {
$query->where('spec_type', $value ?? 0);
}
}
/**
* 是否是svip商品搜索器
* @param $query
* @param $value
*/
public function searchIsVipProductAttr($query, $value)
{
if ($value !== '') {
switch ($value) {
case -1:
break;
case 0:
$query->where('is_vip_product', 0);
break;
case 1:
$query->where('is_vip_product', 1);
break;
default:
$query->where('is_vip_product', 0);
break;
}
}
}
/**
* 是否预售搜索器
* @param $query
* @param $value
*/
public function searchIsPresaleProductAttr($query, $value)
{
if ($value !== '') $query->where('is_presale_product', $value ?? 0);
}
/**
* 是否显示搜索器
* @param $query
* @param $value
*/
public function searchIsShowAttr($query, $value)
{
if ($value !== '') $query->where('is_show', $value ?? 1);
}
/**
* 是否审核搜索器
* @param $query
* @param $value
*/
public function searchIsVerifyAttr($query, $value)
{
if ($value !== '') $query->where('is_verify', $value ?? 1);
}
/**
* @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
*/
public function searchSupplierIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value)->where('type', 2);
} else {
if ($value) $query->where('relation_id', $value)->where('type', 2);
}
}
/**
* 门店
* @param Model $query
* @param $value
*/
public function searchStoreIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value)->where('type', 1);
} else {
if ($value) $query->where('relation_id', $value)->where('type', 1);
}
}
/**
* 是否删除搜索器
* @param Model $query
* @param $value
*/
public function searchIsDelAttr($query, $value)
{
if ($value !== '') $query->where('is_del', $value ?: 0);
}
/**
* 条形码搜索器
* @param Model $query
* @param $value
*/
public function searchBarCodeAttr($query, $value)
{
if ($value !== '') $query->where(function ($query) use ($value) {
$query->where('bar_code', $value)->whereOr('id', 'IN', function ($q) use ($value) {
$q->name('store_product_attr_value')->field('product_id')->where('bar_code', $value)->select();
});
});
}
/**
* 商户搜索器
* @param Model $query
* @param $value
*/
public function searchPidAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('pid', $value);
} else {
if ($value !== '') {
if ($value == -1) {
$query->where('pid', '>', 0);
} else {
$query->where('pid', $value);
}
}
}
}
/**
* 商户搜索器
* @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);
}
}
/**
* 商户ID搜索器
* @param Model $query
* @param $value
*/
public function searchMerIdAttr($query, $value)
{
$query->where('mer_id', $value ?? 0);
}
/**
* keyword搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchKeywordAttr($query, $value, $data)
{
if ($value != '' && !isset($data['store_id'])) {
$field = 'id|keyword|store_name|store_info|bar_code';
if (is_string($value)) {
$query->whereLike($field, htmlspecialchars("%" . trim($value) . "%"));
} elseif (is_array($value) && count($value) > 0) {
$query->where(function ($q) use ($value, $field) {
$data = [];
foreach ($value as $k) {
$data[] = [$field, 'like', "%" . trim($k) . "%"];
}
$q->whereOr($data);
});
}
}
}
/**
* 热卖商品搜索器
* @param Model $query
* @param int $value
*/
public function searchIsHotAttr($query, $value)
{
if ($value) $query->whereIn('id', function ($query) use ($value) {
$query->name('store_product_relation')->where('type', 3)->whereIn('relation_id', 1)->field('product_id')->select();
});
}
/**
* 促销商品搜索器
* @param Model $query
* @param int $value
*/
public function searchIsBenefitAttr($query, $value)
{
if ($value) $query->whereIn('id', function ($query) use ($value) {
$query->name('store_product_relation')->where('type', 3)->whereIn('relation_id', 2)->field('product_id')->select();
});
}
/**
* 精品商品搜索器
* @param Model $query
* @param int $value
*/
public function searchIsBestAttr($query, $value)
{
if ($value) $query->whereIn('id', function ($query) use ($value) {
$query->name('store_product_relation')->where('type', 3)->whereIn('relation_id', 3)->field('product_id')->select();
});
}
/**
* 新品商品搜索器
* @param Model $query
* @param int $value
*/
public function searchIsNewAttr($query, $value)
{
if ($value) $query->whereIn('id', function ($query) use ($value) {
$query->name('store_product_relation')->where('type', 3)->whereIn('relation_id', 4)->field('product_id')->select();
});
}
/**
* 精品商品搜索器
* @param Model $query
* @param int $value
*/
public function searchIsGoodAttr($query, $value)
{
if ($value) $query->whereIn('id', function ($query) use ($value) {
$query->name('store_product_relation')->where('type', 3)->whereIn('relation_id', 5)->field('product_id')->select();
});
}
/**
* 用户标签搜索器
* @param Model $query
* @param int $value
*/
public function searchLabelIdAttr($query, $value)
{
if ($value !== '') $query->whereFindInSet('label_id', $value);
}
/**
* 保障服务搜索器
* @param Model $query
* @param int $value
*/
public function searchEnsureIdAttr($query, $value)
{
if ($value !== '') $query->whereFindInSet('ensure_id', $value);
}
/**
* SPU搜索器
* @param Model $query
* @param int $value
*/
public function searchSpuAttr($query, $value)
{
$query->where('spu', $value);
}
/**
* 库存搜索器
* @param Model $query
* @param int $value
*/
public function searchStockAttr($query, $value)
{
$query->where('stock', $value);
}
/**
* 分类搜索器
* @param Model $query
* @param int $value
*/
public function searchCateIdAttr($query, $value)
{
if ($value) {
if (is_array($value)) {
$query->whereIn('id', function ($query) use ($value) {
$query->name('store_product_relation')->where('type', 1)->where('relation_id', 'IN', $value)->field('product_id')->select();
});
} else {
$query->whereFindInSet('cate_id', $value);
}
}
}
/**
* 商品数量条件搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchStatusAttr($query, $value, $data)
{
if ($value !== '') {
switch ((int)$value) {
case -2://强制下架
$query->where(['is_verify' => -2,'is_del' => 0]);
break;
case -1://审核未通过
$query->where(['is_verify' => -1,'is_del' => 0]);
break;
case 0://待审核
$query->where(['is_verify' => 0, 'is_del' => 0]);
break;
case 1:
$query->where(['is_show' => 1, 'is_del' => 0, 'is_verify' => 1]);
break;
case 2:
$query->where(['is_show' => 0, 'is_del' => 0, 'is_verify' => 1]);
break;
case 3:
$query->where(['is_del' => 0, 'is_verify' => 1]);
break;
case 4:
$query->where(['is_del' => 0, 'is_verify' => 1])->where(function ($query) {
$query->where('is_sold', 1)->whereOr('stock', 0);
});
break;
case 5:
// if (isset($data['store_stock']) && $data['store_stock']) {
// $store_stock = $data['store_stock'];
// $query->where(['is_show' => 1, 'is_del' => 0, 'is_verify' => 1, 'is_police' => 1])->where('stock', '<=', $store_stock)->where('stock', '>', 0);
// } else {
$query->where(['is_show' => 1, 'is_del' => 0, 'is_verify' => 1, 'is_police' => 1])->where('stock', '>', 0);
// }
break;
case 6:
$query->where(['is_del' => 1]);
break;
case 7://回收站 & 下架商品
$query->where(function ($q) {
$q->where(['is_del' => 1])->whereOr('is_show', 0);
});
break;
};
}
}
/**
* 品牌搜索器
* @param Model $query
* @param $value
*/
public function searchBrandIdAttr($query, $value)
{
if ($value) {
if (is_array($value)) {
$query->whereIn('brand_id', $value);
} else {
$query->where('brand_id', $value);
}
}
}
/**
* 库存预警
* @param $query
* @param $value
* @author 等风来
* @email 136327134@qq.com
* @date 2023/4/18
*/
public function searchIsPoliceAttr($query, $value)
{
if ('' !== $value) $query->where('is_police', $value);
}
/**
* 是否售罄
* @param $query
* @param $value
* @author 等风来
* @email 136327134@qq.com
* @date 2023/4/18
*/
public function searchIsSoldAttr($query, $value)
{
if ('' !== $value) $query->where('is_sold', $value);
}
public function searchLevelTypeAttr($query, $value)
{
if ('' !== $value) $query->where('level_type', $value);
}
public function searchIsBrokerageAttr($query, $value)
{
if ('' !== $value) $query->where('is_brokerage', $value);
}
public function searchisChannelProductAttr($query, $value)
{
if ('' !== $value) $query->where('is_channel_product', $value);
}
public function searchisGeneralProductAttr($query, $value)
{
if ('' !== $value) $query->where('is_general_product', $value);
}
public function searchProductClearAttr($query, $value)
{
if ($value !== '') {
if ($value == 'is_general_product') {
$query->where('is_general_product', 1);
}
if ($value == 'is_channel_product') {
$query->where('is_channel_product', 1);
}
if ($value == 'is_vip_product') {
$query->where('is_vip_product', 1);
}
}
}
/**
* 系统表单搜索器
* @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,50 @@
<?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\product\product;
use app\model\product\category\StoreProductCategory;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 商品分类关联Model
* Class StoreProductCate
* @package app\model\product\product
*/
class StoreProductCate extends Model
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_cate';
/**
* 一对一关联获取分类名称
* @return \think\model\relation\HasOne
*/
public function cateName()
{
return $this->hasOne(StoreProductCategory::class, 'id', 'cate_id')->bind([
'cate_name' => 'cate_name'
]);
}
}

View File

@@ -0,0 +1,47 @@
<?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\product\product;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
/**
* Class StoreProductCoupon
* @package app\model\product\product
*/
class StoreProductCoupon extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_coupon';
public function searchProductIdAttr($query, $value)
{
if(is_array($value))
$query->whereIn('product_id',$value);
else
$query->where('product_id',$value);
}
}

View File

@@ -0,0 +1,126 @@
<?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\product\product;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
use think\model\concern\SoftDelete;
class StoreProductLog extends BaseModel
{
use ModelTrait;
use SoftDelete;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_log';
protected $autoWriteTimestamp = 'int';
protected $createTime = 'add_time';
protected $deleteTime = 'delete_time';
/**
* 添加时间修改器
* @return int
*/
public function setAddTimeAttr()
{
return time();
}
/**
* 商品记录关联商品
* @return \think\model\relation\HasOne
* User: liusl
* DateTime: 2024/8/6 09:33
*/
public function product()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id');
}
/**
* 一对一关联
* 商品记录关联商品名称
* @return \think\model\relation\HasOne
*/
public function storeName()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id')->bind([
'store_name',
'image',
'product_price' => 'price',
'stock',
'is_show'
]);
}
/**
* 分类搜索器
* @param Model $query
* @param int $value
*/
public function searchCateIdAttr($query, $value)
{
if ($value) {
if (is_array($value)) {
$query->whereIn('product_id', function ($query) use ($value) {
$query->name('store_product_relation')->where('type', 1)->where('relation_id', 'IN', $value)->field('product_id')->select();
});
} else {
$query->whereFindInSet('cate_id', $value);
}
}
}
/**
* 记录类型搜索器
* @param $query
* @param $value
*/
public function searchTypeAttr($query, $value)
{
if ($value != '') $query->where('type', $value);
}
/**
* 商品ID搜索器
* @param $query
* @param $value
*/
public function searchProductIdAttr($query, $value)
{
if ($value != '') $query->where('product_id', $value);
}
/**
* 用户ID搜索器
* @param $query
* @param $value
*/
public function searchUidAttr($query, $value)
{
if ($value != '') $query->where('uid', $value);
}
}

View File

@@ -0,0 +1,157 @@
<?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\product\product;
use app\model\product\brand\StoreBrand;
use app\model\product\category\StoreProductCategory;
use app\model\product\ensure\StoreProductEnsure;
use app\model\product\label\StoreProductLabel;
use app\model\product\specs\StoreProductSpecs;
use app\model\user\label\UserLabel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 商品关联模型
* Class StoreProductRelation
* @package app\model\product\product
*/
class StoreProductRelation extends Model
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_relation';
/**
* 一对一关联获取分类名称
* @return \think\model\relation\HasOne
*/
public function cateName()
{
return $this->hasOne(StoreProductCategory::class, 'id', 'relation_id')->bind([
'cate_name' => 'cate_name'
]);
}
/**
* 一对一关联获取分类名称
* @return \think\model\relation\HasOne
*/
public function cate()
{
return $this->hasOne(StoreProductCategory::class, 'id', 'relation_id');
}
/**
* 品牌
* @return \think\model\relation\HasOne
*/
public function brand()
{
return $this->hasOne(StoreBrand::class, 'id', 'relation_id');
}
/**
* 商品标签
* @return \think\model\relation\HasOne
*/
public function productLabel()
{
return $this->hasOne(StoreProductLabel::class, 'id', 'relation_id');
}
/**
* 用户标签
* @return \think\model\relation\HasOne
*/
public function userLabel()
{
return $this->hasOne(UserLabel::class, 'id', 'relation_id');
}
/**
* 用户保障服务
* @return \think\model\relation\HasOne
*/
public function ensure()
{
return $this->hasOne(StoreProductEnsure::class, 'id', 'relation_id');
}
/**
* 用户保障服务
* @return \think\model\relation\HasOne
*/
public function specs()
{
return $this->hasOne(StoreProductSpecs::class, 'id', 'relation_id')->order('sort desc');
}
/**
* 商品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 searchRelationIdAttr($query, $value)
{
if ($value) {
if (is_array($value)) {
$query->whereIn('relation_id', $value);
} else {
$query->where('relation_id', $value);
}
}
}
/**
* 类型搜索器
* @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);
}
}
}
}

View File

@@ -0,0 +1,234 @@
<?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\product\product;
use app\model\order\StoreOrderCartInfo;
use app\model\user\User;
use app\model\user\UserRelation;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 商品评价Model
* Class StoreProductReply
* @package app\model\product\product
*/
class StoreProductReply extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_reply';
/**
* 一对一关联
* 商品评论关联商品
* @return \think\model\relation\HasOne
*/
public function productInfo()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id');
}
/**
* 一对一关联
* 商品评论关联订单
* @return \think\model\relation\HasOne
*/
public function cartInfo()
{
return $this->hasOne(StoreOrderCartInfo::class, 'unique', 'unique')->bind(['cart_info']);
}
/**
* @return \think\model\relation\HasOne
*/
public function replyComment()
{
return $this->hasOne(StoreProductReplyComment::class, 'reply_id', 'id');
}
/**
* 点赞关联
* @return \think\model\relation\HasOne
*/
public function productRelation()
{
return $this->hasOne(UserRelation::class, 'relation_id', 'id');
}
/**
* 一对一关联
* 商品评论关联订单
* @return \think\model\relation\HasOne
*/
public function userInfo()
{
return $this->hasOne(User::class, 'uid', 'uid')->field('is_money_level,uid')->bind(['is_money_level']);
}
/**
* 评价图片修改器
* @param $value
* @return false|string
*/
protected function setPicsAttr($value)
{
return is_array($value) ? json_encode($value) : $value;
}
/**
* 评价图片获取器
* @param $value
* @return mixed
*/
protected function getPicsAttr($value)
{
return json_decode($value, true);
}
/**
* 用户搜索器
* @param Model $query
* @param $value
*/
public function searchUidAttr($query, $value)
{
$query->where('uid', $value);
}
/**
* 商品搜索器
* @param Model $query
* @param $value
*/
public function searchProductIdAttr($query, $value)
{
$query->where('product_id', $value);
}
/**
* 是否删除搜索器
* @param Model $query
* @param $value
*/
public function searchIsDelAttr($query, $value)
{
$query->where('is_del', $value ?? 0);
}
/**
* 是否回复搜索器
* @param Model $query
* @param $value
*/
public function searchIsReplyAttr($query, $value)
{
$query->where('is_reply', $value);
}
/**
* @param Model $query
* @param $value
*/
public function searchUniqueAttr($query, $value)
{
if (is_array($value)) {
$query->whereIn('unique', $value);
} else {
$query->where('unique', $value);
}
}
/**
* 门店ID搜索器
* @param Model $query
* @param $value
*/
public function searchStoreIdAttr($query, $value)
{
if ($value !== '') $query->where('store_id', $value);
}
/**
* oid订单id搜索器
* @param Model $query
* @param $value
*/
public function searchOidAttr($query, $value)
{
$query->where('oid', $value);
}
/**
* 商品分数搜索器
* @param Model $query
* @param $value
*/
public function searchProductScoreAttr($query, $value)
{
$query->where('product_score', $value);
}
/**
* 商户搜索器
* @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 searchSupplierIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value)->where('type', 2);
} else {
if ($value !== '') $query->where('relation_id', $value)->where('type', 2);
}
}
}

View File

@@ -0,0 +1,143 @@
<?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\product\product;
use app\model\user\User;
use app\model\user\UserRelation;use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\model\relation\HasOne;
/**
* 商品评价回复表
* Class StoreProductReplyComment
* @package app\model\product\product
*/
class StoreProductReplyComment extends BaseModel
{
use ModelTrait;
/**
* @var string
*/
protected $name = 'store_product_reply_comment';
/**
* @var string
*/
protected $key = 'id';
/**
* @var bool
*/
protected $autoWriteTimestamp = false;
/**
* @return HasOne
*/
public function user()
{
return $this->hasOne(User::class, 'uid', 'uid')->field(['uid', 'avatar', 'nickname']);
}
/**
* @return HasOne
*/
public function children()
{
return $this->hasOne(self::class, 'pid', 'id');
}
/**
* 点赞关联
* @return \think\model\relation\HasOne
*/
public function productRelation()
{
return $this->hasOne(UserRelation::class, 'relation_id', 'id');
}
/**
* 评论列表搜索
* @param $query
* @param $value
*/
public function searchReplyIdAttr($query, $value)
{
$query->where('reply_id', $value);
}
/**
* @param $query
* @param $value
*/
public function searchUidAttr($query, $value)
{
$query->where('uid', $value);
}
/**
* @param $query
* @param $value
*/
public function searchNotUidAttr($query, $value)
{
$query->where('uid', '<>', $value);
}
/**
* @param $query
* @param $value
*/
public function searchStoreIdAttr($query, $value)
{
$query->where('store_id', $value);
}
/**
* @param $query
* @param $value
*/
public function searchPidAttr($query, $value)
{
$query->where('pid', $value);
}
/**
* 时间搜索
* @param $query
* @param $value
*/
public function searchCreatetimeAttr($query, $value)
{
$this->searchTimeAttr($query, $value, ['timeKey' => 'create_time']);
}
/**
* @param $value
* @return false|string
*/
public function getCreateTimeAttr($value)
{
return date('Y-m-d H:i:s', $value);
}
/**
* @param $value
* @return false|string
*/
public function getUpdateTimeAttr($value)
{
return date('Y-m-d H:i:s', $value);
}
}

View File

@@ -0,0 +1,106 @@
<?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\product\product;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
/**
* 库存记录
* Class StoreProductStockRecord
* @package app\model\product\product
*/
class StoreProductStockRecord extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_stock_record';
protected $autoWriteTimestamp = 'int';
protected $createTime = 'add_time';
/**
* 添加时间修改器
* @return int
*/
public function setAddTimeAttr()
{
return time();
}
/**
* 一对一关联
* 商品记录关联商品名称
* @return \think\model\relation\HasOne
*/
public function storeName()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id')->bind([
'store_name',
'image',
'product_price' => 'price'
]);
}
/**
* 门店ID搜索器
* @param $query
* @param $value
*/
public function searchStoreIdAttr($query, $value)
{
if ($value != '') $query->where('store_id', $value);
}
/**
* 商品ID搜索器
* @param $query
* @param $value
*/
public function searchProductIdAttr($query, $value)
{
if ($value != '') $query->where('product_id', $value);
}
/**
* unique搜索器
* @param $query
* @param $value
*/
public function searchUniqueAttr($query, $value)
{
if ($value != '') $query->where('unique', $value);
}
/**
* pm搜索器
* @param $query
* @param $value
*/
public function searchPmAttr($query, $value)
{
if ($value != '') $query->where('pm', $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\product\product;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 商品单位
* Class StoreProductUnit
* @package app\model\product\product
*/
class StoreProductUnit extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_unit';
/**
* 单位名称
* @param $query
* @param $value
*/
public function searchNameAttr($query, $value)
{
if ($value !== '') $query->whereLike('id|name', '%' . $value . '%');
}
/**
* 门店ID
* @param $query
* @param $value
*/
public function searchStoreIdAttr($query, $value)
{
if ($value !== '') {
if ($value == -1) {//所有门店
$query->where('store_id', '>', 0);
} else {
$query->where('store_id', $value);
}
}
}
/**
* 商户搜索器
* @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 searchSupplierIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value)->where('type', 2);
} else {
if ($value !== '') $query->where('relation_id', $value)->where('type', 2);
}
}
/**
* 是否显示搜索器
* @param $query
* @param $value
*/
public function searchStatusAttr($query, $value)
{
if ($value !== '') $query->where('status', $value);
}
/**
* 是否删除搜索器
* @param $query
* @param $value
*/
public function searchIsDelAttr($query, $value)
{
if ($value !== '') $query->where('is_del', $value);
}
}

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\product\product;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 热词
* Class StoreProductWords
* @package app\model\product\product
*/
class StoreProductWords extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_words';
/**
* 单位名称
* @param $query
* @param $value
*/
public function searchNameAttr($query, $value)
{
if ($value !== '') $query->whereLike('id|name', '%' . $value . '%');
}
/**
* 商户搜索器
* @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);
}
}
/**
* 门店ID
* @param $query
* @param $value
*/
public function searchStoreIdAttr($query, $value)
{
if ($value !== '') {
if ($value == -1) {//所有门店
$query->where('store_id', '>', 0);
} else {
$query->where('store_id', $value);
}
}
}
/**
* 供应商
* @param Model $query
* @param $value
*/
public function searchSupplierIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value)->where('type', 2);
} else {
if ($value !== '') $query->where('relation_id', $value)->where('type', 2);
}
}
/**
* 是否显示
* @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 searchIsHotAttr($query, $value, $data)
{
if ($value != '') $query->where('is_hot', $value ?: 0);
}
/**
* 大家都在搜
* @param Model $query
* @param $value
* @param $data
*/
public function searchIsSearchAttr($query, $value, $data)
{
if ($value != '') $query->where('is_search', $value ?: 0);
}
/**
* 是否删除搜索器
* @param $query
* @param $value
*/
public function searchIsDelAttr($query, $value)
{
if ($value !== '') $query->where('is_del', $value);
}
}

View File

@@ -0,0 +1,37 @@
<?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\product\product;
use crmeb\traits\ModelTrait;
use crmeb\basic\BaseModel;
/**
* 商品浏览分析Model
* Class StoreVisit
* @package app\model\product\product
*/
class StoreVisit extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_visit';
}

View File

@@ -0,0 +1,163 @@
<?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\product\shipping;
use crmeb\traits\ModelTrait;
use crmeb\basic\BaseModel;
use think\Model;
/**
* 运费模板Model
* Class ShippingTemplates
* @package app\model\product\shipping
*/
class ShippingTemplates extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'shipping_templates';
/**
* 是否开启包邮获取器
* @param $value
* @return string
*/
public function getAppointAttr($value)
{
$status = [1 => '开启', 0 => '关闭'];
return $status[$value];
}
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
public function getAddTimeAttr($value)
{
$value = date('Y-m-d H:i:s', $value);
return $value;
}
/**
* 运费地区一对多关联
* @return \think\model\relation\HasMany
*/
public function region()
{
return $this->hasMany(ShippingTemplatesRegion::class, 'temp_id', 'id');
}
/**
* 包邮地区一对多关联
* @return \think\model\relation\HasMany
*/
public function free()
{
return $this->hasMany(ShippingTemplatesFree::class, 'temp_id', 'id');
}
/**
* ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
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 searchNameAttr($query, $value)
{
if ($value) {
$query->where('name', 'like', '%' . $value . '%');
}
}
/**
* 计费方式搜索器
* @param Model $query
* @param $value
*/
public function searchGroupAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('group', $value);
} else {
if ($value !== '') $query->where('group', $value);
}
}
/**
* 商户搜索器
* @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 searchSupplierIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value)->where('type', 2);
} else {
if ($value !== '') $query->where('relation_id', $value)->where('type', 2);
}
}
}

View File

@@ -0,0 +1,73 @@
<?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\product\shipping;
use crmeb\traits\ModelTrait;
use crmeb\basic\BaseModel;
use think\Model;
/**
* 包邮Model
* Class ShippingTemplatesFree
* @package app\model\product\shipping
*/
class ShippingTemplatesFree extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'shipping_templates_free';
/**
* 城市ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchCityIdAttr($query, $value)
{
$query->where('city_id', $value);
}
/**
* 模板id搜索
* @param Model $query
* @param $value
*/
public function searchTempIdAttr($query, $value)
{
$query->where('temp_id', $value);
}
/**
* uniqid 搜索器
* @param Model $query
* @param $value
*/
public function searchUniqidAttr($query, $value)
{
if (is_array($value)) {
$query->whereIn('uniqid', $value);
} else {
$query->where('uniqid', $value);
}
}
}

View File

@@ -0,0 +1,84 @@
<?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\product\shipping;
use crmeb\traits\ModelTrait;
use crmeb\basic\BaseModel;
use think\Model;
/**
* 不送达Model
* Class ShippingTemplatesNoDelivery
* @package app\model\product\shipping
*/
class ShippingTemplatesNoDelivery extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'shipping_templates_no_delivery';
/**
* 省ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchProvinceIdAttr($query, $value)
{
$query->where('province_id', $value);
}
/**
* 城市ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchCityIdAttr($query, $value)
{
$query->where('city_id', $value);
}
/**
* 模板id搜索
* @param Model $query
* @param $value
*/
public function searchTempIdAttr($query, $value)
{
$query->where('temp_id', $value);
}
/**
* uniqid 搜索器
* @param Model $query
* @param $value
*/
public function searchUniqidAttr($query, $value)
{
if (is_array($value)) {
$query->whereIn('uniqid', $value);
} else {
$query->where('uniqid', $value);
}
}
}

View File

@@ -0,0 +1,72 @@
<?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\product\shipping;
use crmeb\traits\ModelTrait;
use crmeb\basic\BaseModel;
use think\Model;
/**
* 地区运费Model
* Class ShippingTemplatesRegion
* @package app\model\product\shipping
*/
class ShippingTemplatesRegion extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'shipping_templates_region';
/**
* 城市ID搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchCityIdAttr($query, $value)
{
$query->where('city_id', $value);
}
/**
* uniqid 搜索器
* @param Model $query
* @param $value
*/
public function searchUniqidAttr($query, $value)
{
if (is_array($value)) {
$query->whereIn('uniqid', $value);
} else {
$query->where('uniqid', $value);
}
}
/**
* 模板id搜索
* @param Model $query
* @param $value
*/
public function searchTempIdAttr($query, $value)
{
$query->where('temp_id', $value);
}
}

View File

@@ -0,0 +1,73 @@
<?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\product\sku;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 商品属性Model
* Class StoreProductAttr
* @package app\common\model\product
*/
class StoreProductAttr extends BaseModel
{
use ModelTrait;
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_attr';
/**
* 规格获取器
* @param $value
* @return false|string[]
*/
protected function getAttrValuesAttr($value)
{
return explode(',', $value);
}
/**
* 规格修改器
* @param $value
* @return string
*/
protected function setAttrValuesAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
/**
* 商品搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchProductIdAttr($query, $value)
{
$query->where('product_id', $value);
}
/**
* 商品类型搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchTypeAttr($query, $value)
{
$query->where('type', $value);
}
}

View File

@@ -0,0 +1,75 @@
<?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\product\sku;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* Class StoreProductAttrResult
* @package app\common\model\product
*/
class StoreProductAttrResult extends BaseModel
{
use ModelTrait;
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_attr_result';
protected $insert = ['change_time'];
/**
* 自动增加改变时间
* @param $value
* @return int
*/
protected static function setChangeTimeAttr($value)
{
return time();
}
/**
* 数据json化
* @param $value
* @return false|string
*/
protected static function setResultAttr($value)
{
return is_array($value) ? json_encode($value) : $value;
}
/**
* 商品搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchProductIdAttr($query, $value)
{
$query->where('product_id', $value);
}
/**
* 商品类型搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchTypeAttr($query, $value)
{
$query->where('type', $value);
}
}

View File

@@ -0,0 +1,188 @@
<?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\product\sku;
use app\model\activity\integral\StoreIntegral;
use app\model\store\product\ProductAttrValue;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
use app\model\product\product\StoreProduct;
/**
* Class StoreProductAttrValue
* @package app\common\model\product
*/
class StoreProductAttrValue extends BaseModel
{
use ModelTrait;
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_attr_value';
protected $insert = ['unique'];
/**
* sku 字段写入
* @param $value
* @return string
*/
public function setSukAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
/**
* Unique字段写入
* @param $value
* @param $data
* @return mixed
*/
public function setUniqueAttr($value, $data)
{
if (is_array($data['suk'])) {
$data['suk'] = $this->setSukAttr($data['suk']);
}
return $data['unique'] ?: substr(md5($data['product_id'] . $data['suk'] . uniqid(true)), 12, 8);
}
/**
* 门店规格表
* @return \think\model\relation\HasOne
*/
public function storeBranch()
{
return $this->hasOne(ProductAttrValue::class, 'unique', 'unique')->bind([
'branch_sales' => 'sales',
'branch_stock' => 'stock'
]);
}
/**
* 关联积分商城表
* @return \think\model\relation\HasOne
*/
public function storeIntegral()
{
return $this->hasOne(StoreIntegral::class, 'id', 'product_id')->where('is_show', 1)->where('is_del', 0);
}
/**
* 商品搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchProductIdAttr($query, $value)
{
if (is_array($value)) {
$query->whereIn('product_id', $value);
} else {
$query->where('product_id', $value);
}
}
/**
* 商品类型搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchTypeAttr($query, $value)
{
if ($value !== '') {
$query->where('type', $value);
}
}
public function searchKeywordAttr($query, $value)
{
if ($value !== '') {
$query->whereLike('product_id|product_name|product_code|product_bar_code', '%' . trim($value) . '%');
}
}
public function searchTimeAttr($query, $value)
{
if ($value !== '') {
$time = explode('-', $value);
if (count($time) != 2) {
return;
}
$query->whereBetweenTime('add_time', $time[0], $time[1]);
}
}
/**
* 商品属性名称搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchSukAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('suk', $value);
} else {
if ($value !== '') $query->where('suk', $value);
}
}
public function searchStockRangeAttr($query, $value)
{
$stock_range = explode('-', $value);
if (count($stock_range) == 0) {
return;
}
if (count($stock_range) == 1) {
$query->where('stock', '>=', $stock_range[0]);
}
if (count($stock_range) == 2 && ($stock_range[0] !== '' || $stock_range[1] !== '')) {
if ($stock_range[0] === '') {
$query->where('stock', '<=', $stock_range[1]);
} elseif ($stock_range[1] === '') {
$query->where('stock', '>=', $stock_range[0]);
} else {
$query->whereBetween('stock', $stock_range);
}
}
}
/**
* 规格唯一值搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchUniqueAttr($query, $value)
{
if (is_array($value)) {
$query->whereIn('unique', $value);
} else {
if ($value) {
$query->where('unique', $value);
}
}
}
public function product()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id')->field('store_name,id')->bind(['store_name']);
}
}

View File

@@ -0,0 +1,84 @@
<?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\product\sku;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 商品规则
* Class StoreProductRule
* @package app\common\model\product
*/
class StoreProductRule extends BaseModel
{
use ModelTrait;
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_rule';
/**
* 商户搜索器
* @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 searchSupplierIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value)->where('type', 2);
} else {
if ($value !== '') $query->where('relation_id', $value)->where('type', 2);
}
}
/**
* 属性模板名称搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchRuleNameAttr($query, $value)
{
$query->where('rule_name', 'like', '%' . $value . '%');
}
}

View File

@@ -0,0 +1,85 @@
<?php
namespace app\model\product\sku;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
class StoreProductVirtual extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_virtual';
/**
* 卡号搜索器
* @param $query
* @param $value
*/
public function searchCardNoAttr($query, $value)
{
$query->where('card_no', $value);
}
/**
* 卡密搜索器
* @param $query
* @param $value
*/
public function searchCardPwdAttr($query, $value)
{
$query->where('card_pwd', $value);
}
/**
* 商品搜索器
* @param $query
* @param $value
*/
public function searchProductIdAttr($query, $value)
{
$query->where('product_id', $value);
}
/**
* 用户搜索器
* @param $query
* @param $value
*/
public function searchUidAttr($query, $value)
{
$query->where('uid', $value);
}
/**
* 订单搜索器
* @param $query
* @param $value
*/
public function searchOrderIdAttr($query, $value)
{
$query->where('order_id', $value);
}
/**
* 唯一值搜索器
* @param $query
* @param $value
*/
public function searchAttrUniqueAttr($query, $value)
{
$query->where('attr_unique', $value);
}
}

View File

@@ -0,0 +1,154 @@
<?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\product\specs;
use app\model\product\product\StoreProduct;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 商品参数
* Class StoreProductSpecs
* @package app\model\product\specs
*/
class StoreProductSpecs extends BaseModel
{
use ModelTrait;
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_specs';
/**
* 添加时间获取器
* @param $value
* @return false|string
*/
protected function getAddTimeAttr($value)
{
return date('Y-m-d H:i:s', $value);
}
/**
* 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
*/
public function searchNameAttr($query, $value)
{
$query->whereLike('name', '%' . $value . '%');
}
/**
* temp_id搜索器
* @param Model $query
* @param $value
*/
public function searchTempIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('temp_id', $value);
} else {
if ($value !== '') $query->where('temp_id', $value);
}
}
/**
* status搜索器
* @param Model $query
* @param $value
*/
public function searchStatusAttr($query, $value)
{
if ($value !== '') $query->where('status', $value);
}
/**
* 商户搜索器
* @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 searchSupplierIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value)->where('type', 2);
} else {
if ($value !== '') $query->where('relation_id', $value)->where('type', 2);
}
}
/**
* 门店
* @param Model $query
* @param $value
*/
public function searchStoreIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value)->where('type', 1);
} else {
if ($value !== '') $query->where('relation_id', $value)->where('type', 1);
}
}
}

View File

@@ -0,0 +1,124 @@
<?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\product\stock;
use app\model\system\admin\SystemAdmin;
use crmeb\basic\BaseModel;
/**
* 出入库记录模型
* Class StockRecords
* @package app\model\stock
*/
class StockInventory extends BaseModel
{
/**
* 表名
* @var string
*/
protected $name = 'stock_inventory';
/**
* 主键
* @var string
*/
protected $pk = 'id';
/**
* 自动时间戳
* @var bool
*/
protected $autoWriteTimestamp = true;
/**
* 创建时间字段
* @var string
*/
protected $createTime = 'create_time';
/**
* 更新时间字段
* @var string
*/
protected $updateTime = 'update_time';
/**
* 关联出入库商品详情
* @return \think\model\relation\HasMany
*/
public function items()
{
return $this->hasMany(StockRecordItem::class, 'record_id', 'id')->where('type', 2);
}
public function admin()
{
return $this->hasOne(SystemAdmin::class, 'id', 'operator_id')->bind(['admin_name' => 'real_name']);
}
public function searchRecordNoAttr($query, $value)
{
if ($value !== '') {
$query->where('record_no', $value);
}
}
public function searchIdAttr($query, $value)
{
if ($value !== '') {
if (is_array($value)) {
$query->whereIn('id', $value);
} else {
$query->where('id', $value);
}
}
}
public function searchStatusAttr($query, $value)
{
if ($value !== '') {
$query->where('status', $value);
}
}
/**
* 搜索器:按日期范围搜索
* @param $query
* @param $value
*/
public function searchRecordDateAttr($query, $value)
{
$value = explode('-', $value);
if (is_array($value) && count($value) == 2 && $value[0] != '' && $value[1] != '') {
$query->whereBetweenTime('record_date', strtotime($value[0]), strtotime($value[1]));
}
}
public function searchCreateTimeAttr($query, $value)
{
$value = explode('-', $value);
if (is_array($value) && count($value) == 2 && $value[0] != '' && $value[1] != '') {
$query->whereBetweenTime('create_time', strtotime($value[0]), strtotime($value[1]) + 86400);
}
}
public function searchUniqueAttr($query, $value)
{
if ($value !== '') {
$query->whereIn('id', function ($q) use ($value) {
$q->name('stock_record_item')->field('record_id')->where('unique', $value)->select();
});
}
}
}

View File

@@ -0,0 +1,232 @@
<?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\product\stock;
use app\model\system\admin\SystemAdmin;
use crmeb\basic\BaseModel;
/**
* 出入库记录模型
* Class StockRecords
* @package app\model\stock
*/
class StockRecord extends BaseModel
{
/**
* 表名
* @var string
*/
protected $name = 'stock_record';
/**
* 主键
* @var string
*/
protected $pk = 'id';
/**
* 自动时间戳
* @var bool
*/
protected $autoWriteTimestamp = true;
/**
* 创建时间字段
* @var string
*/
protected $createTime = 'create_time';
/**
* 更新时间字段
* @var string
*/
protected $updateTime = 'update_time';
/**
* 类型常量
*/
const TYPE_IN = 1; // 入库
const TYPE_OUT = 2; // 出库
public function getRecordDateAttr($value)
{
return $value ? date('Y-m-d', $value) : '';
}
/**
* 出入库类型常量
*/
const STOCK_TYPE_PURCHASE = 'purchase'; // 采购入库
const STOCK_TYPE_RETURN = 'return'; // 退货入库
const STOCK_TYPE_OTHER_IN = 'other_in'; // 其他入库
const STOCK_TYPE_DEFECTIVE_TO_GOOD = 'defective_to_good'; // 残次品转良
const STOCK_TYPE_EXPIRED_RETURN = 'expired_return'; // 过期退货
const STOCK_TYPE_PROFIT = 'profit'; // 盘盈入库
const STOCK_TYPE_USE_OUT = 'use_out'; // 试用出库
const STOCK_TYPE_SCRAP_OUT = 'scrap_out'; // 报废出库
const STOCK_TYPE_GOOD_TO_DEFECTIVE = 'good_to_defective'; // 良品转残次品
const STOCK_TYPE_OTHER_OUT = 'other_out'; // 其他出库
const STOCK_TYPE_SALE = 'sale'; // 销售出库
const STOCK_TYPE_LOSS = 'loss'; // 盘亏出库
/**
* 获取类型文本
* @param $value
* @param $data
* @return string
*/
public function getTypeTextAttr($value, $data)
{
$typeMap = [
self::TYPE_IN => '入库',
self::TYPE_OUT => '出库'
];
return $typeMap[$data['type']] ?? '未知';
}
/**
* 获取出入库类型文本
* @param $value
* @param $data
* @return string
*/
public function getStockTypeTextAttr($value, $data)
{
$stockTypeMap = [
self::STOCK_TYPE_PURCHASE => '采购入库',
self::STOCK_TYPE_RETURN => '退货入库',
self::STOCK_TYPE_OTHER_IN => '其他入库',
self::STOCK_TYPE_DEFECTIVE_TO_GOOD => '残次品转良',
self::STOCK_TYPE_EXPIRED_RETURN => '过期退货',
self::STOCK_TYPE_PROFIT => '盘盈入库',
self::STOCK_TYPE_USE_OUT => '试用出库',
self::STOCK_TYPE_SCRAP_OUT => '报废出库',
self::STOCK_TYPE_GOOD_TO_DEFECTIVE => '良品转残次品',
self::STOCK_TYPE_OTHER_OUT => '其他出库',
self::STOCK_TYPE_SALE => '销售出库',
self::STOCK_TYPE_LOSS => '盘亏出库'
];
return $stockTypeMap[$data['stock_type']] ?? '未知';
}
/**
* 关联出入库商品详情
* @return \think\model\relation\HasMany
*/
public function items()
{
return $this->hasMany(StockRecordItem::class, 'record_id', 'id')->where('type', 1);
}
public function admin()
{
return $this->hasOne(SystemAdmin::class, 'id', 'operator_id')->bind(['admin_name' => 'real_name']);
}
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 searchTypeAttr($query, $value)
{
if ($value !== '') {
$query->where('type', $value);
}
}
/**
* 搜索器:按出入库类型搜索
* @param $query
* @param $value
*/
public function searchStockTypeAttr($query, $value)
{
if ($value !== '') {
$query->where('stock_type', $value);
}
}
public function searchRecordNoAttr($query, $value)
{
if ($value !== '') {
$query->where('record_no', $value);
}
}
/**
* 搜索器:按日期范围搜索
* @param $query
* @param $value
*/
public function searchRecordDateAttr($query, $value)
{
$value = explode('-', $value);
if (is_array($value) && count($value) == 2 && $value[0] != '' && $value[1] != '') {
$query->whereBetweenTime('record_date', strtotime($value[0]), strtotime($value[1]) + 86399);
}
}
public function searchCreateTimeAttr($query, $value)
{
$value = explode('-', $value);
if (is_array($value) && count($value) == 2 && $value[0] != '' && $value[1] != '') {
$query->whereBetweenTime('create_time', strtotime($value[0]), strtotime($value[1]) + 86399);
}
}
public function searchUniqueAttr($query, $value)
{
if ($value !== '') {
$query->whereIn('id', function ($q) use ($value) {
$q->name('stock_record_item')->field('record_id')->where('unique', $value)->select();
});
}
}
/**
* 获取出入库子类型名称
* @param int $subType 子类型
* @return string
*/
public static function getStockTypeName($subType)
{
$names = [
self::STOCK_TYPE_PURCHASE => '采购入库',
self::STOCK_TYPE_RETURN => '退货入库',
self::STOCK_TYPE_OTHER_IN => '其他入库',
self::STOCK_TYPE_DEFECTIVE_TO_GOOD => '残次品转良',
self::STOCK_TYPE_EXPIRED_RETURN => '过期退货',
self::STOCK_TYPE_PROFIT => '盘盈入库',
self::STOCK_TYPE_USE_OUT => '试用出库',
self::STOCK_TYPE_SCRAP_OUT => '报废出库',
self::STOCK_TYPE_GOOD_TO_DEFECTIVE => '良品转残次品',
self::STOCK_TYPE_OTHER_OUT => '其他出库',
self::STOCK_TYPE_SALE => '销售出库',
self::STOCK_TYPE_LOSS => '盘亏出库',
];
return $names[$subType] ?? '未知类型';
}
}

View File

@@ -0,0 +1,148 @@
<?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\product\stock;
use crmeb\basic\BaseModel;
/**
* 出入库商品详情模型
* Class StockRecordItem
* @package app\model\stock
*/
class StockRecordItem extends BaseModel
{
/**
* 表名
* @var string
*/
protected $name = 'stock_record_item';
/**
* 主键
* @var string
*/
protected $pk = 'id';
/**
* 自动时间戳
* @var bool
*/
protected $autoWriteTimestamp = true;
/**
* 创建时间字段
* @var string
*/
protected $createTime = 'create_time';
/**
* 更新时间字段
* @var string
*/
protected $updateTime = 'update_time';
/**
* 类型转换
* @var array
*/
protected $type = [
'unit_price' => 'float',
'total_amount' => 'float'
];
/**
* 获取总数量
* @param $value
* @param $data
* @return int
*/
public function getTotalQuantityAttr($value, $data)
{
return ($data['good_stock'] ?? 0) + ($data['defective_stock'] ?? 0);
}
/**
* 关联出入库记录
* @return \think\model\relation\BelongsTo
*/
public function record()
{
return $this->belongsTo(StockRecord::class, 'record_id', 'id');
}
/**
* 搜索器:按记录ID搜索
* @param $query
* @param $value
*/
public function searchRecordIdAttr($query, $value)
{
if ($value !== '') {
if (is_array($value)) {
$query->whereIn('record_id', $value);
} else {
$query->where('record_id', $value);
}
}
}
/**
* 搜索器:按商品ID搜索
* @param $query
* @param $value
*/
public function searchTypeAttr($query, $value)
{
if ($value !== '') {
$query->where('type', $value);
}
}
/**
* 搜索器:按商品ID搜索
* @param $query
* @param $value
*/
public function searchProductIdAttr($query, $value)
{
if ($value !== '') {
$query->where('product_id', $value);
}
}
/**
* 搜索器:按SKU ID搜索
* @param $query
* @param $value
*/
public function searchUniqueAttr($query, $value)
{
if ($value !== '') {
$query->where('unique', $value);
}
}
public function searchTimeAttr($query, $value)
{
$value = explode('-', $value);
if (is_array($value) && count($value) == 2) {
$query->whereBetweenTime('create_time', strtotime($value[0]), strtotime($value[1]) + 86399);
}
}
public function searchKeywordsAttr($query, $value)
{
if ($value !== '') {
$query->whereLike('product_id|unique|product_name|product_code|product_suk|product_bar_code', '%' . $value . '%');
}
}
}