chore: 添加静态资源文件和版本配置文件
添加大量图片、字体、音频等静态资源文件,包括用户界面图片、模板文件和安装界面素材 添加系统版本配置文件(.version)和常量定义文件(.constant) 更新供应商依赖文件,包括Symfony VarDumper组件和相关许可证文件 添加验证码配置文件(captcha.php)和.gitignore规则
This commit is contained in:
130
app/model/product/brand/StoreBrand.php
Normal file
130
app/model/product/brand/StoreBrand.php
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
186
app/model/product/category/StoreProductCategory.php
Normal file
186
app/model/product/category/StoreProductCategory.php
Normal 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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
141
app/model/product/ensure/StoreProductEnsure.php
Normal file
141
app/model/product/ensure/StoreProductEnsure.php
Normal 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
178
app/model/product/label/StoreProductLabel.php
Normal file
178
app/model/product/label/StoreProductLabel.php
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
38
app/model/product/label/StoreProductLabelAuxiliary.php
Normal file
38
app/model/product/label/StoreProductLabelAuxiliary.php
Normal 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';
|
||||
|
||||
}
|
||||
56
app/model/product/product/StoreDescription.php
Normal file
56
app/model/product/product/StoreDescription.php
Normal 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);
|
||||
}
|
||||
}
|
||||
812
app/model/product/product/StoreProduct.php
Normal file
812
app/model/product/product/StoreProduct.php
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
50
app/model/product/product/StoreProductCate.php
Normal file
50
app/model/product/product/StoreProductCate.php
Normal 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'
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
47
app/model/product/product/StoreProductCoupon.php
Normal file
47
app/model/product/product/StoreProductCoupon.php
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
126
app/model/product/product/StoreProductLog.php
Normal file
126
app/model/product/product/StoreProductLog.php
Normal 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);
|
||||
}
|
||||
}
|
||||
157
app/model/product/product/StoreProductRelation.php
Normal file
157
app/model/product/product/StoreProductRelation.php
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
234
app/model/product/product/StoreProductReply.php
Normal file
234
app/model/product/product/StoreProductReply.php
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
143
app/model/product/product/StoreProductReplyComment.php
Normal file
143
app/model/product/product/StoreProductReplyComment.php
Normal 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);
|
||||
}
|
||||
}
|
||||
106
app/model/product/product/StoreProductStockRecord.php
Normal file
106
app/model/product/product/StoreProductStockRecord.php
Normal 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);
|
||||
}
|
||||
}
|
||||
129
app/model/product/product/StoreProductUnit.php
Normal file
129
app/model/product/product/StoreProductUnit.php
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
155
app/model/product/product/StoreProductWords.php
Normal file
155
app/model/product/product/StoreProductWords.php
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
37
app/model/product/product/StoreVisit.php
Normal file
37
app/model/product/product/StoreVisit.php
Normal 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';
|
||||
|
||||
}
|
||||
163
app/model/product/shipping/ShippingTemplates.php
Normal file
163
app/model/product/shipping/ShippingTemplates.php
Normal 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
73
app/model/product/shipping/ShippingTemplatesFree.php
Normal file
73
app/model/product/shipping/ShippingTemplatesFree.php
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
84
app/model/product/shipping/ShippingTemplatesNoDelivery.php
Normal file
84
app/model/product/shipping/ShippingTemplatesNoDelivery.php
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
72
app/model/product/shipping/ShippingTemplatesRegion.php
Normal file
72
app/model/product/shipping/ShippingTemplatesRegion.php
Normal 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);
|
||||
}
|
||||
}
|
||||
73
app/model/product/sku/StoreProductAttr.php
Normal file
73
app/model/product/sku/StoreProductAttr.php
Normal 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);
|
||||
}
|
||||
}
|
||||
75
app/model/product/sku/StoreProductAttrResult.php
Normal file
75
app/model/product/sku/StoreProductAttrResult.php
Normal 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);
|
||||
}
|
||||
}
|
||||
188
app/model/product/sku/StoreProductAttrValue.php
Normal file
188
app/model/product/sku/StoreProductAttrValue.php
Normal 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']);
|
||||
}
|
||||
|
||||
}
|
||||
84
app/model/product/sku/StoreProductRule.php
Normal file
84
app/model/product/sku/StoreProductRule.php
Normal 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 . '%');
|
||||
}
|
||||
}
|
||||
85
app/model/product/sku/StoreProductVirtual.php
Normal file
85
app/model/product/sku/StoreProductVirtual.php
Normal 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);
|
||||
}
|
||||
}
|
||||
154
app/model/product/specs/StoreProductSpecs.php
Normal file
154
app/model/product/specs/StoreProductSpecs.php
Normal 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
124
app/model/product/stock/StockInventory.php
Normal file
124
app/model/product/stock/StockInventory.php
Normal 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();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
232
app/model/product/stock/StockRecord.php
Normal file
232
app/model/product/stock/StockRecord.php
Normal 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] ?? '未知类型';
|
||||
}
|
||||
}
|
||||
148
app/model/product/stock/StockRecordItem.php
Normal file
148
app/model/product/stock/StockRecordItem.php
Normal 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 . '%');
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user