Compare commits
25 Commits
e266e89a97
...
cssupdate
| Author | SHA1 | Date | |
|---|---|---|---|
| 5fde7159e0 | |||
| 6068efa03f | |||
| 738b293ea2 | |||
| a1be105c31 | |||
| 03374856e4 | |||
| f07741ff19 | |||
| c64450d74c | |||
| e462b38ff9 | |||
| b96021d21d | |||
| 12d6fdc3a6 | |||
| cd3f651a2a | |||
| 1e4b416cac | |||
| e38446f3fd | |||
| 06b9d42ae4 | |||
| 99d78069d5 | |||
| 342a3754aa | |||
| 51e9c8ced1 | |||
| b13d481e1e | |||
| da8f204167 | |||
| c1979da1af | |||
| 1802f57906 | |||
| 3fa3b8fb63 | |||
| fb2b1455bc | |||
| cc497b2ebc | |||
| 2b450a2e9c |
@@ -99,18 +99,20 @@ class ReceiveProductSync
|
|||||||
}
|
}
|
||||||
|
|
||||||
$category = ProductCategoryModel::language($lang_id)->tcoId($tco_category['id'])->find();
|
$category = ProductCategoryModel::language($lang_id)->tcoId($tco_category['id'])->find();
|
||||||
$tco_parent = ProductTcoCategoryModel::language($lang_id)->tcoId($tco_category['tco_pid'])->find();
|
if (!empty($category)) {
|
||||||
if (!empty($tco_parent)) {
|
$tco_parent = ProductTcoCategoryModel::language($lang_id)->tcoId($tco_category['tco_pid'])->find();
|
||||||
$parent = ProductCategoryModel::language($lang_id)->tcoId($tco_parent['id'])->find();
|
if (!empty($tco_parent)) {
|
||||||
if ($parent->isEmpty()) {
|
$parent = ProductCategoryModel::language($lang_id)->tcoId($tco_parent['id'])->find();
|
||||||
throw new \Exception('产品分类父级不存在');
|
if ($parent->isEmpty()) {
|
||||||
|
throw new \Exception('产品分类父级不存在');
|
||||||
|
}
|
||||||
|
$category['pid'] = $parent['id'];
|
||||||
|
$category['path'] = $parent['path'] . $parent['pid'];
|
||||||
|
$category['level'] = $parent['level'] + 1;
|
||||||
|
}
|
||||||
|
if (!$category->save()) {
|
||||||
|
throw new \Exception('产品分类更新失败');
|
||||||
}
|
}
|
||||||
$category['pid'] = $parent['id'];
|
|
||||||
$category['path'] = $parent['path'] . $parent['pid'];
|
|
||||||
$category['level'] = $parent['level'] + 1;
|
|
||||||
}
|
|
||||||
if (!$category->save($category)) {
|
|
||||||
throw new \Exception('产品分类更新失败');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -228,7 +228,7 @@ class Article
|
|||||||
private function getExportArticleData()
|
private function getExportArticleData()
|
||||||
{
|
{
|
||||||
$server = request()->server();
|
$server = request()->server();
|
||||||
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . config('filesystem.disks.public.url') . '/';
|
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . '/';
|
||||||
$param = request()->param(['title', 'category_id', 'release_time']);
|
$param = request()->param(['title', 'category_id', 'release_time']);
|
||||||
$data = ArticleModel::field([
|
$data = ArticleModel::field([
|
||||||
'*',
|
'*',
|
||||||
@@ -253,7 +253,7 @@ class Article
|
|||||||
])
|
])
|
||||||
->bindAttr('category', ['category_name' => 'name'])
|
->bindAttr('category', ['category_name' => 'name'])
|
||||||
->each(function ($item) use($image_host) {
|
->each(function ($item) use($image_host) {
|
||||||
$item->image = !empty($item->image) ? $image_host . $item->image : '';
|
$item->image = !empty($item->image) ? url_join($image_host, $item->image) : '';
|
||||||
return $item;
|
return $item;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -262,11 +262,9 @@ class BannerItem
|
|||||||
// 获取导出数据
|
// 获取导出数据
|
||||||
private function getBannerExportData()
|
private function getBannerExportData()
|
||||||
{
|
{
|
||||||
$param = request()->param([
|
$server = request()->server();
|
||||||
'title',
|
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . '/';
|
||||||
'banner_id',
|
$param = request()->param(['title', 'banner_id', 'created_at']);
|
||||||
'created_at'
|
|
||||||
]);
|
|
||||||
return SysBannerItemModel::alias('item')
|
return SysBannerItemModel::alias('item')
|
||||||
->field([
|
->field([
|
||||||
'item.id',
|
'item.id',
|
||||||
@@ -311,7 +309,13 @@ class BannerItem
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
->order(['item.sort' => 'asc', 'item.id' => 'desc'])
|
->order(['item.sort' => 'asc', 'item.id' => 'desc'])
|
||||||
->select();
|
->select()
|
||||||
|
->each(function($item) use($image_host) {
|
||||||
|
$item->image = !empty($item->image) ? url_join($image_host, $item->image) : '';
|
||||||
|
$item->extra_image = !empty($item->extra_image) ? url_join($image_host, $item->extra_image) : '';
|
||||||
|
$item->video = !empty($item->video) ? url_join($image_host, $item->video) : '';
|
||||||
|
return $item;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除
|
// 删除
|
||||||
|
|||||||
@@ -346,7 +346,7 @@ class Product
|
|||||||
private function getExportProductData()
|
private function getExportProductData()
|
||||||
{
|
{
|
||||||
$server = request()->server();
|
$server = request()->server();
|
||||||
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . config('filesystem.disks.public.url') . '/';
|
$image_host = $server['REQUEST_SCHEME'] . "://" . $server['SERVER_NAME'] . '/';
|
||||||
$param = request()->param([
|
$param = request()->param([
|
||||||
'name',
|
'name',
|
||||||
'spu',
|
'spu',
|
||||||
@@ -360,10 +360,10 @@ class Product
|
|||||||
'spu',
|
'spu',
|
||||||
'name',
|
'name',
|
||||||
'short_name',
|
'short_name',
|
||||||
'CONCAT("' . $image_host . '", `cover_image`)' => 'cover_image',
|
'cover_image',
|
||||||
'desc',
|
'desc',
|
||||||
'CONCAT("' . $image_host . '", `video_img`)' => 'video_img',
|
'video_img',
|
||||||
'CONCAT("' . $image_host . '", `video_url`)' => 'video_url',
|
'video_url',
|
||||||
'CASE WHEN is_new = 1 THEN "是" ELSE "否" END' => 'is_new',
|
'CASE WHEN is_new = 1 THEN "是" ELSE "否" END' => 'is_new',
|
||||||
'CASE WHEN is_hot = 1 THEN "是" ELSE "否" END' => 'is_hot',
|
'CASE WHEN is_hot = 1 THEN "是" ELSE "否" END' => 'is_hot',
|
||||||
'CASE WHEN is_sale = 1 THEN "是" ELSE "否" END' => 'is_sale',
|
'CASE WHEN is_sale = 1 THEN "是" ELSE "否" END' => 'is_sale',
|
||||||
@@ -390,7 +390,18 @@ class Product
|
|||||||
->order(['id' => 'asc'])
|
->order(['id' => 'asc'])
|
||||||
->select()
|
->select()
|
||||||
->bindAttr('category', ['category_name' => 'name'])
|
->bindAttr('category', ['category_name' => 'name'])
|
||||||
->hidden(['category_id', 'category']);
|
->hidden(['category_id', 'category'])
|
||||||
|
->each(function($item) use($image_host) {
|
||||||
|
if (!empty($item["cover_image"])) {
|
||||||
|
$item["cover_image"] = url_join($image_host, $item["cover_image"]);
|
||||||
|
}
|
||||||
|
if (!empty($item["video_img"])) {
|
||||||
|
$item["video_img"] = url_join($image_host, $item["video_img"]);
|
||||||
|
}
|
||||||
|
if (!empty($item["video_url"])) {
|
||||||
|
$item["video_url"] = url_join($image_host, $item["video_url"]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
if (!$products->isEmpty()) {
|
if (!$products->isEmpty()) {
|
||||||
// 产品参数
|
// 产品参数
|
||||||
|
|||||||
@@ -16,8 +16,9 @@ class ProductTcoCategory
|
|||||||
$param = request()->param(['name']);
|
$param = request()->param(['name']);
|
||||||
|
|
||||||
$categorys = ProductTcoCategoryModel::field([
|
$categorys = ProductTcoCategoryModel::field([
|
||||||
'tco_id' => 'id',
|
'id',
|
||||||
'tco_pid' => 'pid',
|
'tco_id',
|
||||||
|
'tco_pid',
|
||||||
'name',
|
'name',
|
||||||
])
|
])
|
||||||
->withSearch(['name'], [
|
->withSearch(['name'], [
|
||||||
@@ -25,10 +26,10 @@ class ProductTcoCategory
|
|||||||
])
|
])
|
||||||
->language(request()->lang_id)
|
->language(request()->lang_id)
|
||||||
->enabled()
|
->enabled()
|
||||||
->order(['id' => 'asc'])
|
->order(['tco_id' => 'asc'])
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
|
|
||||||
return success('获取成功', array_to_tree($categorys, 0, 'pid', false));
|
return success('获取成功', array_to_tree($categorys, 0, 'tco_pid', false, true, 'tco_id'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -209,9 +209,6 @@ class Video
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
$domain = request()->domain();
|
$domain = request()->domain();
|
||||||
$image_path = Config::get('filesystem.disks.image.url');
|
|
||||||
$video_path = Config::get('filesystem.disks.video.url');
|
|
||||||
|
|
||||||
return VideoModel::withoutField([
|
return VideoModel::withoutField([
|
||||||
'language_id',
|
'language_id',
|
||||||
'updated_at',
|
'updated_at',
|
||||||
@@ -230,13 +227,9 @@ class Video
|
|||||||
->select()
|
->select()
|
||||||
->bindAttr('category', ['category_name' => 'name'])
|
->bindAttr('category', ['category_name' => 'name'])
|
||||||
->hidden(['category_id', 'category'])
|
->hidden(['category_id', 'category'])
|
||||||
->each(function ($item) use($domain, $image_path, $video_path) {
|
->each(function ($item) use($domain) {
|
||||||
if (!empty($item->image)) {
|
$item->image = !empty($item->image) ? url_join($domain, $item->image) : '';
|
||||||
$item->image = $domain . $image_path . '/' . $item->image;
|
$item->video = !empty($item->video) ? url_join($domain, $item->video) : '';
|
||||||
}
|
|
||||||
if (!empty($item->video)) {
|
|
||||||
$item->video = $domain . $video_path . '/' . $item->video;
|
|
||||||
}
|
|
||||||
$item->recommend = $item->recommend == 1 ? '是' : '否';
|
$item->recommend = $item->recommend == 1 ? '是' : '否';
|
||||||
$item->status = $item->status == 1 ? '启用' : '禁用';
|
$item->status = $item->status == 1 ? '启用' : '禁用';
|
||||||
return $item;
|
return $item;
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ if (!function_exists('array_to_tree')) {
|
|||||||
* @param bool $keep_pid 是否保留pid
|
* @param bool $keep_pid 是否保留pid
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
function array_to_tree(array $data, int $pid, string $with = 'pid', int|bool $level = 1, bool $keep_pid = true)
|
function array_to_tree(array $data, int $pid, string $with = 'pid', int|bool $level = 1, bool $keep_pid = true, $with_ref = 'id')
|
||||||
{
|
{
|
||||||
$ret = [];
|
$ret = [];
|
||||||
foreach ($data as $item) {
|
foreach ($data as $item) {
|
||||||
@@ -93,7 +93,7 @@ if (!function_exists('array_to_tree')) {
|
|||||||
if ($keep_pid === false) {
|
if ($keep_pid === false) {
|
||||||
unset($item[$with]);
|
unset($item[$with]);
|
||||||
}
|
}
|
||||||
$children = array_to_tree($data, $item['id'], $with, $lv, $keep_pid);
|
$children = array_to_tree($data, $item[$with_ref], $with, $lv, $keep_pid, $with_ref);
|
||||||
if ($children) {
|
if ($children) {
|
||||||
$item['children'] = $children;
|
$item['children'] = $children;
|
||||||
}
|
}
|
||||||
@@ -153,9 +153,13 @@ if (!function_exists('get_filesystem_url')) {
|
|||||||
* @param string $disk 磁盘配置 key
|
* @param string $disk 磁盘配置 key
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function get_filesystem_url(string $url, string $disk): string
|
function get_filesystem_url(string|null $url, string $disk): string
|
||||||
{
|
{
|
||||||
if (\think\helper\Str::startsWith($url, ['http://', 'https://'])) {
|
if (is_null($url)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (\think\helper\Str::startsWith($url, ['http://', 'https://', '//'])) {
|
||||||
return $url;
|
return $url;
|
||||||
}
|
}
|
||||||
if (empty($disk)) {
|
if (empty($disk)) {
|
||||||
@@ -171,8 +175,12 @@ if (!function_exists('url_filesystem_detect')) {
|
|||||||
* @param string $url 文件地址
|
* @param string $url 文件地址
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function url_filesystem_detect(string $url): string
|
function url_filesystem_detect(string|null $url): string
|
||||||
{
|
{
|
||||||
|
if (is_null($url)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
$idx = strrpos($url, '.');
|
$idx = strrpos($url, '.');
|
||||||
if ($idx === false) {
|
if ($idx === false) {
|
||||||
return $url;
|
return $url;
|
||||||
@@ -190,4 +198,37 @@ if (!function_exists('url_filesystem_detect')) {
|
|||||||
|
|
||||||
return $url;
|
return $url;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!function_exists('url_join')) {
|
||||||
|
/**
|
||||||
|
* 合并URL
|
||||||
|
* @param string $url 基础URL
|
||||||
|
* @param string $path 路径
|
||||||
|
* @param bool $remove_slash 是否移除首尾的斜杠
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function url_join(string $url, string $path, bool $remove_slash = true): string
|
||||||
|
{
|
||||||
|
if (empty($url)) {
|
||||||
|
return $path;
|
||||||
|
}
|
||||||
|
if (empty($path)) {
|
||||||
|
return $url;
|
||||||
|
}
|
||||||
|
if (\think\helper\Str::startsWith($path, ['http://', 'https://', '//'])) {
|
||||||
|
return $path;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($remove_slash) {
|
||||||
|
if (str_ends_with($url, '/') && str_starts_with($path, '/')) {
|
||||||
|
return $url . substr($path, 1);
|
||||||
|
}
|
||||||
|
if (!str_ends_with($url, '/') && !str_starts_with($path, '/')) {
|
||||||
|
return $url . '/' . $path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $url . $path;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
<div class="tabs">
|
<div class="tabs">
|
||||||
{notempty name="video_categorys"}
|
{notempty name="video_categorys"}
|
||||||
{volist name="video_categorys" id="va"}
|
{volist name="video_categorys" id="va"}
|
||||||
<a href="{:url('attachment/index', ['id' => $va.id])}"><div class="tabit active">{$va.name}</div></a>
|
<a href="{:url('attachment/video', ['id' => $va.id])}"><div class="tabit active">{$va.name}</div></a>
|
||||||
{/volist}
|
{/volist}
|
||||||
{/notempty}
|
{/notempty}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -29,12 +29,13 @@
|
|||||||
{/notempty}
|
{/notempty}
|
||||||
<li>
|
<li>
|
||||||
<h3>{:lang_i18n('联系方式')}</h3>
|
<h3>{:lang_i18n('联系方式')}</h3>
|
||||||
{notempty name="contact_config.website_email"}
|
{if condition="!empty($contact_config)"}
|
||||||
<p>{$contact_config.website_email.title}: {$contact_config.website_email.value}</p>
|
{volist name="contact_config" id="vo"}
|
||||||
{/notempty}
|
{if condition="$vo.type != 'image'"}
|
||||||
{notempty name="contact_config.website_hotline_office_hours"}
|
<p>{$vo.value}</p>
|
||||||
<p>{$contact_config.website_hotline_office_hours.title}: {$contact_config.website_hotline_office_hours.value}</p>
|
{/if}
|
||||||
{/notempty}
|
{/volist}
|
||||||
|
{/if}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -117,8 +117,8 @@
|
|||||||
<p class="subtitle" {notempty name="scene.desc_txt_color" }style="color:{$scene.desc_txt_color};" {/notempty}>
|
<p class="subtitle" {notempty name="scene.desc_txt_color" }style="color:{$scene.desc_txt_color};" {/notempty}>
|
||||||
{$scene.desc|raw}</p>
|
{$scene.desc|raw}</p>
|
||||||
<a class="sceneMore" href="{$scene.link}">{:lang_i18n('了解更多')} ></a> -->
|
<a class="sceneMore" href="{$scene.link}">{:lang_i18n('了解更多')} ></a> -->
|
||||||
|
<div style="background-image: url('{$scene.image}');" class="sceneimg"></div>
|
||||||
</a>
|
</a>
|
||||||
<div style="background-image: url('{$scene.image}');" class="sceneimg"></div>
|
|
||||||
</div>
|
</div>
|
||||||
{/volist}
|
{/volist}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -58,7 +58,7 @@
|
|||||||
{else/}
|
{else/}
|
||||||
<a href="javascript:void(0);" class="fline">
|
<a href="javascript:void(0);" class="fline">
|
||||||
{$vo.value}
|
{$vo.value}
|
||||||
{/if}
|
{/if}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{/volist}
|
{/volist}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ if (!function_exists('image_domain_concat')) {
|
|||||||
return $path;
|
return $path;
|
||||||
}
|
}
|
||||||
|
|
||||||
return rtrim($domain, '/') . '/' . ltrim($path, '/');
|
return url_join($domain, $path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ if (!function_exists('video_domain_concat')) {
|
|||||||
return $path;
|
return $path;
|
||||||
}
|
}
|
||||||
|
|
||||||
return rtrim($domain, '/') . '/' . ltrim($path, '/');
|
return url_join($domain, $path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
public/migrate_temp_images/.gitignore
vendored
2
public/migrate_temp_images/.gitignore
vendored
@@ -1,2 +0,0 @@
|
|||||||
*
|
|
||||||
!.gitignore
|
|
||||||
@@ -1278,7 +1278,7 @@ video img {
|
|||||||
margin-left: 1rem;
|
margin-left: 1rem;
|
||||||
}
|
}
|
||||||
.foot-cate li {
|
.foot-cate li {
|
||||||
width: 50%;
|
min-width: 50%;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
float: left;
|
float: left;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
|||||||
Reference in New Issue
Block a user