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

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

View File

@@ -0,0 +1,73 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\product\sku;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 商品属性Model
* Class StoreProductAttr
* @package app\common\model\product
*/
class StoreProductAttr extends BaseModel
{
use ModelTrait;
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_attr';
/**
* 规格获取器
* @param $value
* @return false|string[]
*/
protected function getAttrValuesAttr($value)
{
return explode(',', $value);
}
/**
* 规格修改器
* @param $value
* @return string
*/
protected function setAttrValuesAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
/**
* 商品搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchProductIdAttr($query, $value)
{
$query->where('product_id', $value);
}
/**
* 商品类型搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchTypeAttr($query, $value)
{
$query->where('type', $value);
}
}

View File

@@ -0,0 +1,75 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\product\sku;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* Class StoreProductAttrResult
* @package app\common\model\product
*/
class StoreProductAttrResult extends BaseModel
{
use ModelTrait;
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_attr_result';
protected $insert = ['change_time'];
/**
* 自动增加改变时间
* @param $value
* @return int
*/
protected static function setChangeTimeAttr($value)
{
return time();
}
/**
* 数据json化
* @param $value
* @return false|string
*/
protected static function setResultAttr($value)
{
return is_array($value) ? json_encode($value) : $value;
}
/**
* 商品搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchProductIdAttr($query, $value)
{
$query->where('product_id', $value);
}
/**
* 商品类型搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchTypeAttr($query, $value)
{
$query->where('type', $value);
}
}

View File

@@ -0,0 +1,188 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\product\sku;
use app\model\activity\integral\StoreIntegral;
use app\model\store\product\ProductAttrValue;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
use app\model\product\product\StoreProduct;
/**
* Class StoreProductAttrValue
* @package app\common\model\product
*/
class StoreProductAttrValue extends BaseModel
{
use ModelTrait;
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_attr_value';
protected $insert = ['unique'];
/**
* sku 字段写入
* @param $value
* @return string
*/
public function setSukAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
/**
* Unique字段写入
* @param $value
* @param $data
* @return mixed
*/
public function setUniqueAttr($value, $data)
{
if (is_array($data['suk'])) {
$data['suk'] = $this->setSukAttr($data['suk']);
}
return $data['unique'] ?: substr(md5($data['product_id'] . $data['suk'] . uniqid(true)), 12, 8);
}
/**
* 门店规格表
* @return \think\model\relation\HasOne
*/
public function storeBranch()
{
return $this->hasOne(ProductAttrValue::class, 'unique', 'unique')->bind([
'branch_sales' => 'sales',
'branch_stock' => 'stock'
]);
}
/**
* 关联积分商城表
* @return \think\model\relation\HasOne
*/
public function storeIntegral()
{
return $this->hasOne(StoreIntegral::class, 'id', 'product_id')->where('is_show', 1)->where('is_del', 0);
}
/**
* 商品搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchProductIdAttr($query, $value)
{
if (is_array($value)) {
$query->whereIn('product_id', $value);
} else {
$query->where('product_id', $value);
}
}
/**
* 商品类型搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchTypeAttr($query, $value)
{
if ($value !== '') {
$query->where('type', $value);
}
}
public function searchKeywordAttr($query, $value)
{
if ($value !== '') {
$query->whereLike('product_id|product_name|product_code|product_bar_code', '%' . trim($value) . '%');
}
}
public function searchTimeAttr($query, $value)
{
if ($value !== '') {
$time = explode('-', $value);
if (count($time) != 2) {
return;
}
$query->whereBetweenTime('add_time', $time[0], $time[1]);
}
}
/**
* 商品属性名称搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchSukAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('suk', $value);
} else {
if ($value !== '') $query->where('suk', $value);
}
}
public function searchStockRangeAttr($query, $value)
{
$stock_range = explode('-', $value);
if (count($stock_range) == 0) {
return;
}
if (count($stock_range) == 1) {
$query->where('stock', '>=', $stock_range[0]);
}
if (count($stock_range) == 2 && ($stock_range[0] !== '' || $stock_range[1] !== '')) {
if ($stock_range[0] === '') {
$query->where('stock', '<=', $stock_range[1]);
} elseif ($stock_range[1] === '') {
$query->where('stock', '>=', $stock_range[0]);
} else {
$query->whereBetween('stock', $stock_range);
}
}
}
/**
* 规格唯一值搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchUniqueAttr($query, $value)
{
if (is_array($value)) {
$query->whereIn('unique', $value);
} else {
if ($value) {
$query->where('unique', $value);
}
}
}
public function product()
{
return $this->hasOne(StoreProduct::class, 'id', 'product_id')->field('store_name,id')->bind(['store_name']);
}
}

View File

@@ -0,0 +1,84 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\model\product\sku;
use crmeb\basic\BaseModel;
use crmeb\traits\ModelTrait;
use think\Model;
/**
* 商品规则
* Class StoreProductRule
* @package app\common\model\product
*/
class StoreProductRule extends BaseModel
{
use ModelTrait;
/**
* 模型名称
* @var string
*/
protected $name = 'store_product_rule';
/**
* 商户搜索器
* @param Model $query
* @param $value
*/
public function searchTypeAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('type', $value);
} else {
if ($value !== '') $query->where('type', $value);
}
}
/**
* 关联门店ID、供应商ID搜索器
* @param Model $query
* @param $value
*/
public function searchRelationIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value);
} else {
if ($value !== '') $query->where('relation_id', $value);
}
}
/**
* 供应商
* @param Model $query
* @param $value
*/
public function searchSupplierIdAttr($query, $value)
{
if (is_array($value)) {
if ($value) $query->whereIn('relation_id', $value)->where('type', 2);
} else {
if ($value !== '') $query->where('relation_id', $value)->where('type', 2);
}
}
/**
* 属性模板名称搜索器
* @param Model $query
* @param $value
* @param $data
*/
public function searchRuleNameAttr($query, $value)
{
$query->where('rule_name', 'like', '%' . $value . '%');
}
}

View File

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