sgjj 6 lat temu
rodzic
commit
818f555288
26 zmienionych plików z 1182 dodań i 313 usunięć
  1. 9 15
      pom.xml
  2. 34 14
      src/main/java/net/mingsoft/cms/action/ColumnAction.java
  3. 11 0
      src/main/java/net/mingsoft/cms/action/GeneraterAction.java
  4. 76 9
      src/main/java/net/mingsoft/cms/action/web/MCmsAction.java
  5. 72 63
      src/main/java/net/mingsoft/cms/biz/IArticleBiz.java
  6. 23 18
      src/main/java/net/mingsoft/cms/biz/impl/ArticleBizImpl.java
  7. 71 69
      src/main/java/net/mingsoft/cms/dao/IArticleDao.java
  8. 64 60
      src/main/java/net/mingsoft/cms/dao/IArticleDao.xml
  9. 5 4
      src/main/java/net/mingsoft/cms/resources/resources_zh_CN.properties
  10. 31 20
      src/main/java/net/mingsoft/config/WebConfig.java
  11. 1 1
      src/main/resources/application.yml
  12. 1 1
      src/main/webapp/WEB-INF/manager/cms/article/article_main.ftl
  13. 164 0
      src/main/webapp/WEB-INF/manager/login.ftl
  14. 593 13
      src/main/webapp/WEB-INF/manager/main.ftl
  15. 1 1
      src/main/webapp/templets/1/default/about.htm
  16. 1 1
      src/main/webapp/templets/1/default/advice.htm
  17. 1 1
      src/main/webapp/templets/1/default/case-list.htm
  18. 1 0
      src/main/webapp/templets/1/default/head-file.htm
  19. 3 3
      src/main/webapp/templets/1/default/m/about.htm
  20. 3 3
      src/main/webapp/templets/1/default/m/advice.htm
  21. 3 3
      src/main/webapp/templets/1/default/m/case-list.htm
  22. 3 3
      src/main/webapp/templets/1/default/m/contact.htm
  23. 3 3
      src/main/webapp/templets/1/default/m/news-list.htm
  24. 3 3
      src/main/webapp/templets/1/default/m/news-show.htm
  25. 1 1
      src/main/webapp/templets/1/default/news-show.htm
  26. 4 4
      src/main/webapp/templets/1/default/search.htm

+ 9 - 15
pom.xml

@@ -3,10 +3,9 @@
 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
-
 	<groupId>net.mingsoft</groupId>
 	<artifactId>mcms</artifactId>
-	<version>4.7.0-SNAPSHOT</version>
+	<version>4.7.1</version>
 	<name>ms-mcms</name>
 	<properties>
 		<java.version>1.8</java.version>
@@ -38,24 +37,19 @@
 	<dependencies>
 		<dependency>
 			<groupId>net.mingsoft</groupId>
-			<artifactId>ms-mpeople</artifactId>
-			<version>1.0.7</version>
+			<artifactId>ms-basic</artifactId>
+			<version>1.0.11</version>
 		</dependency>
 		<dependency>
 			<groupId>net.mingsoft</groupId>
-			<artifactId>ms-upgrader</artifactId>
-			<version>1.0.5-SNAPSHOT</version>
-		</dependency>
-		<dependency>
-			<groupId>javax.servlet</groupId>
-			<artifactId>javax.servlet-api</artifactId>
-			<version>3.1.0</version>
-			<scope>test</scope>
+			<artifactId>ms-mpeople</artifactId>
+			<version>1.0.8</version>
 		</dependency>
+		<!-- 此部分是铭飞平台MStroe的客户端(MStore不在铭飞开源产品范围),如果不需要使用MStore可以删除掉 -->
 		<dependency>
-			<groupId>org.apache.tomcat.embed</groupId>
-			<artifactId>tomcat-embed-jasper</artifactId>
-			<version>9.0.16</version>
+			<groupId>net.mingsoft</groupId>
+			<artifactId>ms-upgrader</artifactId>
+			<version>1.0.8</version>
 		</dependency>
 	</dependencies>
 	<build>

+ 34 - 14
src/main/java/net/mingsoft/cms/action/ColumnAction.java

@@ -9,6 +9,8 @@ import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import net.mingsoft.basic.util.ArrysUtil;
+import net.mingsoft.mdiy.util.DictUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -41,7 +43,7 @@ import net.mingsoft.mdiy.util.ParserUtil;
 /**
  * 铭飞MS平台,通用栏目分类,为了区分文章栏目与其他栏目的权限,该类是从basic模块复制过来
  * @author 铭飞开发团队
- * @version 
+ * @version
  * 版本号:100-000-000<br/>
  * 创建日期:2017年8月9日<br/>
  * 历史修订:<br/>
@@ -49,8 +51,8 @@ import net.mingsoft.mdiy.util.ParserUtil;
 @Controller("articleColumnAction")
 @RequestMapping("/${ms.manager.path}/cms/column")
 public class ColumnAction extends BaseAction{
-	
-	
+
+
 	/**
 	 * 栏目业务层
 	 */
