diff --git a/pom.xml b/pom.xml index acd60046..e67217fc 100644 --- a/pom.xml +++ b/pom.xml @@ -114,6 +114,12 @@ log4j-api ${log4j.version} + + + com.alibaba + easyexcel + 2.2.7 + diff --git a/src/main/java/net/mingsoft/excel/listener/DataListener.java b/src/main/java/net/mingsoft/excel/listener/DataListener.java new file mode 100644 index 00000000..dfce4746 --- /dev/null +++ b/src/main/java/net/mingsoft/excel/listener/DataListener.java @@ -0,0 +1,62 @@ +package net.mingsoft.excel.listener; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import java.util.ArrayList; +import java.util.List; + +public class DataListener extends AnalysisEventListener { + private final List dataList = new ArrayList(); + + public DataListener() { + } + + public void invoke(T data, AnalysisContext analysisContext) { + this.dataList.add(data); + } + + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + } + + public List getDataList() { + return this.dataList; + } + + public boolean equals(final Object o) { + if (o == this) { + return true; + } else if (!(o instanceof DataListener)) { + return false; + } else { + DataListener other = (DataListener)o; + if (!other.canEqual(this)) { + return false; + } else if (!super.equals(o)) { + return false; + } else { + Object this$dataList = this.getDataList(); + Object other$dataList = other.getDataList(); + if (this$dataList == null) { + if (other$dataList != null) { + return false; + } + } else if (!this$dataList.equals(other$dataList)) { + return false; + } + + return true; + } + } + } + + protected boolean canEqual(final Object other) { + return other instanceof DataListener; + } + + public int hashCode() { + int result = super.hashCode(); + Object $dataList = this.getDataList(); + result = result * 59 + ($dataList == null ? 43 : $dataList.hashCode()); + return result; + } +} diff --git a/src/main/java/net/mingsoft/excel/listener/ImportListener.java b/src/main/java/net/mingsoft/excel/listener/ImportListener.java new file mode 100644 index 00000000..6507e4da --- /dev/null +++ b/src/main/java/net/mingsoft/excel/listener/ImportListener.java @@ -0,0 +1,113 @@ +package net.mingsoft.excel.listener; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import net.mingsoft.excel.support.ExcelImporter; + +import java.util.ArrayList; +import java.util.List; + +public class ImportListener extends AnalysisEventListener { + private int batchCount = 3000; + private List list = new ArrayList(); + private final ExcelImporter importer; + + public void invoke(T data, AnalysisContext analysisContext) { + this.list.add(data); + if (this.list.size() >= this.batchCount) { + this.importer.save(this.list); + this.list.clear(); + } + + } + + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + this.importer.save(this.list); + this.list.clear(); + } + + public int getBatchCount() { + return this.batchCount; + } + + public List getList() { + return this.list; + } + + public ExcelImporter getImporter() { + return this.importer; + } + + public void setBatchCount(final int batchCount) { + this.batchCount = batchCount; + } + + public void setList(final List list) { + this.list = list; + } + + public String toString() { + return "ImportListener(batchCount=" + this.getBatchCount() + ", list=" + this.getList() + ", importer=" + this.getImporter() + ")"; + } + + public ImportListener(final ExcelImporter importer) { + this.importer = importer; + } + + public boolean equals(final Object o) { + if (o == this) { + return true; + } else if (!(o instanceof ImportListener)) { + return false; + } else { + ImportListener other = (ImportListener)o; + if (!other.canEqual(this)) { + return false; + } else if (!super.equals(o)) { + return false; + } else if (this.getBatchCount() != other.getBatchCount()) { + return false; + } else { + label40: { + Object this$list = this.getList(); + Object other$list = other.getList(); + if (this$list == null) { + if (other$list == null) { + break label40; + } + } else if (this$list.equals(other$list)) { + break label40; + } + + return false; + } + + Object this$importer = this.getImporter(); + Object other$importer = other.getImporter(); + if (this$importer == null) { + if (other$importer != null) { + return false; + } + } else if (!this$importer.equals(other$importer)) { + return false; + } + + return true; + } + } + } + + protected boolean canEqual(final Object other) { + return other instanceof ImportListener; + } + + public int hashCode() { + int result = super.hashCode(); + result = result * 59 + this.getBatchCount(); + Object $list = this.getList(); + result = result * 59 + ($list == null ? 43 : $list.hashCode()); + Object $importer = this.getImporter(); + result = result * 59 + ($importer == null ? 43 : $importer.hashCode()); + return result; + } +} diff --git a/src/main/java/net/mingsoft/excel/support/ExcelException.java b/src/main/java/net/mingsoft/excel/support/ExcelException.java new file mode 100644 index 00000000..7293aae5 --- /dev/null +++ b/src/main/java/net/mingsoft/excel/support/ExcelException.java @@ -0,0 +1,9 @@ +package net.mingsoft.excel.support; + +public class ExcelException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public ExcelException(String message) { + super(message); + } +} diff --git a/src/main/java/net/mingsoft/excel/support/ExcelImporter.java b/src/main/java/net/mingsoft/excel/support/ExcelImporter.java new file mode 100644 index 00000000..886a77fe --- /dev/null +++ b/src/main/java/net/mingsoft/excel/support/ExcelImporter.java @@ -0,0 +1,7 @@ +package net.mingsoft.excel.support; + +import java.util.List; + +public interface ExcelImporter { + void save(List data); +} \ No newline at end of file diff --git a/src/main/java/net/mingsoft/excel/util/ExcelUtil.java b/src/main/java/net/mingsoft/excel/util/ExcelUtil.java new file mode 100644 index 00000000..06d92338 --- /dev/null +++ b/src/main/java/net/mingsoft/excel/util/ExcelUtil.java @@ -0,0 +1,99 @@ +package net.mingsoft.excel.util; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.read.builder.ExcelReaderBuilder; +import com.alibaba.excel.read.builder.ExcelReaderSheetBuilder; +import com.alibaba.excel.read.listener.ReadListener; +import com.alibaba.excel.util.DateUtils; +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; +import java.util.Date; +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import net.mingsoft.excel.listener.DataListener; +import net.mingsoft.excel.listener.ImportListener; +import net.mingsoft.excel.support.ExcelException; +import net.mingsoft.excel.support.ExcelImporter; +import org.apache.commons.codec.Charsets; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +public class ExcelUtil { + public ExcelUtil() { + } + + public static List read(MultipartFile excel, Class clazz) { + DataListener dataListener = new DataListener(); + ExcelReaderBuilder builder = getReaderBuilder(excel, dataListener, clazz); + if (builder == null) { + return null; + } else { + builder.doReadAll(); + return dataListener.getDataList(); + } + } + + public static List read(MultipartFile excel, int sheetNo, Class clazz) { + return read(excel, sheetNo, 1, clazz); + } + + public static List read(MultipartFile excel, int sheetNo, int headRowNumber, Class clazz) { + DataListener dataListener = new DataListener(); + ExcelReaderBuilder builder = getReaderBuilder(excel, dataListener, clazz); + if (builder == null) { + return null; + } else { + ((ExcelReaderSheetBuilder)builder.sheet(sheetNo).headRowNumber(headRowNumber)).doRead(); + return dataListener.getDataList(); + } + } + + public static void save(MultipartFile excel, ExcelImporter importer, Class clazz) { + ImportListener importListener = new ImportListener(importer); + ExcelReaderBuilder builder = getReaderBuilder(excel, importListener, clazz); + if (builder != null) { + builder.doReadAll(); + } + + } + + public static void export(HttpServletResponse response, List dataList, Class clazz) throws IOException { + try { + export(response, DateUtils.format(new Date(), "yyyyMMddHHmmss"), "导出数据", dataList, clazz); + } catch (Throwable var4) { + throw var4; + } + } + + public static void export(HttpServletResponse response, String fileName, String sheetName, List dataList, Class clazz) throws IOException { + try { + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding(Charsets.UTF_8.name()); + fileName = URLEncoder.encode(fileName, Charsets.UTF_8.name()); + response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); + EasyExcel.write(response.getOutputStream(), clazz).sheet(sheetName).doWrite(dataList); + } catch (Throwable var6) { + throw var6; + } + } + + public static ExcelReaderBuilder getReaderBuilder(MultipartFile excel, ReadListener readListener, Class clazz) { + String filename = excel.getOriginalFilename(); + if (StringUtils.isEmpty(filename)) { + throw new ExcelException("请上传文件!"); + } else if (!StringUtils.endsWithIgnoreCase(filename, ".xls") && !StringUtils.endsWithIgnoreCase(filename, ".xlsx")) { + throw new ExcelException("请上传正确的excel文件!"); + } else { + try { + InputStream inputStream = new BufferedInputStream(excel.getInputStream()); + return EasyExcel.read(inputStream, clazz, readListener); + } catch (IOException var6) { + var6.printStackTrace(); + return null; + } + } + } +} diff --git a/src/main/java/net/mingsoft/statistics/action/BaseAction.java b/src/main/java/net/mingsoft/statistics/action/BaseAction.java new file mode 100644 index 00000000..d6c822c7 --- /dev/null +++ b/src/main/java/net/mingsoft/statistics/action/BaseAction.java @@ -0,0 +1,43 @@ + +package net.mingsoft.statistics.action; + +import java.util.MissingResourceException; +import net.mingsoft.base.util.BundleUtil; + +/** +* statistics基础控制层 +* @author 凉寂 +* 创建日期:2024-3-19 9:38:54
+* 历史修订:
+*/ +public class BaseAction extends net.mingsoft.basic.action.BaseAction{ + + /** + * 读取国际化资源文件(没有占位符号的),优先模块对应的资源文件,如果模块资源文件找不到就会优先基础层 + * @param key 国际化文件key + * @return 国际化字符串 + */ + protected String getResString(String key) { + return this.getResString(key,""); + } + + /** + * 读取国际化资源文件,优先模块对应的资源文件,如果模块资源文件找不到就会优先基础层 + * @param key 国际化文件key + * @param params 拼接值 + * @return 国际化字符串 + */ + protected String getResString(String key,String... params) { + String str = ""; + try { + str = super.getResString(key); + //替换占位 + for (int i = 0; i < params.length; i++) { + str = str.replace("{" + i + "}", params[i]); + } + } catch (MissingResourceException e) { + str = BundleUtil.getString(net.mingsoft.statistics.constant.Const.RESOURCES,key,params); + } + return str; + } +} diff --git a/src/main/java/net/mingsoft/statistics/action/PublishListAction.java b/src/main/java/net/mingsoft/statistics/action/PublishListAction.java new file mode 100644 index 00000000..c6b486bf --- /dev/null +++ b/src/main/java/net/mingsoft/statistics/action/PublishListAction.java @@ -0,0 +1,180 @@ +package net.mingsoft.statistics.action; + +import java.util.List; +import java.io.File; +import java.util.ArrayList; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import cn.hutool.core.util.ObjectUtil; +import java.util.*; + +import net.mingsoft.base.entity.ResultData; +import org.apache.commons.lang3.StringUtils; +import org.springframework.validation.BindingResult; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.ui.ModelMap; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import java.util.stream.Collectors; + +import org.springframework.web.bind.annotation.*; +import net.mingsoft.statistics.biz.IPublishListBiz; +import net.mingsoft.statistics.entity.PublishListEntity; +import net.mingsoft.base.entity.BaseEntity; +import net.mingsoft.basic.util.BasicUtil; +import net.mingsoft.basic.util.StringUtil; +import net.mingsoft.basic.bean.EUListBean; +import net.mingsoft.basic.annotation.LogAnn; +import net.mingsoft.basic.constant.e.BusinessTypeEnum; +import org.apache.commons.lang3.StringUtils; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import springfox.documentation.annotations.ApiIgnore; +/** +* 发布量统计管理控制层 +* @author 凉寂 +* 创建日期:2024-3-19 9:38:54
+* 历史修订:
+*/ +@Api(tags = "后台-发布量统计接口") +@Controller("statisticsPublishListAction") +@RequestMapping("/${ms.manager.path}/statistics/publishList") +public class PublishListAction extends BaseAction{ + + + /** + * 注入发布量统计业务层 + */ + @Autowired + private IPublishListBiz publishListBiz; + + /** + * 返回主界面index + */ + @GetMapping("/index") + public String index(HttpServletResponse response,HttpServletRequest request) { + return "/statistics/publish-list/index"; + } + + /** + * 查询发布量统计列表 + * @param publishList 发布量统计实体 + */ + @ApiOperation(value = "查询发布量统计列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "perYear", value = "按年份查询", paramType = "query"), + }) + @RequestMapping(value ="/list",method = {RequestMethod.GET,RequestMethod.POST}) + @ResponseBody + public ResultData list(@ModelAttribute @ApiIgnore PublishListEntity publishList,HttpServletResponse response, HttpServletRequest request,@ApiIgnore ModelMap model,BindingResult result) { + BasicUtil.startPage(); + List publishListList = null; + if ( publishList.getSqlWhere() != null){ + publishListList = publishListBiz.query(publishList); + } else { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(publishList).orderByDesc(PublishListEntity::getCreateDate); + publishListList = publishListBiz.list(wrapper); + } + return ResultData.build().success(new EUListBean(publishListList,(int)BasicUtil.endPage(publishListList).getTotal())); + } + + /** + * 返回编辑界面publishList的form + */ + @GetMapping("/form") + public String form(@ModelAttribute PublishListEntity publishList,HttpServletResponse response,HttpServletRequest request,ModelMap model) { + return "/statistics/publish-list/form"; + } + + + /** + * 获取发布量统计 + * @param publishList 发布量统计实体 + */ + @ApiOperation(value = "获取发布量统计列表接口") + @ApiImplicitParam(name = "id", value = "主键ID", required =true,paramType="query") + @GetMapping("/get") + @ResponseBody + public ResultData get(@ModelAttribute @ApiIgnore PublishListEntity publishList,HttpServletResponse response, HttpServletRequest request,@ApiIgnore ModelMap model) { + if (publishList.getId()==null) { + return ResultData.build().error(); + } + PublishListEntity _publishList = (PublishListEntity)publishListBiz.getById(publishList.getId()); + return ResultData.build().success(_publishList); + } + + + /** + * 保存发布量统计 + * @param publishList 发布量统计实体 + */ + @ApiOperation(value = "保存发布量统计列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "perYear", value = "按年份查询", required =true, paramType = "query"), + }) + @PostMapping("/save") + @ResponseBody + @LogAnn(title = "保存发布量统计", businessType = BusinessTypeEnum.INSERT) + @RequiresPermissions("statistics:publishList:save") + public ResultData save(@ModelAttribute @ApiIgnore PublishListEntity publishList, HttpServletResponse response, HttpServletRequest request) { + publishListBiz.save(publishList); + return ResultData.build().success(publishList); + } + + /** + * 删除发布量统计 + * + * @param publishLists 发布量统计实体 + */ + @ApiOperation(value = "批量删除发布量统计列表接口") + @PostMapping("/delete") + @ResponseBody + @LogAnn(title = "删除发布量统计", businessType = BusinessTypeEnum.DELETE) + @RequiresPermissions("statistics:publishList:del") + public ResultData delete(@RequestBody List publishLists,HttpServletResponse response, HttpServletRequest request) { + List ids = (List)publishLists.stream().map((p) -> {return p.getId();}).collect(Collectors.toList()); + return this.publishListBiz.removeByIds(ids) ? ResultData.build().success() : ResultData.build().error(this.getResString("err.error", new String[]{this.getResString("id")})); + } + + /** + * 更新发布量统计列表 + * + * @param publishList 发布量统计实体 + */ + @ApiOperation(value = "更新发布量统计列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "perYear", value = "按年份查询", required =true, paramType = "query"), + }) + @PostMapping("/update") + @ResponseBody + @LogAnn(title = "更新发布量统计", businessType = BusinessTypeEnum.UPDATE) + @RequiresPermissions("statistics:publishList:update") + public ResultData update(@ModelAttribute @ApiIgnore PublishListEntity publishList, HttpServletResponse response, + HttpServletRequest request) { + //先查询数据是否存在 + PublishListEntity _publishList = (PublishListEntity)publishListBiz.getById(publishList.getId()); + if(_publishList == null) { + return ResultData.build().error(getResString("err.not.exist",publishList.getId() )); + } + publishListBiz.updateById(publishList); + return ResultData.build().success(publishList); + } + + +} \ No newline at end of file diff --git a/src/main/java/net/mingsoft/statistics/biz/IPublishListBiz.java b/src/main/java/net/mingsoft/statistics/biz/IPublishListBiz.java new file mode 100644 index 00000000..f04c6312 --- /dev/null +++ b/src/main/java/net/mingsoft/statistics/biz/IPublishListBiz.java @@ -0,0 +1,16 @@ +package net.mingsoft.statistics.biz; + +import net.mingsoft.base.biz.IBaseBiz; +import net.mingsoft.statistics.entity.PublishListEntity; + + +/** + * 发布量统计业务 + * @author 凉寂 + * 创建日期:2024-3-19 9:38:54
+ * 历史修订:
+ */ +public interface IPublishListBiz extends IBaseBiz { + + +} diff --git a/src/main/java/net/mingsoft/statistics/biz/impl/PublishListBizImpl.java b/src/main/java/net/mingsoft/statistics/biz/impl/PublishListBizImpl.java new file mode 100644 index 00000000..618c14fb --- /dev/null +++ b/src/main/java/net/mingsoft/statistics/biz/impl/PublishListBizImpl.java @@ -0,0 +1,34 @@ +package net.mingsoft.statistics.biz.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import net.mingsoft.base.biz.impl.BaseBizImpl; +import net.mingsoft.base.dao.IBaseDao; +import java.util.*; +import net.mingsoft.statistics.entity.PublishListEntity; +import net.mingsoft.statistics.biz.IPublishListBiz; +import net.mingsoft.statistics.dao.IPublishListDao; + +/** +* 发布量统计管理持久化层 +* @author 凉寂 +* 创建日期:2024-3-19 9:38:54
+* 历史修订:
+*/ +@Service("statisticspublishListBizImpl") +public class PublishListBizImpl extends BaseBizImpl implements IPublishListBiz { + + + @Autowired + private IPublishListDao publishListDao; + + + @Override + protected IBaseDao getDao() { + // TODO Auto-generated method stub + return publishListDao; + } + + + +} diff --git a/src/main/java/net/mingsoft/statistics/constant/Const.java b/src/main/java/net/mingsoft/statistics/constant/Const.java new file mode 100644 index 00000000..4c0d18d7 --- /dev/null +++ b/src/main/java/net/mingsoft/statistics/constant/Const.java @@ -0,0 +1,18 @@ +package net.mingsoft.statistics.constant; + +import java.util.ResourceBundle; + +/** + * statistics定义 + * @author 凉寂 + * 创建日期:2024-3-19 9:38:54
+ * 历史修订:
+ */ +public final class Const { + + /** + * 资源文件 + */ + public final static String RESOURCES = "net.mingsoft.statistics.resources.resources"; + +} diff --git a/src/main/java/net/mingsoft/statistics/dao/IPublishListDao.java b/src/main/java/net/mingsoft/statistics/dao/IPublishListDao.java new file mode 100644 index 00000000..5199a464 --- /dev/null +++ b/src/main/java/net/mingsoft/statistics/dao/IPublishListDao.java @@ -0,0 +1,14 @@ +package net.mingsoft.statistics.dao; + +import net.mingsoft.base.dao.IBaseDao; +import java.util.*; +import net.mingsoft.statistics.entity.PublishListEntity; + +/** + * 发布量统计持久层 + * @author 凉寂 + * 创建日期:2024-3-19 9:38:54
+ * 历史修订:
+ */ +public interface IPublishListDao extends IBaseDao { +} diff --git a/src/main/java/net/mingsoft/statistics/dao/IPublishListDao.xml b/src/main/java/net/mingsoft/statistics/dao/IPublishListDao.xml new file mode 100644 index 00000000..824eb103 --- /dev/null +++ b/src/main/java/net/mingsoft/statistics/dao/IPublishListDao.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + diff --git a/src/main/java/net/mingsoft/statistics/entity/PublishListEntity.java b/src/main/java/net/mingsoft/statistics/entity/PublishListEntity.java new file mode 100644 index 00000000..03ad4c01 --- /dev/null +++ b/src/main/java/net/mingsoft/statistics/entity/PublishListEntity.java @@ -0,0 +1,55 @@ +package net.mingsoft.statistics.entity; + + +import org.springframework.format.annotation.DateTimeFormat; +import com.fasterxml.jackson.annotation.JsonFormat; +import net.mingsoft.base.entity.BaseEntity; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.SqlCondition; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; + +import java.util.Date; +/** +* 发布量统计实体 +* @author 凉寂 +* 创建日期:2024-3-19 9:38:54
+* 历史修订:
+*/ +@TableName("STATISTICS_PUBLISHPUBLISH_LIST") +public class PublishListEntity extends BaseEntity { + +private static final long serialVersionUID = 1710812334454L; + + + + + /** + * 按年份查询 + */ + @DateTimeFormat(pattern = "yyyy") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy") + + private Date perYear; + + + /** + * 设置按年份查询 + */ + public void setPerYear(Date perYear) { + this.perYear = perYear; + } + + /** + * 获取按年份查询 + */ + public Date getPerYear() { + return this.perYear; + } + + +} \ No newline at end of file diff --git a/src/main/java/net/mingsoft/statistics/resources/resources_en_US.properties b/src/main/java/net/mingsoft/statistics/resources/resources_en_US.properties new file mode 100644 index 00000000..43e31187 --- /dev/null +++ b/src/main/java/net/mingsoft/statistics/resources/resources_en_US.properties @@ -0,0 +1 @@ +per.year=per year diff --git a/src/main/java/net/mingsoft/statistics/resources/resources_zh_CN.properties b/src/main/java/net/mingsoft/statistics/resources/resources_zh_CN.properties new file mode 100644 index 00000000..a49c64ba --- /dev/null +++ b/src/main/java/net/mingsoft/statistics/resources/resources_zh_CN.properties @@ -0,0 +1 @@ +per.year=\u6309\u5e74\u4efd\u67e5\u8be2 diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 02df00e1..9a217f31 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -2,6 +2,6 @@ spring: datasource: url: jdbc:mysql://localhost:3306/mcms?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&allowMultiQueries=true&useSSL=false username: root - password: root + password: 123456 filters: wall,mergeStat type: com.alibaba.druid.pool.DruidDataSource \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 4196d9cd..8b6fb19f 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -36,18 +36,18 @@ ms: html-dir: html swagger: - enable: false #启用swagger文档,生产的时候务必关掉 访问地址:http://ip|域名/项目发布名/swagger-ui.html + enable: true #启用swagger文档,生产的时候务必关掉 访问地址:http://ip|域名/项目发布名/swagger-ui.html manager: path: /ms #后台访问的路径,如:http://项目/ms/login.do,生产的时候建议修改 - check-code: true #默认开启验证码验证,false验证码不验证 + check-code: false #默认开启验证码验证,false验证码不验证 upload: enable-web: true #启用web层的上传 template: template #模板文件夹支持重命名,不支持路径 path: upload #文件上传路径,可以根据实际写绝对路径(绝对路径需要开发版以上才支持) mapping: /upload/** #修改需要谨慎,系统第一次部署可以随意修改,如果已经有了上传数据,再次修改会导致之前上传的文件404 - denied: exe,jsp,xml,sh,bat,py,ftl,jspx + denied: exe,jsp back-up: /upload_back multipart: #最大上传文件大小 单位:KB diff --git a/src/main/webapp/WEB-INF/manager/cms/statistic/index.ftl b/src/main/webapp/WEB-INF/manager/cms/statistic/index.ftl new file mode 100644 index 00000000..01827db7 --- /dev/null +++ b/src/main/webapp/WEB-INF/manager/cms/statistic/index.ftl @@ -0,0 +1,128 @@ + + + + + + + 发布量统计 + <#include "../../include/head-file.ftl"> + + +
+
+ + + + + + + + + + + 查询 + 重置 + + + + + + + + +
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/manager/statistics/publish-list/form.ftl b/src/main/webapp/WEB-INF/manager/statistics/publish-list/form.ftl new file mode 100644 index 00000000..d62cc334 --- /dev/null +++ b/src/main/webapp/WEB-INF/manager/statistics/publish-list/form.ftl @@ -0,0 +1,143 @@ + + + + + 发布量统计 + <#include "../../include/head-file.ftl"> + + + + +
+ + 保存 + 返回 + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/src/main/webapp/WEB-INF/manager/statistics/publish-list/index.ftl b/src/main/webapp/WEB-INF/manager/statistics/publish-list/index.ftl new file mode 100644 index 00000000..01827db7 --- /dev/null +++ b/src/main/webapp/WEB-INF/manager/statistics/publish-list/index.ftl @@ -0,0 +1,128 @@ + + + + + + + 发布量统计 + <#include "../../include/head-file.ftl"> + + +
+
+ + + + + + + + + + + 查询 + 重置 + + + + + + + + +
+ + +
+ +
+
+ + + + \ No newline at end of file diff --git a/src/main/webapp/static/locale/lang/publish-list/en_US.js b/src/main/webapp/static/locale/lang/publish-list/en_US.js new file mode 100644 index 00000000..6d222186 --- /dev/null +++ b/src/main/webapp/static/locale/lang/publish-list/en_US.js @@ -0,0 +1,9 @@ +var en_US ={ + form:{ + grid171081208000060549:{ + text:'栅格布局', + placeholder:'', + help:'', + }, + } +} \ No newline at end of file diff --git a/src/main/webapp/static/locale/lang/publish-list/zh_CN.js b/src/main/webapp/static/locale/lang/publish-list/zh_CN.js new file mode 100644 index 00000000..3d5a92ee --- /dev/null +++ b/src/main/webapp/static/locale/lang/publish-list/zh_CN.js @@ -0,0 +1,10 @@ + +var zh_CN ={ + form:{ + grid171081208000060549:{ + text:'栅格布局', + placeholder:'', + help:'', + }, + } +} \ No newline at end of file diff --git a/src/main/webapp/template/1/default/css/css.css b/src/main/webapp/template/1/default/css/css.css index 3add619a..648a47d9 100644 --- a/src/main/webapp/template/1/default/css/css.css +++ b/src/main/webapp/template/1/default/css/css.css @@ -282,7 +282,7 @@ .about_x img { margin-bottom: 15px; max-width: 100%; - height: auto !important; + height: auto; } .about_x .show_t { line-height: 36px; diff --git a/src/main/webapp/template/1/default/css/header.css b/src/main/webapp/template/1/default/css/header.css new file mode 100644 index 00000000..66ace997 --- /dev/null +++ b/src/main/webapp/template/1/default/css/header.css @@ -0,0 +1,79 @@ +.header_box{ + height:500px; + background:#efefef; + padding-top: 15px; +} +.header_box .top_header{ + width:100%; + height: 32px; + background-color: rgb(237, 238, 245); + +} +.header_box .top_header .top_header_box{ + width:96%; + height:100%; + max-width:1300px; + margin:0 auto; + display: flex; + justify-content: space-between; +} +.header_box .top_header .left_top{ + width: 50%; + height: 100%; + font-size: 16px; + display: flex; + align-items: center; +} +.header_box .top_header .right{ + justify-content: end; +} +.header_box .top_header .left_top .wea_box{ + display: flex; +} +.header_box .top_header .login_box{ + margin-left:10%; +} +.header_box .center_header{ + height: 75%; + width: 96%; + margin: 0 auto; + max-width: 1300px; +} +.header_box .center_header .top_cen{ + width: 100%; + height: 70%; + display: flex; + align-items: center; +} +.header_box .center_header .bot_cen{ + width: 100%; + height: 30%; +} +.header_box .center_header .bot_cen .search_cen{ + width: 100%; + height: 60%; + display: flex; + align-items: center; +} +.header_box .center_header .bot_cen .search_cen form{ + width: 100%; + display: flex; +} +.header_box .center_header .bot_cen .search_cen form .input1{ + width: 50%; + height: 45px; + padding: 0; + margin: 0; + border: none; +} +.header_box .center_header .bot_cen .search_cen form .bnts{ + width: 100px; + height: 46px; + background: #15396d; + border: none; + color: #fff; + font-size: 16px; +} +.header_box .bottom_header{ + height: 18.5%; +} \ No newline at end of file diff --git a/src/main/webapp/template/1/default/css/index.css b/src/main/webapp/template/1/default/css/index.css index 4ca26fe2..ec23c490 100644 --- a/src/main/webapp/template/1/default/css/index.css +++ b/src/main/webapp/template/1/default/css/index.css @@ -397,3 +397,416 @@ } @media screen and (max-width:360px) { } + +/*车管要闻*/ + .cg_news{ + width: 100%; +} +.cg_news .top_news{ + width: 96%; + display: flex; + margin: 0 auto; + align-items: center; + max-width: 1300px; +} +.cg_news .top_news .new_tag{ + width: 112px; + height: 45px; + display: flex; + align-items: center; + justify-content: center; + background-color: #a4adb3; + border-radius: 5px; + margin-right: 15px; + color: #ffffff; + font-size:20px; +} +.cg_news .top_news .new_tit{ + font-size: 48px; + font-weight: 600; + line-height: 78px; +} +.cg_news .center_news{ + width: 96%; + max-width: 1300px; + display: flex; + margin: 45px auto; + } +.cg_news .center_news .slider_news{ + width: 55%; + height:335px; +} +.cg_news .center_news .slider_news .swiper-container { + width: 100%; + height: 100%; + } + .swiper-slide { + text-align: center; + font-size: 18px; + background: #fff; + + /* Center slide text vertically */ + display: -webkit-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + } +.slider_news .swiper-slide img{width:770px;height:335px;} +.slider-img .swiper-slide img{width:390px;height:536px;} + .zwdttpxw .swiper-slide img{width:1064px;height:554px;} + .swiper-slide>span { + display: block; + position: absolute; + text-align: left; + width: 100%; + left: 0px; + bottom: 0px; + height: 35px; + line-height: 35px; + padding: 0px; + background: rgba(0,0,0,0.5); + COLOR: #fff;} + .swiper-slide>span a{ CURSOR: pointer; + padding-left:12px; + COLOR: #fff;} + .swiper-container-horizontal>.swiper-pagination-bullets{ + width: auto; + left: auto; + right: 5px; + bottom: 3px; + } +.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{border-radius:0px;} +.swiper-container-horizontal>.swiper-pagination-bullets{text-align:right;right:10px;width:auto;} +.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{background:#fff;opacity: 1;width:10px;height:10px;} +.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet-active{background:#f00;} + .cg_news .center_news .right_news{ + width: 40%; + padding:0 2.5%; + } +.cg_news .center_news .right_news .right_tit{ + font-size: 28px; + font-family: PingFangSC; + font-weight: 600; + line-height: 39px; + margin-bottom:20px; +} +.cg_news .center_news .right_news .right_ul_news li{ + list-style: none; + color: rgba(0,0,0,1); + font-size: 18px; + font-family: PingFangSC; + font-weight: 400; + /* line-height: 35px; */ + margin: 10px 0; + display: flex; + align-items: center; + justify-content: space-between; +} + /*通知公告*/ +.notice_box{ + width: 96%; + height: 58px; + max-width: 1300px; + display: flex; + margin: 0 auto; + } + .notice_box .left_notice{ + width: 180px; + height: 100%; + display: flex; + background-color: #e3e3e3; + align-items: center; + justify-content: center + } + .notice_box .left_notice .notice_img{ + width: 32px; + height: 32px; + } + .notice_box .left_notice .notice_tit{ + font-size: 20px; + margin-left: 15px; + } + .notice_box .right_notice{ + flex: 1; + background: #f1f1f1; + } +.notice_box .right_notice .notice_ul{ + width: 100%; + height: 100%; + display: flex; + align-items: center; + list-style: none; + } + .notice_box .right_notice .notice_ul li{ + list-style: none; + width: 50%; + text-align: center; + display: flex; + align-items: center; + justify-content: center; + font-size: 22px; + } + .notice_box .right_notice .notice_ul li:first-child{ + border-right: 1px solid black; + } + .notice_box .right_notice .notice_ul li span{ + display: inline-block; + width: 5px; + height: 5px; + background: black; + border-radius: 50%; + margin-right: 10px; + } + +/*新闻公告文章*/ +.article_box{ + width: 96%; + max-width: 1300px; + margin: 0 auto; + display: flex; + padding: 50px 0; + } + .article_box .article_ul{ + display: flex; + flex-wrap: wrap; + width: 100%; + list-style: none; + margin: 0; + padding: 0; + } + .article_box .article_ul .article_con{ + width: 24%; + height: 400px; + margin-right: 1.3%; + margin-bottom: 2%; + } + .article_box .article_ul .article_con:nth-child(4n+0){ + margin-right: 0; + } + .article_box .article_con .top_arti{ + display: flex; + justify-content: space-between; + width: 100%; + height: 15%; + align-items: center; + } + .article_box .article_con .bottom_arti{ + width: 100%; + height: 85%; + border: 1px solid #bbbbbb; + } + .article_box .article_con .bottom_arti .bot_arti_ul .bot_arti_li{ + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 15px; +} +.article_box .article_con .bottom_arti .bot_arti_ul .bot_arti_li div{ + display: flex; + width: 80%; + font-size: 18px; + align-items: center; +} + +.article_box .article_con .bottom_arti .bot_arti_ul .bot_arti_li div span{ + width: 5px; + height: 5px; + background: black; + border-radius: 50%; + margin: 0 5px; +} +.article_box .article_con .bottom_arti .bot_arti_ul .bot_arti_li div a{ + display: inline-block; + width: 93%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.article_box .article_con .bottom_arti .bot_arti_ul .bot_arti_li .fr{ + font-size: 18px; + color: #bebebe; +} + +/*车管动态*/ +.dt_search{ + width: 96%; + max-width: 1300px; + margin: 0 auto; + margin-top: 20px; + display: flex; + } + .dt_search .dt_left{ + width: 75%; + height: 100%; + } + .dt_search .dt_left .dt_tit{ + height: 60px; + line-height: 60px; + font-size: 22px; + } + .dt_search .dt_left .dt_con{ + width: 100%; + } + .dt_search .dt_left .dt_con ul{ + width: 100%; + list-style: none; + margin: 0; + padding: 0; + display: flex; + justify-content: space-between; + } + .dt_search .dt_left .dt_con ul li{ + width: 32%; + height: 240px; + } + .dt_search .dt_left .dt_con ul li img{ + width: 100%; + height: 200px; + } + .dt_search .dt_left .dt_con ul li .img_txt{ + height: 40px; + line-height: 40px; + font-size:16px; + } + .dt_search .search_right{ + width: 24%; + margin-left: 1%; + } + .dt_search .search_right .search_tit{ + height: 60px; + line-height: 60px; + font-size: 22px; + } + .dt_search .search_right .search_bot{ + width: 100%; + height: 240px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + } + .dt_search .search_right .search_bot div{ + width: 100%; + height: 70px; + background: #cecece; + } +/*岗位之星*/ +.star_box { + width: 96%; + max-width: 1300px; + margin: 30px auto; + display: flex; + } + .star_box .left_star { + width: 24%; + } + .star_box .left_star .left_top_star { + width: 100%; + height: 50px; + display: flex; + align-items: center; + justify-content: space-between; + font-size: 22px; + color: #9a9a9a; + } + .star_box .left_star .left_top_star .hover{ + color: #333; + } + .star_box .left_star .left_bot_star { + width: 100%; + height: 400px; + background: green; + } + .swiper-star { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; + display: none; + } + .star_box .left_star .left_bot_star .dis{ + display: block; + } + .star_box .right_star{ + width: 70%; + height: 450px; + margin-left: 6%; + display: flex; + flex-direction: column; + } + .star_box .right_star .right_star_top{ + width: 100%; + height: 45%; + } + .star_box .right_star .bottom{ + height: 55%; + } + .star_box .right_star .right_star_top .rigth_top_tit{ + width: 100%; + height: 60px; + line-height: 60px; + font-size: 22px; + display: flex; + align-items: center; + justify-content: space-between; + } + .star_box .right_star .right_star_top .right_top_con{ + width: 100%; + height: 143px; + background: #efefef; + } + .star_box .right_star .right_star_top .bottom_con{ + height: 187px; + } + .slider_star { + width: 100%; + height: 100%; + font-size: 50px; + text-align: center; + color: white; + } + .star_mask{ + width: 100%; + position: absolute; + bottom: 0; + height: 50px; + background: gray; + font-size: 22px; + display: flex; + align-items: center; + justify-content: space-around; + } +/*车管风采*/ +.cgfc_box{ + width: 96%; + max-width: 1300px; + margin: 30px auto; + } + .cgfc_box .top_cgfc{ + width: 100%; + height: 70px; + display: flex; + align-items: center; + justify-content: space-between; + font-size: 22px; + } + .cgfc_box .bot_cgfc{ + width: 100%; + height: 225px; + display: flex; + align-items: center; + justify-content: space-between; + } + .cgfc_box .bot_cgfc .bot_cgfc_con{ + width: 24%; + height: 100%; + } diff --git a/src/main/webapp/template/1/default/css/public.css b/src/main/webapp/template/1/default/css/public.css new file mode 100644 index 00000000..9041c233 --- /dev/null +++ b/src/main/webapp/template/1/default/css/public.css @@ -0,0 +1,77 @@ +.header-nav{ + width: 100%; + height: 100%; + background-color: #15396d; +} +.header-nav ul{ + width:96%; + max-width:1300px; + height: 100%; + margin: 0 auto; + list-style: none; + position: relative; +} + +.header-nav ul li { + height: 96%; + cursor: pointer; + line-height:92px; + /* text-align: center; + font-weight: normal; + position: relative; */ + display: inline-block; + border-top: 0; + transition: all 0.5s; + border-bottom: 0; /*width:120px; *//* position:relative; */ + margin-right: 30px; +} +.header-nav ul li a { + color: #fff; + display: flex; + align-items: center; + justify-content: center; + text-decoration: none; + font-size:18px; + margin:0 15px 0 0; +} +.header-nav ul li:hover { + border-bottom: 4px solid #fff; +} +.son-cont{ + width: 100%; + overflow: hidden; + position: absolute; + top: 71px; + background: rgba(32, 31, 31, 0.4); + transition: all 0.5s; + line-height: 60px; + z-index:120; +} +.header-nav ul .son-none{ + width: 100%; + height: 0px; + position: absolute; + top: 93px; + left: 0; + background: rgba(32, 31, 31, 0.4); + transition: all 0.5s; + line-height: 60px; + z-index: 110; +} +.header-nav ul .son-none div{ + display: flex; + justify-content: center; + align-items: center; +} +.header-nav ul li:hover .son-none{ + height: 60px; +} +.header-nav ul li:hover .nav-a{ + height: 60px; + transition: all 0.5s; +} +.nav-a { + display: block; + overflow: hidden; + height: 0; +} \ No newline at end of file diff --git a/src/main/webapp/template/1/default/css/style.css b/src/main/webapp/template/1/default/css/style.css index a1401c28..72efe011 100644 --- a/src/main/webapp/template/1/default/css/style.css +++ b/src/main/webapp/template/1/default/css/style.css @@ -42,6 +42,43 @@ em, cite, th { zoom: 1; overflow: hidden; } +.wrap .left_wrap{ + width: 30%; + align-items: center; + font-size: 22px; + line-height: 50px; + color:#9a9a9a; +} +.wrap .left_wrap .active_tit{ + color:#333; +} +.wrap .yw_lmcon{ + width:30%; + height:536px; +} +.wrap .yw_lmcon .bxslider_img { + width:100%; + height:100%; +} +.wrap .yw_lmcon .slider-img{ + margin: 0 auto; + position: relative; + overflow: hidden; + list-style: none; + padding: 0; + z-index: 1; +} +.wrap .yw_lmcon .slider-img .slider-pagination{ + margin: 0 auto; + position: relative; + overflow: hidden; + list-style: none; + padding: 0; + z-index: 1; +} +.wrap .yw_lmcon .dis{ + display:block; +} .wrap2 { clear: both; width: 96%; @@ -117,11 +154,17 @@ em, cite, th { .header-v1 { width: 100%; position: fixed; /*overflow:hidden; */ - height: 100px; + height: 600px; z-index: 10; background-color: #090a0c; box-shadow: 0 1px 10px rgba(0, 0, 0, 0.15); } +.header-v1 .top_con{ + width: 100%; + height: 32px; + background: #e5e5e5; + margin-top: 15px; +} .nav-hide .header-v1 { height: 80px; } @@ -654,7 +697,6 @@ em, cite, th { color: #8f8f8f; font-size: 12px; clear: both; - padding-top: 2%; padding-bottom: 2%; } .f_bg_div { diff --git a/src/main/webapp/template/1/default/css/swiper.min.css b/src/main/webapp/template/1/default/css/swiper.min.css new file mode 100644 index 00000000..a1cbc745 --- /dev/null +++ b/src/main/webapp/template/1/default/css/swiper.min.css @@ -0,0 +1,12 @@ +/** + * Swiper 4.4.1 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * http://www.idangero.us/swiper/ + * + * Copyright 2014-2018 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: September 14, 2018 + */ + .swiper-container{margin:0 auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;height:100%;position:relative;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;-o-transition-property:transform,height;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-container-3d{-webkit-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-wp8-horizontal,.swiper-container-wp8-horizontal>.swiper-wrapper{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-container-wp8-vertical,.swiper-container-wp8-vertical>.swiper-wrapper{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;background-size:27px 44px;background-position:center;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");left:10px;right:auto}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");right:10px;left:auto}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s opacity;-o-transition:.3s opacity;transition:.3s opacity;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{-webkit-transform:scale(.66);-ms-transform:scale(.66);transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{-webkit-transform:scale(.66);-ms-transform:scale(.66);transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1;background:#007aff}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;-webkit-transition:.2s top,.2s -webkit-transform;transition:.2s top,.2s -webkit-transform;-o-transition:.2s transform,.2s top;transition:.2s transform,.2s top;transition:.2s transform,.2s top,.2s -webkit-transform}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transition:.2s left,.2s -webkit-transform;transition:.2s left,.2s -webkit-transform;-o-transition:.2s transform,.2s left;transition:.2s transform,.2s left;transition:.2s transform,.2s left,.2s -webkit-transform}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transition:.2s right,.2s -webkit-transform;transition:.2s right,.2s -webkit-transform;-o-transition:.2s transform,.2s right;transition:.2s transform,.2s right;transition:.2s transform,.2s right,.2s -webkit-transform}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:#007aff;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar,.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-progressbar.swiper-pagination-white{background:rgba(255,255,255,.25)}.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-pagination-progressbar.swiper-pagination-black{background:rgba(0,0,0,.25)}.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill{background:#000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12,end) infinite;animation:swiper-preloader-spin 1s steps(12,end) infinite}.swiper-lazy-preloader:after{display:block;content:'';width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");background-position:50%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}@-webkit-keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-coverflow .swiper-wrapper{-ms-perspective:1200px} \ No newline at end of file diff --git a/src/main/webapp/template/1/default/footer.htm b/src/main/webapp/template/1/default/footer.htm index fecc01a1..918335f9 100644 --- a/src/main/webapp/template/1/default/footer.htm +++ b/src/main/webapp/template/1/default/footer.htm @@ -1,5 +1,21 @@
+
+ {ms:channel type="self" typeid=1764843613554843650} + {ms:channel} + + + + + {/ms:channel} + {/ms:channel} + +
{ms:channel type='nav' flag='n' size='4'}