ms-dev 6 年 前
コミット
db3015e708

ファイルの差分が大きいため隠しています
+ 402 - 0
doc/db-mcms-mysql-4.6.5.sql


ファイルの差分が大きいため隠しています
+ 606 - 0
doc/db-mcms-oracle-4.6.5.sql


ファイルの差分が大きいため隠しています
+ 1441 - 0
doc/db-mcms-sqlserver-4.6.5.sql


BIN
doc/历史/文章类图-0.0.1.asta


BIN
doc/文章类图-0.0.2.asta


BIN
doc/文章类图-0.0.3.asta


+ 1 - 13
pom.xml

@@ -31,12 +31,7 @@
 			<classifier>classes</classifier>
 			<scope>provided</scope>
 		</dependency>
-		<dependency>
-			<groupId>net.mingsoft</groupId>
-			<artifactId>ms-mdiy</artifactId>
-			<version>1.0.7-SNAPSHOT</version>
-			<type>war</type>
-		</dependency>
+
 		<dependency>
 			<groupId>net.mingsoft</groupId>
 			<artifactId>ms-mdiy</artifactId>
@@ -48,12 +43,6 @@
 			<groupId>net.mingsoft</groupId>
 			<artifactId>ms-mpeople</artifactId>
 			<version>1.0.7-SNAPSHOT</version>
-			<type>war</type>
-		</dependency>
-		<dependency>
-			<groupId>net.mingsoft</groupId>
-			<artifactId>ms-mpeople</artifactId>
-			<version>1.0.7-SNAPSHOT</version>
 			<classifier>classes</classifier>
 			<scope>provided</scope>
 		</dependency>
@@ -120,7 +109,6 @@
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-war-plugin</artifactId>
 				<configuration>
-					<packagingExcludes>ms.install,html/,static/,temp,upgrader,WEB-INF/web.xml,WEB-INF/lib/,templets/,upload/,WEB-INF/classes/*.xml,WEB-INF/classes/*.properties,*.sh</packagingExcludes>
 					<failOnMissingWebXml>false</failOnMissingWebXml>
 				</configuration>
 			</plugin><!-- 打包成war使用 -->

+ 0 - 27
src/main/java/net/mingsoft/Test.java

@@ -1,27 +0,0 @@
-package net.mingsoft;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import net.mingsoft.basic.action.BaseAction;
-
-@Controller
-@RequestMapping("/")
-public class  Test {
-
-
-	/**
-	 * 加载管理员登录界面
-	 * 
-	 * @param request
-	 *            请求对象
-	 * @return 管理员登录界面地址
-	 */
-	@SuppressWarnings("resource")
-	@RequestMapping("/a")
-	public String login(HttpServletRequest request) {
-		return "/login";
-	}
-}

+ 1 - 1
src/main/resources/application-dev.yml

@@ -1,6 +1,6 @@
 spring:
   datasource:
-    url: jdbc:mysql://127.0.0.1:3306/db-mcms-4-6-1?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false
+    url: jdbc:mysql://localhost:3306/db-mcms-open?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false
     username: root
     password: root
     filters: wall,mergeStat

BIN
src/main/webapp/WEB-INF/lib/ojdbc14-10.2.0.4.0.jar


+ 231 - 0
src/main/webapp/WEB-INF/manager/cms/article/article_form.ftl

@@ -0,0 +1,231 @@
+<@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/${autoCURD}.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="article" uploadFloderPath="${articleImagesUrl?default('')}" 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="${Session.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}&nbsp;</#if><#if article.basicId !=0><small>编辑文章</small><#else><small>添加文章</small></#if>";
+	$(".ms-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:"post",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:"post",func:function(data) {
+		$("#addFieldForm").html("");
+		$("#addFieldForm").html(data);
+	}});
+} 
+</script>

+ 163 - 0
src/main/webapp/WEB-INF/manager/cms/article/article_main.ftl

@@ -0,0 +1,163 @@
+<@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: 90
+	    }]
+	});
+	//查询文章标题
+	$("#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>
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 57 - 0
src/main/webapp/WEB-INF/manager/cms/article/index.ftl

@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html lang="zh">
+ <head>
+<#include "/include/macro.ftl"/>
+<#include "/include/meta.ftl"/>
+</head>
+<body class="over-hide">
+<@ms.content>
+ 	<@ms.contentMenu>
+		 <!-- 树形模块菜单开始 -->
+		<#if listColumn?has_content>
+				<@ms.tree  treeId="inputTree" json="${listColumn?default('')}" addNodesName="全部"  jsonId="categoryId" jsonPid="categoryCategoryId" jsonName="categoryTitle"   showIcon="true" expandAll="true" getZtreeId="getZtreeId(event,treeId,treeNode);" />
+			<#else> 
+				<@ms.nodata content="暂无栏目"/>
+		</#if>
+		<!-- 树形模块菜单结束 -->
+	</@ms.contentMenu>
+	<@ms.contentBody width="85%" style="overflow-y: hidden;">
+		<@ms.contentPanel  style="margin:0;padding:0;overflow-y: hidden;">
+		<iframe src="${managerPath}/cms/article/0/main.do" style="width:100%;maring:0;padding:0;border:none;height:100%;background-image: url(${skin_manager_loadding});  background-repeat: no-repeat;  background-position: center;" id="listFrame" target="listFrame" ></iframe>
+		</@ms.contentPanel>
+	</@ms.contentBody>
+</@ms.content>
+<script>
+
+//树形结点
+function getZtreeId(event,treeId,treeNode){
+	if (treeNode.columnType==1) {
+		//父级栏目为true,子级栏目为false
+		var isParent = false;
+		if(treeNode.isParent == true){
+			 isParent = true;
+		}
+		$("#listFrame").attr("src","${managerPath}/cms/article/"+treeNode.categoryId+"/main.do?isParent="+isParent+"&categoryTitle="+encodeURIComponent(treeNode.categoryTitle));
+	} else if(treeNode.columnType==2){
+		//判断该单篇栏目是否存在文章
+		$.ajax({ 
+			type: "POST", 
+			url: "${managerPath}/cms/article/"+treeNode.categoryId+"/queryColumnArticle.do",
+			dataType:"json",
+			success: function(msg){
+				if (msg.result) {
+					$("#listFrame").attr("src","${managerPath}/cms/article/add.do?categoryId="+treeNode.categoryId+"&categoryTitle="+encodeURIComponent(treeNode.categoryTitle));
+				} else {
+					//如果该单篇栏目下存在文章则跳转到文章编辑页
+					$("#listFrame").attr("src","${managerPath}/cms/article/"+treeNode.categoryId+"/edit.do?categoryId="+treeNode.categoryId+"&categoryTitle="+encodeURIComponent(treeNode.categoryTitle));
+				}
+			},
+		});
+	} else if(treeNode.columnType=="" || treeNode.columnType == undefined){
+		$("#listFrame").attr("src","${managerPath}/cms/article/0/main.do"); 
+	}
+	
+}
+</script>
+</body>
+</html>

+ 2 - 0
src/main/webapp/WEB-INF/manager/cms/column/shiro-button.ftl

@@ -0,0 +1,2 @@
+<@shiro.hasPermission name="cms:column:save"><@ms.addButton id="addColumnBtn"/></@shiro.hasPermission>
+<@shiro.hasPermission name="cms:column:del"><@ms.delButton id="delColumnBtn"/></@shiro.hasPermission>

+ 7 - 0
src/main/webapp/WEB-INF/manager/cms/column/shiro-update.ftl

@@ -0,0 +1,7 @@
+<@shiro.hasPermission name="cms:column:update">
+var url = "${managerPath}/${model?default("")}/column/"+row.categoryId+"/edit.do?modelId=${Session.model_id_session?default(0)}&modelTitle=${Session.model_title_session?default('')}";
+return "<a href=" +url+ " target='_self'>" + value + "</a>";
+</@shiro.hasPermission>
+<@shiro.lacksPermission name="cms:column:update">
+return value;
+</@shiro.lacksPermission> 

+ 161 - 0
src/main/webapp/WEB-INF/manager/cms/generate/index.ftl

@@ -0,0 +1,161 @@
+<@ms.html5>
+	<@ms.nav title="静态化"></@ms.nav>
+	<@ms.panel>
+		<p class="alert alert-info" role="alert">
+			<span class="glyphicon glyphicon-pushpin text-lef "></span>
+			<a class="alert-link text-lef" style="margin-left: 12px;">
+        		更新主页,如果系统存在引导页面可以手动修改主页位置文件名,default.html引导页面index.html主页。
+			</a><br/>
+			<span class="glyphicon glyphicon-pushpin text-lef "></span>
+			<a class="alert-link text-lef" style="margin-left: 12px;">
+        		更新栏目列表,推荐使用指定栏目更新。系统提示“更新中...”请不要刷新页面或点击其他菜单。
+			</a><br/>
+			<span class="glyphicon glyphicon-pushpin text-lef "></span>
+			<a class="alert-link text-lef" style="margin-left: 12px;">
+            	根据时间与栏目类型生成文章
+			</a>
+		</p>		
+		<@ms.form name="generateIndex">
+			<@ms.formRow label="选择主页模板" width="300">
+					<select class="form-control" id="select_id"></select>
+					<input type="hidden" name="url"/>				
+			</@ms.formRow>
+			<@ms.text  id="position" label="选择主页位置	" width="300" value="index" placeholder="输入主页位置" name="position"  help="注:主页位置htm文件名一般为index.html或default.html"/>
+			<div class="form-group ms-form-group"><div class="col-sm-2"></div><div class="col-sm-9 ms-from-group-input ms-form-input">
+			<@shiro.hasPermission name="cms:generate:index">	  
+				<@ms.button class="btn btn-primary" id="updateIndex" value="生成主页" /> 	
+				<@ms.panelNavBtnSave title="" id="viewIndex" value="预览主页" />
+			</@shiro.hasPermission>
+			</div>
+			</div>
+		</@ms.form>
+		<!--选择更新的栏目-->
+		<@ms.form name="generateColumn">
+			<@ms.formRow label="选择要生成栏目" width="300">
+					<#if list?has_content>
+						<@ms.treeInput treeId="inputTree" json="${list?default('')}" jsonId="categoryId" jsonPid="categoryCategoryId" jsonName="categoryTitle" buttonText="选择更新的栏目" addNodesName="所有栏目" inputName="columnId" showIcon="true" expandAll="true" />
+					<#else>
+						<@ms.treeInput treeId="errorTree" buttonText="暂无数据" />
+					</#if>
+			</@ms.formRow>
+			<div class="form-group ms-form-group"><div class="col-sm-2"></div><div class="col-sm-9 ms-from-group-input ms-form-input">
+			<@shiro.hasPermission name="cms:generate:column">
+				<@ms.button class="btn btn-primary" id="updateColumn" value="生成栏目" />
+			</@shiro.hasPermission>
+			</div></div>
+		</@ms.form>
+		<@ms.form name="generateArticle">
+			<@ms.formRow label="文章栏目" width="300">
+        			<#if list?has_content>
+						<@ms.treeInput  treeId="inputTreee" json="${list?default('')}" jsonId="categoryId" jsonPid="categoryCategoryId" jsonName="categoryTitle" addNodesName="所有栏目" buttonText="选择更新的栏目" inputName="articleId"  showIcon="true" expandAll="true" />
+    				<#else> 
+						<@ms.treeInput  treeId="errorTree"  buttonText="暂无数据" />
+    				</#if>	
+    		</@ms.formRow>
+            <@ms.date name="dateTime" label="指定时间" single=true readonly="readonly" width="300" value="${now?string('yyyy-MM-dd')}" validation={"required":"true", "data-bv-notempty-message":"必填项目"} placeholder="点击该框选择时间段"  />
+			<div class="form-group ms-form-group"><div class="col-sm-2"></div><div class="col-sm-9 ms-from-group-input ms-form-input">
+			<@shiro.hasPermission name="cms:generate:article">
+				<@ms.button class="btn btn-primary" id="updateArticle" value="生成文章" />
+			</@shiro.hasPermission>
+			</div></div>
+		</@ms.form>	
+	</@ms.panel>
+</@ms.html5>	
+
+<!--点击进行按钮提交-->
+<script>
+	$(function(){
+		var URL="${managerPath}/template/queryTemplateFileForColumn.do";
+		var DATA = "";
+		$(this).request({url:URL,data:DATA,type:"json",method:"get",func:function(msg) {
+			if(msg.length==0){
+				$("#select_id").append("<option value='' >暂无文件</option>")
+			}
+			for(var i = 0;i<msg.length;i++){
+				$("#select_id").append("<option value="+msg[i]+">"+msg[i]+"</option>");
+				//如果存在index.html
+				if(msg[i]=="index.html" || msg[i]=="index.htm"){
+					$("#select_id").find("option[value='"+msg[i]+"']").attr("selected",true);
+				}
+			}
+		}});
+	})
+	
+	//点击一键更新主页时,进行主页更新
+	$("#updateIndex").click(function(){
+		//选择的主页模板名称和主页位置
+		var url = $("#select_id").val();
+		var position =$("input[name='position']").val();
+		//封装ajax请求参数
+		var URL="${managerPath}/cms/generate//generateIndex.do";
+		var DATA = "url="+url+"&position="+position;
+		$(this).html("更新中..").attr("disabled", "disabled");
+		$(this).request({url:URL,data:DATA,type:"json",method:"post",func:function(msg) {
+			$("#updateIndex").html("更新主页").removeAttr("disabled");
+			if(msg.result){
+				<@ms.notify msg="更新成功" type="success"/>
+			}else{
+				$('.ms-notifications').offset({top:43}).notify({
+			    	type:'warning',
+			    	message: { text:msg.resultMsg }
+			 	}).show();
+			}
+			$("#updateIndex").html("更新主页")
+		}});
+	});
+	//点击预览时,进行预览
+	$("#viewIndex").click(function(){
+		var position =$("input[name='position']").val();
+		window.open("${managerPath}/cms/generate/"+position+"/viewIndex.do");
+	});
+</script>
+
+<!--点击生成栏目按钮-->
+<script>
+	$("#updateColumn").click(function() {
+		var columnId = 0;
+		if($("input[name='columnId']").val() !="" && $("input[name='columnId']").val().length>0){
+			columnId = $("input[name='columnId']").val();
+		}
+		var URL="${managerPath}/cms/generate/"+columnId+"/genernateColumn.do";
+		$(this).html("更新中..").attr("disabled", "disabled");
+		$(this).request({url:URL,data:columnId,type:"json",method:"post",func:function(msg) {
+			$("#updateColumn").html("更新栏目").removeAttr("disabled");
+			//回调处理方式
+			if(msg.result){
+				<@ms.notify msg="更新成功" type="success"/>
+			}else{
+				$('.ms-notifications').offset({top:43}).notify({
+			    	type:'warning',
+			    	message: { text:msg.resultMsg }
+			 	}).show();
+			}
+		}});
+	});
+</script>
+
+<!--点击生成文章按钮-->
+<script>
+	$("#updateArticle").click(function() {
+		var articleId = 0;
+		if($("input[name='articleId']").val() !="" ){
+			articleId = $("input[name='articleId']").val();
+		}
+		var URL="${managerPath}/cms/generate/" + articleId + "/generateArticle.do";
+		var DATA = "dateTime=" + $("input[name='dateTime']").val();
+		$(this).html("更新中..").attr("disabled", "disabled");
+		
+		$(this).request({url:URL,data:DATA,type:"json",method:"post",func:function(msg) {
+			$("#updateArticle").html("更新文档").removeAttr("disabled");
+			//回调处理方式
+			if(msg.result){
+				<@ms.notify msg="更新成功" type="success"/>
+			}else{
+				$('.ms-notifications').offset({top:43}).notify({
+			    	type:'warning',
+			    	message: { text:msg.resultMsg }
+			 	}).show();
+			}
+		}});
+	});
+</script>

+ 25 - 0
src/main/webapp/WEB-INF/manager/main.ftl

@@ -0,0 +1,25 @@
+<!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>欢迎进入MS系统</h2><p>欢迎加群: ①231212174 ②221335098 或到<a href="http://ms.mingsoft.net/mbbs/main.do" target="_blank"  style="
+    text-decoration: none;
+">官方论坛进行技术交流</a></p></div>
+</body>
+</html>

+ 1 - 0
src/main/webapp/WEB-INF/ms.install

@@ -0,0 +1 @@
+1

+ 130 - 0
src/main/webapp/WEB-INF/web.xml

@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+	id="WebApp_ID" version="3.0">
+	<display-name>mybatis</display-name>
+	<context-param>
+		<param-name>contextConfigLocation</param-name>
+		<param-value>classpath:spring-core.xml</param-value>
+	</context-param>
+	<filter>
+		<description>字符集过滤器</description>
+		<filter-name>encodingFilter</filter-name>
+		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
+		<init-param>
+			<description>字符集编码</description>
+			<param-name>encoding</param-name>
+			<param-value>UTF-8</param-value>
+		</init-param>
+	</filter>
+	<filter-mapping>
+		<filter-name>encodingFilter</filter-name>
+		<url-pattern>/*</url-pattern>
+	</filter-mapping>
+	<!-- Apache Shiro -->
+	<filter>
+		<filter-name>shiroFilter</filter-name>
+		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
+		<init-param>
+			<param-name>targetFilterLifecycle</param-name>
+			<param-value>true</param-value>
+		</init-param>
+	</filter>
+	<filter-mapping>
+		<filter-name>shiroFilter</filter-name>
+		<url-pattern>/*</url-pattern>
+	</filter-mapping>
+	
+	<listener>
+	 <listener-class>
+	  org.springframework.web.context.request.RequestContextListener
+	 </listener-class>
+	</listener>
+		<!-- 防止spring内存溢出监听器 -->
+	<listener>
+		<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
+	</listener>
+	<listener>
+		<description>spring监听器</description>
+		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+	</listener>
+	<!-- spring mvc servlet -->
+	<servlet>
+		<description>spring mvc servlet</description>
+		<servlet-name>springMvc</servlet-name>
+		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+		<init-param>
+			<description>spring mvc 配置文件</description>
+			<param-name>contextConfigLocation</param-name>
+			<param-value>classpath:spring-mvc.xml</param-value>
+		</init-param>
+		<load-on-startup>1</load-on-startup>
+	</servlet>
+	<servlet-mapping>
+		<servlet-name>springMvc</servlet-name>
+		<url-pattern>*.do</url-pattern>
+	</servlet-mapping>
+	<!-- Druid,监控数据库,以及WEB访问连接信息 -->
+	<!-- 参考: https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_%E9%85%8D%E7%BD%AEWebStatFilter -->
+	<filter>
+		<filter-name>DruidWebStatFilter</filter-name>
+		<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
+		<init-param>
+			<param-name>exclusions</param-name>
+			<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,*.jsp,/druid/*,/download/*</param-value>
+		</init-param>
+		<init-param>
+			<param-name>sessionStatMaxCount</param-name>
+			<param-value>2000</param-value>
+		</init-param>
+		<init-param>
+			<param-name>sessionStatEnable</param-name>
+			<param-value>true</param-value>
+		</init-param>
+		<init-param>
+			<param-name>principalSessionName</param-name>
+			<param-value>session_user_key</param-value>
+		</init-param>
+		<init-param>
+			<param-name>profileEnable</param-name>
+			<param-value>true</param-value>
+		</init-param>
+	</filter>
+	<filter-mapping>
+		<filter-name>DruidWebStatFilter</filter-name>
+		<url-pattern>/*</url-pattern>
+	</filter-mapping>
+	<welcome-file-list>
+		<welcome-file>index</welcome-file>
+		<welcome-file>default.html</welcome-file>
+		<welcome-file>default.htm</welcome-file>
+		<welcome-file>index.htm</welcome-file>
+		<welcome-file>index.html</welcome-file>
+		<welcome-file>login.do</welcome-file>
+	</welcome-file-list>
+	<!-- 配置session超时时间,单位分钟 -->
+	<error-page>
+		<error-code>404</error-code>
+		<location>/error/404.do</location>
+	</error-page>
+	<error-page>
+		<error-code>400</error-code>
+		<location>/error/400.do</location>
+	</error-page>
+	<error-page>
+		<error-code>403</error-code>
+		<location>/error/403.do</location>
+	</error-page>
+	<error-page>
+		<error-code>405</error-code>
+		<location>/error/405.do</location>
+	</error-page>
+	<error-page>
+		<error-code>500</error-code>
+		<location>/error/500.do</location>
+	</error-page>
+	<session-config>
+		<session-timeout>15</session-timeout>
+	</session-config>
+</web-app>

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません