Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
飞鱼0526
ShopXO
提交
2fc196b8
ShopXO
项目概览
飞鱼0526
/
ShopXO
与 Fork 源项目一致
Fork自
纵之格 / ShopXO
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
ShopXO
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2fc196b8
编写于
4月 19, 2019
作者:
D
devil_gong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
应用
上级
b7ff24ee
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
257 addition
and
42 deletion
+257
-42
application/plugins/petscms/Service.php
application/plugins/petscms/Service.php
+39
-4
application/plugins/petscms/install.sql
application/plugins/petscms/install.sql
+1
-1
application/plugins/view/petscms/pets/detail.html
application/plugins/view/petscms/pets/detail.html
+24
-22
extend/base/FileUpload.php
extend/base/FileUpload.php
+2
-2
extend/base/Qrcode.php
extend/base/Qrcode.php
+172
-2
public/static/common/css/common.css
public/static/common/css/common.css
+2
-2
public/static/plugins/css/petscms/pets.detail.css
public/static/plugins/css/petscms/pets.detail.css
+17
-9
public/static/upload/images/plugins_petscms/2019/04/09/1554814711403578.jpg
...ad/images/plugins_petscms/2019/04/09/1554814711403578.jpg
+0
-0
未找到文件。
application/plugins/petscms/Service.php
浏览文件 @
2fc196b8
...
...
@@ -13,6 +13,7 @@ namespace app\plugins\petscms;
use
think\Db
;
use
app\service\ResourcesService
;
use
app\service\RegionService
;
use
app\service\PluginsService
;
/**
* 宠物管理系统 - 服务层
...
...
@@ -111,8 +112,8 @@ class Service
$v
[
'lose_features'
]
=
str_replace
(
"
\n
"
,
'<br />'
,
$v
[
'lose_features'
]);
// 二维码
$v
[
'qrcode_url'
]
=
MyUrl
(
'index/qrcode/index'
,
[
'content'
=>
urlencode
(
base64_encode
(
PluginsHomeUrl
(
'petscms'
,
'pets'
,
'detail'
,
[
'id'
=>
$v
[
'id'
]])))
]);
$v
[
'qrcode_download'
]
=
MyUrl
(
'index/qrcode/download'
,
[
'url'
=>
urlencode
(
base64_encode
(
$v
[
'qrcode_url'
]))]);
$v
[
'qrcode_url'
]
=
empty
(
$v
[
'qrcode_images'
])
?
MyUrl
(
'index/qrcode/index'
,
[
'content'
=>
urlencode
(
base64_encode
(
PluginsHomeUrl
(
'petscms'
,
'pets'
,
'detail'
,
[
'id'
=>
$v
[
'id'
]])))])
:
ResourcesService
::
AttachmentPathViewHandle
(
$v
[
'qrcode_images'
]);
$v
[
'qrcode_download'
]
=
MyUrl
(
'index/qrcode/download'
,
[
'url'
=>
urlencode
(
base64_encode
(
$v
[
'qrcode_url'
]))
,
'filename'
=>
$v
[
'pest_no'
]
]);
// 地址
$v
[
'province_name'
]
=
RegionService
::
RegionName
(
$v
[
'lose_province'
]);
...
...
@@ -126,7 +127,6 @@ class Service
$v
[
'upd_time_date'
]
=
empty
(
$v
[
'upd_time'
])
?
''
:
date
(
'Y-m-d'
,
$v
[
'upd_time'
]);
}
}
//print_r($data);
return
DataReturn
(
'处理成功'
,
0
,
$data
);
}
...
...
@@ -406,8 +406,12 @@ class Service
{
$data
[
'pest_no'
]
=
date
(
'YmdHis'
)
.
GetNumberCode
(
6
);
$data
[
'add_time'
]
=
time
();
if
(
Db
::
name
(
'PluginsPetscmsPets'
)
->
insertGetId
(
$data
)
>
0
)
$pets_id
=
Db
::
name
(
'PluginsPetscmsPets'
)
->
insertGetId
(
$data
);
if
(
$pets_id
>
0
)
{
// 生成二维码
self
::
PetsQrcodeCreate
(
$pets_id
);
return
DataReturn
(
'添加成功'
,
0
);
}
return
DataReturn
(
'添加失败'
,
-
100
);
...
...
@@ -421,6 +425,37 @@ class Service
}
}
/**
* 宠物二维码生成
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-04-19
* @desc description
* @param [type] $pets_id [description]
*/
private
static
function
PetsQrcodeCreate
(
$pets_id
)
{
if
(
!
empty
(
$pets_id
))
{
$base
=
PluginsService
::
PluginsData
(
'petscms'
,
[
'logo'
]);
$params
=
[
'path'
=>
DS
.
'static'
.
DS
.
'upload'
.
DS
.
'images'
.
DS
.
'plugins_petscms'
.
DS
.
'qrcode'
.
DS
.
date
(
'Y'
)
.
DS
.
date
(
'm'
)
.
DS
.
date
(
'd'
)
.
DS
,
'content'
=>
PluginsHomeUrl
(
'petscms'
,
'pets'
,
'detail'
,
[
'id'
=>
$pets_id
]),
'logo'
=>
empty
(
$base
[
'data'
][
'logo'
])
?
''
:
$base
[
'data'
][
'logo'
],
];
$ret
=
(
new
\
base\Qrcode
())
->
Create
(
$params
);
if
(
$ret
[
'code'
]
==
0
)
{
if
(
!
Db
::
name
(
'PluginsPetscmsPets'
)
->
where
([
'id'
=>
$pets_id
])
->
update
([
'qrcode_images'
=>
$ret
[
'data'
][
'path'
]
.
$ret
[
'data'
][
'filename'
],
'upd_time'
=>
time
()]))
{
return
DataReturn
(
'二维码生成失败'
,
-
10
);
}
}
}
return
DataReturn
(
'二维码生成成功'
,
0
);
}
/**
* 获取宠物相册
* @author Devil
...
...
application/plugins/petscms/install.sql
浏览文件 @
2fc196b8
...
...
@@ -4,6 +4,7 @@ CREATE TABLE `s_plugins_petscms_pets` (
`user_id`
int
(
11
)
unsigned
NOT
NULL
DEFAULT
'0'
COMMENT
'用户id'
,
`pest_no`
char
(
60
)
NOT
NULL
DEFAULT
''
COMMENT
'宠物编号'
,
`status`
tinyint
(
2
)
unsigned
NOT
NULL
DEFAULT
'0'
COMMENT
'状态(0正常, 1丢失, 2去世, 3关闭)'
,
`qrcode_images`
char
(
255
)
NOT
NULL
DEFAULT
''
COMMENT
'宠物二维码'
,
`title`
char
(
60
)
NOT
NULL
DEFAULT
''
COMMENT
'标题'
,
`name`
char
(
30
)
NOT
NULL
DEFAULT
''
COMMENT
'名字'
,
`birthday`
int
(
11
)
unsigned
NOT
NULL
DEFAULT
'0'
COMMENT
'出生日期'
,
...
...
@@ -36,7 +37,6 @@ CREATE TABLE `s_plugins_petscms_pets` (
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
ROW_FORMAT
=
DYNAMIC
COMMENT
=
'宠物管理系统宠物 - 应用'
#
宠物管理系统宠物丢失帮助数据
CREATE
TABLE
`s_plugins_petscms_help`
(
`id`
int
(
11
)
unsigned
NOT
NULL
AUTO_INCREMENT
COMMENT
'自增id'
,
...
...
application/plugins/view/petscms/pets/detail.html
浏览文件 @
2fc196b8
...
...
@@ -215,34 +215,36 @@
{{/if}}
{{else /}}
<div
class=
"pets-not-bind"
>
<p><i
class=
"am-icon-github-alt
am-animation-slide-top
"
></i></p>
<p><i
class=
"am-icon-github-alt"
></i></p>
{{if !empty($plugins_base_data['not_bind_desc'])}}
<div
class=
"am-alert am-alert-secondary am-animation-shake"
data-am-alert
>
{{$plugins_base_data.not_bind_desc|raw}}
</div>
{{/if}}
<a
href=
"{{:PluginsHomeUrl('petscms', 'pets', 'saveinfo', ['pest_no'=>$data['pest_no']])}}"
class=
"am-btn am-btn-primary am-radius am-icon-get-pocket am-animation-slide-bottom"
>
{{if empty($plugins_base_data['pets_take'])}}我要领取{{else /}}{{$plugins_base_data.pets_take}}{{/if}}
</a>
<a
href=
"{{:PluginsHomeUrl('petscms', 'pets', 'saveinfo', ['pest_no'=>$data['pest_no']])}}"
class=
"am-btn am-btn-primary am-radius am-icon-get-pocket"
>
{{if empty($plugins_base_data['pets_take'])}}我要领取{{else /}}{{$plugins_base_data.pets_take}}{{/if}}
</a>
</div>
{{/if}}
{{if !empty($plugins_base_data['alipay_qrcode_images']) or !empty($plugins_base_data['weixin_qrcode_images'])}}
<ul
class=
"qrcode am-animation-slide-bottom
"
>
{{if !empty($plugins_base_data['alipay_qrcode_images'])}}
<li>
<img
src=
"{{$plugins_base_data.alipay_qrcode_images}}"
alt=
"二维码"
/
>
{{if !empty($plugins_base_data['alipay_qrcode_name'])}}
<p>
{{$plugins_base_data.alipay_qrcode_name}}
</p>
{{/if}}
</li>
{{/if}}
{{if !empty($plugins_base_data['weixin_qrcode_images'])
}}
<li>
<img
src=
"{{$plugins_base_data.weixin_qrcode_images}}"
alt=
"二维码"
/
>
{{if !empty($plugins_base_data['weixin_qrcode_name'])}}
<p>
{{$plugins_base_data.weixin_qrcode_name}}
</p>
{{/if}}
</li>
{{/if}}
</ul>
{{/if}}
{{if !empty($plugins_base_data['alipay_qrcode_images']) or !empty($plugins_base_data['weixin_qrcode_images'])}}
<div
class=
"pets-qrcode-related
"
>
<ul>
{{if !empty($plugins_base_data['alipay_qrcode_images'])}}
<li
>
<img
src=
"{{$plugins_base_data.alipay_qrcode_images}}"
alt=
"二维码"
/>
{{if !empty($plugins_base_data['alipay_qrcode_name'])}}
<p>
{{$plugins_base_data.alipay_qrcode_name}}
</p>
{{/if}}
</li>
{{/if
}}
{{if !empty($plugins_base_data['weixin_qrcode_images'])}}
<li
>
<img
src=
"{{$plugins_base_data.weixin_qrcode_images}}"
alt=
"二维码"
/>
{{if !empty($plugins_base_data['weixin_qrcode_name'])}}
<p>
{{$plugins_base_data.weixin_qrcode_name}}
</p>
{{/if}}
</li>
{{/if}}
</ul>
</div>
{{/if}}
</div>
...
...
extend/base/FileUpload.php
浏览文件 @
2fc196b8
...
...
@@ -34,8 +34,8 @@ class FileUpload
*/
public
function
__construct
(
$params
=
[])
{
$this
->
config
[
'root_path'
]
=
isset
(
$params
[
'root_path'
])
?
$params
[
'root_path'
]
:
ROOT
_PATH
;
$this
->
config
[
'path'
]
=
isset
(
$params
[
'path'
])
?
$params
[
'path'
]
:
DS
.
'
Public'
.
DS
.
'U
pload'
.
DS
.
'file'
.
DS
.
date
(
'Y'
)
.
DS
.
date
(
'm'
)
.
DS
.
date
(
'd'
)
.
DS
;
$this
->
config
[
'root_path'
]
=
isset
(
$params
[
'root_path'
])
?
$params
[
'root_path'
]
:
ROOT
.
'public'
;
$this
->
config
[
'path'
]
=
isset
(
$params
[
'path'
])
?
$params
[
'path'
]
:
DS
.
'
static'
.
DS
.
'u
pload'
.
DS
.
'file'
.
DS
.
date
(
'Y'
)
.
DS
.
date
(
'm'
)
.
DS
.
date
(
'd'
)
.
DS
;
}
/**
...
...
extend/base/Qrcode.php
浏览文件 @
2fc196b8
...
...
@@ -19,6 +19,9 @@ namespace base;
*/
class
Qrcode
{
// 配置
private
$config
;
/**
* 构造方法
* @author Devil
...
...
@@ -29,6 +32,10 @@ class Qrcode
public
function
__construct
()
{
require_once
ROOT
.
'extend'
.
DS
.
'qrcode'
.
DS
.
'phpqrcode.php'
;
// 默认配置
$this
->
config
[
'root_path'
]
=
isset
(
$params
[
'root_path'
])
?
$params
[
'root_path'
]
:
ROOT
.
'public'
;
$this
->
config
[
'path'
]
=
isset
(
$params
[
'path'
])
?
$params
[
'path'
]
:
DS
.
'static'
.
DS
.
'upload'
.
DS
.
'images'
.
DS
.
'qrcode'
.
DS
.
date
(
'Y'
)
.
DS
.
date
(
'm'
)
.
DS
.
date
(
'd'
)
.
DS
;
}
/**
...
...
@@ -45,7 +52,7 @@ class Qrcode
$level
=
isset
(
$params
[
'level'
])
&&
in_array
(
$params
[
'level'
],
array
(
'L'
,
'M'
,
'Q'
,
'H'
))
?
$params
[
'level'
]
:
'L'
;
// 大小,最小1,最大10
$point_size
=
isset
(
$params
[
'size'
])
?
min
(
max
(
intval
(
$params
[
'size'
]),
1
),
1
0
)
:
6
;
$point_size
=
isset
(
$params
[
'size'
])
?
min
(
max
(
intval
(
$params
[
'size'
]),
1
),
3
0
)
:
6
;
// 外边距
$mr
=
isset
(
$params
[
'mr'
])
?
intval
(
$params
[
'mr'
])
:
1
;
...
...
@@ -57,6 +64,98 @@ class Qrcode
\
QRcode
::
png
(
$content
,
false
,
$level
,
$point_size
,
$mr
);
}
/**
* 二维码创建
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-04-19
* @desc description
* @param [array] $params [输入参数]
*/
public
function
Create
(
$params
=
[])
{
// 数据参数
if
(
empty
(
$params
[
'content'
]))
{
return
DataReturn
(
'内容不能为空'
,
-
1
);
}
// 自定义路径
if
(
!
empty
(
$params
[
'root_path'
]))
{
$this
->
config
[
'root_path'
]
=
$params
[
'root_path'
];
}
if
(
!
empty
(
$params
[
'path'
]))
{
$this
->
config
[
'path'
]
=
$params
[
'path'
];
}
// 存储目录校验
$dir
=
str_replace
([
'//'
,
'\\\\'
],
[
'/'
,
'\\'
],
$this
->
config
[
'root_path'
]
.
$this
->
config
[
'path'
]);
$ret
=
$this
->
IsMkdir
(
$dir
);
if
(
$ret
[
'code'
]
!=
0
)
{
return
$ret
;
}
// 文件名称
$filename
=
empty
(
$params
[
'filename'
])
?
$this
->
RandNewFilename
()
.
'.png'
:
$params
[
'filename'
];
// 容错率
$level
=
isset
(
$params
[
'level'
])
&&
in_array
(
$params
[
'level'
],
array
(
'L'
,
'M'
,
'Q'
,
'H'
))
?
$params
[
'level'
]
:
'L'
;
// 大小,最小1,最大10
$point_size
=
isset
(
$params
[
'size'
])
?
min
(
max
(
intval
(
$params
[
'size'
]),
1
),
30
)
:
10
;
// 外边距
$mr
=
isset
(
$params
[
'mr'
])
?
intval
(
$params
[
'mr'
])
:
2
;
// 生成二维码
\
QRcode
::
png
(
$params
[
'content'
],
$dir
.
$filename
,
$level
,
$point_size
,
$mr
);
if
(
!
file_exists
(
$dir
.
$filename
))
{
return
DataReturn
(
'二维码创建失败'
,
-
100
);
}
//判断是否生成带logo的二维码
if
(
!
empty
(
$params
[
'logo'
]))
{
$logo
=
@
file_get_contents
(
$params
[
'logo'
]);
if
(
$logo
!==
false
)
{
$qr
=
imagecreatefromstring
(
file_get_contents
(
$dir
.
$filename
));
//目标图象连接资源
$logo
=
imagecreatefromstring
(
$logo
);
//源图象连接资源
$qr_width
=
imagesx
(
$qr
);
$qr_height
=
imagesy
(
$qr
);
$logo_width
=
imagesx
(
$logo
);
$logo_height
=
imagesy
(
$logo
);
$logo_qr_width
=
$qr_width
/
5
;
//组合之后logo的宽度(占二维码的1/5)
$scale
=
$logo_width
/
$logo_qr_width
;
//logo的宽度缩放比(本身宽度/组合后的宽度)
$logo_qr_height
=
$logo_height
/
$scale
;
//组合之后logo的高度
$from_width
=
(
$qr_width
-
$logo_qr_width
)
/
2
;
//组合之后logo左上角所在坐标点
//重新组合图片并调整大小
imagecopyresampled
(
$qr
,
$logo
,
$from_width
,
$from_width
,
0
,
0
,
$logo_qr_width
,
$logo_qr_height
,
$logo_width
,
$logo_height
);
//输出图片
imagepng
(
$qr
,
$dir
.
$filename
);
imagedestroy
(
$qr
);
imagedestroy
(
$logo
);
}
}
$result
=
[
'dir'
=>
$dir
.
$filename
,
'root'
=>
$this
->
config
[
'root_path'
],
'path'
=>
$this
->
config
[
'path'
],
'filename'
=>
$filename
,
];
return
DataReturn
(
'创建成功'
,
0
,
$result
);
}
/**
* 二维码下载
* @author Devil
...
...
@@ -71,7 +170,7 @@ class Qrcode
$url
=
base64_decode
(
urldecode
(
$params
[
'url'
]));
// 随机文件名
$filename
=
time
()
.
GetNumberCode
()
.
'.png'
;
$filename
=
empty
(
$params
[
'filename'
])
?
date
(
'YmdHis'
)
.
GetNumberCode
()
.
'.png'
:
$params
[
'filename'
]
.
'.png'
;
// 设置头信息
header
(
'Pragma: public'
);
...
...
@@ -84,5 +183,76 @@ class Qrcode
header
(
'Connection: close'
);
readfile
(
$url
);
}
/**
* 生成新的文件名称
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-06-29
* @desc description
* @return [string] [文件名称]
*/
private
function
RandNewFilename
()
{
return
date
(
'YmdHis'
)
.
rand
(
0
,
9
)
.
rand
(
0
,
9
)
.
rand
(
0
,
9
)
.
rand
(
0
,
9
)
.
rand
(
0
,
9
);
}
/**
* 路径不存在则创建
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-06-29
* @desc description
* @param [string] $dir [文件路径]
*/
private
function
IsMkdir
(
$dir
)
{
if
(
!
is_dir
(
$dir
))
{
// 目录是否有权限
$ret
=
$this
->
IsWritable
(
$dir
);
if
(
$ret
[
'code'
]
!=
0
)
{
return
$ret
;
}
// 创建目录
if
(
mkdir
(
$dir
,
0777
,
true
)
===
false
)
{
return
DataReturn
(
'目录创建失败'
,
-
1
);
}
}
return
DataReturn
(
'操作成功'
,
0
);
}
/**
* 目录是否有权限
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-04-19
* @desc description
* @param [string] $dir [文件路径]
*/
private
function
IsWritable
(
$dir
)
{
$dirs
=
str_replace
(
$this
->
config
[
'root_path'
],
''
,
$dir
);
$dll
=
explode
(
DS
,
$dirs
);
if
(
!
empty
(
$dll
)
&&
is_array
(
$dll
))
{
$dstr
=
''
;
foreach
(
$dll
as
$d
)
{
$dstr
.
=
empty
(
$d
)
?
''
:
DS
.
$d
;
if
(
is_dir
(
$this
->
config
[
'root_path'
]
.
$dstr
)
&&
!
is_writable
(
$this
->
config
[
'root_path'
]
.
$dstr
))
{
return
DataReturn
(
'目录没有权限['
.
$dstr
.
']'
,
-
1
);
}
}
}
return
DataReturn
(
'有权限'
,
0
);
}
}
?>
\ No newline at end of file
public/static/common/css/common.css
浏览文件 @
2fc196b8
...
...
@@ -35,8 +35,8 @@ form.am-form .am-form-group-label-tips-must { color: #f00; }
.am-tagsinput
input
[
type
=
"text"
]
:hover
{
box-shadow
:
0
0
0
#fff
!important
;
border
:
0
!important
;
}
.chosen-choices
li
.search-field
input
[
type
=
"text"
]
:focus
,
.am-tagsinput
input
[
type
=
"text"
]
:focus
{
border-color
:
#fff
;
-webkit-box-shadow
:
inset
0
0
0
0
!important
;
box-shadow
:
inset
0
0
0
0
!important
;
}
.chosen-choices
{
padding
:
0px
3px
!important
;
min-height
:
32
px
;
}
.chosen-container-single
.chosen-single
{
height
:
32px
;
line-height
:
32
px
;
}
.chosen-choices
{
padding
:
0px
3px
!important
;
min-height
:
28
px
;
}
.chosen-container-single
.chosen-single
{
height
:
28px
;
line-height
:
28
px
;
}
.chosen-container-multi
.chosen-choices
li
.search-field
{
padding-left
:
3px
;
}
.chosen-container-single
.chosen-single
{
color
:
#444
!important
;
}
.chosen-container-single
.chosen-default
{
color
:
#999
!important
;
}
...
...
public/static/plugins/css/petscms/pets.detail.css
浏览文件 @
2fc196b8
...
...
@@ -74,29 +74,37 @@
.pets-not-bind
.am-btn
{
margin-top
:
10px
;
}
.pets-not-bind
ul
.qrcode
{
overflow
:
hidden
;
/**
* 相关二维码
*/
.pets-qrcode-related
{
margin-top
:
30px
;
}
.pets-qrcode-related
ul
{
margin
:
0
auto
;
max-width
:
600px
;
overflow
:
hidden
;
border
:
1px
solid
;
border-top
:
5px
solid
;
border-color
:
#
eee
;
border-color
:
#
1aa9f3
;
}
.pets-
not-bind
ul
.qrcode
li
{
.pets-
qrcode-related
li
{
width
:
50%
;
float
:
left
;
text-align
:
center
;
padding
:
20px
;
}
.pets-
not-bind
ul
.qrcode
li
:first-child
{
.pets-
qrcode-related
li
:first-child
{
border-right
:
1px
solid
#eee
;
}
.pets-
not-bind
ul
.qrcode
li
:last-child
{
.pets-
qrcode-related
li
:last-child
{
border-left
:
1px
solid
#fff
;
}
.pets-
not-bind
ul
.qrcode
li
img
{
.pets-
qrcode-related
li
img
{
max-width
:
150px
;
}
.pets-
not-bind
ul
.qrcode
li
p
{
.pets-
qrcode-related
li
p
{
font-size
:
14px
;
font-weight
:
500
;
color
:
#666
;
...
...
@@ -237,7 +245,7 @@ form.form-validation #map {
}
}
@media
only
screen
and
(
max-width
:
641px
)
{
.base
,
.lose
,
.content
{
.base
,
.lose
,
.content
,
.pets-qrcode-related
{
padding
:
0
5px
;
}
.base
h1
{
...
...
public/static/upload/images/plugins_petscms/2019/04/09/1554814711403578.jpg
100644 → 100755
浏览文件 @
2fc196b8
文件模式从 100644 更改为 100755
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录