@@ -58,7 +60,7 @@ public class ColumnAction extends BaseAction{
 	private IColumnBiz columnBiz;
 	@Autowired
 	private ICategoryBiz categoryBiz;
-	
+
 	/**
 	 * 模块业务层注入
 	 */
@@ -75,7 +77,7 @@ public class ColumnAction extends BaseAction{
 	}
 	/**
 	 * 栏目添加跳转页面
-	 * 
+	 *
 	 * @return
 	 */
 	@RequestMapping("/add")
@@ -84,6 +86,8 @@ public class ColumnAction extends BaseAction{
 		int appId =BasicUtil.getAppId();
 		List<ColumnEntity> list = columnBiz.queryAll(appId, BasicUtil.getModelCodeId(net.mingsoft.cms.constant.ModelCode.CMS_COLUMN.toString()));
 		ColumnEntity columnSuper = new ColumnEntity();
+		// 栏目属性
+		model.addAttribute("columnFlag", DictUtil.list("栏目属性"));
 		model.addAttribute("appId",appId);
 		model.addAttribute("columnSuper", columnSuper);
 		model.addAttribute("column",new ColumnEntity());
@@ -114,7 +118,7 @@ public class ColumnAction extends BaseAction{
 			this.outJson( response, ModelCode.COLUMN, false, getResString("err.empty", this.getResString("columnType")));
 			return false;
 		}
-		
+
 		return true;
 	}
 
@@ -154,9 +158,9 @@ public class ColumnAction extends BaseAction{
 		columnBiz.updateEntity(column);
 		//生成文件夹
 		File fileName = new File(file);
-        fileName.mkdir();
+		fileName.mkdir();
 	}
-	
+
 	/**
 	 * @param column 栏目表实体
 	 * <i>column参数包含字段信息参考:</i><br/>
@@ -180,7 +184,7 @@ public class ColumnAction extends BaseAction{
 		};
 		this.outJson(response, true);
 	}
-		
+
 	/**
 	 * 栏目更新页面跳转
 	 * @param columnId 栏目ID
@@ -199,6 +203,8 @@ public class ColumnAction extends BaseAction{
 		list = columnBiz.queryAll(appId, BasicUtil.getModelCodeId(net.mingsoft.cms.constant.ModelCode.CMS_COLUMN.toString()));
 		//查询当前栏目实体
 		ColumnEntity column = (ColumnEntity) columnBiz.getEntity(columnId);
+		// 栏目属性
+		model.addAttribute("columnFlag", DictUtil.list("栏目属性"));
 		model.addAttribute("appId",appId);
 		model.addAttribute("column", column);
 		model.addAttribute("columnc", column.getCategoryId());
@@ -212,7 +218,7 @@ public class ColumnAction extends BaseAction{
 		model.addAttribute("model", "cms");
 		return "/basic/column/form";
 	}
-	
+
 	/**
 	 * 栏目首页面列表显示
 	 */
@@ -227,10 +233,10 @@ public class ColumnAction extends BaseAction{
 		EUListBean _list = new EUListBean(list, list.size());
 		this.outJson(response, net.mingsoft.base.util.JSONArray.toJSONString(_list));
 	}
-	
+
 	/**
 	 * 栏目添加
-	 * 
+	 *
 	 * @param column
 	 *            栏目对象
 	 * @return 返回页面跳转
@@ -245,6 +251,13 @@ public class ColumnAction extends BaseAction{
 		column.setCategoryManagerId(getManagerBySession(request).getManagerId());
 		column.setCategoryDateTime(new Timestamp(System.currentTimeMillis()));
 		column.setCategoryModelId(BasicUtil.getModelCodeId(net.mingsoft.cms.constant.ModelCode.CMS_COLUMN.toString()));
+		String checkboxType = BasicUtil.getString("checkboxType");
+		//如果选择一个属性不做排序操作
+		if(!StringUtils.isEmpty(checkboxType) && checkboxType.length()>2){
+			column.setColumnFlag(ArrysUtil.sort(checkboxType, ",")+",");
+		}else{
+			column.setColumnFlag(checkboxType);
+		}
 		if(column.getColumnType()==ColumnEntity.ColumnTypeEnum.COLUMN_TYPE_COVER.toInt()){
 			column.setColumnListUrl(null);
 		}
@@ -252,7 +265,7 @@ public class ColumnAction extends BaseAction{
 		this.columnPath(request,column);
 		this.outJson(response, ModelCode.COLUMN, true,null,JSONArray.toJSONString(column.getCategoryId()));
 	}
-	
+
 	/**
 	 * 更新栏目
 	 * @param column 栏目实体
@@ -274,6 +287,13 @@ public class ColumnAction extends BaseAction{
 		}
 		column.setCategoryManagerId(getManagerBySession(request).getManagerId());
 		column.setAppId(websiteId);
+		String checkboxType = BasicUtil.getString("checkboxType");
+		//如果选择一个属性不做排序操作
+		if(!StringUtils.isEmpty(checkboxType) && checkboxType.length()>2){
+			column.setColumnFlag(ArrysUtil.sort(checkboxType, ",")+",");
+		}else{
+			column.setColumnFlag(checkboxType);
+		}
 		columnBiz.updateCategory(column);
 		this.columnPath(request,column);
 		//查询当前栏目是否有子栏目,
@@ -291,4 +311,4 @@ public class ColumnAction extends BaseAction{
 		}
 		this.outJson(response, ModelCode.COLUMN, true,null,JSONArray.toJSONString(column.getCategoryId()));
 	}
-}
+}

+ 11 - 0
src/main/java/net/mingsoft/cms/action/GeneraterAction.java

@@ -30,6 +30,8 @@ import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.bean.copier.CopyOptions;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -194,8 +196,17 @@ public class GeneraterAction extends BaseAction {
 					CmsParserUtil.generateList(column, articleIdList.size());
 					break;
 				case ColumnEntity.COLUMN_TYPE_COVER:// 单页
+					if(articleIdList.size()==0){
+						ColumnArticleIdBean columnArticleIdBean=new ColumnArticleIdBean();
+						CopyOptions copyOptions=CopyOptions.create();
+						copyOptions.setIgnoreError(true);
+						BeanUtil.copyProperties(column,columnArticleIdBean,copyOptions);
+						articleIdList.add(columnArticleIdBean);
+					}
 					CmsParserUtil.generateBasic(articleIdList);
 					break;
+					default:
+						throw new IllegalStateException("Unexpected value: " + column.getColumnType());
 				}
 			}
 		} catch (IOException e) {

+ 76 - 9
src/main/java/net/mingsoft/cms/action/web/MCmsAction.java

@@ -1,5 +1,5 @@
 /**
-The MIT License (MIT) * Copyright (c) 2016 铭飞科技(mingsoft.net)
+ The MIT License (MIT) * Copyright (c) 2016 铭飞科技(mingsoft.net)
 
  * Permission is hereby granted, free of charge, to any person obtaining a copy of
  * this software and associated documentation files (the "Software"), to deal in
@@ -21,13 +21,23 @@ The MIT License (MIT) * Copyright (c) 2016 铭飞科技(mingsoft.net)
 
 package net.mingsoft.cms.action.web;
 
+import java.io.File;
 import java.io.IOException;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import cn.hutool.core.io.FileUtil;
+import com.github.pagehelper.PageHelper;
+import net.mingsoft.base.constant.Const;
+import net.mingsoft.basic.util.SpringUtil;
+import net.mingsoft.cms.constant.e.ColumnTypeEnum;
+import net.mingsoft.mdiy.biz.IContentModelBiz;
+import net.mingsoft.mdiy.entity.ContentModelEntity;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.ExceptionHandler;
@@ -54,13 +64,13 @@ import net.mingsoft.mdiy.util.ParserUtil;
 
 /**
  * 动态生成页面,需要后台配置自定义页数据
- * 
+ *
  * @author 铭飞开源团队
  * @date 2018年12月17日
  */
 @Controller("dynamicPageAction")
 @RequestMapping("/mcms")
-public class MCmsAction extends net.mingsoft.mdiy.action.BaseAction {
+public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
 
 	/**
 	 * 自定义页面业务层
@@ -84,7 +94,7 @@ public class MCmsAction extends net.mingsoft.mdiy.action.BaseAction {
 	// 如商城就为:/mall/{key}.do
 	/**
 	 * 前段会员中心所有页面都可以使用该方法 请求地址例如: /{diy}.do,例如登陆界面,与注册界面都可以使用
-	 * 
+	 *
 	 * @param key
 	 */
 	@RequestMapping("/{diy}.do")
@@ -158,7 +168,7 @@ public class MCmsAction extends net.mingsoft.mdiy.action.BaseAction {
 		//获取栏目编号
 		int typeId = BasicUtil.getInt(ParserUtil.TYPE_ID,0);
 		int size = BasicUtil.getInt(ParserUtil.SIZE,10);
-		
+
 		//获取文章总数
 		List<ColumnArticleIdBean> columnArticles = articleBiz.queryIdsByCategoryIdForParser(typeId, null, null);
 		//判断栏目下是否有文章
@@ -175,7 +185,7 @@ public class MCmsAction extends net.mingsoft.mdiy.action.BaseAction {
 		map.put(ParserUtil.TYPE_ID, typeId);
 		//设置列表当前页
 		map.put(ParserUtil.PAGE_NO, BasicUtil.getInt(ParserUtil.PAGE_NO,1));
-		
+
 		map.put(ParserUtil.URL, BasicUtil.getUrl());
 		map.put(ParserUtil.PAGE, page);
 		//动态解析
@@ -198,19 +208,27 @@ public class MCmsAction extends net.mingsoft.mdiy.action.BaseAction {
 		}
 		this.outString(resp, content);
 	}
-	
+
 	/**
 	 * 动态详情页
 	 * @param id 文章编号
 	 */
 	@GetMapping("/view.do")
-	public void view(HttpServletRequest req, HttpServletResponse resp) {
+	public void view(String orderby,String order,HttpServletRequest req, HttpServletResponse resp) {
 		//参数文章编号
 		ArticleEntity article = (ArticleEntity) articleBiz.getEntity(BasicUtil.getInt(ParserUtil.ID));
 		if(ObjectUtil.isNull(article)){
 			this.outJson(resp, null,false,getResString("err.empty", this.getResString("id")));
-			return;	
+			return;
+		}
+		if(StringUtils.isNotBlank(order)){
+			//防注入
+			if(!order.toLowerCase().equals("asc")&&!order.toLowerCase().equals("desc")){
+				this.outJson(resp, null,false,getResString("err.error", this.getResString("order")));
+				return;
+			}
 		}
+		PageBean page = new PageBean();
 		//根据文章编号查询栏目详情模版
 		ColumnEntity column = (ColumnEntity) columnBiz.getEntity(article.getBasicCategoryId());
 		//解析后的内容
@@ -221,6 +239,55 @@ public class MCmsAction extends net.mingsoft.mdiy.action.BaseAction {
 		//设置动态请求的模块路径
 		map.put(ParserUtil.MODEL_NAME, "mcms");
 		map.put(ParserUtil.URL, BasicUtil.getUrl());
+		map.put(ParserUtil.PAGE, page);
+		map.put(ParserUtil.ID, article.getArticleID());
+		List<ColumnArticleIdBean> articleIdList = articleBiz.queryIdsByCategoryIdForParser(column.getCategoryCategoryId(), null, null,orderby,order);
+		Map<Object, Object> contentModelMap = new HashMap<Object, Object>();
+		ContentModelEntity contentModel = null;
+		for (int artId = 0; artId < articleIdList.size();) {
+			//如果不是当前文章则跳过
+			if(articleIdList.get(artId).getArticleId() != article.getArticleID()){
+				artId++;
+				continue;
+			}
+			// 文章的栏目路径
+			String articleColumnPath = articleIdList.get(artId).getColumnPath();
+			// 文章的栏目模型编号
+			int columnContentModelId = articleIdList.get(artId).getColumnContentModelId();
+			Map<String, Object> parserParams = new HashMap<String, Object>();
+			parserParams.put(ParserUtil.COLUMN, articleIdList.get(artId));
+			// 判断当前栏目是否有自定义模型
+			if (columnContentModelId > 0) {
+				// 通过当前栏目的模型编号获取,自定义模型表名
+				if (contentModelMap.containsKey(columnContentModelId)) {
+					parserParams.put(ParserUtil.TABLE_NAME, contentModel.getCmTableName());
+				} else {
+					// 通过栏目模型编号获取自定义模型实体
+					contentModel = (ContentModelEntity) SpringUtil.getBean(IContentModelBiz.class)
+							.getEntity(columnContentModelId);
+					// 将自定义模型编号设置为key值
+					contentModelMap.put(columnContentModelId, contentModel.getCmTableName());
+					parserParams.put(ParserUtil.TABLE_NAME, contentModel.getCmTableName());
+				}
+			}
+			// 第一篇文章没有上一篇
+			if (artId > 0) {
+				ColumnArticleIdBean preCaBean = articleIdList.get(artId - 1);
+				//判断当前文档是否与上一页文章在同一栏目下,并且不能使用父栏目字符串,因为父栏目中没有所属栏目编号
+				if(articleColumnPath.contains(preCaBean.getCategoryId()+"")){
+					page.setPreId(preCaBean.getArticleId());
+				}
+			}
+			// 最后一篇文章没有下一篇
+			if (artId + 1 < articleIdList.size()) {
+				ColumnArticleIdBean nextCaBean = articleIdList.get(artId + 1);
+				//判断当前文档是否与下一页文章在同一栏目下并且不能使用父栏目字符串,因为父栏目中没有所属栏目编号
+				if(articleColumnPath.contains(nextCaBean.getCategoryId()+"")){
+					page.setNextId(nextCaBean.getArticleId());
+				}
+			}
+			break;
+		}
 		try {
 			//根据模板路径,参数生成
 			content = CmsParserUtil.generate(column.getColumnUrl(), map, isMobileDevice(req));

+ 72 - 63
src/main/java/net/mingsoft/cms/biz/IArticleBiz.java

@@ -1,43 +1,43 @@
-/**
-The MIT License (MIT) * Copyright (c) 2016 铭飞科技(mingsoft.net)
-
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
-
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
-
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
+/**
+ The MIT License (MIT) * Copyright (c) 2016 铭飞科技(mingsoft.net)
+
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
 package net.mingsoft.cms.biz;
 
-import java.util.List;
-import java.util.Map;
-
-import net.mingsoft.basic.biz.IBasicBiz;
-import net.mingsoft.cms.bean.ColumnArticleIdBean;
-import net.mingsoft.cms.entity.ArticleEntity;
-import net.mingsoft.mdiy.entity.ContentModelEntity;
-
-
-/**
- * 
- * @ClassName:  IArticleBiz   
- * @Description:TODO(文章管理业务处理层 || 继承IBasicBiz业务处理层)   
- * @author: 铭飞开发团队
- * @date:   2018年1月31日 下午2:53:32   
- *     
- * @Copyright: 2018 www.mingsoft.net Inc. All rights reserved.
+import java.util.List;
+import java.util.Map;
+
+import net.mingsoft.basic.biz.IBasicBiz;
+import net.mingsoft.cms.bean.ColumnArticleIdBean;
+import net.mingsoft.cms.entity.ArticleEntity;
+import net.mingsoft.mdiy.entity.ContentModelEntity;
+
+
+/**
+ *
+ * @ClassName:  IArticleBiz
+ * @Description:TODO(文章管理业务处理层 || 继承IBasicBiz业务处理层)   
+ * @author: 铭飞开发团队
+ * @date:   2018年1月31日 下午2:53:32   
+ *
+ * @Copyright: 2018 www.mingsoft.net Inc. All rights reserved.
  */
 public interface IArticleBiz extends IBasicBiz {
 
@@ -52,14 +52,14 @@ public interface IArticleBiz extends IBasicBiz {
 	 * @param article
 	 *            文件实体
 	 * @return
-	 */
+	 */
 	@Deprecated
 	int count(int webId, int[] basicCategoryId, String flag, String noFlag, ArticleEntity article);
 
 
 	/**
 	 * 通过分类id获取文章内容
-	 * 
+	 *
 	 * @param categoryId
 	 *            分类编号
 	 * @return
@@ -69,7 +69,7 @@ public interface IArticleBiz extends IBasicBiz {
 
 	/**
 	 * 通过视图表来查询文章总数
-	 * 
+	 *
 	 * @param basicId
 	 *            文章编号
 	 */
@@ -78,31 +78,31 @@ public interface IArticleBiz extends IBasicBiz {
 
 	/**
 	 * 查找basicId下一篇文章
-	 * 
+	 *
 	 * @param appId
 	 *            应用编号
 	 * @param basicId
 	 *            文章编号
 	 * @return
-	 */
+	 */
 	@Deprecated
 	public ArticleEntity getNext(int appId, int basicId, Integer categoryId);
 
 	/**
 	 * 查找basicId上一篇文章
-	 * 
+	 *
 	 * @param appId
 	 *            应用编号
 	 * @param basicId
 	 *            文章编号
 	 * @return
-	 */
+	 */
 	@Deprecated
 	public ArticleEntity getPrevious(int appId, int basicId, Integer categoryId);
 
 	/**
 	 * 高级查询接口,主要提供给有自定义模型的栏目,返回總數
-	 * 
+	 *
 	 * @param contentModel
 	 *            自定义模型
 	 * @param whereMap
@@ -118,7 +118,7 @@ public interface IArticleBiz extends IBasicBiz {
 
 	/**
 	 * 文章查询
-	 * 
+	 *
 	 * @para webId 网站编号
 	 * @param basicCategoryIds
 	 *            栏目编号集合
@@ -129,28 +129,37 @@ public interface IArticleBiz extends IBasicBiz {
 	 * @param orderBy
 	 *            排序字段
 	 * @param order
-	 *            true 升序 false 降序 排序方式
-	 * @param beginTime 开始时间    
-	 * @param endTime 结束时间                
+	 *            true 升序 false 降序 排序方式
+	 * @param beginTime 开始时间
+	 * @param endTime 结束时间
 	 * @param article
-	 *            文章实体,便于扩展查询
+	 *            文章实体,便于扩展查询
 	 * @return 文章集合
 	 */
 	List<ArticleEntity> query(int webId, int[] basicCategoryIds, String flag, String noFlag, String orderBy,
-			boolean order, String beginTime,String endTime, ArticleEntity article);
-
-	/**
-	 * 查询文章编号集合
-	 * @param categoryId 栏目编号
-	 * @param beginTime 开始时间
-	 * @param endTime 结束时间
-	 * @return
+							  boolean order, String beginTime,String endTime, ArticleEntity article);
+
+	/**
+	 * 查询文章编号集合
+	 * @param categoryId 栏目编号
+	 * @param beginTime 开始时间
+	 * @param endTime 结束时间
+	 * @return
 	 */
 	public List<ColumnArticleIdBean> queryIdsByCategoryIdForParser(int categoryId, String beginTime,String endTime);
-
+	/**
+	 * 查询文章编号集合
+	 * @param categoryId 栏目编号
+	 * @param beginTime 开始时间
+	 * @param endTime 结束时间
+	 * @param orderBy 排序字段
+	 * @param order 排序方式
+	 * @return
+	 */
+	public List<ColumnArticleIdBean> queryIdsByCategoryIdForParser(int categoryId, String beginTime,String endTime,String orderBy,String order);
 	/**
 	 * 根据页面栏目的id获取与其绑定的文章实体
-	 * 
+	 *
 	 * @param basicCategoryId
 	 * @return 文章实体
 	 */
@@ -162,7 +171,7 @@ public interface IArticleBiz extends IBasicBiz {
 
 	/**
 	 * 高级查询接口,主要提供给有自定义模型的栏目,
-	 * 
+	 *
 	 * @param conntentModel
 	 *            自定义模型
 	 * @param whereMap
@@ -177,6 +186,6 @@ public interface IArticleBiz extends IBasicBiz {
 	 */
 	@Deprecated
 	public List<ArticleEntity> queryListForSearch(ContentModelEntity conntentModel, Map whereMap,
-			int appId, List ids, Map orders);
+												  int appId, List ids, Map orders);
 
 }

+ 23 - 18
src/main/java/net/mingsoft/cms/biz/impl/ArticleBizImpl.java

@@ -1,5 +1,5 @@
 /**
-The MIT License (MIT) * Copyright (c) 2016 铭飞科技(mingsoft.net)
+ The MIT License (MIT) * Copyright (c) 2016 铭飞科技(mingsoft.net)
 
  * Permission is hereby granted, free of charge, to any person obtaining a copy of
  * this software and associated documentation files (the "Software"), to deal in
@@ -25,6 +25,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import com.github.pagehelper.PageHelper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -42,43 +43,43 @@ import net.mingsoft.mdiy.biz.IContentModelBiz;
 import net.mingsoft.mdiy.entity.ContentModelEntity;
 
 /**
- * 
- * @ClassName:  ArticleBizImpl   
- * @Description:TODO(文章管理业务层实现类 || 继承BasicBizImpl || 实现IArticleBiz)   
+ *
+ * @ClassName:  ArticleBizImpl
+ * @Description:TODO(文章管理业务层实现类 || 继承BasicBizImpl || 实现IArticleBiz)
  * @author: 铭飞开发团队
- * @date:   2018年1月31日 下午2:53:53   
- *     
+ * @date:   2018年1月31日 下午2:53:53
+ *
  * @Copyright: 2018 www.mingsoft.net Inc. All rights reserved.
  */
 @Service("ArticleBizImpl")
 public class ArticleBizImpl extends BasicBizImpl implements IArticleBiz {
 
-	
+
 	/**
 	 * 文章持久化处理
 	 */
 	private IArticleDao articleDao;
-	
-	
+
+
 
 	/**
 	 * 栏目业务处理
 	 */
 	@Autowired
-	private ICategoryBiz categoryBiz; 
+	private ICategoryBiz categoryBiz;
 
 	/**
 	 * 自定类型义业务处理
 	 */
 	@Autowired
 	private IColumnBiz columnBiz;
-	
+
 	/**
 	 * 自定义模型
 	 */
 	@Autowired
 	private IContentModelBiz contentModelBiz;
-	
+
 	/**
 	 * 模块管理业务层
 	 */
@@ -94,7 +95,7 @@ public class ArticleBizImpl extends BasicBizImpl implements IArticleBiz {
 
 	/**
 	 * 获取Article的持久化层
-	 * 
+	 *
 	 * @return 返回持Article的久化对象
 	 */
 	public IArticleDao getArticleDao() {
@@ -133,7 +134,7 @@ public class ArticleBizImpl extends BasicBizImpl implements IArticleBiz {
 
 	/**
 	 * 获取IBaseDao的持久化层
-	 * 
+	 *
 	 * @return 返回持articleDao的久化对象
 	 */
 	@Override
@@ -165,7 +166,7 @@ public class ArticleBizImpl extends BasicBizImpl implements IArticleBiz {
 
 	@Override
 	public List<ArticleEntity> query(int webId, int[] basicCategoryIds, String flag, String noFlag, String orderBy,
-			boolean order,String beginTime,String endTime, ArticleEntity article) {
+									 boolean order,String beginTime,String endTime, ArticleEntity article) {
 		// TODO Auto-generated method stub
 		if(article == null) {
 			article = new ArticleEntity();
@@ -175,7 +176,7 @@ public class ArticleBizImpl extends BasicBizImpl implements IArticleBiz {
 
 	/**
 	 * 根据页面栏目的id获取与其绑定的文章实体
-	 * 
+	 *
 	 * @param basicCategoryId
 	 * @return 文章实体
 	 */
@@ -201,7 +202,7 @@ public class ArticleBizImpl extends BasicBizImpl implements IArticleBiz {
 
 	/**
 	 * 设置Article的持久化层
-	 * 
+	 *
 	 * @param articleDao
 	 */
 	@Autowired
@@ -212,6 +213,10 @@ public class ArticleBizImpl extends BasicBizImpl implements IArticleBiz {
 
 	@Override
 	public List<ColumnArticleIdBean> queryIdsByCategoryIdForParser(int categoryId, String beginTime,String endTime) {
-		return this.articleDao.queryIdsByCategoryIdForParser(categoryId,BasicUtil.getAppId(), beginTime, endTime);
+		return this.articleDao.queryIdsByCategoryIdForParser(categoryId,BasicUtil.getAppId(), beginTime, endTime,null,null);
+	}
+	@Override
+	public List<ColumnArticleIdBean> queryIdsByCategoryIdForParser(int categoryId, String beginTime,String endTime,String orderBy,String order) {
+		return this.articleDao.queryIdsByCategoryIdForParser(categoryId,BasicUtil.getAppId(), beginTime, endTime,orderBy,order);
 	}
 }

+ 71 - 69
src/main/java/net/mingsoft/cms/dao/IArticleDao.java

@@ -1,45 +1,45 @@
-/**
-The MIT License (MIT) * Copyright (c) 2016 铭飞科技(mingsoft.net)
-
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
-
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
-
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
+/**
+ The MIT License (MIT) * Copyright (c) 2016 铭飞科技(mingsoft.net)
+
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
 package net.mingsoft.cms.dao;
 
-import java.util.List;
-import java.util.Map;
-
-import org.apache.ibatis.annotations.Param;
-
-import net.mingsoft.cms.bean.ColumnArticleIdBean;
-import net.mingsoft.cms.entity.ArticleEntity;
-
-import net.mingsoft.base.dao.IBaseDao;
-
-
-/**
- * 
- * @ClassName:  IArticleDao   
- * @Description:TODO(文章管理持久化层 || 继承IBaseDao持久化层)   
- * @author: 铭飞开发团队
- * @date:   2018年1月31日 下午2:55:33   
- *     
- * @Copyright: 2018 www.mingsoft.net Inc. All rights reserved.
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ibatis.annotations.Param;
+
+import net.mingsoft.cms.bean.ColumnArticleIdBean;
+import net.mingsoft.cms.entity.ArticleEntity;
+
+import net.mingsoft.base.dao.IBaseDao;
+
+
+/**
+ *
+ * @ClassName:  IArticleDao
+ * @Description:TODO(文章管理持久化层 || 继承IBaseDao持久化层)   
+ * @author: 铭飞开发团队
+ * @date:   2018年1月31日 下午2:55:33   
+ *
+ * @Copyright: 2018 www.mingsoft.net Inc. All rights reserved.
  */
 public interface IArticleDao extends IBaseDao {
 
@@ -54,24 +54,24 @@ public interface IArticleDao extends IBaseDao {
 	 * @param article
 	 *            文章实体,便于扩展查询
 	 * @return 文章总数
-	 */
+	 */
 	@Deprecated
 	int count(@Param("webId") int webId, @Param("basicCategoryIds") int[] basicCategoryIds, @Param("flag") String flag,
-			@Param("noFlag") String noFlag, @Param("article") ArticleEntity article);
+			  @Param("noFlag") String noFlag, @Param("article") ArticleEntity article);
 
 	/**
 	 * 通过分类id获取文章内容
-	 * 
+	 *
 	 * @param categoryId
 	 *            分类编号
 	 * @return 文章集合
-	 */
+	 */
 	@Deprecated
 	List getByCategoryId(@Param("categoryId") int categoryId);
 
 	/**
 	 * 通过视图表来查询文章总数
-	 * 
+	 *
 	 * @param basicId
 	 *            文章编号
 	 * @param contentModelTableName
@@ -81,7 +81,7 @@ public interface IArticleDao extends IBaseDao {
 
 	/**
 	 * 查找basicId上一篇文章
-	 * 
+	 *
 	 * @param appId
 	 *            应用编号
 	 * @param basicId
@@ -91,11 +91,11 @@ public interface IArticleDao extends IBaseDao {
 	 * @return
 	 */
 	ArticleEntity getNextOrPrevious(@Param("appId") int appId, @Param("basicId") int basicId,
-			@Param("flag") boolean flag, @Param("categoryId") Integer categoryId);
+									@Param("flag") boolean flag, @Param("categoryId") Integer categoryId);
 
 	/**
 	 * 根据查询文章实体总数
-	 * 
+	 *
 	 * @param tableName
 	 *            :自定义生成的表名
 	 * @param map
@@ -104,11 +104,11 @@ public interface IArticleDao extends IBaseDao {
 	 * @return 文章实体总数
 	 */
 	int getSearchCount(@Param("tableName") String tableName, @Param("map") Map<String, List> map,
-			@Param("websiteId") int websiteId, @Param("ids") String ids);
+					   @Param("websiteId") int websiteId, @Param("ids") String ids);
 
 	/**
 	 * 文章查询
-	 * 
+	 *
 	 * @para webId 网站编号
 	 * @param basicCategoryIds
 	 *            栏目编号集合
@@ -121,19 +121,19 @@ public interface IArticleDao extends IBaseDao {
 	 * @param order
 	 *            true 升序 false 降序 排序方式
 	 * @param article
-	 *            文章实体,便于扩展查询
-	 * @param beginTime 开始时间    
+	 *            文章实体,便于扩展查询
+	 * @param beginTime 开始时间    
 	 * @param endTime 结束时间 
 	 * @return 文章集合
 	 */
 	List<ArticleEntity> query(@Param("webId") int webId, @Param("basicCategoryIds") int[] basicCategoryIds,
-			@Param("flag") String flag, @Param("noFlag") String noFlag, @Param("orderBy") String orderBy,
-			@Param("order") boolean order, @Param("beginTime") String beginTime,@Param("endTime") String endTime, 
-			@Param("article") ArticleEntity article);
+							  @Param("flag") String flag, @Param("noFlag") String noFlag, @Param("orderBy") String orderBy,
+							  @Param("order") boolean order, @Param("beginTime") String beginTime,@Param("endTime") String endTime,
+							  @Param("article") ArticleEntity article);
 
 	/**
 	 * 根据页面栏目的id获取与其绑定的文章实体
-	 * 
+	 *
 	 * @param basicCategoryId
 	 * @return 文章实体
 	 */
@@ -142,7 +142,7 @@ public interface IArticleDao extends IBaseDao {
 
 	/**
 	 * 根据查询文章实体
-	 * 
+	 *
 	 * @param tableName
 	 *            :自定义生成的表名
 	 * @param map
@@ -152,16 +152,18 @@ public interface IArticleDao extends IBaseDao {
 	 */
 	@Deprecated
 	List<ArticleEntity> queryListForSearch(@Param("tableName") String tableName, @Param("map") Map<String, List> map,
-			 @Param("websiteId") int websiteId, @Param("ids") List ids,
-			@Param("sortMap") Map sortMap);
-
-	/**
-	 * 查询文章编号集合
-	 * @param categoryId 栏目编号
-	 * @param appId 站点编号
-	 * @param beginTime 开始时间
-	 * @param endTime 结束时间
-	 * @return
-	 */
-	public List<ColumnArticleIdBean> queryIdsByCategoryIdForParser(@Param("categoryId")int categoryId,@Param("appId")int appId , @Param("beginTime") String beginTime,@Param("endTime") String endTime);
+										   @Param("websiteId") int websiteId, @Param("ids") List ids,
+										   @Param("sortMap") Map sortMap);
+
+	/**
+	 * 查询文章编号集合
+	 * @param categoryId 栏目编号
+	 * @param appId 站点编号
+	 * @param beginTime 开始时间
+	 * @param endTime 结束时间
+	 * @return
+	 */
+	public List<ColumnArticleIdBean> queryIdsByCategoryIdForParser(@Param("categoryId")int categoryId,@Param("appId")int appId , @Param("beginTime") String beginTime,@Param("endTime") String endTime,@Param("orderBy")String orderBy,@Param("order")String order);
+
+
 }

+ 64 - 60
src/main/java/net/mingsoft/cms/dao/IArticleDao.xml

@@ -36,7 +36,7 @@
 		<result column="BASIC_DISPLAY" property="basicDisplay" />
 		<!-- 一对一关联栏目 -->
 		<association property="column" column="COLUMN_CATEGORY_ID"
-			javaType="net.mingsoft.basic.entity.ColumnEntity">
+					 javaType="net.mingsoft.basic.entity.ColumnEntity">
 			<result property="columnPath" column="column_path" />
 			<result property="categoryTitle" column="category_title" />
 			<result property="categoryId" column="category_id" />
@@ -47,9 +47,10 @@
 	<!-- 获取表字段 结束 -->
 	<!-- 通过视图查询返回结果集 开始 -->
 	<resultMap type="net.mingsoft.cms.bean.ColumnArticleIdBean" id="resultMapBean">
-		<result column="ARTICLE_BASICID" property="articleId" />	
-		<result column="column_path" property="columnPath"/>			
+		<result column="ARTICLE_BASICID" property="articleId" />
+		<result column="column_path" property="columnPath"/>
 		<result column="column_url" property="columnUrl" />
+		<result column="column_listurl" property="columnListUrl" />
 		<result column="category_title" property="categoryTitle" />
 		<result column="category_id" property="categoryId" />
 		<result column="COLUMN_CM_ID" property="columnContentModelId" />
@@ -68,13 +69,13 @@
 		<result column="ARTICLE_SOURCE" property="articleSource" />		<!-- 文章来源 -->
 		<result column="ARTICLE_URL" property="articleUrl" />			<!-- 文章跳转链接地址 -->
 		<result column="ARTICLE_KEYWORD" property="articleKeyword" />	<!-- 文章关键字 -->
-		<result column="ARTICLE_FREEORDER" property="articleFreeOrder" /><!-- 
+		<result column="ARTICLE_FREEORDER" property="articleFreeOrder" /><!--
 			文章自定义显示顺序 -->
 		<result column="ARTICLE_WEBID" property="articleWebId" />				<!-- 站点id -->
 
 		<result column="BASIC_ID" property="basicId" />					<!-- 与表basic绑定 自增长ID -->
 		<result column="BASIC_TITLE" property="basicTitle" />			<!-- 文章标题 -->
-		<result column="BASIC_DESCRIPTION" property="basicDescription" /><!-- 
+		<result column="BASIC_DESCRIPTION" property="basicDescription" /><!--
 			文章描述 -->
 		<result column="BASIC_THUMBNAILS" property="basicThumbnails" />	<!-- 文章缩略图 -->
 		<result column="BASIC_HIT" property="basicHit" />				<!-- 文章点击次数 -->
@@ -85,7 +86,7 @@
 		<result column="BASIC_DISPLAY" property="basicDisplay" />
 		<!-- 一对一关联栏目 -->
 		<association property="column"
-			javaType="net.mingsoft.basic.entity.ColumnEntity">
+					 javaType="net.mingsoft.basic.entity.ColumnEntity">
 			<result property="columnPath" column="column_path" />
 			<result property="categoryTitle" column="category_title" />
 			<result property="categoryId" column="category_id" />
@@ -101,7 +102,7 @@
 		BASIC_DISPLAY,BASIC_TITLE,BASIC_DESCRIPTION,BASIC_THUMBNAILS,BASIC_HIT,BASIC_DATETIME,BASIC_UPDATETIME,BASIC_PEOPLEID,BASIC_CATEGORYID,BASIC_SORT
 	</sql>
 	<!-- 表栏目名结束 -->
-	
+
 	<!-- 文章基础数据返回数据列表 开始 -->
 	<sql id="basic_data_list">
 		BASIC_DISPLAY,BASIC_ID,BASIC_CATEGORYID,BASIC_TITLE,BASIC_DESCRIPTION,BASIC_THUMBNAILS,BASIC_HIT,BASIC_DATETIME,BASIC_UPDATETIME,BASIC_PEOPLEID,BASIC_SORT,
@@ -186,10 +187,10 @@
 		where a.ARTICLE_BASICID=#{basicId}
 	</select>
 	<!-- 查找文章管理的信息 结束 -->
-	
+
 	<!-- 标题字段query -->
 	<sql id="queryWhereBasicTitle" databaseId="mysql">
-		CONCAT('%',#{article.basicTitle},'%') 
+		CONCAT('%',#{article.basicTitle},'%')
 	</sql>
 	<sql id="queryWhereBasicTitle" databaseId="oracle">
 		'%'||#{ article.basicTitle}||'%'
@@ -199,7 +200,7 @@
 	</sql>
 	<!-- flag字段 -->
 	<sql id="queryWhereFlag" databaseId="mysql">
-		CONCAT('%',#{flag},'%') 
+		CONCAT('%',#{flag},'%')
 	</sql>
 	<sql id="queryWhereFlag" databaseId="oracle">
 		'%'||#{ flag}||'%'
@@ -209,7 +210,7 @@
 	</sql>
 	<!-- noFlag字段 -->
 	<sql id="queryWhereNoFlag" databaseId="mysql">
-		CONCAT('%',#{noFlag},'%') 
+		CONCAT('%',#{noFlag},'%')
 	</sql>
 	<sql id="queryWhereNoFlag" databaseId="oracle">
 		'%'||#{ noFlag}||'%'
@@ -237,7 +238,7 @@
 			<if test="basicCategoryIds != null">
 				and b.BASIC_CATEGORYID in
 				<foreach collection="basicCategoryIds" index="index" item="categoryId"
-					open="(" separator="," close=")">
+						 open="(" separator="," close=")">
 					#{categoryId}
 				</foreach>
 			</if>
@@ -250,15 +251,15 @@
 		</where>
 	</select>
 	<!-- 列表查询结束 -->
-	
+
 	<!-- 列表查询开始 -->
 	<select id="query" resultMap="resultMap" >
 		select
 		<include refid="column_list" />
 		,c.CATEGORY_TITLE,c.CATEGORY_ID
-		,cl.COLUMN_PATH,cl.COLUMN_CM_ID,cl.COLUMN_TYPE,cl.COLUMN_CATEGORY_ID 
-		FROM cms_article a LEFT JOIN basic b  ON a.ARTICLE_BASICID = b.BASIC_ID 
-		LEFT JOIN basic_column cl ON b.BASIC_CATEGORYID = cl.COLUMN_CATEGORY_ID 
+		,cl.COLUMN_PATH,cl.COLUMN_CM_ID,cl.COLUMN_TYPE,cl.COLUMN_CATEGORY_ID
+		FROM cms_article a LEFT JOIN basic b  ON a.ARTICLE_BASICID = b.BASIC_ID
+		LEFT JOIN basic_column cl ON b.BASIC_CATEGORYID = cl.COLUMN_CATEGORY_ID
 		JOIN category c ON c.CATEGORY_ID = cl.COLUMN_CATEGORY_ID
 		where a.ARTICLE_WEBID = #{webId}
 		<if test="article != null ">
@@ -270,7 +271,7 @@
 		<if test="basicCategoryIds != null">
 			and b.BASIC_CATEGORYID in
 			<foreach collection="basicCategoryIds" index="index" item="categoryId"
-				open="(" separator="," close=")">
+					 open="(" separator="," close=")">
 				#{categoryId}
 			</foreach>
 		</if>
@@ -321,23 +322,26 @@
 	<select id="queryIdsByCategoryIdForParser" resultMap="resultMapBean" >
 		select
 		ARTICLE_BASICID,cl.*,c.*
-		FROM cms_article a LEFT JOIN basic b  ON a.ARTICLE_BASICID = b.BASIC_ID 
-		LEFT JOIN basic_column cl ON b.BASIC_CATEGORYID = cl.COLUMN_CATEGORY_ID 
+		FROM cms_article a LEFT JOIN basic  ON a.ARTICLE_BASICID = basic.BASIC_ID
+		LEFT JOIN basic_column cl ON basic.BASIC_CATEGORYID = cl.COLUMN_CATEGORY_ID
 		JOIN category c ON c.CATEGORY_ID = cl.COLUMN_CATEGORY_ID
-		where 
+		where
 		<if test="appId &gt; 0">
 			a.ARTICLE_WEBID = #{appId}
 		</if>
 		<!-- 查询子栏目数据 -->
 		<if test="categoryId &gt; 0">
-			and (b.basic_categoryid=#{categoryId} or b.basic_categoryid in 
-				(select category_id FROM category where <include refid="queryWhereCategoryId"></include>))
+			and (basic.basic_categoryid=#{categoryId} or basic.basic_categoryid in
+			(select category_id FROM category where <include refid="queryWhereCategoryId"></include>))
 		</if>
 		<if test="beginTime!=null and beginTime!=''">
-			and b.basic_updatetime &gt;= #{beginTime}
+			and basic.basic_updatetime &gt;= #{beginTime}
 		</if>
 		<if test="endTime!=null and endTime!=''">
-			and b.basic_updatetime &gt;= #{endTime}
+			and basic.basic_updatetime &gt;= #{endTime}
+		</if>
+		<if test="orderBy!=null and order!=null and orderBy!='' and order!=''">
+			ORDER BY `${orderBy}` ${order}
 		</if>
 	</select>
 
@@ -359,24 +363,24 @@
 	<!-- 根据字段条件查找文章实体开始 -->
 	<sql id="queryLike" databaseId="mysql">
 		like CONCAT("%",
-			<foreach item="val" index="index" collection="item[3]">
-				<if test="index==0">#{val}</if>
-			</foreach>
-			,"%")
+		<foreach item="val" index="index" collection="item[3]">
+			<if test="index==0">#{val}</if>
+		</foreach>
+		,"%")
 	</sql>
 	<sql id="queryLike" databaseId="oracle">
 		like '%'||
-			<foreach item="val" index="index" collection="item[3]">
-				<if test="index==0">#{val}</if>
-			</foreach>
-			||'%'
+		<foreach item="val" index="index" collection="item[3]">
+			<if test="index==0">#{val}</if>
+		</foreach>
+		||'%'
 	</sql>
 	<sql id="queryLike" databaseId="sqlServer">
 		like '%'+
-			<foreach item="val" index="index" collection="item[3]">
-				<if test="index==0">#{val}</if>
-			</foreach>
-			 +'%'
+		<foreach item="val" index="index" collection="item[3]">
+			<if test="index==0">#{val}</if>
+		</foreach>
+		+'%'
 	</sql>
 	<!-- 已过期 -->
 	<select id="queryListForSearch" resultMap="resultMap">
@@ -398,12 +402,12 @@
 			and
 			b.BASIC_CATEGORYID in
 			<foreach item="id" index="key" collection="ids" open="("
-				separator="," close=")">
+					 separator="," close=")">
 				#{id.categoryId}
 			</foreach>
 		</if>
 		<foreach item="item" index="key" collection="map" open=""
-			separator="" close="">
+				 separator="" close="">
 			<if test=" item[0] == false">
 				and ${key}
 			</if>
@@ -421,7 +425,7 @@
 				<if test="item[2] == false">
 					between
 					<foreach item="val" index="index" collection="item[3]"
-						separator="and">
+							 separator="and">
 						#{val}
 					</foreach>
 				</if>
@@ -460,12 +464,12 @@
 		cl.COLUMN_CATEGORY_ID
 		<if test="tableName!=null and tableName!=''">left join ${tableName} d on d.basicId=a.ARTICLE_BASICID
 		</if>
-		where a.ARTICLE_WEBID = #{websiteId} 
+		where a.ARTICLE_WEBID = #{websiteId}
 		<if test="ids!=null and ids!=''">
 			and FIND_IN_SET(category_categoryid,'${ids}')
 		</if>
 		<foreach item="item" index="key" collection="map" open=""
-			separator="" close="">
+				 separator="" close="">
 			<if test=" item[0] == false">
 				and ${key}
 			</if>
@@ -483,7 +487,7 @@
 				<if test="item[2] == false">
 					between
 					<foreach item="val" index="index" collection="item[3]"
-						separator="and">
+							 separator="and">
 						#{val}
 					</foreach>
 				</if>
@@ -505,12 +509,12 @@
 	<!-- 根据字段条件查找文章实体总数结束 -->
 
 	<select id="getById" resultMap="viewResultMap">
-		select 
-		<include refid="basic_data_list" /> 
-		from 
+		select
+		<include refid="basic_data_list" />
+		from
 		(((basic JOIN cms_article ON (BASIC_ID = ARTICLE_BASICID))
-			JOIN basic_column ON (BASIC_CATEGORYID = COLUMN_CATEGORY_ID))
-			JOIN category ON (COLUMN_CATEGORY_ID = CATEGORY_ID))
+		JOIN basic_column ON (BASIC_CATEGORYID = COLUMN_CATEGORY_ID))
+		JOIN category ON (COLUMN_CATEGORY_ID = CATEGORY_ID))
 		<if test="contentModelTableName!=null">
 			left join ${contentModelTableName} cmt on
 			cmt.basicid=basic_id
@@ -531,12 +535,12 @@
 	<!-- 已过期 -->
 	<!-- 查找上一篇下一篇 -->
 	<sql id="selectOne">
-		from 
+		from
 		(((basic JOIN cms_article ON (BASIC_ID = ARTICLE_BASICID))
-			JOIN basic_column ON (BASIC_CATEGORYID = COLUMN_CATEGORY_ID))
-			JOIN category ON (COLUMN_CATEGORY_ID = CATEGORY_ID))
-		
-		 where category_appid=#{appId}
+		JOIN basic_column ON (BASIC_CATEGORYID = COLUMN_CATEGORY_ID))
+		JOIN category ON (COLUMN_CATEGORY_ID = CATEGORY_ID))
+
+		where category_appid=#{appId}
 		<if test="flag==false">
 			and basic_id &lt; ${basicId}
 
@@ -551,7 +555,7 @@
 	</sql>
 	<!-- 已过期 -->
 	<select id="getNextOrPrevious" resultMap="resultMap" databaseId="mysql">
-		select 
+		select
 		<include refid="basic_data_list" />
 		<include refid="selectOne"></include>
 		<if test="flag==false">
@@ -564,7 +568,7 @@
 	</select>
 	<!-- 已过期 -->
 	<select id="getNextOrPrevious" resultMap="resultMap" databaseId="oracle">
-		select 
+		select
 		<include refid="basic_data_list" />
 		<include refid="selectOne"></include>
 		and rownum=1
@@ -598,13 +602,13 @@
 	</sql>
 	<!-- 已过期 -->
 	<select id="getByCategoryId" resultMap="resultMap">
-		select 
+		select
 		<include refid="basic_data_list" />
-		 from 
+		from
 		(((basic JOIN cms_article ON (BASIC_ID = ARTICLE_BASICID))
-			JOIN basic_column ON (BASIC_CATEGORYID = COLUMN_CATEGORY_ID))
-			JOIN category ON (COLUMN_CATEGORY_ID = CATEGORY_ID))
-		where basic_categoryId=#{categoryId} order by basic_id desc 
+		JOIN basic_column ON (BASIC_CATEGORYID = COLUMN_CATEGORY_ID))
+		JOIN category ON (COLUMN_CATEGORY_ID = CATEGORY_ID))
+		where basic_categoryId=#{categoryId} order by basic_id desc
 	</select>
 
 	<!-- 根据basicID删除开始 -->
@@ -613,7 +617,7 @@
 		<where>
 			ARTICLE_BASICID in
 			<foreach collection="ids" item="item" index="index" open="("
-				separator="," close=")">#{item}</foreach>
+					 separator="," close=")">#{item}</foreach>
 		</where>
 	</delete>
 

+ 5 - 4
src/main/java/net/mingsoft/cms/resources/resources_zh_CN.properties

@@ -1,5 +1,6 @@
-#mcms\u7248\u672c
+#mcms\u7248\u672C
 version=d3a98fefcb242db78da5fc31608ff247
-templet.file=\u6a21\u677f\u6587\u4ef6\u4e0d\u5b58\u5728
-id=\u6587\u7ae0\u7f16\u53f7
-typeid=\u680f\u76ee\u7f16\u53f7
+templet.file=\u6A21\u677F\u6587\u4EF6\u4E0D\u5B58\u5728
+id=\u6587\u7AE0\u7F16\u53F7
+typeid=\u680F\u76EE\u7F16\u53F7
+order=\u6392\u5E8F

+ 31 - 20
src/main/java/net/mingsoft/config/WebConfig.java

@@ -1,5 +1,9 @@
 package net.mingsoft.config;
 
+import java.io.File;
+import java.util.Arrays;
+
+import net.mingsoft.basic.filter.XSSEscapeFilter;
 import org.springframework.aop.Advisor;
 import org.springframework.aop.support.DefaultPointcutAdvisor;
 import org.springframework.aop.support.JdkRegexpMethodPointcut;
@@ -23,6 +27,7 @@ import com.alibaba.druid.support.spring.stat.BeanTypeAutoProxyCreator;
 import com.alibaba.druid.support.spring.stat.DruidStatInterceptor;
 
 import net.mingsoft.basic.interceptor.ActionInterceptor;
+import net.mingsoft.basic.util.BasicUtil;
 
 @Configuration
 public class WebConfig implements WebMvcConfigurer {
@@ -50,15 +55,23 @@ public class WebConfig implements WebMvcConfigurer {
 
 	@Override
 	public void addResourceHandlers(ResourceHandlerRegistry registry) {
-		registry.addResourceHandler("/html/**").addResourceLocations("/html/");
-		registry.addResourceHandler("/app/**").addResourceLocations("classpath:/app/");
-		registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
-		registry.addResourceHandler("/api/**").addResourceLocations("classpath:/api/");
+		//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("/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());
@@ -120,18 +133,16 @@ public class WebConfig implements WebMvcConfigurer {
 		return new DefaultPointcutAdvisor(druidStatPointcut(), druidStatInterceptor());
 	}
 
-	// /**
-	// * xssFilter注册
-	// */
-	// @Bean
-	// public FilterRegistrationBean xssFilterRegistration() {
-	// XssFilter xssFilter = new XssFilter();
-	// xssFilter.setUrlExclusion(Arrays.asList("/static/"));
-	// FilterRegistrationBean registration = new
-	// FilterRegistrationBean(xssFilter);
-	// registration.addUrlPatterns("/*");
-	// return registration;
-	// }
+	 /**
+	 * xssFilter注册
+	 */
+	 @Bean
+	 public FilterRegistrationBean xssFilterRegistration() {
+	 XSSEscapeFilter xssFilter = new XSSEscapeFilter();
+	 FilterRegistrationBean registration = new FilterRegistrationBean(xssFilter);
+	 registration.addUrlPatterns("/*");
+	 return registration;
+	 }
 
 	/**
 	 * RequestContextListener注册

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

@@ -13,7 +13,7 @@ ms:
   
  upload: 
    path: /upload 
-   denied: exe
+   denied: .exe,.jsp
    allowed: jpg
    max-size: 1
    memory-size: 4096

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

@@ -87,7 +87,7 @@
 	        field: 'basicDateTime',
 	        title: '发布时间',
 	        align: 'center',
-	        width: 90
+	        width: 150
 	    }]
 	});
 	//查询文章标题

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

@@ -0,0 +1,164 @@
+<!DOCTYPE html>
+<html lang="zh">
+   <head>
+      <title>${app.appName}</title>
+      <#include "/include/head-file.ftl"/>
+      <script src="${base}/static/plugins/jquery/3.2.1/jquery.min.js"></script>
+      <script src="${base}/static/plugins/jquery.cookie/1.4.1/jquery.cookie.min.js"></script>
+      <link rel="stylesheet" href="${base}/static/ms-admin/4.7.0/css/login.css">
+   </head>
+   <body>
+      <div id="login" class="login">
+
+         <el-container class="ms-admin-login-container">
+
+            <el-main class="ms-admin-login-main">
+
+               <div class="ms-admin-login-warp" @keydown.13='checkLogin'>
+
+                  <img style="height: 360px"  :src="ms.base+'/static/ms-admin/4.7.0/images/login-slogn.png'">
+                  <el-form :model="loginForm" status-icon :rules="loginFormRule" style="height: 360px" ref="loginForm" label-width="100px"  class="ms-admin-login-form">
+                     <el-alert
+                             style="margin-bottom: 10px;"
+                             title="演示版部分删除功能已去除"
+                             type="warning"
+                             center
+                             :closable="false"
+                             show-icon>
+                     </el-alert>
+                     <h1>
+                        <span>账户登录 / </span>User login</h1>
+                     <el-form-item class="ms-admin-form-item" prop="managerName">
+                        <el-input type="text" placeholder='用户名/admin'  v-model="loginForm.managerName" ></el-input>
+                     </el-form-item>
+                     <el-form-item class="ms-admin-form-item" prop="managerPassword">
+                        <el-input type="password" placeholder='密码/123456'  v-model="loginForm.managerPassword"></el-input>
+                     </el-form-item>
+                     <el-form-item class="ms-admin-form-item ms-admin-form-item-code" prop="rand_code">
+                        <el-input type="text" placeholder='验证码' v-model="loginForm.rand_code" autocomplete="off"></el-input>
+                        <img :src="verifCode" class="code-img" @click="code" />
+                        <p>
+                           <span>看不清?</span>
+                           <span @click="code">换一张</span>
+                        </p>
+                     </el-form-item>
+                     <el-form-item class="ms-admin-form-item ms-admin-form-item-checkout">
+                        <el-checkbox v-model="rememberPass">记住密码</el-checkbox>
+                     </el-form-item>
+                     <el-form-item class="ms-admin-form-item">
+                        <el-button type="primary" @click="checkLogin" class="ms-admin-login-btn">登录</el-button>
+
+                     </el-form-item>
+                  </el-form>
+               </div>
+            </el-main>
+         </el-container>
+      </div>
+   </body>
+
+</html>
+<script>
+   var loginVue = new Vue({
+      el: '#login',
+      data: {
+         loginForm: {
+            managerName: 'admin',
+            managerPassword: "123456",
+            rand_code: ''
+         },
+         verifCode: ms.manager + "/code?t=" + new Date().getTime(),
+         rememberPass: '',
+         loginFormRule: {
+            managerName: [{
+                  required: true,
+                  message: '请输入用户名',
+                  trigger: 'blur'
+               },
+               {
+                  min: 1,
+                  max: 30,
+                  message: '长度在 1 到 30 个字符',
+                  trigger: 'blur'
+               }
+            ],
+            managerPassword: [{
+                  required: true,
+                  message: '请输入密码',
+                  trigger: 'blur'
+               },
+               {
+                  min: 1,
+                  max: 30,
+                  message: '长度在 1 到 30 个字符',
+                  trigger: 'blur'
+               }
+            ],
+            rand_code: [{
+                  required: true,
+                  message: '请填写验证码',
+                  trigger: 'blur'
+               },
+               {
+                  min: 1,
+                  max: 4,
+                  message: '长度在1 到 4 个字符',
+                  trigger: 'blur'
+               }
+            ],
+         }
+      },
+      methods: {
+         // 登录
+         checkLogin: function() {
+            var that = this;
+            this.$refs['loginForm'].validate((valid) => {
+            	if(valid) {
+            		ms.http.post(ms.manager + "/checkLogin.do", that.loginForm).then(function(data) {
+		               if(data.result) {
+		               	  if(that.rememberPass) {
+		               	  	$.cookie('managerName',that.loginForm.managerName, { expires: 365 });
+		               	  	$.cookie('managerPassword',that.loginForm.managerPassword, { expires: 365 });
+		               	  } else {
+		               	  	$.cookie('managerName',"");
+		               	  	$.cookie('managerPassword',"");
+		               	  }
+		                  that.$notify({
+		                     title: '成功',
+		                     message: '登录成功',
+		                     type: 'success'
+		                  });
+		                  location.href = ms.manager + "/index.do";
+		               } else {
+		                  that.$notify({
+		                     title: '失败',
+		                     message: data.resultMsg,
+		                     type: 'warning'
+		                  });
+		                  that.code();
+		               }
+		            }, (err) => {
+		               that.$message.error(data.resultMsg);
+		            })  
+            	} 
+          
+            });
+
+         },
+         code: function() {
+            this.verifCode = ms.web + "/code?t=" + new Date().getTime();
+         },
+
+      },
+      mounted: function() {
+         this.verifCode = ms.web + "/code?t=" + new Date().getTime();
+         if($.cookie('managerName')){
+            this.loginForm.managerName = $.cookie('managerName');
+            this.loginForm.managerPassword = $.cookie('managerPassword');
+         }
+         if (top.location != self.location){
+			top.location = self.location;
+         }
+      }
+   })
+
+</script>

+ 593 - 13
src/main/webapp/WEB-INF/manager/main.ftl

@@ -3,24 +3,604 @@
 <html lang="en">
 <head> 
   <title>铭飞CMS</title> 
-  <meta content="IE=edge" http-equiv="X-UA-Compatible" /> 
+  <meta content="IE=edge" http-equiv="X-UA-Compatible" />
+  <link rel="icon" href="http://cdn.mingsoft.net/global/images/ms.ico" type="x-icon">
   <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" /> 
+  <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
+  <script src="${base}/static/plugins/echarts.4.2.1/echarts.min.js"></script>
+  <#include "../../include/head-file.ftl">
 <style>
 body{  height: 100%;}
+ [v-cloak] {
+   display: none;
+ }
 </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>
+<div id="main" v-cloak>
+  <el-main class="ms-container">
+    <!-- 右侧头部 -->
+    <div class="left">
+      <div class="real-time-data">
+        <el-header class="header" style="height: 35px;">
+          <div> <i class="iconfont icon-shugang"></i>实时数据</div>
+        </el-header>
+        <div class="box">
+          <el-row :gutter="20" class="box-detail" justify="center" style="text-align: center">
+            <el-col :span="8">在售</el-col>
+            <el-col :span="8">断货</el-col>
+            <el-col :span="8">停售</el-col>
+          </el-row>
+          <el-row :gutter="20" class="box-number" >
+            <el-col :span="8">1204</el-col>
+            <el-col :span="8">23</el-col>
+            <el-col :span="8">2</el-col>
+          </el-row>
+          <el-row :gutter="20" class="box-percentage" >
+            <el-col :span="8">99%</el-col>
+            <el-col :span="8">5%</el-col>
+            <el-col :span="8">0.1%</el-col>
+          </el-row>
+        </div>
+      </div>
+      <div class="real-time-data">
+        <el-header class="header" style="height: 35px;">
+          <i class="iconfont icon-shugang"></i>计划目标
+        </el-header>
+        <div class="box">
+          <el-row :gutter="20" class="box-detail" >
+            <el-col :span="12">生产中</el-col>
+            <el-col :span="12">已完成</el-col>
+          </el-row>
+          <el-row :gutter="20" class="box-number" >
+            <el-col :span="12">104</el-col>
+            <el-col :span="12">230</el-col>
+          </el-row>
+          <el-row :gutter="20" class="box-percentage" >
+            <el-col :span="12">28%</el-col>
+            <el-col :span="12">62%</el-col>
+          </el-row>
+        </div>
+      </div>
+      <div class="real-time-data" style="flex: 3;">
+        <el-header class="header" style="height: 35px;">
+          <i class="iconfont icon-shugang"></i>财务状况
+            <div style="float: right;">
+                五月<i class="el-icon-arrow-down"></i>
+            </div>
+        </el-header>
+        <div class="box">
+          <el-row :gutter="20" class="box-detail" >
+            <el-col :span="12">当前余额</el-col>
+            <el-col :span="12">待收货款</el-col>
+          </el-row>
+          <el-row :gutter="20" class="box-number" >
+            <el-col :span="12"><div class="money"><span class="font">¥</span>120400.<span class="font">00</span></div></el-col>
+            <el-col :span="12"><span class="font">¥</span>5111.<span class="font">99</span></el-col>
+          </el-row>
+        </div>
+        <#--统计图-->
+        <div id="chartFinance" style="width: 100%;height: 180px"></div>
+      </div>
+    </div>
+    <div class="right">
+      <div class="right-top">
+        <div class="right-top-box real-time-data" style="width: 40%">
+          <el-header class="header" style="height: 35px;">
+            <i class="iconfont icon-shugang"></i>广告收支对比
+          </el-header>
+          <#--统计图-->
+            <div id="chartAdvertising" style="width: 100%;height: 240px"></div>
+        </div>
+        <div class="right-top-box real-time-data">
+          <el-header class="header">
+            <i class="iconfont icon-shugang"></i>生命周期
+          </el-header>
+          <#--统计图-->
+            <div id="chartLife" style="width: 100%;height: 210px"></div>
+        </div>
+        <div class="right-top-box real-time-data">
+          <el-header class="header">
+            <i class="iconfont icon-shugang"></i>销售物流
+          </el-header>
+            <div id="chartSales" style="width: 100%;height: 210px"></div>
+          <#--统计图-->
+        </div>
+      </div>
+      <div class="real-time-data" style="flex: 5;margin: 9px;">
+        <el-header class="header" style="height: 35px;">
+          <i class="iconfont icon-shugang"></i>团队业绩
+            <div style="float: right;">
+                本周<i class="el-icon-arrow-down"></i>
+            </div>
+        </el-header>
+        <div class="backgroundImage">
+          <div id="chartTeam" style="width: 100%;height: 400px"></div>
+        </div>
+        <#--统计图-->
+      </div>
+    </div>
+  </el-main>
+</div>
+<div id="custom">
+  <el-dialog title="收货地址" :visible.sync="dialogFormVisible">
+    <el-form :model="form">
+      <el-form-item label="活动名称" :label-width="150">
+        <el-input v-model="form.name" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item label="活动区域" :label-width="150">
+        <el-select v-model="form.region" placeholder="请选择活动区域">
+          <el-option label="区域一" value="shanghai"></el-option>
+          <el-option label="区域二" value="beijing"></el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="dialogFormVisible = false">取 消</el-button>
+      <el-button type="primary" @click="dialogFormVisible = false">确 定</el-button>
+    </div>
+  </el-dialog>
+</div>
 </body>
-</html>
+</html>
+<script>
+
+  function cs(){
+    var data= {
+      data(){ return {
+        dialogFormVisible: true,
+        form: {
+          region: "111",
+          formLabelWidth:150,
+          name: "测试弹框"
+        },
+      }} ,
+      mounted: function () {
+        console.log(2222)
+      }
+    };
+    custom('custom',data);
+  }
+  function custom(id,obj) {
+    var dom = parent.document.getElementById("id");
+    if (!dom) {
+      dom = parent.document.createElement('div');
+      dom.id =id;
+      parent.document.body.appendChild(dom);
+    }
+    dom.innerHTML = document.querySelector('#'+id).innerHTML;
+    if(obj.data&&(typeof obj.data)==="object"){
+      obj.data = function () {
+        return obj.data
+      }
+    }
+    var ctor = parent.Vue.extend(obj);
+   return  new ctor().$mount('#'+id);
+  }
+</script>
+<script>
+  var mainVue = new Vue({
+    el: '#main',
+    data:{
+      chartFinance:'',
+      chartAdvertising:'',
+      chartLife:'',
+      chartSales:'',
+      chartTeam:'',
+    },
+    methods: {
+      list: function () {
+        this.finance();
+        this.advertising();
+        this.life();
+        this.sales();
+        this.team();
+      },
+      finance: function () {
+        this.chartFinance = echarts.init(document.getElementById("chartFinance"));
+        var option = {
+          tooltip: {
+            trigger: 'none',
+          },
+          grid:{
+            x:5,
+            y:30,
+            x2:5,
+            y2:30,
+          },
+          xAxis: {
+            type: 'category',
+            silent: false,
+            splitLine: {
+              show: false
+            },
+            axisLine: {
+              show: false
+            },
+            axisTick: {
+              show: false
+            },
+            data: ['01', '02', '03', '04', '05', '06','07']
+          },
+          yAxis: {
+            show: false,
+            minInterval: 8,
+          },
+          series: [
+            {
+              type:'line',
+              smooth: true,
+              data: [{value:7,symbol:'none'},
+                {value:4.5,symbol:'circle',symbolSize:9,itemStyle:{borderColor:'#069bff',color:'#ffe'}},
+                {value:3.5,symbol:'none'},
+                {value:2.5,symbol:'none'},
+                {value:2,symbol:'none'},
+                {value:1.5,symbol:'none'},
+                {value:2,symbol:'none'}],
+              lineStyle:{
+                color:'#069bff',
+                width: 2,
+              },
+            areaStyle: {
+                normal: {
+                    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                        offset: 0,
+                        color: '#cfebfd'
+                    }, {
+                        offset: 1,
+                        color: '#ffe'
+                    }])
+                }
+            },
+              itemStyle:{
+                color:'#069bff',
+                borderWidth: 4,
+              }
+            },
+            {
+              type:'line',
+              smooth: true,
+              data: [{value:2,symbol:'none'},
+                    {value:1,symbol:'none'},
+                    {value:2,symbol:'none'},
+                    {value:3,symbol:'none'},
+                    {value:5,symbol:'circle',symbolSize:9,itemStyle:{borderColor:'#feb23a',color:'#ffe'}},
+                    {value:4,symbol:'none'},
+                    {value:6,symbol:'none'}],
+              lineStyle:{
+                color:'#feb23a',
+                width: 2,
+              },
+                areaStyle: {
+                    normal: {
+                        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                            offset: 0,
+                            color: '#fedba3'
+                        }, {
+                            offset: 1,
+                            color: '#ffe'
+                        }])
+                    }
+                },
+              itemStyle:{
+                color:'#feb23a',
+                borderWidth: 4,
+              }
+            }
+          ]
+        };
+          this.chartFinance.setOption(option);
+      },
+        advertising: function(){
+            this.chartAdvertising = echarts.init(document.getElementById("chartAdvertising"));
+            var option = {
+                tooltip: {
+                    trigger: 'none',
+                },
+                legend: {
+                    itemWidth: 10,
+                    itemHeight: 10,
+                    right: '10%',
+                    top: 0,
+                    data:['支出','收入']
+                },
+                grid:{
+                  x:25,
+                  y:10,
+                  x2:25,
+                  y2:25,
+                },
+                xAxis: {
+                    type: 'category',
+                    silent: false,
+                    splitLine: {
+                        show: false
+                    },
+                    axisLine: {
+                        show: false
+                    },
+                    axisTick: {
+                        show: false
+                    },
+                    data: ['01', '02', '03', '04', '05', '06','07']
+                },
+                yAxis: {
+                    splitLine:{
+                      show: true,
+                      lineStyle:{
+                        color:'#f6f6f6',
+                      },
+                    },
+                    axisLine:{
+                      show: false,
+                    },
+                    axisTick:{
+                      show: false,
+                    },
+                    axisLabel:{
+                      show: false,
+                    },
+                },
+                series: [
+                    {
+                        name:'支出',
+                        type:'bar',
+                        barWidth:'15%',
+                        itemStyle:{
+                            color: '#feb23a',
+                        },
+                        data:[7,7,7,4,5,7.5,7.5]
+                    },
+                    {
+                        name:'收入',
+                        type:'bar',
+                        barWidth:'15%',
+                        itemStyle:{
+                            color: '#069bff',
+                        },
+                        data:[8,8,5,3.5,8,9,9]
+                    }
+                ]
+            };
+            this.chartAdvertising.setOption(option);
+        },
+        life: function(){
+            this.chartLife = echarts.init(document.getElementById("chartLife"));
+            var option = {
+                tooltip : {
+                    trigger: 'none',
+                },
+                legend: {
+                  itemWidth: 10,
+                  itemHeight: 10,
+                  itemGap:20,
+                    x : 'center',
+                    y : 'bottom',
+                    data:['热销期','复购率','平销期','旺销期','滞销期']
+                },
+                calculable : true,
+                series : [
+                    {
+                        type:'pie',
+                        radius : [20, 40],
+                        center: ['50%','40%'],
+                        roseType : 'radius',
+                        data:[
+                            {value:150, name:'热销期',itemStyle:{color: '#2e65fd'}},
+                            {value:100, name:'复购率',itemStyle:{color: '#8abe78'}},
+                            {value:60, name:'平销期',itemStyle:{color: '#feb23a'}},
+                            {value:100, name:'旺销期',itemStyle:{color: '#69c0fe'}},
+                            {value:40, name:'滞销期',itemStyle:{color: '#d0e3fe'}},
+                        ]
+                    }
+                ]
+            };
+            this.chartLife.setOption(option);
+        },
+        sales: function(){
+            this.chartSales = echarts.init(document.getElementById("chartSales"));
+            var option = {
+                tooltip : {
+                    trigger: 'none',
+                },
+                legend: {
+                  itemWidth: 10,
+                  itemHeight: 10,
+                  itemGap:20,
+                    x : 'center',
+                    y : 'bottom',
+                    data:['0-2天','2-5天','5-8天','8天以上']
+                },
+                calculable : true,
+                series : [
+                    {
+                        type:'pie',
+                        radius : [20, 40],
+                        center: ['50%','40%'],
+                        roseType : 'radius',
+                        data:[
+                            {value:130, name:'0-2天',itemStyle:{color: '#2e65fd'}},
+                            {value:30, name:'2-5天',itemStyle:{color: '#d0e3fe'}},
+                            {value:80, name:'5-8天',itemStyle:{color: '#feb23a'}},
+                            {value:100, name:'8天以上',itemStyle:{color: '#8abe78'}},
+                        ]
+                    }
+                ]
+            };
+            this.chartSales.setOption(option);
+        },
+        team: function(){
+            this.chartTeam = echarts.init(document.getElementById("chartTeam"));
+            var option = {
+                grid:{
+                  x:40,
+                  y:40,
+                  x2:20,
+                  y2:40,
+                },
+                xAxis: {
+                    type: 'category',
+                    boundaryGap: false,
+                    silent: false,
+                    splitLine: {
+                        show: false
+                    },
+                    axisLine: {
+                        show: false
+                    },
+                    axisTick: {
+                        show: false
+                    },
+                    data: ['30.05', '31.05', '01.06', '02.06', '03.06', '04.06', '05.06','06.06','07.06','08.06','09.06']
+                },
+                yAxis: {
+                    type: 'value',
+                    boundaryGap: true,
+                    axisLine:{
+                      show: false,
+                    },
+                    axisTick:{
+                      show: false,
+                    },
+                    splitLine:{
+                      show: true,
+                    },
+                },
+                series: [{
+                    data: [{value:42.5,symbol:'none'},
+                      {value:39,symbol:'none'},
+                      {value:45,symbol:'none'},
+                      {value:30,symbol:'none'},
+                      {value:38,symbol:'none'},
+                      {value:45,symbol:'none'},
+                      {value:30,symbol:'none'},
+                      {value:36,symbol:'none'},
+                      {value:46,symbol:'circle',symbolSize:10,itemStyle:{borderColor:'#0099ff',color:'#ffe',borderWidth:4}},
+                      {value:28,symbol:'none'},
+                      {value:45,symbol:'none'}],
+                    type: 'line',
+                    markPoint : {
+                        data : [
+                            {type : 'max', name: '最大值'},
+                        ]
+                    },
+                    smooth: 0.5,
+                    lineStyle:{
+                        color: '#0099ff',
+                        width: 6,
+                    },
+                    itemStyle:{
+                        color: '#0099ff',
+                        width: 5,
+                    },
+                }]
+            };
+            this.chartTeam.setOption(option);
+        },
+    },
+    mounted(){
+      var that = this;
+      that.$nextTick(function () {
+        that.list();
+      });
+    },
+  })
+  window.addEventListener("resize", function () {
+    mainVue.chartTeam.resize();
+    mainVue.chartFinance.resize();
+    mainVue.chartAdvertising.resize();
+    mainVue.chartLife.resize();
+    mainVue.chartSales.resize();
+  });
+  window.onload = function () {
+    mainVue.chartAdvertising.resize();
+    mainVue.chartLife.resize();
+    mainVue.chartSales.resize();
+    mainVue.chartTeam.resize();
+    mainVue.chartFinance.resize();
+    mainVue.chartAdvertising.resize();
+    mainVue.chartLife.resize();
+  }
+</script>
+<style>
+  html{
+    overflow: hidden;
+  }
+  #main .ms-container{
+    display: flex;
+    flex-direction: row;
+    height: 100vh;
+    margin: 0px !important;
+ }
+  #main{
+    min-width: 1200px;
+ }
+ #main .left{
+   display: flex;
+   flex-direction: column;
+   width: 25%;
+ }
+ #main .left .real-time-data{
+   flex: 2;
+   margin: 9px;
+ }
+ #main .right-top .right-top-box{
+   width: 30%;
+   margin: 9px;
+ }
+ #main .right{
+   width: 75%;
+   display: flex;
+   flex-direction: column;
+ }
+ #main .right-top{
+   display: flex;
+   flex-direction: row;
+   flex: 4;
+ }
+  #main .real-time-data{
+    box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04);
+  }
+  #main .iconfont{
+    padding-top: 5px;
+    font-size: 20px;
+    color: #0099ff;
+  }
+  #main .header{
+    font-size: 16px;
+    color: #333;
+    padding-top: 10px;
+  }
+  #main .box{
+    padding: 0 10px;
+    text-align: center;
+    padding-bottom: 17px;
+  }
+  #main .box-detail{
+    color: #3c5175;
+    padding-top: 24px;
+    font-size: 14px;
+  }
+  #main .box-number{
+    color: #0099ff;
+    padding-top: 24px;
+    font-size: 19px;
+    font-weight: bolder;
+  }
+  #main .box-percentage{
+    color: #3c5175;
+    padding-top: 24px;
+    font-size: 14px;
+  }
+  #main .box-number .money{
+    color: #feb23a;
+  }
+  #main .font{
+    font-size: 16px;
+  }
+  #main .backgroundImage{
+    background: url('../images/background.png') no-repeat center!important;
+    background-size: 132% 80%!important;
+  }
+</style>

+ 1 - 1
src/main/webapp/templets/1/default/about.htm

@@ -6,7 +6,7 @@
 
     <body>
         <#include "head.htm"/>
-        <div class="ms-banner" style="background:url({ms:global.host/}/{ms:global.style/}images/about_us.jpg) no-repeat center;">
+        <div class="ms-banner" style="background:url({ms:global.host/}/{ms:global.style/}/images/about_us.jpg) no-repeat center;">
             <p class="banner_tit_about animated fadeInLeft">关于我们</p>
             <p class="banner_tit_about_des animated fadeInRight">About us</p>
         </div>

+ 1 - 1
src/main/webapp/templets/1/default/advice.htm

@@ -5,7 +5,7 @@
     </head>
     <body>
         <#include "head.htm"/>
-        <div class="ms-banner" style="background:url({ms:global.host/}/{ms:global.style/}images/talk_online.jpeg) no-repeat center;">
+        <div class="ms-banner" style="background:url({ms:global.host/}/{ms:global.style/}/images/talk_online.jpeg) no-repeat center;">
             <p class="banner_tit_other animated fadeInLeft">在线留言</p>
             <p class="banner_tit_other_des animated fadeInRight">Talk online</p>
         </div>

+ 1 - 1
src/main/webapp/templets/1/default/case-list.htm

@@ -6,7 +6,7 @@
 
     <body>
         <#include "head.htm"/>
-        <div class="ms-banner" style="background:url({ms:global.host/}/{ms:global.style/}images/00.png) no-repeat center;">
+        <div class="ms-banner" style="background:url({ms:global.host/}/{ms:global.style/}/images/00.png) no-repeat center;">
             <p class="banner_tit_other animated fadeInLeft">案&nbsp;&nbsp;&nbsp;例</p>
             <p class="banner_tit_other_des animated fadeInRight">Case list</p>
         </div>

+ 1 - 0
src/main/webapp/templets/1/default/head-file.htm

@@ -1,5 +1,6 @@
 <title>{ms:global.name/}</title>
 <meta charset="utf-8">
+<link rel="icon" href="http://cdn.mingsoft.net/global/images/ms.ico" type="x-icon">
 <link rel="stylesheet" type="text/css" href="{ms:global.host/}/plugins/iconfont/1.0.0/iconfont.css" />
 <link rel="stylesheet/less" type="text/css" href="{ms:global.host/}/{ms:global.style/}/less/base.less">
 <link rel="stylesheet/less" type="text/css" href="{ms:global.host/}/{ms:global.style/}/less/index.less">

+ 3 - 3
src/main/webapp/templets/1/default/m/about.htm

@@ -1,8 +1,8 @@
 <!DOCTYPE html>
 <html>
-    <#include "m/head-file.htm"/>
+    <#include "/m/head-file.htm"/>
     <body>
-		<#include "m/head.htm"/>
+		<#include "/m/head.htm"/>
         <div class="ms-banner">
             <img src="{ms:global.host/}/{ms:global.style/}/images/about.png" class="am-img-responsive" alt=""/>
         </div>
@@ -30,6 +30,6 @@
                 </div>
             </div>
         </div>
-       <#include "m/footer.htm"/>
+       <#include "/m/footer.htm"/>
     </body>
 </html>

+ 3 - 3
src/main/webapp/templets/1/default/m/advice.htm

@@ -1,8 +1,8 @@
 <!DOCTYPE html>
 <html>
-    <#include "m/head-file.htm"/>
+    <#include "/m/head-file.htm"/>
     <body>
-        <#include "m/head.htm"/>
+        <#include "/m/head.htm"/>
         <div class="ms-banner">
             <img src="{ms:global.host/}/{ms:global.style/}/images/message.png" alt="" width="100%" />
         </div>
@@ -20,7 +20,7 @@
                 <button type="button" class="am-btn am-btn-primary ms-content-button">提交</button>
             </form>
         </div>
-        <#include "m/footer.htm"/>
+        <#include "/m/footer.htm"/>
     </body>
 </html>
 <script>

+ 3 - 3
src/main/webapp/templets/1/default/m/case-list.htm

@@ -1,8 +1,8 @@
 <!DOCTYPE html>
 <html>
-    <#include "m/head-file.htm"/>
+    <#include "/m/head-file.htm"/>
     <body>
-        <#include "m/head.htm"/>
+        <#include "/m/head.htm"/>
         <div class="ms-banner">
             <img src="{ms:global.host/}/{ms:global.style/}/images/mo.png" class="am-img-responsive" alt=""/>
         </div>
@@ -17,7 +17,7 @@
                 {/ms:arclist}
             </ul>
         </div>
-        <#include "m/footer.htm"/>
+        <#include "/m/footer.htm"/>
     </body>
 </html>
 <script>

+ 3 - 3
src/main/webapp/templets/1/default/m/contact.htm

@@ -1,8 +1,8 @@
 <!DOCTYPE html>
 <html>
-    <#include "m/head-file.htm"/>
+    <#include "/m/head-file.htm"/>
     <body>
-		<#include "m/head.htm"/>
+		<#include "/m/head.htm"/>
         <div class="ms-banner">
             <img src="{ms:global.host/}/{ms:global.style/}/images/about.png" class="am-img-responsive" alt=""/>
         </div>
@@ -30,6 +30,6 @@
                 </div>
             </div>
         </div>
-       <#include "m/footer.htm"/>
+       <#include "/m/footer.htm"/>
     </body>
 </html>

+ 3 - 3
src/main/webapp/templets/1/default/m/news-list.htm

@@ -1,8 +1,8 @@
 <!DOCTYPE html>
 <html>
-    <#include "m/head-file.htm"/>
+    <#include "/m/head-file.htm"/>
     <body>
-		<#include "m/head.htm"/>
+		<#include "/m/head.htm"/>
         <div class="ms-banner">
             <img src="{ms:global.host/}/{ms:global.style/}/images/case.png" class="am-img-responsive" alt=""/>
         </div>
@@ -20,6 +20,6 @@
                 </div>
             </div>
         </div>
-        <#include "m/footer.htm"/>
+        <#include "/m/footer.htm"/>
     </body>
 </html>

+ 3 - 3
src/main/webapp/templets/1/default/m/news-show.htm

@@ -1,12 +1,12 @@
 <!DOCTYPE html>
 <html>
     <head>
-        <#include "m/head-file.htm"/>
+        <#include "/m/head-file.htm"/>
         <link rel="stylesheet" type="text/css" href="{ms:global.host/}/{ms:global.style/}/css/jquery.sinaemotion.css" />
         <script type="text/javascript" src="{ms:global.host/}/{ms:global.style/}/js/jquery.sinaEmotion.js"></script>
     </head>
     <body>
-        <#include "m/head.htm"/>
+        <#include "/m/head.htm"/>
         <div class="ms-banner">
             <img src="{ms:global.host/}/{ms:global.style/}/images/case.png" class="am-img-responsive" alt="" />
         </div>
@@ -81,7 +81,7 @@
                 </div>
             </div>
         </div>
-        <#include "m/footer.htm"/>
+        <#include "/m/footer.htm"/>
     </body>
     <script>
         var newsShowVue = new Vue({

+ 1 - 1
src/main/webapp/templets/1/default/news-show.htm

@@ -8,7 +8,7 @@
 
     <body>
         <#include "head.htm">
-        <div class="ms-banner" style="background:url({ms:global.host/}/{ms:global.style/}images/news2.png) no-repeat center;">
+        <div class="ms-banner" style="background:url({ms:global.host/}/{ms:global.style/}/images/news2.png) no-repeat center;">
             <p class="banner_tit_other animated fadeInLeft">公司动态</p>
             
             <p class="banner_tit_other_des animated fadeInRight">Our company</p>

+ 4 - 4
src/main/webapp/templets/1/default/search.htm

@@ -27,10 +27,10 @@
                     </ul>
                 </div>
                 <div class="ms-content-main-page">
-	              	 <a class="ms-content-main-page-first" href="{ms:global.url/}{ms:page.index/}">首页</a>
-		             <a class="ms-content-main-page-upper" href="{ms:global.url/}{ms:page.pre/}">上一页</a>
-		             <a class="ms-content-main-page-next" href="{ms:global.url/}{ms:page.next/}">下一页</a>
-		             <a class="ms-content-main-page-last" href="{ms:global.url/}{ms:page.last/}">末页</a>
+	              	 <a class="ms-content-main-page-first" href="{ms:page.index/}">首页</a>
+		             <a class="ms-content-main-page-upper" href="{ms:page.pre/}">上一页</a>
+		             <a class="ms-content-main-page-next" href="{ms:page.next/}">下一页</a>
+		             <a class="ms-content-main-page-last" href="{ms:page.last/}">末页</a>
 	            </div>
             </div>
         </div>