Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
MCMS
Commits
d46aff17
Commit
d46aff17
authored
Nov 28, 2019
by
tianbj
Browse files
4.7.2
parent
fef0c487
Changes
29
Expand all
Hide whitespace changes
Inline
Side-by-side
src/main/java/net/mingsoft/config/WebConfig.java
View file @
d46aff17
package
net.mingsoft.config
;
import
java.io.File
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
org.springframework.aop.Advisor
;
import
net.mingsoft.basic.filter.XSSEscapeFilter
;
import
org.springframework.aop.support.DefaultPointcutAdvisor
;
import
org.springframework.aop.support.JdkRegexpMethodPointcut
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.web.servlet.FilterRegistrationBean
;
import
org.springframework.boot.web.servlet.ServletListenerRegistrationBean
;
import
org.springframework.boot.web.servlet.ServletRegistrationBean
;
...
...
@@ -31,6 +34,16 @@ import net.mingsoft.basic.util.BasicUtil;
@Configuration
public
class
WebConfig
implements
WebMvcConfigurer
{
/**
* 上传路径
*/
@Value
(
"${ms.upload.path}"
)
private
String
uploadFloderPath
;
/**
* 上传路径映射
*/
@Value
(
"${ms.upload.mapping}"
)
private
String
uploadMapping
;
@Bean
public
ActionInterceptor
actionInterceptor
()
{
return
new
ActionInterceptor
();
...
...
@@ -54,23 +67,24 @@ public class WebConfig implements WebMvcConfigurer {
@Override
public
void
addResourceHandlers
(
ResourceHandlerRegistry
registry
)
{
//jar包方式映射处理
String
classPath
=
BasicUtil
.
getClassPath
(
""
);
if
(
classPath
.
startsWith
(
"file"
))
{
registry
.
addResourceHandler
(
"/upload/**"
).
addResourceLocations
(
"file:"
+
BasicUtil
.
getRealPath
(
"upload"
)
+
File
.
separator
);
registry
.
addResourceHandler
(
"/html/**"
).
addResourceLocations
(
"file:"
+
BasicUtil
.
getRealPath
(
"html"
)
+
File
.
separator
);
registry
.
addResourceHandler
(
"/templets/**"
).
addResourceLocations
(
"file:"
+
BasicUtil
.
getRealPath
(
"templets"
)
+
File
.
separator
);
}
else
{
//必须做判断,不然jar运行的html路径会被覆盖掉
registry
.
addResourceHandler
(
"/html/**"
).
addResourceLocations
(
"/html/"
);
registry
.
addResourceHandler
(
"/upload/**"
).
addResourceLocations
(
"/upload/"
,
"file:upload/"
);
registry
.
addResourceHandler
(
"/templets/**"
).
addResourceLocations
(
"/templets/"
,
"file:templets/"
);
registry
.
addResourceHandler
(
"/html/**"
).
addResourceLocations
(
"/html/"
,
"file:html/"
);
//三种映射方式 webapp下、当前目录下、jar内
registry
.
addResourceHandler
(
"/app/**"
).
addResourceLocations
(
"/app/"
,
"file:app/"
,
"classpath:/app/"
);
registry
.
addResourceHandler
(
"/static/**"
,
"/**"
).
addResourceLocations
(
"/static/"
,
"file:static/"
,
"classpath:/static/"
,
"classpath:/META-INF/resources/"
);
registry
.
addResourceHandler
(
"/api/**"
).
addResourceLocations
(
"/api/"
,
"file:api/"
,
"classpath:/api/"
);
if
(
new
File
(
uploadFloderPath
).
isAbsolute
()){
//如果指定了绝对路径,上传的文件都映射到uploadMapping下
registry
.
addResourceHandler
(
uploadMapping
).
addResourceLocations
(
"file:"
+
uploadFloderPath
+
File
.
separator
//映射其他路径文件
//,file:F://images
);
}
registry
.
addResourceHandler
(
"/app/**"
).
addResourceLocations
(
"/app/"
,
"classpath:/app/"
);
registry
.
addResourceHandler
(
"/static/**"
).
addResourceLocations
(
"/static/"
,
"classpath:/static/"
);
registry
.
addResourceHandler
(
"/api/**"
).
addResourceLocations
(
"/api/"
,
"classpath:/api/"
);
}
/**
* druidServlet注册
*/
/**
* druidServlet注册
*/
@Bean
public
ServletRegistrationBean
druidServletRegistration
()
{
ServletRegistrationBean
registration
=
new
ServletRegistrationBean
(
new
StatViewServlet
());
...
...
@@ -132,16 +146,17 @@ public class WebConfig implements WebMvcConfigurer {
return
new
DefaultPointcutAdvisor
(
druidStatPointcut
(),
druidStatInterceptor
());
}
/**
* xssFilter注册
*/
// @Bean
// public FilterRegistrationBean xssFilterRegistration() {
// XSSEscapeFilter xssFilter = new XSSEscapeFilter();
// FilterRegistrationBean registration = new FilterRegistrationBean(xssFilter);
// registration.addUrlPatterns("/*");
// return registration;
// }
@Bean
public
FilterRegistrationBean
xssFilterRegistration
()
{
XSSEscapeFilter
xssFilter
=
new
XSSEscapeFilter
();
FilterRegistrationBean
registration
=
new
FilterRegistrationBean
(
xssFilter
);
xssFilter
.
excludes
.
add
(
".*file/upload.do"
);
xssFilter
.
excludes
.
add
(
".*/jsp/editor.do"
);
xssFilter
.
excludes
.
add
(
".*/?(jpg|js|css|gif|png|ico)$"
);
xssFilter
.
excludes
.
add
(
"/"
);
registration
.
addUrlPatterns
(
"/*"
);
return
registration
;
}
/**
* RequestContextListener注册
...
...
@@ -156,7 +171,7 @@ public class WebConfig implements WebMvcConfigurer {
@Override
public
void
addViewControllers
(
ViewControllerRegistry
registry
)
{
registry
.
addViewController
(
"/"
).
setViewName
(
"forward:/index"
);
registry
.
setOrder
(
Ordered
.
HIGHEST_PRECEDENCE
);
registry
.
setOrder
(
Ordered
.
HIGHEST_PRECEDENCE
);
WebMvcConfigurer
.
super
.
addViewControllers
(
registry
);
}
}
src/main/resources/application.yml
View file @
d46aff17
...
...
@@ -12,14 +12,23 @@ ms:
view-path
:
/WEB-INF/manager
upload
:
path
:
/upload
path
:
upload
mapping
:
/upload/**
denied
:
.exe,.jsp
allowed
:
jpg
max-size
:
1
memory-size
:
4096
multipart
:
#最大上传文件大小 单位:KB
max-file-size
:
10240
#文件暂存临时目录
upload-temp-dir
:
temp
#临时文件大小
max-in-memory-size
:
10240
#总上传最大大小 单位:KB -1禁用
max-request-size
:
-1
spring
:
http.multipart.enabled
:
false
profiles
:
active
:
dev
mvc
:
...
...
@@ -53,6 +62,7 @@ spring:
time_format
:
HH:mm:ss
datetime_format
:
yyyy-MM-dd HH:mm:ss
auto_import
:
/include/macro.ftl as ms
number_format
:
0.##
mybatis
:
mapper-locations
:
classpath*:**/dao/*.xml
...
...
src/main/webapp/WEB-INF/manager/cms/article/article_form.ftl
0 → 100644
View file @
d46aff17
<@
ms
.html5
>
<@ms.nav title="文章管理" back=true>
<#if article.basicId == 0>
<@ms.saveButton id="saveUpdate" value="保存"/>
<#else>
<@ms.updateButton id="saveUpdate" value="更新"/>
</#if>
</@ms.nav>
<@ms.panel>
<@ms.form isvalidation=true name="articleForm" action="$
{
managerPath
}
/cms/article/$
{
action
}
.do">
<@ms.text name="basicTitle" colSm="2" width="400" label="文章标题" title="文章标题" size="5" placeholder="请输入文章标题" value="$
{
article
.basicTitle
?
default
(
''
)}
" validation=
{
"maxlength"
:
"300"
,
"required"
:
"true"
,
"data-bv-notempty-message"
:
"文章标题不能为空"
,
"data-bv-stringlength-message"
:
"标题在300个字符以内!"
,
"data-bv-notempty-message"
:
"必填项目"
}
/>
<@ms.text name="basicSort" colSm="2" width="200" label="自定义顺序" title="自定义顺序" size="5" placeholder="请输入文章顺序" value="$
{
article
.basicSort
?
c
?
default
(
0
)}
" validation=
{
"data-bv-between"
:
"true"
,
"required"
:
"true"
,
"data-bv-between-message"
:
"自定义顺序必须大于0"
,
"data-bv-between-min"
:
"0"
,
"data-bv-between-max"
:
"99999999"
,
"data-bv-notempty-message"
:
"自定义顺序不能为空"
}
/>
<#if articleType?has_content>
<@ms.checkboxlist colSm="2" name="checkbox" label="文章属性" list=articleType listKey="dictValue" listValue="dictLabel" />
</#if>
<@ms.radio name="basicDisplay"
list=[
{
"id"
:
"0"
,
"value"
:
"是"
}
,
{
"id"
:
"1"
,
"value"
:
"否"
}
] value="$
{
article
.basicDisplay
?
c
?
default
()}
"
listKey="id" listValue="value" label="是否显示" help="选择否后前端将不显示,需要重新生成才有效果"
/>
<@ms.formRow colSm="2" label="文章缩略图" width="400" >
<@ms.uploadImg path="$
{
websiteId
}
/article" inputName="basicThumbnails" size="1" msg="提示:文章缩略图,支持jpg格式" imgs="$
{
article
.basicThumbnails
?
default
(
''
)}
" />
</@ms.formRow>
<@ms.text name="articleSource" colSm="2" width="200" label="文章来源" title="文章来源" size="5" placeholder="请输入文章来源" value="$
{
article
.articleSource
?
default
(
''
)}
" validation=
{
"maxlength"
:
"300"
,
"data-bv-stringlength-message"
:
"文章来源在300个字符以内!"
}
/>
<@ms.text name="articleAuthor" colSm="2" width="200" label="文章作者" title="文章作者" size="5" placeholder="请输入文章作者" value="$
{
article
.articleAuthor
?
default
(
''
)}
" validation=
{
"maxlength"
:
"12"
,
"data-bv-stringlength-message"
:
"文章作者在12个字符以内!"
}
/>
<#if !isEditCategory><!-- 如果不是单篇 -->
<@ms.formRow colSm="2" label="所属栏目" width="300">
<#if categoryTitle=="">
<@ms.treeInput treeId="inputTree" json="$
{
listColumn
?
default
(
''
)}
" jsonId="categoryId" jsonPid="categoryCategoryId" jsonName="categoryTitle" inputName="basicCategoryId" inputValue="$
{
categoryId
}
" buttonText="选择栏目" clickZtreeId="clickZtreeId(event,treeId,treeNode);" expandAll="true" showIcon="true"/>
<#else>
<@ms.treeInput treeId="inputTree" json="$
{
listColumn
?
default
(
''
)}
" jsonId="categoryId" jsonPid="categoryCategoryId" jsonName="categoryTitle" inputName="basicCategoryId" inputValue="$
{
categoryId
}
" buttonText="$
{(
categoryTitle
)
!
}
" clickZtreeId="clickZtreeId(event,treeId,treeNode);" expandAll="true" showIcon="true"/>
</#if>
</@ms.formRow>
</#if>
<@ms.hidden id="basicDateTime" name="basicDateTime" value=""/>
<@ms.date id="articleDateTime" name="articleDateTime" time=true label="发布时间" single=true readonly="readonly" width="300" value="$
{(
article
.basicDateTime
?
default
(
.now
))
?
string
(
'
yyyy-MM-dd
HH
:
mm
'
)}
" validation=
{
"required"
:
"true"
,
"data-bv-notempty-message"
:
"必填项目"
}
placeholder="点击该框选择时间段" />
<@ms.textarea colSm="2" name="basicDescription" label="描述" wrap="Soft" rows="4" size="" value="$
{
article
.basicDescription
?
default
(
''
)}
" placeholder="请输入对该文章的简短描述,以便用户查看文章简略" validation=
{
"maxlength"
:
"400"
,
"data-bv-stringlength-message"
:
"文章描述在400个字符以内!"
}
/>
<@ms.textarea colSm="2" name="articleKeyword" label="关键字" wrap="Soft" rows="4" size="" placeholder="请输入文章关键字" value="$
{
article
.articleKeyword
?
default
(
''
)}
" validation=
{
"maxlength"
:
"155"
,
"data-bv-stringlength-message"
:
"文章作者在155个字符以内!"
}
/>
<!--新填字段内容开始-->
<div id="addFieldForm">
</div>
<@ms.hidden name="articleTypeJson" />
<@ms.editor colSm="2" name="articleContent" label="文章内容" content="$
{
article
.articleContent
?
default
(
''
)}
" appId="$
{
appId
?
default
(
0
)}
"/>
<@ms.hidden name="modelId" value="$
{
S
ession
.model_id_session
?
default
(
'
0
'
)}
" />
</@ms.form>
</@ms.panel>
</@
ms
.html5
>
<
script
>
//重写时间控件
$('#
articleDateTime
')
.daterangepicker
({
format:'YYYY-MM-DD HH:mm',
singleDatePicker: true,
showDropdowns: true,
timePickerIncrement: 1,
timePicker: true,
timePicker12Hour: true,
startDate: moment().hours(0).minutes(0).seconds(0),
showDropdowns: true,
showWeekNumbers: true,
});
$('#
articleDateTime
')
.on
('
apply
.daterangepicker
',
function(ev, picker)
{
$
(
'#
articleDateTime
'
)
.parents
(
"form:first"
)
.data
(
'
bootstrapValidator
'
)
.revalidateField
(
'
articleDateTime
'
)
;
}
);
var
articleBasicId=0;
$(
function
(){
//页面标题
var articleTitle="<#if categoryTitle?has_content>$
{
categoryTitle
}
</#if><#if article.basicId !=0><small>编辑文章</small><#else><small>添加文章</small></#if>";
$(".ms-weixin-content-body-title>span").html(articleTitle);
//隐藏跳转地址
$("input[name='articleUrl']").parent().hide();
//文章属性
var actionUrl="";
<#if article.basicId !=0>
actionUrl = "$
{
managerPath
}
/cms/article/$
{
article
.basicId
?
c
?
default
(
0
)}
/update.do";
var type="$
{
article
.articleType
?
default
(
''
)}
";
var articleType = new Array;
//文章属性
$("#articleForm input[name='checkbox']").each(function()
{
if
(
type
!=
""
){
articleType
=
type
.split
(
","
)
;
for
(
i
=
0
;
i
<
articleType
.length
;
i
++
){
if
(
$
(
this
)
.val
()
==
articleType
[
i
]
){
$
(
this
)
.attr
(
"checked"
,
'
true
'
)
;
}
}
}
}
);
articleBasicId=$
{
article
.basicId
?
c
?
default
(
0
)}
;
<#else>
actionUrl = "$
{
managerPath
}
/cms/article/save.do";
</#if>
//获取当前栏目的自定义模型
var url="$
{
managerPath
}
/mdiy/contentModel/contentModelField/"+$
{
categoryId
?
default
(
0
)}
+"/queryField.do";
var articleId="basicId="+$
{
article
.basicId
?
c
?
default
(
0
)}
;
$(this).request(
{
url
:
url
,
data
:
articleId
,
method
:
"get"
,
func
:
function
(
data
)
{
$
(
"#addFieldForm"
)
.html
(
data
)
;
}}
);
//显示跳转地址
$("input[name='checkbox']").click(function()
{
$
(
"input[name='checkbox']"
)
.each
(
function
(){
if
(
$
(
this
)
.val
()
==
'
j
'
){
if
(
$
(
this
)
.is
(
":checked"
)
){
$
(
"input[name='articleUrl']"
)
.parent
()
.show
()
;
}
else
{
$
(
"input[name='articleUrl']"
)
.parent
()
.hide
()
;
}
}
})
;
}
);
//更新或保存
$("#saveUpdate").click(function()
{
//禁用按钮
$
(
"#saveUpdate"
)
.attr
(
"disabled"
,
true
)
;
//获取按钮值
var
bottonText
=
$
(
"#saveUpdate"
)
.text
()
.trim
()
;
//设置按钮加载状态值
$
(
"#saveUpdate"
)
.attr
(
"data-loading-text"
,
bottonText
+
"中"
)
;
var
articleDateTimeValue
=
$
(
"#articleDateTime"
)
.val
()
+
":00"
;//让时间能精确到秒与后台对应
$
(
"#basicDateTime"
)
.val
(
articleDateTimeValue
)
;
//给
basicDateTime
字段赋值
//获取所有栏目属性被选中的值
var
typeJson
=
""
$
(
"#articleTypeField"
)
.find
(
"select"
)
.each
(
function
(
index
){
var
typeValue
=
0
;
if
(
$
(
this
)
.find
(
"option:selected"
)
.val
()
==
undefined
){
return
;
}
var
typeValue
=$
(
this
)
.find
(
"option:selected"
)
.val
()
;
if
(
$
(
"#articleTypeField"
)
.find
(
"select"
)
.length
==
index
){
typeJson
=
typeJson
+
"{bcCategoryId:
\"
"
+
typeValue
+
"
\"
,bcBasicId:'${article.basicId?default(0)}'}"
}
else
{
typeJson
=
typeJson
+
"{bcCategoryId:
\"
"
+
typeValue
+
"
\"
,bcBasicId:'${article.basicId?default(0)}'},"
}
})
$
(
"input[name=articleTypeJson]"
)
.val
(
"["
+
typeJson
+
"]"
)
;
var
basicCategoryId
=
""
;
<#
if
!
isEditCategory
><!--
如果不是单篇
-
->
basicCategoryId
=$
(
"input[name='basicCategoryId']"
)
.val
()
;
//多篇时的文章栏目
<#
else
>
basicCategoryId
=$
{
categoryId
}
;
//单篇时的文章栏目
</#
if
>
//文章所属栏目是数字且不能为
0
if
(
basicCategoryId
!=
0
&&
!
isNaN
(
basicCategoryId
)
){
//将表单序列化
var
saveArticle
=
$
(
"#articleForm"
)
.serialize
()
;
saveArticle
+=
"&basicCategoryId="
+
basicCategoryId
;
//文章属性
var
checkboxType
=
""
;
$
(
"input[name='checkbox']"
)
.each
(
function
(){
if
(
$
(
this
)
.is
(
":checked"
)){
checkboxType
+=$
(
this
)
.val
()
+
","
;
}
})
;
var
dataMsg
=
saveArticle
+
"&checkboxType="
+
checkboxType
;
var
seeMsg
=
""
;
<#
if
article
.basicId
!=
0
>
seeMsg
=
"更新中...."
;
<#
else
>
seeMsg
=
"保存中...."
;
</#
if
>
var
vobj
=
$
(
"#articleForm"
)
.data
(
'
bootstrapValidator
'
)
.validate
()
;
if
(
vobj
.isValid
()){
if
(
isNaN
(
$
(
"input[name=basicSort]"
)
.val
())){
<@
ms
.notify
msg
=
"自定义排序必须是数字"
type
=
"warning"
/>
$
(
"input[name=basicSort]"
)
.val
(
0
)
;
//启用按钮
$
(
"#saveUpdate"
)
.button
(
'
reset
'
)
;
return
;
}
$
(
this
)
.request
({
url
:
actionUrl
,
data
:
dataMsg
,
loadingText
:
seeMsg
,
method
:
"post"
,
type
:
"json"
,
func
:
function
(
obj
)
{
//执行加载状态
$
(
"#saveUpdate"
)
.button
(
'
loading
'
)
;
if
(
obj
.result
){
<#
if
article
.basicId
!=
0
>
<@
ms
.notify
msg
=
"更新文章成功"
type
=
"success"
/>
<#
else
>
<@
ms
.notify
msg
=
"保存文章成功"
type
=
"success"
/>
</#
if
>
var
columnType
=
$
{
columnType
?
default
(
0
)}
;
if
(
columnType
==
1
){
//更新并生成之后路径进行跳转
location
.href
=
managerPath
+
"/cms/article/${categoryId?default(0)}/main.do"
;
}
else
{
var
dataId
=
obj
.resultData
;
if
(
dataId
!=
""
){
location
.href
=
"${managerPath}/cms/article/"
+
dataId
+
"/edit.do"
;
}
}
;
$
(
"#saveUpdate"
)
.button
(
'
reset
'
)
;
}
else
{
$
(
'
.ms-notifications
'
)
.offset
({
top
:
43
})
.notify
({
type
:
'
warning
'
,
message
:
{
text
:
obj
.resultMsg
}
})
.show
()
;
}
}})
;
}
}
else
{
<@
ms
.notify
msg
=
"请选择文章所属栏目"
type
=
"warning"
/>
//启用按钮
$
(
"#saveUpdate"
)
.attr
(
"disabled"
,
false
)
;
}
//启用按钮
$
(
"#saveUpdate"
)
.button
(
'
reset
'
)
;
$
(
"#saveUpdate"
)
.attr
(
"disabled"
,
false
)
;
}
);
});
//选择栏目后查询自定义模型
function
clickZtreeId(event,treeId,treeNode)
{
if
(
treeNode
.columnType
==
2
){
<@
ms
.notify
msg
=
"不能选择单篇栏目"
/>
return
false
;
}
if
(
treeNode
.isParent
==
true
){
<@
ms
.notify
msg
=
"不能选择父级栏目"
/>
return
false
;
}
var
url
=
"${managerPath}/mdiy/contentModel/contentModelField/"
+
treeNode
.categoryId
+
"/queryField.do"
;
var
basicId
=
"basicId=${article.basicId?c?default(0)}"
;
$
(
this
)
.request
({
url
:
url
,
data
:
basicId
,
method
:
"get"
,
func
:
function
(
data
)
{
$
(
"#addFieldForm"
)
.html
(
""
)
;
$
(
"#addFieldForm"
)
.html
(
data
)
;
}})
;
}
</
script
>
\ No newline at end of file
src/main/webapp/WEB-INF/manager/cms/article/article_main.ftl
0 → 100644
View file @
d46aff17
<@
ms
.html5
>
<@ms.nav title="文章列表"></@ms.nav>
<@ms.searchForm name="searchForm" action="">
<#if articleTypeList?has_content>
<@ms.select label="文章属性" default="全部" value="a" name="articleType" id="forumSelect" list=articleTypeList listValue="dictLabel" listKey="dictValue" value="$
{
articleType
?
default
(
''
)}
"/>
<#else>
<@ms.select label="文章属性" name="articleType" id="forumSelect" value="" list=["默认属性"] />
</#if>
<@ms.text label="文章标题" name="basicTitle" value="" title="请输入文章标题" placeholder="请输入文章标题" />
<@ms.searchFormButton>
<@ms.queryButton id="submitSearch" />
</@ms.searchFormButton>
</@ms.searchForm>
<div id="toolbar">
<@ms.panelNavBtnGroup>
<@shiro.hasPermission name="article:save"><@ms.panelNavBtnAdd title=""/></@shiro.hasPermission>
<@shiro.hasPermission name="article:del"><@ms.panelNavBtnDel title=""/></@shiro.hasPermission>
</@ms.panelNavBtnGroup>
</div>
<@ms.panel>
<table id="articleListTable"
data-show-refresh="true"
data-show-columns="true"
data-show-export="true"
data-method="post"
data-detail-formatter="detailFormatter"
data-pagination="true"
data-page-size="10"
data-side-pagination="server">
</table>
</@ms.panel>
</@
ms
.html5
>
<!--删除限时文章-->
<@
ms
.modal
modalName="delete" title="删除文章">
<@ms.modalBody>
确定要删除所选的文章吗?
</@ms.modalBody>
<@ms.modalButton>
<@ms.button class="btn btn-danger rightDelete" value="确定"/>
</@ms.modalButton>
</@
ms
.modal
>
<
script
>
$(function()
{
var
search
=
$
(
"form[name='searchForm']"
)
.serializeJSON
()
;
var
articleType
=
search
.articleType
;
$
(
"#articleListTable"
)
.bootstrapTable
({
url
:
"${managerPath}/cms/article/${categoryId}/list.do?articleTypeStr="
+
articleType
,
contentType
:
"application/x-www-form-urlencoded"
,
queryParamsType
:
"undefined"
,
toolbar
:
"#toolbar"
,
columns
:
[
{
checkbox
:
true
},
{
field
:
'
column
.categoryTitle
'
,
title
:
'栏目名'
,
width
:
90
,
align
:
'
left
'
},{
field
:
'
basicTitle
'
,
title
:
'文章标题'
,
formatter
:
function
(
value
,
row
,
index
){
<@
shiro
.hasPermission
name
=
"article:update"
>
var
url
='$
{
managerPath
}
/
cms
/
article
/'+
row
.articleID
+
"/edit.do"
;
return
"<a href="
+
url
+
" target='_self' >"
+
value
+
"</a>"
;
</@
shiro
.hasPermission
>
<@
shiro
.lacksPermission
name
=
"article:update"
>
return
value
;
</@
shiro
.lacksPermission
>
}
},
{
field
:
'
articleAuthor
'
,
title
:
'作者'
,
width
:
100
},
{
field
:
'
basicSort
'
,
title
:
'排序'
,
align
:
'
center
'
,
width
:
50
},
{
field
:
'
basicHit
'
,
title
:
'点击'
,
align
:
'
center
'
,
width
:
50
},
{
field
:
'
basicDateTime
'
,
title
:
'发布时间'
,
align
:
'
center
'
,
width
:
150
}
]
})
;
//查询文章标题
$
(
"#submitSearch"
)
.click
(
function
(){
var
search
=
$
(
"form[name='searchForm']"
)
.serializeJSON
()
;
var
params
=
$
(
'#
articleListTable
'
)
.bootstrapTable
(
'
getOptions
'
)
;
params
.queryParams
=
function
(
params
)
{
$
.extend
(
params
,
search
)
;
return
params
;
}
$
(
"#articleListTable"
)
.bootstrapTable
(
'
refresh
'
,
{
query
:
$
(
"form[name='searchForm']"
)
.serializeJSON
()})
;
})
;
//添加文章
$
(
"#addButton"
)
.click
(
function
(){
if
(
$
{
isParent
}
==
true
){
<@
ms
.notify
msg
=
"不能选择父级栏目"
/>
return
false
;
}
location
.href
=
"${managerPath}/cms/article/add.do?categoryId=${categoryId?default(0)}&modelId=${Session.model_id_session?default(0)}&categoryTitle=${categoryTitle?default('')}"
;
})
;
//点击重置按钮
$
(
".reset"
)
.click
(
function
(){
$
(
"input[name=basicTitle]"
)
.val
(
""
)
;
})
//多选删除
$
(
"#delButton"
)
.click
(
function
(){
//获取勾选的所在行的所有数据
var
rows
=
$
(
"#articleListTable"
)
.bootstrapTable
(
"getSelections"
)
;
if
(
rows
!=
""
){
//弹出
modal
窗体
$
(
".delete"
)
.modal
()
;
}
else
{
<@
ms
.notify
msg
=
"请选择文章!"
type
=
"warning"
/>
}
})
;
//删除多个文章
$
(
".rightDelete"
)
.click
(
function
(){
var
rows
=
$
(
"#articleListTable"
)
.bootstrapTable
(
"getSelections"
)
;
if
(
rows
!=
""
){
$
.ajax
({
url
:
"${managerPath}/cms/article/delete.do"
,
type
:
'
post
'
,
dataType
:
'
json
'
,
data
:
JSON
.stringify
(
rows
),
contentType
:
'
application
/
json
'
,
success
:
function
(
msg
)
{
if
(
msg
.result
)
{
<@
ms
.notify
msg
=
"删除成功!"
type
=
"success"
/>
location
.reload
()
;
}
else
{
<@
ms
.notify
msg
=
"删除失败"
type
=
"fail"
/>
}
}
})
;
}
else
{
<@
ms
.notify
msg
=
"请选择文章!"
type
=
"warning"
/>
}
})
;
}
);
</
script
>
src/main/webapp/WEB-INF/manager/cms/article/index.ftl
0 → 100644
View file @
d46aff17
This diff is collapsed.
Click to expand it.
src/main/webapp/WEB-INF/manager/cms/column/shiro-button.ftl
0 → 100644
View file @
d46aff17
<@
shiro
.hasPermission
name="cms:column:save"><@ms.addButton id="addColumnBtn"/></@shiro.hasPermission>
<@
shiro
.hasPermission
name="cms:column:del"><@ms.delButton id="delColumnBtn"/></@shiro.hasPermission>
\ No newline at end of file
src/main/webapp/WEB-INF/manager/cms/column/shiro-update.ftl
0 → 100644
View file @
d46aff17
<@
shiro
.hasPermission
name="cms:column:update">
var
url = "$
{
managerPath
}
/$
{
model
?
default
(
""
)}
/column/"+row.categoryId+"/edit.do?modelId=$
{
S
ession
.model_id_session
?
default
(
0
)}
&modelTitle=$
{
S
ession
.model_title_session
?
default
(
''
)}
";
return
"<a href=" +url+ " target='_self'>" + value + "</a>";
</@
shiro
.hasPermission
>
<@
shiro
.lacksPermission
name="cms:column:update">
return
value;
</@
shiro
.lacksPermission
>
\ No newline at end of file
src/main/webapp/WEB-INF/manager/cms/generate/index.ftl
0 → 100644
View file @
d46aff17
This diff is collapsed.
Click to expand it.
src/main/webapp/WEB-INF/manager/main.ftl
0 → 100644
View file @
d46aff17
<!--主界面-->
<!
DOCTYPE
html>
<
html
lang="en">
<
head
>
<title>铭飞CMS</title>
<meta content="IE=edge" http-equiv="X-UA-Compatible" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<
style
>
body
{
height: 100%;
}
</
style
>
</
head
>
<
body
>
<
div
style="
text-align: center;
color: #555;
background: #FCFCFC;
height: 300px;
padding-top: 200px;
vertical-align: middle;
"><
h2
>欢迎使用铭飞产品</
h2
><
p
>技术交流加群:①242805203
②231212174(满) ③221335098(满) 或到<a href="http://ms.mingsoft.net/mbbs/main.do" target="_blank" style="
text-decoration: none;
">官方论坛进行技术交流</
a
></
p
></
div
>
</
body
>
</
html
>
\ No newline at end of file
Prev
1
2
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment