全局代码格式化

This commit is contained in:
lerry903 2018-12-01 18:00:21 +08:00
parent 6a592827e8
commit 5fbc84f944
341 changed files with 87070 additions and 83540 deletions

252
pom.xml
View File

@ -1,127 +1,127 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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"> 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> <modelVersion>4.0.0</modelVersion>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi</artifactId> <artifactId>ruoyi</artifactId>
<version>3.1</version> <version>3.1</version>
<name>ruoyi</name> <name>ruoyi</name>
<url>http://www.ruoyi.vip</url> <url>http://www.ruoyi.vip</url>
<description>若依管理系统</description> <description>若依管理系统</description>
<properties> <properties>
<ruoyi.version>3.1</ruoyi.version> <ruoyi.version>3.1</ruoyi.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version> <java.version>1.8</java.version>
<shiro.version>1.4.0</shiro.version> <shiro.version>1.4.0</shiro.version>
<thymeleaf.extras.shiro.version>2.0.0</thymeleaf.extras.shiro.version> <thymeleaf.extras.shiro.version>2.0.0</thymeleaf.extras.shiro.version>
<mybatis.boot.version>1.3.2</mybatis.boot.version> <mybatis.boot.version>1.3.2</mybatis.boot.version>
<druid.version>1.1.10</druid.version> <druid.version>1.1.10</druid.version>
<bitwalker.version>1.19</bitwalker.version> <bitwalker.version>1.19</bitwalker.version>
<kaptcha.version>2.3.2</kaptcha.version> <kaptcha.version>2.3.2</kaptcha.version>
<swagger.version>2.7.0</swagger.version> <swagger.version>2.7.0</swagger.version>
<pagehelper.boot.version>1.2.5</pagehelper.boot.version> <pagehelper.boot.version>1.2.5</pagehelper.boot.version>
<oshi.version>3.9.1</oshi.version> <oshi.version>3.9.1</oshi.version>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId> <artifactId>spring-boot-dependencies</artifactId>
<version>2.0.5.RELEASE</version> <version>2.0.5.RELEASE</version>
<type>pom</type> <type>pom</type>
<scope>import</scope> <scope>import</scope>
</dependency> </dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
<modules> <modules>
<module>ruoyi-admin</module> <module>ruoyi-admin</module>
<module>ruoyi-framework</module> <module>ruoyi-framework</module>
<module>ruoyi-system</module> <module>ruoyi-system</module>
<module>ruoyi-quartz</module> <module>ruoyi-quartz</module>
<module>ruoyi-generator</module> <module>ruoyi-generator</module>
<module>ruoyi-common</module> <module>ruoyi-common</module>
</modules> </modules>
<packaging>pom</packaging> <packaging>pom</packaging>
<dependencies> <dependencies>
<!--Spring框架基本的核心工具--> <!--Spring框架基本的核心工具-->
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId> <artifactId>spring-context-support</artifactId>
</dependency> </dependency>
<!-- SpringBoot集成mybatis框架 --> <!-- SpringBoot集成mybatis框架 -->
<dependency> <dependency>
<groupId>org.mybatis.spring.boot</groupId> <groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId> <artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.boot.version}</version> <version>${mybatis.boot.version}</version>
</dependency> </dependency>
<!-- Mysql驱动包 --> <!-- Mysql驱动包 -->
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>javax.servlet</groupId> <groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId> <artifactId>javax.servlet-api</artifactId>
</dependency> </dependency>
<!-- 日志工具类 --> <!-- 日志工具类 -->
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<configuration> <configuration>
<source>${java.version}</source> <source>${java.version}</source>
<target>${java.version}</target> <target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding> <encoding>${project.build.sourceEncoding}</encoding>
</configuration> </configuration>
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
<repositories> <repositories>
<repository> <repository>
<id>public</id> <id>public</id>
<name>aliyun nexus</name> <name>aliyun nexus</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url> <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases> <releases>
<enabled>true</enabled> <enabled>true</enabled>
</releases> </releases>
</repository> </repository>
</repositories> </repositories>
<pluginRepositories> <pluginRepositories>
<pluginRepository> <pluginRepository>
<id>public</id> <id>public</id>
<name>aliyun nexus</name> <name>aliyun nexus</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url> <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases> <releases>
<enabled>true</enabled> <enabled>true</enabled>
</releases> </releases>
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
</snapshots> </snapshots>
</pluginRepository> </pluginRepository>
</pluginRepositories> </pluginRepositories>
</project> </project>

View File

@ -8,44 +8,44 @@
<version>3.1</version> <version>3.1</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging> <packaging>jar</packaging>
<artifactId>ruoyi-admin</artifactId> <artifactId>ruoyi-admin</artifactId>
<description> <description>
web服务入口 web服务入口
</description> </description>
<dependencies> <dependencies>
<!-- spring-boot-devtools --> <!-- spring-boot-devtools -->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId> <artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 表示依赖不会传递 --> <optional>true</optional> <!-- 表示依赖不会传递 -->
</dependency> </dependency>
<!-- swagger2--> <!-- swagger2-->
<dependency> <dependency>
<groupId>io.springfox</groupId> <groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId> <artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version> <version>${swagger.version}</version>
</dependency> </dependency>
<!-- swagger2-UI-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<!-- 核心模块--> <!-- swagger2-UI-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<!-- 核心模块-->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-framework</artifactId> <artifactId>ruoyi-framework</artifactId>
<version>${ruoyi.version}</version> <version>${ruoyi.version}</version>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>
@ -54,8 +54,8 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<configuration> <configuration>
<fork>true</fork> <!-- 如果没有该配置devtools不会生效 --> <fork>true</fork> <!-- 如果没有该配置devtools不会生效 -->
</configuration> </configuration>
<executions> <executions>
<execution> <execution>
<goals> <goals>
@ -64,17 +64,17 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId> <artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version> <version>3.0.0</version>
<configuration> <configuration>
<failOnMissingWebXml>false</failOnMissingWebXml> <failOnMissingWebXml>false</failOnMissingWebXml>
<warName>${artifactId}</warName> <warName>${artifactId}</warName>
</configuration> </configuration>
</plugin> </plugin>
</plugins> </plugins>
<finalName>${artifactId}</finalName> <finalName>${artifactId}</finalName>
</build> </build>
</project> </project>

View File

@ -1,32 +1,30 @@
package com.ruoyi; package com.ruoyi;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
/** /**
* 启动程序 * 启动程序
* *
* @author ruoyi * @author ruoyi
*/ */
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@MapperScan("com.ruoyi.*.mapper") @MapperScan("com.ruoyi.*.mapper")
public class RuoYiApplication public class RuoYiApplication {
{ public static void main(String[] args) {
public static void main(String[] args) // System.setProperty("spring.devtools.restart.enabled", "false");
{ SpringApplication.run(RuoYiApplication.class, args);
// System.setProperty("spring.devtools.restart.enabled", "false"); System.out.println("(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ \n" +
SpringApplication.run(RuoYiApplication.class, args); " .-------. ____ __ \n" +
System.out.println("(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ \n" + " | _ _ \\ \\ \\ / / \n" +
" .-------. ____ __ \n" + " | ( ' ) | \\ _. / ' \n" +
" | _ _ \\ \\ \\ / / \n" + " |(_ o _) / _( )_ .' \n" +
" | ( ' ) | \\ _. / ' \n" + " | (_,_).' __ ___(_ o _)' \n" +
" |(_ o _) / _( )_ .' \n" + " | |\\ \\ | || |(_,_)' \n" +
" | (_,_).' __ ___(_ o _)' \n" + " | | \\ `' /| `-' / \n" +
" | |\\ \\ | || |(_,_)' \n" + " | | \\ / \\ / \n" +
" | | \\ `' /| `-' / \n" + " ''-' `'-' `-..-' ");
" | | \\ / \\ / \n" + }
" ''-' `'-' `-..-' ");
}
} }

View File

@ -1,18 +1,16 @@
package com.ruoyi; package com.ruoyi;
import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/** /**
* web容器中进行部署 * web容器中进行部署
* *
* @author ruoyi * @author ruoyi
*/ */
public class RuoYiServletInitializer extends SpringBootServletInitializer public class RuoYiServletInitializer extends SpringBootServletInitializer {
{ @Override
@Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) return application.sources(RuoYiApplication.class);
{ }
return application.sources(RuoYiApplication.class); }
}
}

View File

@ -1,74 +1,61 @@
package com.ruoyi.web.controller.common; package com.ruoyi.web.controller.common;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.Logger;
import org.springframework.stereotype.Controller; import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.stereotype.Controller;
import com.ruoyi.common.config.Global; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.common.config.Global;
import com.ruoyi.common.utils.file.FileUtils;
/**
* 通用请求处理 /**
* * 通用请求处理
* @author ruoyi *
*/ * @author ruoyi
@Controller */
public class CommonController @Controller
{ public class CommonController {
private static final Logger log = LoggerFactory.getLogger(CommonController.class); private static final Logger log = LoggerFactory.getLogger(CommonController.class);
@RequestMapping("common/download") @RequestMapping("common/download")
public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) {
{ String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); try {
try String filePath = Global.getDownloadPath() + fileName;
{
String filePath = Global.getDownloadPath() + fileName; response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.setCharacterEncoding("utf-8"); response.setHeader("Content-Disposition" , "attachment;fileName=" + setFileDownloadHeader(request, realFileName));
response.setContentType("multipart/form-data"); FileUtils.writeBytes(filePath, response.getOutputStream());
response.setHeader("Content-Disposition", "attachment;fileName=" + setFileDownloadHeader(request, realFileName)); if (delete) {
FileUtils.writeBytes(filePath, response.getOutputStream()); FileUtils.deleteFile(filePath);
if (delete) }
{ } catch (Exception e) {
FileUtils.deleteFile(filePath); log.error("下载文件失败" , e);
} }
} }
catch (Exception e)
{ public String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException {
log.error("下载文件失败", e); final String agent = request.getHeader("USER-AGENT");
} String filename = fileName;
} if (agent.contains("MSIE")) {
// IE浏览器
public String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException filename = URLEncoder.encode(filename, "utf-8");
{ filename = filename.replace("+" , " ");
final String agent = request.getHeader("USER-AGENT"); } else if (agent.contains("Firefox")) {
String filename = fileName; // 火狐浏览器
if (agent.contains("MSIE")) filename = new String(fileName.getBytes(), "ISO8859-1");
{ } else if (agent.contains("Chrome")) {
// IE浏览器 // google浏览器
filename = URLEncoder.encode(filename, "utf-8"); filename = URLEncoder.encode(filename, "utf-8");
filename = filename.replace("+", " "); } else {
} // 其它浏览器
else if (agent.contains("Firefox")) filename = URLEncoder.encode(filename, "utf-8");
{ }
// 火狐浏览器 return filename;
filename = new String(fileName.getBytes(), "ISO8859-1"); }
} }
else if (agent.contains("Chrome"))
{
// google浏览器
filename = URLEncoder.encode(filename, "utf-8");
}
else
{
// 其它浏览器
filename = URLEncoder.encode(filename, "utf-8");
}
return filename;
}
}

View File

@ -1,26 +1,24 @@
package com.ruoyi.web.controller.monitor; package com.ruoyi.web.controller.monitor;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.framework.web.base.BaseController;
/** /**
* druid 监控 * druid 监控
* *
* @author ruoyi * @author ruoyi
*/ */
@Controller @Controller
@RequestMapping("/monitor/data") @RequestMapping("/monitor/data")
public class DruidController extends BaseController public class DruidController extends BaseController {
{ private String prefix = "/monitor/druid" ;
private String prefix = "/monitor/druid";
@RequiresPermissions("monitor:data:view")
@RequiresPermissions("monitor:data:view") @GetMapping()
@GetMapping() public String index() {
public String index() return redirect(prefix + "/index");
{ }
return redirect(prefix + "/index"); }
}
}

View File

@ -1,31 +1,29 @@
package com.ruoyi.web.controller.monitor; package com.ruoyi.web.controller.monitor;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.framework.web.base.BaseController;
import com.ruoyi.framework.web.domain.Server; import com.ruoyi.framework.web.domain.Server;
/** /**
* 服务器监控 * 服务器监控
* *
* @author ruoyi * @author ruoyi
*/ */
@Controller @Controller
@RequestMapping("/monitor/server") @RequestMapping("/monitor/server")
public class ServerController extends BaseController public class ServerController extends BaseController {
{ private String prefix = "monitor/server" ;
private String prefix = "monitor/server";
@RequiresPermissions("monitor:server:view")
@RequiresPermissions("monitor:server:view") @GetMapping()
@GetMapping() public String server(ModelMap mmap) throws Exception {
public String server(ModelMap mmap) throws Exception Server server = new Server();
{ server.copyTo();
Server server = new Server(); mmap.put("server" , server);
server.copyTo(); return prefix + "/server" ;
mmap.put("server", server); }
return prefix + "/server"; }
}
}

View File

@ -1,171 +1,156 @@
package com.ruoyi.web.controller.monitor; package com.ruoyi.web.controller.monitor;
import java.util.List; import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.annotation.Log; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.utils.ExcelUtil; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.util.ShiroUtils; import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.quartz.domain.SysJob; import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.quartz.service.ISysJobService; import com.ruoyi.quartz.domain.SysJob;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.quartz.service.ISysJobService;
import com.ruoyi.framework.web.base.BaseController;
/**
* 调度任务信息操作处理 /**
* * 调度任务信息操作处理
* @author ruoyi *
*/ * @author ruoyi
@Controller */
@RequestMapping("/monitor/job") @Controller
public class SysJobController extends BaseController @RequestMapping("/monitor/job")
{ public class SysJobController extends BaseController {
private String prefix = "monitor/job"; private String prefix = "monitor/job" ;
@Autowired @Autowired
private ISysJobService jobService; private ISysJobService jobService;
@RequiresPermissions("monitor:job:view") @RequiresPermissions("monitor:job:view")
@GetMapping() @GetMapping()
public String job() public String job() {
{ return prefix + "/job" ;
return prefix + "/job"; }
}
@RequiresPermissions("monitor:job:list")
@RequiresPermissions("monitor:job:list") @PostMapping("/list")
@PostMapping("/list") @ResponseBody
@ResponseBody public TableDataInfo list(SysJob job) {
public TableDataInfo list(SysJob job) startPage();
{ List<SysJob> list = jobService.selectJobList(job);
startPage(); return getDataTable(list);
List<SysJob> list = jobService.selectJobList(job); }
return getDataTable(list);
} @Log(title = "定时任务" , businessType = BusinessType.EXPORT)
@RequiresPermissions("monitor:job:export")
@Log(title = "定时任务", businessType = BusinessType.EXPORT) @PostMapping("/export")
@RequiresPermissions("monitor:job:export") @ResponseBody
@PostMapping("/export") public AjaxResult export(SysJob job) {
@ResponseBody List<SysJob> list = jobService.selectJobList(job);
public AjaxResult export(SysJob job) ExcelUtil<SysJob> util = new ExcelUtil<SysJob>(SysJob.class);
{ return util.exportExcel(list, "job");
List<SysJob> list = jobService.selectJobList(job); }
ExcelUtil<SysJob> util = new ExcelUtil<SysJob>(SysJob.class);
return util.exportExcel(list, "job"); @Log(title = "定时任务" , businessType = BusinessType.DELETE)
} @RequiresPermissions("monitor:job:remove")
@PostMapping("/remove")
@Log(title = "定时任务", businessType = BusinessType.DELETE) @ResponseBody
@RequiresPermissions("monitor:job:remove") public AjaxResult remove(String ids) {
@PostMapping("/remove") try {
@ResponseBody jobService.deleteJobByIds(ids);
public AjaxResult remove(String ids) return success();
{ } catch (Exception e) {
try e.printStackTrace();
{ return error(e.getMessage());
jobService.deleteJobByIds(ids); }
return success(); }
}
catch (Exception e) @RequiresPermissions("monitor:job:detail")
{ @GetMapping("/detail/{jobId}")
e.printStackTrace(); public String detail(@PathVariable("jobId") Long jobId, ModelMap mmap) {
return error(e.getMessage()); mmap.put("name" , "job");
} mmap.put("job" , jobService.selectJobById(jobId));
} return prefix + "/detail" ;
}
@RequiresPermissions("monitor:job:detail")
@GetMapping("/detail/{jobId}") /**
public String detail(@PathVariable("jobId") Long jobId, ModelMap mmap) * 任务调度状态修改
{ */
mmap.put("name", "job"); @Log(title = "定时任务" , businessType = BusinessType.UPDATE)
mmap.put("job", jobService.selectJobById(jobId)); @RequiresPermissions("monitor:job:changeStatus")
return prefix + "/detail"; @PostMapping("/changeStatus")
} @ResponseBody
public AjaxResult changeStatus(SysJob job) {
/** job.setUpdateBy(ShiroUtils.getLoginName());
* 任务调度状态修改 return toAjax(jobService.changeStatus(job));
*/ }
@Log(title = "定时任务", businessType = BusinessType.UPDATE)
@RequiresPermissions("monitor:job:changeStatus") /**
@PostMapping("/changeStatus") * 任务调度立即执行一次
@ResponseBody */
public AjaxResult changeStatus(SysJob job) @Log(title = "定时任务" , businessType = BusinessType.UPDATE)
{ @RequiresPermissions("monitor:job:changeStatus")
job.setUpdateBy(ShiroUtils.getLoginName()); @PostMapping("/run")
return toAjax(jobService.changeStatus(job)); @ResponseBody
} public AjaxResult run(SysJob job) {
return toAjax(jobService.run(job));
/** }
* 任务调度立即执行一次
*/ /**
@Log(title = "定时任务", businessType = BusinessType.UPDATE) * 新增调度
@RequiresPermissions("monitor:job:changeStatus") */
@PostMapping("/run") @GetMapping("/add")
@ResponseBody public String add() {
public AjaxResult run(SysJob job) return prefix + "/add" ;
{ }
return toAjax(jobService.run(job));
} /**
* 新增保存调度
/** */
* 新增调度 @Log(title = "定时任务" , businessType = BusinessType.INSERT)
*/ @RequiresPermissions("monitor:job:add")
@GetMapping("/add") @PostMapping("/add")
public String add() @ResponseBody
{ public AjaxResult addSave(SysJob job) {
return prefix + "/add"; job.setCreateBy(ShiroUtils.getLoginName());
} return toAjax(jobService.insertJobCron(job));
}
/**
* 新增保存调度 /**
*/ * 修改调度
@Log(title = "定时任务", businessType = BusinessType.INSERT) */
@RequiresPermissions("monitor:job:add") @GetMapping("/edit/{jobId}")
@PostMapping("/add") public String edit(@PathVariable("jobId") Long jobId, ModelMap mmap) {
@ResponseBody mmap.put("job" , jobService.selectJobById(jobId));
public AjaxResult addSave(SysJob job) return prefix + "/edit" ;
{ }
job.setCreateBy(ShiroUtils.getLoginName());
return toAjax(jobService.insertJobCron(job)); /**
} * 修改保存调度
*/
/** @Log(title = "定时任务" , businessType = BusinessType.UPDATE)
* 修改调度 @RequiresPermissions("monitor:job:edit")
*/ @PostMapping("/edit")
@GetMapping("/edit/{jobId}") @ResponseBody
public String edit(@PathVariable("jobId") Long jobId, ModelMap mmap) public AjaxResult editSave(SysJob job) {
{ job.setUpdateBy(ShiroUtils.getLoginName());
mmap.put("job", jobService.selectJobById(jobId)); return toAjax(jobService.updateJobCron(job));
return prefix + "/edit"; }
}
/**
/** * 校验cron表达式是否有效
* 修改保存调度 */
*/ @PostMapping("/checkCronExpressionIsValid")
@Log(title = "定时任务", businessType = BusinessType.UPDATE) @ResponseBody
@RequiresPermissions("monitor:job:edit") public boolean checkCronExpressionIsValid(SysJob job) {
@PostMapping("/edit") return jobService.checkCronExpressionIsValid(job.getCronExpression());
@ResponseBody }
public AjaxResult editSave(SysJob job) }
{
job.setUpdateBy(ShiroUtils.getLoginName());
return toAjax(jobService.updateJobCron(job));
}
/**
* 校验cron表达式是否有效
*/
@PostMapping("/checkCronExpressionIsValid")
@ResponseBody
public boolean checkCronExpressionIsValid(SysJob job)
{
return jobService.checkCronExpressionIsValid(job.getCronExpression());
}
}

View File

@ -1,91 +1,85 @@
package com.ruoyi.web.controller.monitor; package com.ruoyi.web.controller.monitor;
import java.util.List; import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.annotation.Log; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.utils.ExcelUtil; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.framework.web.base.BaseController;
import com.ruoyi.quartz.domain.SysJobLog; import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.quartz.service.ISysJobLogService; import com.ruoyi.quartz.domain.SysJobLog;
import com.ruoyi.quartz.service.ISysJobLogService;
/**
* 调度日志操作处理 /**
* * 调度日志操作处理
* @author ruoyi *
*/ * @author ruoyi
@Controller */
@RequestMapping("/monitor/jobLog") @Controller
public class SysJobLogController extends BaseController @RequestMapping("/monitor/jobLog")
{ public class SysJobLogController extends BaseController {
private String prefix = "monitor/job"; private String prefix = "monitor/job" ;
@Autowired @Autowired
private ISysJobLogService jobLogService; private ISysJobLogService jobLogService;
@RequiresPermissions("monitor:job:view") @RequiresPermissions("monitor:job:view")
@GetMapping() @GetMapping()
public String jobLog() public String jobLog() {
{ return prefix + "/jobLog" ;
return prefix + "/jobLog"; }
}
@RequiresPermissions("monitor:job:list")
@RequiresPermissions("monitor:job:list") @PostMapping("/list")
@PostMapping("/list") @ResponseBody
@ResponseBody public TableDataInfo list(SysJobLog jobLog) {
public TableDataInfo list(SysJobLog jobLog) startPage();
{ List<SysJobLog> list = jobLogService.selectJobLogList(jobLog);
startPage(); return getDataTable(list);
List<SysJobLog> list = jobLogService.selectJobLogList(jobLog); }
return getDataTable(list);
} @Log(title = "调度日志" , businessType = BusinessType.EXPORT)
@RequiresPermissions("monitor:job:export")
@Log(title = "调度日志", businessType = BusinessType.EXPORT) @PostMapping("/export")
@RequiresPermissions("monitor:job:export") @ResponseBody
@PostMapping("/export") public AjaxResult export(SysJobLog jobLog) {
@ResponseBody List<SysJobLog> list = jobLogService.selectJobLogList(jobLog);
public AjaxResult export(SysJobLog jobLog) ExcelUtil<SysJobLog> util = new ExcelUtil<SysJobLog>(SysJobLog.class);
{ return util.exportExcel(list, "jobLog");
List<SysJobLog> list = jobLogService.selectJobLogList(jobLog); }
ExcelUtil<SysJobLog> util = new ExcelUtil<SysJobLog>(SysJobLog.class);
return util.exportExcel(list, "jobLog"); @Log(title = "调度日志" , businessType = BusinessType.DELETE)
} @RequiresPermissions("monitor:job:remove")
@PostMapping("/remove")
@Log(title = "调度日志", businessType = BusinessType.DELETE) @ResponseBody
@RequiresPermissions("monitor:job:remove") public AjaxResult remove(String ids) {
@PostMapping("/remove") return toAjax(jobLogService.deleteJobLogByIds(ids));
@ResponseBody }
public AjaxResult remove(String ids)
{ @RequiresPermissions("monitor:job:detail")
return toAjax(jobLogService.deleteJobLogByIds(ids)); @GetMapping("/detail/{jobLogId}")
} public String detail(@PathVariable("jobLogId") Long jobLogId, ModelMap mmap) {
mmap.put("name" , "jobLog");
@RequiresPermissions("monitor:job:detail") mmap.put("jobLog" , jobLogService.selectJobLogById(jobLogId));
@GetMapping("/detail/{jobLogId}") return prefix + "/detail" ;
public String detail(@PathVariable("jobLogId") Long jobLogId, ModelMap mmap) }
{
mmap.put("name", "jobLog"); @Log(title = "调度日志" , businessType = BusinessType.CLEAN)
mmap.put("jobLog", jobLogService.selectJobLogById(jobLogId)); @RequiresPermissions("monitor:job:remove")
return prefix + "/detail"; @PostMapping("/clean")
} @ResponseBody
public AjaxResult clean() {
@Log(title = "调度日志", businessType = BusinessType.CLEAN) jobLogService.cleanJobLog();
@RequiresPermissions("monitor:job:remove") return success();
@PostMapping("/clean") }
@ResponseBody }
public AjaxResult clean()
{
jobLogService.cleanJobLog();
return success();
}
}

View File

@ -1,80 +1,75 @@
package com.ruoyi.web.controller.monitor; package com.ruoyi.web.controller.monitor;
import java.util.List; import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.annotation.Log; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.utils.ExcelUtil; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.system.domain.SysLogininfor; import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.service.ISysLogininforService; import com.ruoyi.system.domain.SysLogininfor;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.system.service.ISysLogininforService;
import com.ruoyi.framework.web.base.BaseController;
/**
* 系统访问记录 /**
* * 系统访问记录
* @author ruoyi *
*/ * @author ruoyi
@Controller */
@RequestMapping("/monitor/logininfor") @Controller
public class SysLogininforController extends BaseController @RequestMapping("/monitor/logininfor")
{ public class SysLogininforController extends BaseController {
private String prefix = "monitor/logininfor"; private String prefix = "monitor/logininfor" ;
@Autowired @Autowired
private ISysLogininforService logininforService; private ISysLogininforService logininforService;
@RequiresPermissions("monitor:logininfor:view") @RequiresPermissions("monitor:logininfor:view")
@GetMapping() @GetMapping()
public String logininfor() public String logininfor() {
{ return prefix + "/logininfor" ;
return prefix + "/logininfor"; }
}
@RequiresPermissions("monitor:logininfor:list")
@RequiresPermissions("monitor:logininfor:list") @PostMapping("/list")
@PostMapping("/list") @ResponseBody
@ResponseBody public TableDataInfo list(SysLogininfor logininfor) {
public TableDataInfo list(SysLogininfor logininfor) startPage();
{ List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
startPage(); return getDataTable(list);
List<SysLogininfor> list = logininforService.selectLogininforList(logininfor); }
return getDataTable(list);
} @Log(title = "登陆日志" , businessType = BusinessType.EXPORT)
@RequiresPermissions("monitor:logininfor:export")
@Log(title = "登陆日志", businessType = BusinessType.EXPORT) @PostMapping("/export")
@RequiresPermissions("monitor:logininfor:export") @ResponseBody
@PostMapping("/export") public AjaxResult export(SysLogininfor logininfor) {
@ResponseBody List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
public AjaxResult export(SysLogininfor logininfor) ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class);
{ return util.exportExcel(list, "logininfor");
List<SysLogininfor> list = logininforService.selectLogininforList(logininfor); }
ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class);
return util.exportExcel(list, "logininfor"); @RequiresPermissions("monitor:logininfor:remove")
} @Log(title = "登陆日志" , businessType = BusinessType.DELETE)
@PostMapping("/remove")
@RequiresPermissions("monitor:logininfor:remove") @ResponseBody
@Log(title = "登陆日志", businessType = BusinessType.DELETE) public AjaxResult remove(String ids) {
@PostMapping("/remove") return toAjax(logininforService.deleteLogininforByIds(ids));
@ResponseBody }
public AjaxResult remove(String ids)
{ @RequiresPermissions("monitor:logininfor:remove")
return toAjax(logininforService.deleteLogininforByIds(ids)); @Log(title = "登陆日志" , businessType = BusinessType.CLEAN)
} @PostMapping("/clean")
@ResponseBody
@RequiresPermissions("monitor:logininfor:remove") public AjaxResult clean() {
@Log(title = "登陆日志", businessType = BusinessType.CLEAN) logininforService.cleanLogininfor();
@PostMapping("/clean") return success();
@ResponseBody }
public AjaxResult clean() }
{
logininforService.cleanLogininfor();
return success();
}
}

View File

@ -1,89 +1,83 @@
package com.ruoyi.web.controller.monitor; package com.ruoyi.web.controller.monitor;
import java.util.List; import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.annotation.Log; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.utils.ExcelUtil; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.system.domain.SysOperLog; import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.service.ISysOperLogService; import com.ruoyi.system.domain.SysOperLog;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.system.service.ISysOperLogService;
import com.ruoyi.framework.web.base.BaseController;
/**
* 操作日志记录 /**
* * 操作日志记录
* @author ruoyi *
*/ * @author ruoyi
@Controller */
@RequestMapping("/monitor/operlog") @Controller
public class SysOperlogController extends BaseController @RequestMapping("/monitor/operlog")
{ public class SysOperlogController extends BaseController {
private String prefix = "monitor/operlog"; private String prefix = "monitor/operlog" ;
@Autowired @Autowired
private ISysOperLogService operLogService; private ISysOperLogService operLogService;
@RequiresPermissions("monitor:operlog:view") @RequiresPermissions("monitor:operlog:view")
@GetMapping() @GetMapping()
public String operlog() public String operlog() {
{ return prefix + "/operlog" ;
return prefix + "/operlog"; }
}
@RequiresPermissions("monitor:operlog:list")
@RequiresPermissions("monitor:operlog:list") @PostMapping("/list")
@PostMapping("/list") @ResponseBody
@ResponseBody public TableDataInfo list(SysOperLog operLog) {
public TableDataInfo list(SysOperLog operLog) startPage();
{ List<SysOperLog> list = operLogService.selectOperLogList(operLog);
startPage(); return getDataTable(list);
List<SysOperLog> list = operLogService.selectOperLogList(operLog); }
return getDataTable(list);
} @Log(title = "操作日志" , businessType = BusinessType.EXPORT)
@RequiresPermissions("monitor:operlog:export")
@Log(title = "操作日志", businessType = BusinessType.EXPORT) @PostMapping("/export")
@RequiresPermissions("monitor:operlog:export") @ResponseBody
@PostMapping("/export") public AjaxResult export(SysOperLog operLog) {
@ResponseBody List<SysOperLog> list = operLogService.selectOperLogList(operLog);
public AjaxResult export(SysOperLog operLog) ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class);
{ return util.exportExcel(list, "operLog");
List<SysOperLog> list = operLogService.selectOperLogList(operLog); }
ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class);
return util.exportExcel(list, "operLog"); @RequiresPermissions("monitor:operlog:remove")
} @PostMapping("/remove")
@ResponseBody
@RequiresPermissions("monitor:operlog:remove") public AjaxResult remove(String ids) {
@PostMapping("/remove") return toAjax(operLogService.deleteOperLogByIds(ids));
@ResponseBody }
public AjaxResult remove(String ids)
{ @RequiresPermissions("monitor:operlog:detail")
return toAjax(operLogService.deleteOperLogByIds(ids)); @GetMapping("/detail/{operId}")
} public String detail(@PathVariable("operId") Long operId, ModelMap mmap) {
mmap.put("operLog" , operLogService.selectOperLogById(operId));
@RequiresPermissions("monitor:operlog:detail") return prefix + "/detail" ;
@GetMapping("/detail/{operId}") }
public String detail(@PathVariable("operId") Long operId, ModelMap mmap)
{ @Log(title = "操作日志" , businessType = BusinessType.CLEAN)
mmap.put("operLog", operLogService.selectOperLogById(operId)); @RequiresPermissions("monitor:operlog:remove")
return prefix + "/detail"; @PostMapping("/clean")
} @ResponseBody
public AjaxResult clean() {
@Log(title = "操作日志", businessType = BusinessType.CLEAN) operLogService.cleanOperLog();
@RequiresPermissions("monitor:operlog:remove") return success();
@PostMapping("/clean") }
@ResponseBody }
public AjaxResult clean()
{
operLogService.cleanOperLog();
return success();
}
}

View File

@ -1,112 +1,101 @@
package com.ruoyi.web.controller.monitor; package com.ruoyi.web.controller.monitor;
import java.util.List; import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestParam;
import com.ruoyi.common.annotation.Log; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.enums.OnlineStatus; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.shiro.session.OnlineSession; import com.ruoyi.common.enums.OnlineStatus;
import com.ruoyi.framework.shiro.session.OnlineSessionDAO; import com.ruoyi.framework.shiro.session.OnlineSession;
import com.ruoyi.framework.util.ShiroUtils; import com.ruoyi.framework.shiro.session.OnlineSessionDAO;
import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysUserOnline; import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.service.impl.SysUserOnlineServiceImpl; import com.ruoyi.system.domain.SysUserOnline;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.system.service.impl.SysUserOnlineServiceImpl;
import com.ruoyi.framework.web.base.BaseController;
/**
* 在线用户监控 /**
* * 在线用户监控
* @author ruoyi *
*/ * @author ruoyi
@Controller */
@RequestMapping("/monitor/online") @Controller
public class SysUserOnlineController extends BaseController @RequestMapping("/monitor/online")
{ public class SysUserOnlineController extends BaseController {
private String prefix = "monitor/online"; private String prefix = "monitor/online" ;
@Autowired @Autowired
private SysUserOnlineServiceImpl userOnlineService; private SysUserOnlineServiceImpl userOnlineService;
@Autowired @Autowired
private OnlineSessionDAO onlineSessionDAO; private OnlineSessionDAO onlineSessionDAO;
@RequiresPermissions("monitor:online:view") @RequiresPermissions("monitor:online:view")
@GetMapping() @GetMapping()
public String online() public String online() {
{ return prefix + "/online" ;
return prefix + "/online"; }
}
@RequiresPermissions("monitor:online:list")
@RequiresPermissions("monitor:online:list") @PostMapping("/list")
@PostMapping("/list") @ResponseBody
@ResponseBody public TableDataInfo list(SysUserOnline userOnline) {
public TableDataInfo list(SysUserOnline userOnline) startPage();
{ List<SysUserOnline> list = userOnlineService.selectUserOnlineList(userOnline);
startPage(); return getDataTable(list);
List<SysUserOnline> list = userOnlineService.selectUserOnlineList(userOnline); }
return getDataTable(list);
} @RequiresPermissions("monitor:online:batchForceLogout")
@Log(title = "在线用户" , businessType = BusinessType.FORCE)
@RequiresPermissions("monitor:online:batchForceLogout") @PostMapping("/batchForceLogout")
@Log(title = "在线用户", businessType = BusinessType.FORCE) @ResponseBody
@PostMapping("/batchForceLogout") public AjaxResult batchForceLogout(@RequestParam("ids[]") String[] ids) {
@ResponseBody for (String sessionId : ids) {
public AjaxResult batchForceLogout(@RequestParam("ids[]") String[] ids) SysUserOnline online = userOnlineService.selectOnlineById(sessionId);
{ if (online == null) {
for (String sessionId : ids) return error("用户已下线");
{ }
SysUserOnline online = userOnlineService.selectOnlineById(sessionId); OnlineSession onlineSession = (OnlineSession) onlineSessionDAO.readSession(online.getSessionId());
if (online == null) if (onlineSession == null) {
{ return error("用户已下线");
return error("用户已下线"); }
} if (sessionId.equals(ShiroUtils.getSessionId())) {
OnlineSession onlineSession = (OnlineSession) onlineSessionDAO.readSession(online.getSessionId()); return error("当前登陆用户无法强退");
if (onlineSession == null) }
{ onlineSession.setStatus(OnlineStatus.off_line);
return error("用户已下线"); online.setStatus(OnlineStatus.off_line);
} userOnlineService.saveOnline(online);
if (sessionId.equals(ShiroUtils.getSessionId())) }
{ return success();
return error("当前登陆用户无法强退"); }
}
onlineSession.setStatus(OnlineStatus.off_line); @RequiresPermissions("monitor:online:forceLogout")
online.setStatus(OnlineStatus.off_line); @Log(title = "在线用户" , businessType = BusinessType.FORCE)
userOnlineService.saveOnline(online); @PostMapping("/forceLogout")
} @ResponseBody
return success(); public AjaxResult forceLogout(String sessionId) {
} SysUserOnline online = userOnlineService.selectOnlineById(sessionId);
if (sessionId.equals(ShiroUtils.getSessionId())) {
@RequiresPermissions("monitor:online:forceLogout") return error("当前登陆用户无法强退");
@Log(title = "在线用户", businessType = BusinessType.FORCE) }
@PostMapping("/forceLogout") if (online == null) {
@ResponseBody return error("用户已下线");
public AjaxResult forceLogout(String sessionId) }
{ OnlineSession onlineSession = (OnlineSession) onlineSessionDAO.readSession(online.getSessionId());
SysUserOnline online = userOnlineService.selectOnlineById(sessionId); if (onlineSession == null) {
if (sessionId.equals(ShiroUtils.getSessionId())) return error("用户已下线");
{ }
return error("当前登陆用户无法强退"); onlineSession.setStatus(OnlineStatus.off_line);
} online.setStatus(OnlineStatus.off_line);
if (online == null) userOnlineService.saveOnline(online);
{ return success();
return error("用户已下线"); }
} }
OnlineSession onlineSession = (OnlineSession) onlineSessionDAO.readSession(online.getSessionId());
if (onlineSession == null)
{
return error("用户已下线");
}
onlineSession.setStatus(OnlineStatus.off_line);
online.setStatus(OnlineStatus.off_line);
userOnlineService.saveOnline(online);
return success();
}
}

View File

@ -1,92 +1,79 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.IOException; import java.io.IOException;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.bind.annotation.RequestMapping;
import com.google.code.kaptcha.Constants; import org.springframework.web.servlet.ModelAndView;
import com.google.code.kaptcha.Producer; import com.google.code.kaptcha.Constants;
import com.ruoyi.framework.web.base.BaseController; import com.google.code.kaptcha.Producer;
import com.ruoyi.framework.web.base.BaseController;
/**
* 图片验证码支持算术形式 /**
* * 图片验证码支持算术形式
* @author ruoyi *
*/ * @author ruoyi
@Controller */
@RequestMapping("/captcha") @Controller
public class SysCaptchaController extends BaseController @RequestMapping("/captcha")
{ public class SysCaptchaController extends BaseController {
@Resource(name = "captchaProducer") @Resource(name = "captchaProducer")
private Producer captchaProducer; private Producer captchaProducer;
@Resource(name = "captchaProducerMath") @Resource(name = "captchaProducerMath")
private Producer captchaProducerMath; private Producer captchaProducerMath;
/** /**
* 验证码生成 * 验证码生成
*/ */
@GetMapping(value = "/captchaImage") @GetMapping(value = "/captchaImage")
public ModelAndView getKaptchaImage(HttpServletRequest request, HttpServletResponse response) public ModelAndView getKaptchaImage(HttpServletRequest request, HttpServletResponse response) {
{ ServletOutputStream out = null;
ServletOutputStream out = null; try {
try HttpSession session = request.getSession();
{ response.setDateHeader("Expires" , 0);
HttpSession session = request.getSession(); response.setHeader("Cache-Control" , "no-store, no-cache, must-revalidate");
response.setDateHeader("Expires", 0); response.addHeader("Cache-Control" , "post-check=0, pre-check=0");
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate"); response.setHeader("Pragma" , "no-cache");
response.addHeader("Cache-Control", "post-check=0, pre-check=0"); response.setContentType("image/jpeg");
response.setHeader("Pragma", "no-cache");
response.setContentType("image/jpeg"); String type = request.getParameter("type");
String capStr = null;
String type = request.getParameter("type"); String code = null;
String capStr = null; BufferedImage bi = null;
String code = null; if ("math".equals(type)) {
BufferedImage bi = null; String capText = captchaProducerMath.createText();
if ("math".equals(type)) capStr = capText.substring(0, capText.lastIndexOf("@"));
{ code = capText.substring(capText.lastIndexOf("@") + 1);
String capText = captchaProducerMath.createText(); bi = captchaProducerMath.createImage(capStr);
capStr = capText.substring(0, capText.lastIndexOf("@")); } else if ("char".equals(type)) {
code = capText.substring(capText.lastIndexOf("@") + 1); capStr = code = captchaProducer.createText();
bi = captchaProducerMath.createImage(capStr); bi = captchaProducer.createImage(capStr);
} }
else if ("char".equals(type)) session.setAttribute(Constants.KAPTCHA_SESSION_KEY, code);
{ out = response.getOutputStream();
capStr = code = captchaProducer.createText(); ImageIO.write(bi, "jpg" , out);
bi = captchaProducer.createImage(capStr); out.flush();
}
session.setAttribute(Constants.KAPTCHA_SESSION_KEY, code); } catch (Exception e) {
out = response.getOutputStream(); e.printStackTrace();
ImageIO.write(bi, "jpg", out); } finally {
out.flush(); try {
if (out != null) {
} out.close();
catch (Exception e) }
{ } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
finally }
{ return null;
try }
{
if (out != null)
{
out.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
return null;
}
} }

View File

@ -1,134 +1,125 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.annotation.Log; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.utils.ExcelUtil; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.util.ShiroUtils; import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysConfig; import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.framework.web.base.BaseController;
/**
* 参数配置 信息操作处理 /**
* * 参数配置 信息操作处理
* @author ruoyi *
*/ * @author ruoyi
@Controller */
@RequestMapping("/system/config") @Controller
public class SysConfigController extends BaseController @RequestMapping("/system/config")
{ public class SysConfigController extends BaseController {
private String prefix = "system/config"; private String prefix = "system/config" ;
@Autowired @Autowired
private ISysConfigService configService; private ISysConfigService configService;
@RequiresPermissions("system:config:view") @RequiresPermissions("system:config:view")
@GetMapping() @GetMapping()
public String config() public String config() {
{ return prefix + "/config" ;
return prefix + "/config"; }
}
/**
/** * 查询参数配置列表
* 查询参数配置列表 */
*/ @RequiresPermissions("system:config:list")
@RequiresPermissions("system:config:list") @PostMapping("/list")
@PostMapping("/list") @ResponseBody
@ResponseBody public TableDataInfo list(SysConfig config) {
public TableDataInfo list(SysConfig config) startPage();
{ List<SysConfig> list = configService.selectConfigList(config);
startPage(); return getDataTable(list);
List<SysConfig> list = configService.selectConfigList(config); }
return getDataTable(list);
} @Log(title = "参数管理" , businessType = BusinessType.EXPORT)
@RequiresPermissions("system:config:export")
@Log(title = "参数管理", businessType = BusinessType.EXPORT) @PostMapping("/export")
@RequiresPermissions("system:config:export") @ResponseBody
@PostMapping("/export") public AjaxResult export(SysConfig config) {
@ResponseBody List<SysConfig> list = configService.selectConfigList(config);
public AjaxResult export(SysConfig config) ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
{ return util.exportExcel(list, "config");
List<SysConfig> list = configService.selectConfigList(config); }
ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
return util.exportExcel(list, "config"); /**
} * 新增参数配置
*/
/** @GetMapping("/add")
* 新增参数配置 public String add() {
*/ return prefix + "/add" ;
@GetMapping("/add") }
public String add()
{ /**
return prefix + "/add"; * 新增保存参数配置
} */
@RequiresPermissions("system:config:add")
/** @Log(title = "参数管理" , businessType = BusinessType.INSERT)
* 新增保存参数配置 @PostMapping("/add")
*/ @ResponseBody
@RequiresPermissions("system:config:add") public AjaxResult addSave(SysConfig config) {
@Log(title = "参数管理", businessType = BusinessType.INSERT) config.setCreateBy(ShiroUtils.getLoginName());
@PostMapping("/add") return toAjax(configService.insertConfig(config));
@ResponseBody }
public AjaxResult addSave(SysConfig config)
{ /**
config.setCreateBy(ShiroUtils.getLoginName()); * 修改参数配置
return toAjax(configService.insertConfig(config)); */
} @GetMapping("/edit/{configId}")
public String edit(@PathVariable("configId") Long configId, ModelMap mmap) {
/** mmap.put("config" , configService.selectConfigById(configId));
* 修改参数配置 return prefix + "/edit" ;
*/ }
@GetMapping("/edit/{configId}")
public String edit(@PathVariable("configId") Long configId, ModelMap mmap) /**
{ * 修改保存参数配置
mmap.put("config", configService.selectConfigById(configId)); */
return prefix + "/edit"; @RequiresPermissions("system:config:edit")
} @Log(title = "参数管理" , businessType = BusinessType.UPDATE)
@PostMapping("/edit")
/** @ResponseBody
* 修改保存参数配置 public AjaxResult editSave(SysConfig config) {
*/ config.setUpdateBy(ShiroUtils.getLoginName());
@RequiresPermissions("system:config:edit") return toAjax(configService.updateConfig(config));
@Log(title = "参数管理", businessType = BusinessType.UPDATE) }
@PostMapping("/edit")
@ResponseBody /**
public AjaxResult editSave(SysConfig config) * 删除参数配置
{ */
config.setUpdateBy(ShiroUtils.getLoginName()); @RequiresPermissions("system:config:remove")
return toAjax(configService.updateConfig(config)); @Log(title = "参数管理" , businessType = BusinessType.DELETE)
} @PostMapping("/remove")
@ResponseBody
/** public AjaxResult remove(String ids) {
* 删除参数配置 return toAjax(configService.deleteConfigByIds(ids));
*/ }
@RequiresPermissions("system:config:remove")
@Log(title = "参数管理", businessType = BusinessType.DELETE) /**
@PostMapping("/remove") * 校验参数键名
@ResponseBody */
public AjaxResult remove(String ids) @PostMapping("/checkConfigKeyUnique")
{ @ResponseBody
return toAjax(configService.deleteConfigByIds(ids)); public String checkConfigKeyUnique(SysConfig config) {
} return configService.checkConfigKeyUnique(config);
}
/** }
* 校验参数键名
*/
@PostMapping("/checkConfigKeyUnique")
@ResponseBody
public String checkConfigKeyUnique(SysConfig config)
{
return configService.checkConfigKeyUnique(config);
}
}

View File

@ -1,166 +1,152 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.utils.StringUtils; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.framework.util.ShiroUtils; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.SysDept; import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysRole; import com.ruoyi.system.domain.SysDept;
import com.ruoyi.system.service.ISysDeptService; import com.ruoyi.system.domain.SysRole;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.framework.web.base.BaseController;
/**
* 部门信息 /**
* * 部门信息
* @author ruoyi *
*/ * @author ruoyi
@Controller */
@RequestMapping("/system/dept") @Controller
public class SysDeptController extends BaseController @RequestMapping("/system/dept")
{ public class SysDeptController extends BaseController {
private String prefix = "system/dept"; private String prefix = "system/dept" ;
@Autowired @Autowired
private ISysDeptService deptService; private ISysDeptService deptService;
@RequiresPermissions("system:dept:view") @RequiresPermissions("system:dept:view")
@GetMapping() @GetMapping()
public String dept() public String dept() {
{ return prefix + "/dept" ;
return prefix + "/dept"; }
}
@RequiresPermissions("system:dept:list")
@RequiresPermissions("system:dept:list") @GetMapping("/list")
@GetMapping("/list") @ResponseBody
@ResponseBody public List<SysDept> list(SysDept dept) {
public List<SysDept> list(SysDept dept) List<SysDept> deptList = deptService.selectDeptList(dept);
{ return deptList;
List<SysDept> deptList = deptService.selectDeptList(dept); }
return deptList;
} /**
* 新增部门
/** */
* 新增部门 @GetMapping("/add/{parentId}")
*/ public String add(@PathVariable("parentId") Long parentId, ModelMap mmap) {
@GetMapping("/add/{parentId}") mmap.put("dept" , deptService.selectDeptById(parentId));
public String add(@PathVariable("parentId") Long parentId, ModelMap mmap) return prefix + "/add" ;
{ }
mmap.put("dept", deptService.selectDeptById(parentId));
return prefix + "/add"; /**
} * 新增保存部门
*/
/** @Log(title = "部门管理" , businessType = BusinessType.INSERT)
* 新增保存部门 @RequiresPermissions("system:dept:add")
*/ @PostMapping("/add")
@Log(title = "部门管理", businessType = BusinessType.INSERT) @ResponseBody
@RequiresPermissions("system:dept:add") public AjaxResult addSave(SysDept dept) {
@PostMapping("/add") dept.setCreateBy(ShiroUtils.getLoginName());
@ResponseBody return toAjax(deptService.insertDept(dept));
public AjaxResult addSave(SysDept dept) }
{
dept.setCreateBy(ShiroUtils.getLoginName()); /**
return toAjax(deptService.insertDept(dept)); * 修改
} */
@GetMapping("/edit/{deptId}")
/** public String edit(@PathVariable("deptId") Long deptId, ModelMap mmap) {
* 修改 SysDept dept = deptService.selectDeptById(deptId);
*/ if (StringUtils.isNotNull(dept) && 100L == deptId) {
@GetMapping("/edit/{deptId}") dept.setParentName("");
public String edit(@PathVariable("deptId") Long deptId, ModelMap mmap) }
{ mmap.put("dept" , dept);
SysDept dept = deptService.selectDeptById(deptId); return prefix + "/edit" ;
if (StringUtils.isNotNull(dept) && 100L == deptId) }
{
dept.setParentName(""); /**
} * 保存
mmap.put("dept", dept); */
return prefix + "/edit"; @Log(title = "部门管理" , businessType = BusinessType.UPDATE)
} @RequiresPermissions("system:dept:edit")
@PostMapping("/edit")
/** @ResponseBody
* 保存 public AjaxResult editSave(SysDept dept) {
*/ dept.setUpdateBy(ShiroUtils.getLoginName());
@Log(title = "部门管理", businessType = BusinessType.UPDATE) return toAjax(deptService.updateDept(dept));
@RequiresPermissions("system:dept:edit") }
@PostMapping("/edit")
@ResponseBody /**
public AjaxResult editSave(SysDept dept) * 删除
{ */
dept.setUpdateBy(ShiroUtils.getLoginName()); @Log(title = "部门管理" , businessType = BusinessType.DELETE)
return toAjax(deptService.updateDept(dept)); @RequiresPermissions("system:dept:remove")
} @PostMapping("/remove/{deptId}")
@ResponseBody
/** public AjaxResult remove(@PathVariable("deptId") Long deptId) {
* 删除 if (deptService.selectDeptCount(deptId) > 0) {
*/ return error(1, "存在下级部门,不允许删除");
@Log(title = "部门管理", businessType = BusinessType.DELETE) }
@RequiresPermissions("system:dept:remove") if (deptService.checkDeptExistUser(deptId)) {
@PostMapping("/remove/{deptId}") return error(1, "部门存在用户,不允许删除");
@ResponseBody }
public AjaxResult remove(@PathVariable("deptId") Long deptId) return toAjax(deptService.deleteDeptById(deptId));
{ }
if (deptService.selectDeptCount(deptId) > 0)
{ /**
return error(1, "存在下级部门,不允许删除"); * 校验部门名称
} */
if (deptService.checkDeptExistUser(deptId)) @PostMapping("/checkDeptNameUnique")
{ @ResponseBody
return error(1, "部门存在用户,不允许删除"); public String checkDeptNameUnique(SysDept dept) {
} return deptService.checkDeptNameUnique(dept);
return toAjax(deptService.deleteDeptById(deptId)); }
}
/**
/** * 选择部门树
* 校验部门名称 */
*/ @GetMapping("/selectDeptTree/{deptId}")
@PostMapping("/checkDeptNameUnique") public String selectDeptTree(@PathVariable("deptId") Long deptId, ModelMap mmap) {
@ResponseBody mmap.put("dept" , deptService.selectDeptById(deptId));
public String checkDeptNameUnique(SysDept dept) return prefix + "/tree" ;
{ }
return deptService.checkDeptNameUnique(dept);
} /**
* 加载部门列表树
/** */
* 选择部门树 @GetMapping("/treeData")
*/ @ResponseBody
@GetMapping("/selectDeptTree/{deptId}") public List<Map<String, Object>> treeData() {
public String selectDeptTree(@PathVariable("deptId") Long deptId, ModelMap mmap) List<Map<String, Object>> tree = deptService.selectDeptTree();
{ return tree;
mmap.put("dept", deptService.selectDeptById(deptId)); }
return prefix + "/tree";
} /**
* 加载角色部门数据权限列表树
/** */
* 加载部门列表树 @GetMapping("/roleDeptTreeData")
*/ @ResponseBody
@GetMapping("/treeData") public List<Map<String, Object>> deptTreeData(SysRole role) {
@ResponseBody List<Map<String, Object>> tree = deptService.roleDeptTreeData(role);
public List<Map<String, Object>> treeData() return tree;
{ }
List<Map<String, Object>> tree = deptService.selectDeptTree(); }
return tree;
}
/**
* 加载角色部门数据权限列表树
*/
@GetMapping("/roleDeptTreeData")
@ResponseBody
public List<Map<String, Object>> deptTreeData(SysRole role)
{
List<Map<String, Object>> tree = deptService.roleDeptTreeData(role);
return tree;
}
}

View File

@ -1,119 +1,111 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.annotation.Log; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.utils.ExcelUtil; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.util.ShiroUtils; import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysDictData; import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.service.ISysDictDataService; import com.ruoyi.system.domain.SysDictData;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.framework.web.base.BaseController;
/**
* 数据字典信息 /**
* * 数据字典信息
* @author ruoyi *
*/ * @author ruoyi
@Controller */
@RequestMapping("/system/dict/data") @Controller
public class SysDictDataController extends BaseController @RequestMapping("/system/dict/data")
{ public class SysDictDataController extends BaseController {
private String prefix = "system/dict/data"; private String prefix = "system/dict/data" ;
@Autowired @Autowired
private ISysDictDataService dictDataService; private ISysDictDataService dictDataService;
@RequiresPermissions("system:dict:view") @RequiresPermissions("system:dict:view")
@GetMapping() @GetMapping()
public String dictData() public String dictData() {
{ return prefix + "/data" ;
return prefix + "/data"; }
}
@PostMapping("/list")
@PostMapping("/list") @RequiresPermissions("system:dict:list")
@RequiresPermissions("system:dict:list") @ResponseBody
@ResponseBody public TableDataInfo list(SysDictData dictData) {
public TableDataInfo list(SysDictData dictData) startPage();
{ List<SysDictData> list = dictDataService.selectDictDataList(dictData);
startPage(); return getDataTable(list);
List<SysDictData> list = dictDataService.selectDictDataList(dictData); }
return getDataTable(list);
} @Log(title = "字典数据" , businessType = BusinessType.EXPORT)
@RequiresPermissions("system:dict:export")
@Log(title = "字典数据", businessType = BusinessType.EXPORT) @PostMapping("/export")
@RequiresPermissions("system:dict:export") @ResponseBody
@PostMapping("/export") public AjaxResult export(SysDictData dictData) {
@ResponseBody List<SysDictData> list = dictDataService.selectDictDataList(dictData);
public AjaxResult export(SysDictData dictData) ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class);
{ return util.exportExcel(list, "dictData");
List<SysDictData> list = dictDataService.selectDictDataList(dictData); }
ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class);
return util.exportExcel(list, "dictData"); /**
} * 新增字典类型
*/
/** @GetMapping("/add/{dictType}")
* 新增字典类型 public String add(@PathVariable("dictType") String dictType, ModelMap mmap) {
*/ mmap.put("dictType" , dictType);
@GetMapping("/add/{dictType}") return prefix + "/add" ;
public String add(@PathVariable("dictType") String dictType, ModelMap mmap) }
{
mmap.put("dictType", dictType); /**
return prefix + "/add"; * 新增保存字典类型
} */
@Log(title = "字典数据" , businessType = BusinessType.INSERT)
/** @RequiresPermissions("system:dict:add")
* 新增保存字典类型 @PostMapping("/add")
*/ @ResponseBody
@Log(title = "字典数据", businessType = BusinessType.INSERT) public AjaxResult addSave(SysDictData dict) {
@RequiresPermissions("system:dict:add") dict.setCreateBy(ShiroUtils.getLoginName());
@PostMapping("/add") return toAjax(dictDataService.insertDictData(dict));
@ResponseBody }
public AjaxResult addSave(SysDictData dict)
{ /**
dict.setCreateBy(ShiroUtils.getLoginName()); * 修改字典类型
return toAjax(dictDataService.insertDictData(dict)); */
} @GetMapping("/edit/{dictCode}")
public String edit(@PathVariable("dictCode") Long dictCode, ModelMap mmap) {
/** mmap.put("dict" , dictDataService.selectDictDataById(dictCode));
* 修改字典类型 return prefix + "/edit" ;
*/ }
@GetMapping("/edit/{dictCode}")
public String edit(@PathVariable("dictCode") Long dictCode, ModelMap mmap) /**
{ * 修改保存字典类型
mmap.put("dict", dictDataService.selectDictDataById(dictCode)); */
return prefix + "/edit"; @Log(title = "字典数据" , businessType = BusinessType.UPDATE)
} @RequiresPermissions("system:dict:edit")
@PostMapping("/edit")
/** @ResponseBody
* 修改保存字典类型 public AjaxResult editSave(SysDictData dict) {
*/ dict.setUpdateBy(ShiroUtils.getLoginName());
@Log(title = "字典数据", businessType = BusinessType.UPDATE) return toAjax(dictDataService.updateDictData(dict));
@RequiresPermissions("system:dict:edit") }
@PostMapping("/edit")
@ResponseBody @Log(title = "字典数据" , businessType = BusinessType.DELETE)
public AjaxResult editSave(SysDictData dict) @RequiresPermissions("system:dict:remove")
{ @PostMapping("/remove")
dict.setUpdateBy(ShiroUtils.getLoginName()); @ResponseBody
return toAjax(dictDataService.updateDictData(dict)); public AjaxResult remove(String ids) {
} return toAjax(dictDataService.deleteDictDataByIds(ids));
}
@Log(title = "字典数据", businessType = BusinessType.DELETE) }
@RequiresPermissions("system:dict:remove")
@PostMapping("/remove")
@ResponseBody
public AjaxResult remove(String ids)
{
return toAjax(dictDataService.deleteDictDataByIds(ids));
}
}

View File

@ -1,148 +1,135 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.annotation.Log; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.utils.ExcelUtil; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.util.ShiroUtils; import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysDictType; import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.service.ISysDictTypeService; import com.ruoyi.system.domain.SysDictType;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.system.service.ISysDictTypeService;
import com.ruoyi.framework.web.base.BaseController;
/**
* 数据字典信息 /**
* * 数据字典信息
* @author ruoyi *
*/ * @author ruoyi
@Controller */
@RequestMapping("/system/dict") @Controller
public class SysDictTypeController extends BaseController @RequestMapping("/system/dict")
{ public class SysDictTypeController extends BaseController {
private String prefix = "system/dict/type"; private String prefix = "system/dict/type" ;
@Autowired @Autowired
private ISysDictTypeService dictTypeService; private ISysDictTypeService dictTypeService;
@RequiresPermissions("system:dict:view") @RequiresPermissions("system:dict:view")
@GetMapping() @GetMapping()
public String dictType() public String dictType() {
{ return prefix + "/type" ;
return prefix + "/type"; }
}
@PostMapping("/list")
@PostMapping("/list") @RequiresPermissions("system:dict:list")
@RequiresPermissions("system:dict:list") @ResponseBody
@ResponseBody public TableDataInfo list(SysDictType dictType) {
public TableDataInfo list(SysDictType dictType) startPage();
{ List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
startPage(); return getDataTable(list);
List<SysDictType> list = dictTypeService.selectDictTypeList(dictType); }
return getDataTable(list);
} @Log(title = "字典类型" , businessType = BusinessType.EXPORT)
@RequiresPermissions("system:dict:export")
@Log(title = "字典类型", businessType = BusinessType.EXPORT) @PostMapping("/export")
@RequiresPermissions("system:dict:export") @ResponseBody
@PostMapping("/export") public AjaxResult export(SysDictType dictType) {
@ResponseBody
public AjaxResult export(SysDictType dictType) List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
{ ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class);
return util.exportExcel(list, "dictType");
List<SysDictType> list = dictTypeService.selectDictTypeList(dictType); }
ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class);
return util.exportExcel(list, "dictType"); /**
} * 新增字典类型
*/
/** @GetMapping("/add")
* 新增字典类型 public String add() {
*/ return prefix + "/add" ;
@GetMapping("/add") }
public String add()
{ /**
return prefix + "/add"; * 新增保存字典类型
} */
@Log(title = "字典类型" , businessType = BusinessType.INSERT)
/** @RequiresPermissions("system:dict:add")
* 新增保存字典类型 @PostMapping("/add")
*/ @ResponseBody
@Log(title = "字典类型", businessType = BusinessType.INSERT) public AjaxResult addSave(SysDictType dict) {
@RequiresPermissions("system:dict:add") dict.setCreateBy(ShiroUtils.getLoginName());
@PostMapping("/add") return toAjax(dictTypeService.insertDictType(dict));
@ResponseBody }
public AjaxResult addSave(SysDictType dict)
{ /**
dict.setCreateBy(ShiroUtils.getLoginName()); * 修改字典类型
return toAjax(dictTypeService.insertDictType(dict)); */
} @GetMapping("/edit/{dictId}")
public String edit(@PathVariable("dictId") Long dictId, ModelMap mmap) {
/** mmap.put("dict" , dictTypeService.selectDictTypeById(dictId));
* 修改字典类型 return prefix + "/edit" ;
*/ }
@GetMapping("/edit/{dictId}")
public String edit(@PathVariable("dictId") Long dictId, ModelMap mmap) /**
{ * 修改保存字典类型
mmap.put("dict", dictTypeService.selectDictTypeById(dictId)); */
return prefix + "/edit"; @Log(title = "字典类型" , businessType = BusinessType.UPDATE)
} @RequiresPermissions("system:dict:edit")
@PostMapping("/edit")
/** @ResponseBody
* 修改保存字典类型 public AjaxResult editSave(SysDictType dict) {
*/ dict.setUpdateBy(ShiroUtils.getLoginName());
@Log(title = "字典类型", businessType = BusinessType.UPDATE) return toAjax(dictTypeService.updateDictType(dict));
@RequiresPermissions("system:dict:edit") }
@PostMapping("/edit")
@ResponseBody @Log(title = "字典类型" , businessType = BusinessType.DELETE)
public AjaxResult editSave(SysDictType dict) @RequiresPermissions("system:dict:remove")
{ @PostMapping("/remove")
dict.setUpdateBy(ShiroUtils.getLoginName()); @ResponseBody
return toAjax(dictTypeService.updateDictType(dict)); public AjaxResult remove(String ids) {
} try {
return toAjax(dictTypeService.deleteDictTypeByIds(ids));
@Log(title = "字典类型", businessType = BusinessType.DELETE) } catch (Exception e) {
@RequiresPermissions("system:dict:remove") return error(e.getMessage());
@PostMapping("/remove") }
@ResponseBody }
public AjaxResult remove(String ids)
{ /**
try * 查询字典详细
{ */
return toAjax(dictTypeService.deleteDictTypeByIds(ids)); @RequiresPermissions("system:dict:list")
} @GetMapping("/detail/{dictId}")
catch (Exception e) public String detail(@PathVariable("dictId") Long dictId, ModelMap mmap) {
{ mmap.put("dict" , dictTypeService.selectDictTypeById(dictId));
return error(e.getMessage()); mmap.put("dictList" , dictTypeService.selectDictTypeAll());
} return "system/dict/data/data" ;
} }
/** /**
* 查询字典详细 * 校验字典类型
*/ */
@RequiresPermissions("system:dict:list") @PostMapping("/checkDictTypeUnique")
@GetMapping("/detail/{dictId}") @ResponseBody
public String detail(@PathVariable("dictId") Long dictId, ModelMap mmap) public String checkDictTypeUnique(SysDictType dictType) {
{ return dictTypeService.checkDictTypeUnique(dictType);
mmap.put("dict", dictTypeService.selectDictTypeById(dictId)); }
mmap.put("dictList", dictTypeService.selectDictTypeAll()); }
return "system/dict/data/data";
}
/**
* 校验字典类型
*/
@PostMapping("/checkDictTypeUnique")
@ResponseBody
public String checkDictTypeUnique(SysDictType dictType)
{
return dictTypeService.checkDictTypeUnique(dictType);
}
}

View File

@ -1,46 +1,44 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.ui.ModelMap;
import com.ruoyi.common.config.Global; import org.springframework.web.bind.annotation.GetMapping;
import com.ruoyi.system.domain.SysMenu; import com.ruoyi.common.config.Global;
import com.ruoyi.system.domain.SysUser; import com.ruoyi.system.domain.SysMenu;
import com.ruoyi.system.service.ISysMenuService; import com.ruoyi.system.domain.SysUser;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.system.service.ISysMenuService;
import com.ruoyi.framework.web.base.BaseController;
/**
* 首页 业务处理 /**
* * 首页 业务处理
* @author ruoyi *
*/ * @author ruoyi
@Controller */
public class SysIndexController extends BaseController @Controller
{ public class SysIndexController extends BaseController {
@Autowired @Autowired
private ISysMenuService menuService; private ISysMenuService menuService;
// 系统首页 // 系统首页
@GetMapping("/index") @GetMapping("/index")
public String index(ModelMap mmap) public String index(ModelMap mmap) {
{ // 取身份信息
// 取身份信息 SysUser user = getSysUser();
SysUser user = getSysUser(); // 根据用户id取出菜单
// 根据用户id取出菜单 List<SysMenu> menus = menuService.selectMenusByUser(user);
List<SysMenu> menus = menuService.selectMenusByUser(user); mmap.put("menus" , menus);
mmap.put("menus", menus); mmap.put("user" , user);
mmap.put("user", user); mmap.put("copyrightYear" , Global.getCopyrightYear());
mmap.put("copyrightYear", Global.getCopyrightYear()); return "index" ;
return "index"; }
}
// 系统介绍
// 系统介绍 @GetMapping("/system/main")
@GetMapping("/system/main") public String main(ModelMap mmap) {
public String main(ModelMap mmap) mmap.put("version" , Global.getVersion());
{ return "main" ;
mmap.put("version", Global.getVersion()); }
return "main"; }
}
}

View File

@ -1,65 +1,57 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.subject.Subject; import org.apache.shiro.authc.UsernamePasswordToken;
import org.springframework.stereotype.Controller; import org.apache.shiro.subject.Subject;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.PostMapping;
import com.ruoyi.common.base.AjaxResult; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.framework.util.ServletUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.framework.util.ServletUtils;
import com.ruoyi.framework.web.base.BaseController;
/**
* 登录验证 /**
* * 登录验证
* @author ruoyi *
*/ * @author ruoyi
@Controller */
public class SysLoginController extends BaseController @Controller
{ public class SysLoginController extends BaseController {
@GetMapping("/login") @GetMapping("/login")
public String login(HttpServletRequest request, HttpServletResponse response) public String login(HttpServletRequest request, HttpServletResponse response) {
{ // 如果是Ajax请求返回Json字符串
// 如果是Ajax请求返回Json字符串 if (ServletUtils.isAjaxRequest(request)) {
if (ServletUtils.isAjaxRequest(request)) return ServletUtils.renderString(response, "{\"code\":\"1\",\"msg\":\"未登录或登录超时。请重新登录\"}");
{ }
return ServletUtils.renderString(response, "{\"code\":\"1\",\"msg\":\"未登录或登录超时。请重新登录\"}");
} return "login" ;
}
return "login";
} @PostMapping("/login")
@ResponseBody
@PostMapping("/login") public AjaxResult ajaxLogin(String username, String password, Boolean rememberMe) {
@ResponseBody UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe);
public AjaxResult ajaxLogin(String username, String password, Boolean rememberMe) Subject subject = SecurityUtils.getSubject();
{ try {
UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe); subject.login(token);
Subject subject = SecurityUtils.getSubject(); return success();
try } catch (AuthenticationException e) {
{ String msg = "用户或密码错误" ;
subject.login(token); if (StringUtils.isNotEmpty(e.getMessage())) {
return success(); msg = e.getMessage();
} }
catch (AuthenticationException e) return error(msg);
{ }
String msg = "用户或密码错误"; }
if (StringUtils.isNotEmpty(e.getMessage()))
{ @GetMapping("/unauth")
msg = e.getMessage(); public String unauth() {
} return "/error/unauth" ;
return error(msg); }
} }
}
@GetMapping("/unauth")
public String unauth()
{
return "/error/unauth";
}
}

View File

@ -1,183 +1,166 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.annotation.Log; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.framework.util.ShiroUtils; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.SysMenu; import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysRole; import com.ruoyi.system.domain.SysMenu;
import com.ruoyi.system.service.ISysMenuService; import com.ruoyi.system.domain.SysRole;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.system.service.ISysMenuService;
import com.ruoyi.framework.web.base.BaseController;
/**
* 菜单信息 /**
* * 菜单信息
* @author ruoyi *
*/ * @author ruoyi
@Controller */
@RequestMapping("/system/menu") @Controller
public class SysMenuController extends BaseController @RequestMapping("/system/menu")
{ public class SysMenuController extends BaseController {
private String prefix = "system/menu"; private String prefix = "system/menu" ;
@Autowired @Autowired
private ISysMenuService menuService; private ISysMenuService menuService;
@RequiresPermissions("system:menu:view") @RequiresPermissions("system:menu:view")
@GetMapping() @GetMapping()
public String menu() public String menu() {
{ return prefix + "/menu" ;
return prefix + "/menu"; }
}
@RequiresPermissions("system:menu:list")
@RequiresPermissions("system:menu:list") @GetMapping("/list")
@GetMapping("/list") @ResponseBody
@ResponseBody public List<SysMenu> list(SysMenu menu) {
public List<SysMenu> list(SysMenu menu) List<SysMenu> menuList = menuService.selectMenuList(menu);
{ return menuList;
List<SysMenu> menuList = menuService.selectMenuList(menu); }
return menuList;
} /**
* 删除菜单
/** */
* 删除菜单 @Log(title = "菜单管理" , businessType = BusinessType.DELETE)
*/ @RequiresPermissions("system:menu:remove")
@Log(title = "菜单管理", businessType = BusinessType.DELETE) @PostMapping("/remove/{menuId}")
@RequiresPermissions("system:menu:remove") @ResponseBody
@PostMapping("/remove/{menuId}") public AjaxResult remove(@PathVariable("menuId") Long menuId) {
@ResponseBody if (menuService.selectCountMenuByParentId(menuId) > 0) {
public AjaxResult remove(@PathVariable("menuId") Long menuId) return error(1, "存在子菜单,不允许删除");
{ }
if (menuService.selectCountMenuByParentId(menuId) > 0) if (menuService.selectCountRoleMenuByMenuId(menuId) > 0) {
{ return error(1, "菜单已分配,不允许删除");
return error(1, "存在子菜单,不允许删除"); }
} ShiroUtils.clearCachedAuthorizationInfo();
if (menuService.selectCountRoleMenuByMenuId(menuId) > 0) return toAjax(menuService.deleteMenuById(menuId));
{ }
return error(1, "菜单已分配,不允许删除");
} /**
ShiroUtils.clearCachedAuthorizationInfo(); * 新增
return toAjax(menuService.deleteMenuById(menuId)); */
} @GetMapping("/add/{parentId}")
public String add(@PathVariable("parentId") Long parentId, ModelMap mmap) {
/** SysMenu menu = null;
* 新增 if (0L != parentId) {
*/ menu = menuService.selectMenuById(parentId);
@GetMapping("/add/{parentId}") } else {
public String add(@PathVariable("parentId") Long parentId, ModelMap mmap) menu = new SysMenu();
{ menu.setMenuId(0L);
SysMenu menu = null; menu.setMenuName("主目录");
if (0L != parentId) }
{ mmap.put("menu" , menu);
menu = menuService.selectMenuById(parentId); return prefix + "/add" ;
} }
else
{ /**
menu = new SysMenu(); * 新增保存菜单
menu.setMenuId(0L); */
menu.setMenuName("主目录"); @Log(title = "菜单管理" , businessType = BusinessType.INSERT)
} @RequiresPermissions("system:menu:add")
mmap.put("menu", menu); @PostMapping("/add")
return prefix + "/add"; @ResponseBody
} public AjaxResult addSave(SysMenu menu) {
menu.setCreateBy(ShiroUtils.getLoginName());
/** ShiroUtils.clearCachedAuthorizationInfo();
* 新增保存菜单 return toAjax(menuService.insertMenu(menu));
*/ }
@Log(title = "菜单管理", businessType = BusinessType.INSERT)
@RequiresPermissions("system:menu:add") /**
@PostMapping("/add") * 修改菜单
@ResponseBody */
public AjaxResult addSave(SysMenu menu) @GetMapping("/edit/{menuId}")
{ public String edit(@PathVariable("menuId") Long menuId, ModelMap mmap) {
menu.setCreateBy(ShiroUtils.getLoginName()); mmap.put("menu" , menuService.selectMenuById(menuId));
ShiroUtils.clearCachedAuthorizationInfo(); return prefix + "/edit" ;
return toAjax(menuService.insertMenu(menu)); }
}
/**
/** * 修改保存菜单
* 修改菜单 */
*/ @Log(title = "菜单管理" , businessType = BusinessType.UPDATE)
@GetMapping("/edit/{menuId}") @RequiresPermissions("system:menu:edit")
public String edit(@PathVariable("menuId") Long menuId, ModelMap mmap) @PostMapping("/edit")
{ @ResponseBody
mmap.put("menu", menuService.selectMenuById(menuId)); public AjaxResult editSave(SysMenu menu) {
return prefix + "/edit"; menu.setUpdateBy(ShiroUtils.getLoginName());
} ShiroUtils.clearCachedAuthorizationInfo();
return toAjax(menuService.updateMenu(menu));
/** }
* 修改保存菜单
*/ /**
@Log(title = "菜单管理", businessType = BusinessType.UPDATE) * 选择菜单图标
@RequiresPermissions("system:menu:edit") */
@PostMapping("/edit") @GetMapping("/icon")
@ResponseBody public String icon() {
public AjaxResult editSave(SysMenu menu) return prefix + "/icon" ;
{ }
menu.setUpdateBy(ShiroUtils.getLoginName());
ShiroUtils.clearCachedAuthorizationInfo(); /**
return toAjax(menuService.updateMenu(menu)); * 校验菜单名称
} */
@PostMapping("/checkMenuNameUnique")
/** @ResponseBody
* 选择菜单图标 public String checkMenuNameUnique(SysMenu menu) {
*/ return menuService.checkMenuNameUnique(menu);
@GetMapping("/icon") }
public String icon()
{ /**
return prefix + "/icon"; * 加载角色菜单列表树
} */
@GetMapping("/roleMenuTreeData")
/** @ResponseBody
* 校验菜单名称 public List<Map<String, Object>> roleMenuTreeData(SysRole role) {
*/ List<Map<String, Object>> tree = menuService.roleMenuTreeData(role);
@PostMapping("/checkMenuNameUnique") return tree;
@ResponseBody }
public String checkMenuNameUnique(SysMenu menu)
{ /**
return menuService.checkMenuNameUnique(menu); * 加载所有菜单列表树
} */
@GetMapping("/menuTreeData")
/** @ResponseBody
* 加载角色菜单列表树 public List<Map<String, Object>> menuTreeData(SysRole role) {
*/ List<Map<String, Object>> tree = menuService.menuTreeData();
@GetMapping("/roleMenuTreeData") return tree;
@ResponseBody }
public List<Map<String, Object>> roleMenuTreeData(SysRole role)
{ /**
List<Map<String, Object>> tree = menuService.roleMenuTreeData(role); * 选择菜单树
return tree; */
} @GetMapping("/selectMenuTree/{menuId}")
public String selectMenuTree(@PathVariable("menuId") Long menuId, ModelMap mmap) {
/** mmap.put("menu" , menuService.selectMenuById(menuId));
* 加载所有菜单列表树 return prefix + "/tree" ;
*/ }
@GetMapping("/menuTreeData")
@ResponseBody
public List<Map<String, Object>> menuTreeData(SysRole role)
{
List<Map<String, Object>> tree = menuService.menuTreeData();
return tree;
}
/**
* 选择菜单树
*/
@GetMapping("/selectMenuTree/{menuId}")
public String selectMenuTree(@PathVariable("menuId") Long menuId, ModelMap mmap)
{
mmap.put("menu", menuService.selectMenuById(menuId));
return prefix + "/tree";
}
} }

View File

@ -1,112 +1,105 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.annotation.Log; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.framework.util.ShiroUtils; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysNotice; import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.service.ISysNoticeService; import com.ruoyi.system.domain.SysNotice;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.system.service.ISysNoticeService;
import com.ruoyi.framework.web.base.BaseController;
/**
* 公告 信息操作处理 /**
* * 公告 信息操作处理
* @author ruoyi *
*/ * @author ruoyi
@Controller */
@RequestMapping("/system/notice") @Controller
public class SysNoticeController extends BaseController @RequestMapping("/system/notice")
{ public class SysNoticeController extends BaseController {
private String prefix = "system/notice"; private String prefix = "system/notice" ;
@Autowired @Autowired
private ISysNoticeService noticeService; private ISysNoticeService noticeService;
@RequiresPermissions("system:notice:view") @RequiresPermissions("system:notice:view")
@GetMapping() @GetMapping()
public String notice() public String notice() {
{ return prefix + "/notice" ;
return prefix + "/notice"; }
}
/**
/** * 查询公告列表
* 查询公告列表 */
*/ @RequiresPermissions("system:notice:list")
@RequiresPermissions("system:notice:list") @PostMapping("/list")
@PostMapping("/list") @ResponseBody
@ResponseBody public TableDataInfo list(SysNotice notice) {
public TableDataInfo list(SysNotice notice) startPage();
{ List<SysNotice> list = noticeService.selectNoticeList(notice);
startPage(); return getDataTable(list);
List<SysNotice> list = noticeService.selectNoticeList(notice); }
return getDataTable(list);
} /**
* 新增公告
/** */
* 新增公告 @GetMapping("/add")
*/ public String add() {
@GetMapping("/add") return prefix + "/add" ;
public String add() }
{
return prefix + "/add"; /**
} * 新增保存公告
*/
/** @RequiresPermissions("system:notice:add")
* 新增保存公告 @Log(title = "通知公告" , businessType = BusinessType.INSERT)
*/ @PostMapping("/add")
@RequiresPermissions("system:notice:add") @ResponseBody
@Log(title = "通知公告", businessType = BusinessType.INSERT) public AjaxResult addSave(SysNotice notice) {
@PostMapping("/add") notice.setCreateBy(ShiroUtils.getLoginName());
@ResponseBody return toAjax(noticeService.insertNotice(notice));
public AjaxResult addSave(SysNotice notice) }
{
notice.setCreateBy(ShiroUtils.getLoginName()); /**
return toAjax(noticeService.insertNotice(notice)); * 修改公告
} */
@GetMapping("/edit/{noticeId}")
/** public String edit(@PathVariable("noticeId") Long noticeId, ModelMap mmap) {
* 修改公告 mmap.put("notice" , noticeService.selectNoticeById(noticeId));
*/ return prefix + "/edit" ;
@GetMapping("/edit/{noticeId}") }
public String edit(@PathVariable("noticeId") Long noticeId, ModelMap mmap)
{ /**
mmap.put("notice", noticeService.selectNoticeById(noticeId)); * 修改保存公告
return prefix + "/edit"; */
} @RequiresPermissions("system:notice:edit")
@Log(title = "通知公告" , businessType = BusinessType.UPDATE)
/** @PostMapping("/edit")
* 修改保存公告 @ResponseBody
*/ public AjaxResult editSave(SysNotice notice) {
@RequiresPermissions("system:notice:edit") notice.setUpdateBy(ShiroUtils.getLoginName());
@Log(title = "通知公告", businessType = BusinessType.UPDATE) return toAjax(noticeService.updateNotice(notice));
@PostMapping("/edit") }
@ResponseBody
public AjaxResult editSave(SysNotice notice) /**
{ * 删除公告
notice.setUpdateBy(ShiroUtils.getLoginName()); */
return toAjax(noticeService.updateNotice(notice)); @RequiresPermissions("system:notice:remove")
} @Log(title = "通知公告" , businessType = BusinessType.DELETE)
@PostMapping("/remove")
/** @ResponseBody
* 删除公告 public AjaxResult remove(String ids) {
*/ return toAjax(noticeService.deleteNoticeByIds(ids));
@RequiresPermissions("system:notice:remove") }
@Log(title = "通知公告", businessType = BusinessType.DELETE) }
@PostMapping("/remove")
@ResponseBody
public AjaxResult remove(String ids)
{
return toAjax(noticeService.deleteNoticeByIds(ids));
}
}

View File

@ -1,145 +1,132 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.annotation.Log; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.utils.ExcelUtil; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.util.ShiroUtils; import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysPost; import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.service.ISysPostService; import com.ruoyi.system.domain.SysPost;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.framework.web.base.BaseController;
/**
* 岗位信息操作处理 /**
* * 岗位信息操作处理
* @author ruoyi *
*/ * @author ruoyi
@Controller */
@RequestMapping("/system/post") @Controller
public class SysPostController extends BaseController @RequestMapping("/system/post")
{ public class SysPostController extends BaseController {
private String prefix = "system/post"; private String prefix = "system/post" ;
@Autowired @Autowired
private ISysPostService postService; private ISysPostService postService;
@RequiresPermissions("system:post:view") @RequiresPermissions("system:post:view")
@GetMapping() @GetMapping()
public String operlog() public String operlog() {
{ return prefix + "/post" ;
return prefix + "/post"; }
}
@RequiresPermissions("system:post:list")
@RequiresPermissions("system:post:list") @PostMapping("/list")
@PostMapping("/list") @ResponseBody
@ResponseBody public TableDataInfo list(SysPost post) {
public TableDataInfo list(SysPost post) startPage();
{ List<SysPost> list = postService.selectPostList(post);
startPage(); return getDataTable(list);
List<SysPost> list = postService.selectPostList(post); }
return getDataTable(list);
} @Log(title = "岗位管理" , businessType = BusinessType.EXPORT)
@RequiresPermissions("system:post:export")
@Log(title = "岗位管理", businessType = BusinessType.EXPORT) @PostMapping("/export")
@RequiresPermissions("system:post:export") @ResponseBody
@PostMapping("/export") public AjaxResult export(SysPost post) {
@ResponseBody List<SysPost> list = postService.selectPostList(post);
public AjaxResult export(SysPost post) ExcelUtil<SysPost> util = new ExcelUtil<SysPost>(SysPost.class);
{ return util.exportExcel(list, "post");
List<SysPost> list = postService.selectPostList(post); }
ExcelUtil<SysPost> util = new ExcelUtil<SysPost>(SysPost.class);
return util.exportExcel(list, "post"); @RequiresPermissions("system:post:remove")
} @Log(title = "岗位管理" , businessType = BusinessType.DELETE)
@PostMapping("/remove")
@RequiresPermissions("system:post:remove") @ResponseBody
@Log(title = "岗位管理", businessType = BusinessType.DELETE) public AjaxResult remove(String ids) {
@PostMapping("/remove") try {
@ResponseBody return toAjax(postService.deletePostByIds(ids));
public AjaxResult remove(String ids) } catch (Exception e) {
{ return error(e.getMessage());
try }
{ }
return toAjax(postService.deletePostByIds(ids));
} /**
catch (Exception e) * 新增岗位
{ */
return error(e.getMessage()); @GetMapping("/add")
} public String add() {
} return prefix + "/add" ;
}
/**
* 新增岗位 /**
*/ * 新增保存岗位
@GetMapping("/add") */
public String add() @RequiresPermissions("system:post:add")
{ @Log(title = "岗位管理" , businessType = BusinessType.INSERT)
return prefix + "/add"; @PostMapping("/add")
} @ResponseBody
public AjaxResult addSave(SysPost post) {
/** post.setCreateBy(ShiroUtils.getLoginName());
* 新增保存岗位 return toAjax(postService.insertPost(post));
*/ }
@RequiresPermissions("system:post:add")
@Log(title = "岗位管理", businessType = BusinessType.INSERT) /**
@PostMapping("/add") * 修改岗位
@ResponseBody */
public AjaxResult addSave(SysPost post) @GetMapping("/edit/{postId}")
{ public String edit(@PathVariable("postId") Long postId, ModelMap mmap) {
post.setCreateBy(ShiroUtils.getLoginName()); mmap.put("post" , postService.selectPostById(postId));
return toAjax(postService.insertPost(post)); return prefix + "/edit" ;
} }
/** /**
* 修改岗位 * 修改保存岗位
*/ */
@GetMapping("/edit/{postId}") @RequiresPermissions("system:post:edit")
public String edit(@PathVariable("postId") Long postId, ModelMap mmap) @Log(title = "岗位管理" , businessType = BusinessType.UPDATE)
{ @PostMapping("/edit")
mmap.put("post", postService.selectPostById(postId)); @ResponseBody
return prefix + "/edit"; public AjaxResult editSave(SysPost post) {
} post.setUpdateBy(ShiroUtils.getLoginName());
return toAjax(postService.updatePost(post));
/** }
* 修改保存岗位
*/ /**
@RequiresPermissions("system:post:edit") * 校验岗位名称
@Log(title = "岗位管理", businessType = BusinessType.UPDATE) */
@PostMapping("/edit") @PostMapping("/checkPostNameUnique")
@ResponseBody @ResponseBody
public AjaxResult editSave(SysPost post) public String checkPostNameUnique(SysPost post) {
{ return postService.checkPostNameUnique(post);
post.setUpdateBy(ShiroUtils.getLoginName()); }
return toAjax(postService.updatePost(post));
} /**
* 校验岗位编码
/** */
* 校验岗位名称 @PostMapping("/checkPostCodeUnique")
*/ @ResponseBody
@PostMapping("/checkPostNameUnique") public String checkPostCodeUnique(SysPost post) {
@ResponseBody return postService.checkPostCodeUnique(post);
public String checkPostNameUnique(SysPost post) }
{ }
return postService.checkPostNameUnique(post);
}
/**
* 校验岗位编码
*/
@PostMapping("/checkPostCodeUnique")
@ResponseBody
public String checkPostCodeUnique(SysPost post)
{
return postService.checkPostCodeUnique(post);
}
}

View File

@ -1,164 +1,147 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import org.apache.shiro.crypto.hash.Md5Hash; import org.apache.shiro.crypto.hash.Md5Hash;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.config.Global; import com.ruoyi.common.config.Global;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.shiro.service.SysPasswordService; import com.ruoyi.framework.shiro.service.SysPasswordService;
import com.ruoyi.framework.util.FileUploadUtils; import com.ruoyi.framework.util.FileUploadUtils;
import com.ruoyi.framework.util.ShiroUtils; import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysUser; import com.ruoyi.system.domain.SysUser;
import com.ruoyi.system.service.ISysDictDataService; import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.framework.web.base.BaseController;
/** /**
* 个人信息 业务处理 * 个人信息 业务处理
* *
* @author ruoyi * @author ruoyi
*/ */
@Controller @Controller
@RequestMapping("/system/user/profile") @RequestMapping("/system/user/profile")
public class SysProfileController extends BaseController public class SysProfileController extends BaseController {
{ private static final Logger log = LoggerFactory.getLogger(SysProfileController.class);
private static final Logger log = LoggerFactory.getLogger(SysProfileController.class);
private String prefix = "system/user/profile" ;
private String prefix = "system/user/profile";
@Autowired
@Autowired private ISysUserService userService;
private ISysUserService userService;
@Autowired
@Autowired private SysPasswordService passwordService;
private SysPasswordService passwordService;
@Autowired
@Autowired private ISysDictDataService dictDataService;
private ISysDictDataService dictDataService;
/**
/** * 个人信息
* 个人信息 */
*/ @GetMapping()
@GetMapping() public String profile(ModelMap mmap) {
public String profile(ModelMap mmap) SysUser user = getSysUser();
{ user.setSex(dictDataService.selectDictLabel("sys_user_sex" , user.getSex()));
SysUser user = getSysUser(); mmap.put("user" , user);
user.setSex(dictDataService.selectDictLabel("sys_user_sex", user.getSex())); mmap.put("roleGroup" , userService.selectUserRoleGroup(user.getUserId()));
mmap.put("user", user); mmap.put("postGroup" , userService.selectUserPostGroup(user.getUserId()));
mmap.put("roleGroup", userService.selectUserRoleGroup(user.getUserId())); return prefix + "/profile" ;
mmap.put("postGroup", userService.selectUserPostGroup(user.getUserId())); }
return prefix + "/profile";
} @GetMapping("/checkPassword")
@ResponseBody
@GetMapping("/checkPassword") public boolean checkPassword(String password) {
@ResponseBody SysUser user = getSysUser();
public boolean checkPassword(String password) String encrypt = new Md5Hash(user.getLoginName() + password + user.getSalt()).toHex().toString();
{ if (user.getPassword().equals(encrypt)) {
SysUser user = getSysUser(); return true;
String encrypt = new Md5Hash(user.getLoginName() + password + user.getSalt()).toHex().toString(); }
if (user.getPassword().equals(encrypt)) return false;
{ }
return true;
} @GetMapping("/resetPwd/{userId}")
return false; public String resetPwd(@PathVariable("userId") Long userId, ModelMap mmap) {
} mmap.put("user" , userService.selectUserById(userId));
return prefix + "/resetPwd" ;
@GetMapping("/resetPwd/{userId}") }
public String resetPwd(@PathVariable("userId") Long userId, ModelMap mmap)
{ @Log(title = "重置密码" , businessType = BusinessType.UPDATE)
mmap.put("user", userService.selectUserById(userId)); @PostMapping("/resetPwd")
return prefix + "/resetPwd"; @ResponseBody
} public AjaxResult resetPwd(SysUser user) {
user.setSalt(ShiroUtils.randomSalt());
@Log(title = "重置密码", businessType = BusinessType.UPDATE) user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
@PostMapping("/resetPwd") int rows = userService.resetUserPwd(user);
@ResponseBody if (rows > 0) {
public AjaxResult resetPwd(SysUser user) setSysUser(userService.selectUserById(user.getUserId()));
{ return success();
user.setSalt(ShiroUtils.randomSalt()); }
user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt())); return error();
int rows = userService.resetUserPwd(user); }
if (rows > 0)
{ /**
setSysUser(userService.selectUserById(user.getUserId())); * 修改用户
return success(); */
} @GetMapping("/edit/{userId}")
return error(); public String edit(@PathVariable("userId") Long userId, ModelMap mmap) {
} mmap.put("user" , userService.selectUserById(userId));
return prefix + "/edit" ;
/** }
* 修改用户
*/ /**
@GetMapping("/edit/{userId}") * 修改头像
public String edit(@PathVariable("userId") Long userId, ModelMap mmap) */
{ @GetMapping("/avatar/{userId}")
mmap.put("user", userService.selectUserById(userId)); public String avatar(@PathVariable("userId") Long userId, ModelMap mmap) {
return prefix + "/edit"; mmap.put("user" , userService.selectUserById(userId));
} return prefix + "/avatar" ;
}
/**
* 修改头像 /**
*/ * 修改用户
@GetMapping("/avatar/{userId}") */
public String avatar(@PathVariable("userId") Long userId, ModelMap mmap) @Log(title = "个人信息" , businessType = BusinessType.UPDATE)
{ @PostMapping("/update")
mmap.put("user", userService.selectUserById(userId)); @ResponseBody
return prefix + "/avatar"; public AjaxResult update(SysUser user) {
} if (userService.updateUserInfo(user) > 0) {
setSysUser(userService.selectUserById(user.getUserId()));
/** return success();
* 修改用户 }
*/ return error();
@Log(title = "个人信息", businessType = BusinessType.UPDATE) }
@PostMapping("/update")
@ResponseBody /**
public AjaxResult update(SysUser user) * 保存头像
{ */
if (userService.updateUserInfo(user) > 0) @Log(title = "个人信息" , businessType = BusinessType.UPDATE)
{ @PostMapping("/updateAvatar")
setSysUser(userService.selectUserById(user.getUserId())); @ResponseBody
return success(); public AjaxResult updateAvatar(SysUser user, @RequestParam("avatarfile") MultipartFile file) {
} try {
return error(); if (!file.isEmpty()) {
} String avatar = FileUploadUtils.upload(Global.getAvatarPath(), file);
user.setAvatar(avatar);
/** if (userService.updateUserInfo(user) > 0) {
* 保存头像 setSysUser(userService.selectUserById(user.getUserId()));
*/ return success();
@Log(title = "个人信息", businessType = BusinessType.UPDATE) }
@PostMapping("/updateAvatar") }
@ResponseBody return error();
public AjaxResult updateAvatar(SysUser user, @RequestParam("avatarfile") MultipartFile file) } catch (Exception e) {
{ log.error("修改头像失败!" , e);
try return error(e.getMessage());
{ }
if (!file.isEmpty()) }
{ }
String avatar = FileUploadUtils.upload(Global.getAvatarPath(), file);
user.setAvatar(avatar);
if (userService.updateUserInfo(user) > 0)
{
setSysUser(userService.selectUserById(user.getUserId()));
return success();
}
}
return error();
}
catch (Exception e)
{
log.error("修改头像失败!", e);
return error(e.getMessage());
}
}
}

View File

@ -1,184 +1,168 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.annotation.Log; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.utils.ExcelUtil; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.util.ShiroUtils; import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysRole; import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.domain.SysRole;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.framework.web.base.BaseController;
/**
* 角色信息 /**
* * 角色信息
* @author ruoyi *
*/ * @author ruoyi
@Controller */
@RequestMapping("/system/role") @Controller
public class SysRoleController extends BaseController @RequestMapping("/system/role")
{ public class SysRoleController extends BaseController {
private String prefix = "system/role"; private String prefix = "system/role" ;
@Autowired @Autowired
private ISysRoleService roleService; private ISysRoleService roleService;
@RequiresPermissions("system:role:view") @RequiresPermissions("system:role:view")
@GetMapping() @GetMapping()
public String role() public String role() {
{ return prefix + "/role" ;
return prefix + "/role"; }
}
@RequiresPermissions("system:role:list")
@RequiresPermissions("system:role:list") @PostMapping("/list")
@PostMapping("/list") @ResponseBody
@ResponseBody public TableDataInfo list(SysRole role) {
public TableDataInfo list(SysRole role) startPage();
{ List<SysRole> list = roleService.selectRoleList(role);
startPage(); return getDataTable(list);
List<SysRole> list = roleService.selectRoleList(role); }
return getDataTable(list);
} @Log(title = "角色管理" , businessType = BusinessType.EXPORT)
@RequiresPermissions("system:role:export")
@Log(title = "角色管理", businessType = BusinessType.EXPORT) @PostMapping("/export")
@RequiresPermissions("system:role:export") @ResponseBody
@PostMapping("/export") public AjaxResult export(SysRole role) {
@ResponseBody List<SysRole> list = roleService.selectRoleList(role);
public AjaxResult export(SysRole role) ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class);
{ return util.exportExcel(list, "role");
List<SysRole> list = roleService.selectRoleList(role); }
ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class);
return util.exportExcel(list, "role"); /**
} * 新增角色
*/
/** @GetMapping("/add")
* 新增角色 public String add() {
*/ return prefix + "/add" ;
@GetMapping("/add") }
public String add()
{ /**
return prefix + "/add"; * 新增保存角色
} */
@RequiresPermissions("system:role:add")
/** @Log(title = "角色管理" , businessType = BusinessType.INSERT)
* 新增保存角色 @PostMapping("/add")
*/ @Transactional(rollbackFor = Exception.class)
@RequiresPermissions("system:role:add") @ResponseBody
@Log(title = "角色管理", businessType = BusinessType.INSERT) public AjaxResult addSave(SysRole role) {
@PostMapping("/add") role.setCreateBy(ShiroUtils.getLoginName());
@Transactional(rollbackFor = Exception.class) ShiroUtils.clearCachedAuthorizationInfo();
@ResponseBody return toAjax(roleService.insertRole(role));
public AjaxResult addSave(SysRole role)
{ }
role.setCreateBy(ShiroUtils.getLoginName());
ShiroUtils.clearCachedAuthorizationInfo(); /**
return toAjax(roleService.insertRole(role)); * 修改角色
*/
} @GetMapping("/edit/{roleId}")
public String edit(@PathVariable("roleId") Long roleId, ModelMap mmap) {
/** mmap.put("role" , roleService.selectRoleById(roleId));
* 修改角色 return prefix + "/edit" ;
*/ }
@GetMapping("/edit/{roleId}")
public String edit(@PathVariable("roleId") Long roleId, ModelMap mmap) /**
{ * 修改保存角色
mmap.put("role", roleService.selectRoleById(roleId)); */
return prefix + "/edit"; @RequiresPermissions("system:role:edit")
} @Log(title = "角色管理" , businessType = BusinessType.UPDATE)
@PostMapping("/edit")
/** @Transactional(rollbackFor = Exception.class)
* 修改保存角色 @ResponseBody
*/ public AjaxResult editSave(SysRole role) {
@RequiresPermissions("system:role:edit") role.setUpdateBy(ShiroUtils.getLoginName());
@Log(title = "角色管理", businessType = BusinessType.UPDATE) ShiroUtils.clearCachedAuthorizationInfo();
@PostMapping("/edit") return toAjax(roleService.updateRole(role));
@Transactional(rollbackFor = Exception.class) }
@ResponseBody
public AjaxResult editSave(SysRole role) /**
{ * 新增数据权限
role.setUpdateBy(ShiroUtils.getLoginName()); */
ShiroUtils.clearCachedAuthorizationInfo(); @GetMapping("/rule/{roleId}")
return toAjax(roleService.updateRole(role)); public String rule(@PathVariable("roleId") Long roleId, ModelMap mmap) {
} mmap.put("role" , roleService.selectRoleById(roleId));
return prefix + "/rule" ;
/** }
* 新增数据权限
*/ /**
@GetMapping("/rule/{roleId}") * 修改保存数据权限
public String rule(@PathVariable("roleId") Long roleId, ModelMap mmap) */
{ @RequiresPermissions("system:role:edit")
mmap.put("role", roleService.selectRoleById(roleId)); @Log(title = "角色管理" , businessType = BusinessType.UPDATE)
return prefix + "/rule"; @PostMapping("/rule")
} @Transactional(rollbackFor = Exception.class)
@ResponseBody
/** public AjaxResult ruleSave(SysRole role) {
* 修改保存数据权限 role.setUpdateBy(ShiroUtils.getLoginName());
*/ return toAjax(roleService.updateRule(role));
@RequiresPermissions("system:role:edit") }
@Log(title = "角色管理", businessType = BusinessType.UPDATE)
@PostMapping("/rule") @RequiresPermissions("system:role:remove")
@Transactional(rollbackFor = Exception.class) @Log(title = "角色管理" , businessType = BusinessType.DELETE)
@ResponseBody @PostMapping("/remove")
public AjaxResult ruleSave(SysRole role) @ResponseBody
{ public AjaxResult remove(String ids) {
role.setUpdateBy(ShiroUtils.getLoginName()); try {
return toAjax(roleService.updateRule(role)); return toAjax(roleService.deleteRoleByIds(ids));
} } catch (Exception e) {
return error(e.getMessage());
@RequiresPermissions("system:role:remove") }
@Log(title = "角色管理", businessType = BusinessType.DELETE) }
@PostMapping("/remove")
@ResponseBody /**
public AjaxResult remove(String ids) * 校验角色名称
{ */
try @PostMapping("/checkRoleNameUnique")
{ @ResponseBody
return toAjax(roleService.deleteRoleByIds(ids)); public String checkRoleNameUnique(SysRole role) {
} return roleService.checkRoleNameUnique(role);
catch (Exception e) }
{
return error(e.getMessage()); /**
} * 校验角色权限
} */
@PostMapping("/checkRoleKeyUnique")
/** @ResponseBody
* 校验角色名称 public String checkRoleKeyUnique(SysRole role) {
*/ return roleService.checkRoleKeyUnique(role);
@PostMapping("/checkRoleNameUnique") }
@ResponseBody
public String checkRoleNameUnique(SysRole role) /**
{ * 选择菜单树
return roleService.checkRoleNameUnique(role); */
} @GetMapping("/selectMenuTree")
public String selectMenuTree() {
/** return prefix + "/tree" ;
* 校验角色权限 }
*/
@PostMapping("/checkRoleKeyUnique")
@ResponseBody
public String checkRoleKeyUnique(SysRole role)
{
return roleService.checkRoleKeyUnique(role);
}
/**
* 选择菜单树
*/
@GetMapping("/selectMenuTree")
public String selectMenuTree()
{
return prefix + "/tree";
}
} }

View File

@ -1,205 +1,187 @@
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.util.List; import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.annotation.Log; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.utils.ExcelUtil; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.ExcelUtil;
import com.ruoyi.framework.shiro.service.SysPasswordService; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.util.ShiroUtils; import com.ruoyi.framework.shiro.service.SysPasswordService;
import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.framework.util.ShiroUtils;
import com.ruoyi.system.domain.SysUser; import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.system.service.ISysPostService; import com.ruoyi.system.domain.SysUser;
import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.framework.web.base.BaseController;
/**
* 用户信息 /**
* * 用户信息
* @author ruoyi *
*/ * @author ruoyi
@Controller */
@RequestMapping("/system/user") @Controller
public class SysUserController extends BaseController @RequestMapping("/system/user")
{ public class SysUserController extends BaseController {
private String prefix = "system/user"; private String prefix = "system/user" ;
@Autowired @Autowired
private ISysUserService userService; private ISysUserService userService;
@Autowired @Autowired
private ISysRoleService roleService; private ISysRoleService roleService;
@Autowired @Autowired
private ISysPostService postService; private ISysPostService postService;
@Autowired @Autowired
private SysPasswordService passwordService; private SysPasswordService passwordService;
@RequiresPermissions("system:user:view") @RequiresPermissions("system:user:view")
@GetMapping() @GetMapping()
public String user() public String user() {
{ return prefix + "/user" ;
return prefix + "/user"; }
}
@RequiresPermissions("system:user:list")
@RequiresPermissions("system:user:list") @PostMapping("/list")
@PostMapping("/list") @ResponseBody
@ResponseBody public TableDataInfo list(SysUser user) {
public TableDataInfo list(SysUser user) startPage();
{ List<SysUser> list = userService.selectUserList(user);
startPage(); return getDataTable(list);
List<SysUser> list = userService.selectUserList(user); }
return getDataTable(list);
} @Log(title = "用户管理" , businessType = BusinessType.EXPORT)
@RequiresPermissions("system:user:export")
@Log(title = "用户管理", businessType = BusinessType.EXPORT) @PostMapping("/export")
@RequiresPermissions("system:user:export") @ResponseBody
@PostMapping("/export") public AjaxResult export(SysUser user) {
@ResponseBody List<SysUser> list = userService.selectUserList(user);
public AjaxResult export(SysUser user) ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
{ return util.exportExcel(list, "user");
List<SysUser> list = userService.selectUserList(user); }
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
return util.exportExcel(list, "user"); /**
} * 新增用户
*/
/** @GetMapping("/add")
* 新增用户 public String add(ModelMap mmap) {
*/ mmap.put("roles" , roleService.selectRoleAll());
@GetMapping("/add") mmap.put("posts" , postService.selectPostAll());
public String add(ModelMap mmap) return prefix + "/add" ;
{ }
mmap.put("roles", roleService.selectRoleAll());
mmap.put("posts", postService.selectPostAll()); /**
return prefix + "/add"; * 新增保存用户
} */
@RequiresPermissions("system:user:add")
/** @Log(title = "用户管理" , businessType = BusinessType.INSERT)
* 新增保存用户 @PostMapping("/add")
*/ @Transactional(rollbackFor = Exception.class)
@RequiresPermissions("system:user:add") @ResponseBody
@Log(title = "用户管理", businessType = BusinessType.INSERT) public AjaxResult addSave(SysUser user) {
@PostMapping("/add") if (StringUtils.isNotNull(user.getUserId()) && SysUser.isAdmin(user.getUserId())) {
@Transactional(rollbackFor = Exception.class) return error("不允许修改超级管理员用户");
@ResponseBody }
public AjaxResult addSave(SysUser user) user.setSalt(ShiroUtils.randomSalt());
{ user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
if (StringUtils.isNotNull(user.getUserId()) && SysUser.isAdmin(user.getUserId())) user.setCreateBy(ShiroUtils.getLoginName());
{ return toAjax(userService.insertUser(user));
return error("不允许修改超级管理员用户"); }
}
user.setSalt(ShiroUtils.randomSalt()); /**
user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt())); * 修改用户
user.setCreateBy(ShiroUtils.getLoginName()); */
return toAjax(userService.insertUser(user)); @GetMapping("/edit/{userId}")
} public String edit(@PathVariable("userId") Long userId, ModelMap mmap) {
mmap.put("user" , userService.selectUserById(userId));
/** mmap.put("roles" , roleService.selectRolesByUserId(userId));
* 修改用户 mmap.put("posts" , postService.selectPostsByUserId(userId));
*/ return prefix + "/edit" ;
@GetMapping("/edit/{userId}") }
public String edit(@PathVariable("userId") Long userId, ModelMap mmap)
{ /**
mmap.put("user", userService.selectUserById(userId)); * 修改保存用户
mmap.put("roles", roleService.selectRolesByUserId(userId)); */
mmap.put("posts", postService.selectPostsByUserId(userId)); @RequiresPermissions("system:user:edit")
return prefix + "/edit"; @Log(title = "用户管理" , businessType = BusinessType.UPDATE)
} @PostMapping("/edit")
@Transactional(rollbackFor = Exception.class)
/** @ResponseBody
* 修改保存用户 public AjaxResult editSave(SysUser user) {
*/ if (StringUtils.isNotNull(user.getUserId()) && SysUser.isAdmin(user.getUserId())) {
@RequiresPermissions("system:user:edit") return error("不允许修改超级管理员用户");
@Log(title = "用户管理", businessType = BusinessType.UPDATE) }
@PostMapping("/edit") user.setUpdateBy(ShiroUtils.getLoginName());
@Transactional(rollbackFor = Exception.class) return toAjax(userService.updateUser(user));
@ResponseBody }
public AjaxResult editSave(SysUser user)
{ @RequiresPermissions("system:user:resetPwd")
if (StringUtils.isNotNull(user.getUserId()) && SysUser.isAdmin(user.getUserId())) @Log(title = "重置密码" , businessType = BusinessType.UPDATE)
{ @GetMapping("/resetPwd/{userId}")
return error("不允许修改超级管理员用户"); public String resetPwd(@PathVariable("userId") Long userId, ModelMap mmap) {
} mmap.put("user" , userService.selectUserById(userId));
user.setUpdateBy(ShiroUtils.getLoginName()); return prefix + "/resetPwd" ;
return toAjax(userService.updateUser(user)); }
}
@RequiresPermissions("system:user:resetPwd")
@RequiresPermissions("system:user:resetPwd") @Log(title = "重置密码" , businessType = BusinessType.UPDATE)
@Log(title = "重置密码", businessType = BusinessType.UPDATE) @PostMapping("/resetPwd")
@GetMapping("/resetPwd/{userId}") @ResponseBody
public String resetPwd(@PathVariable("userId") Long userId, ModelMap mmap) public AjaxResult resetPwdSave(SysUser user) {
{ user.setSalt(ShiroUtils.randomSalt());
mmap.put("user", userService.selectUserById(userId)); user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
return prefix + "/resetPwd"; return toAjax(userService.resetUserPwd(user));
} }
@RequiresPermissions("system:user:resetPwd") @RequiresPermissions("system:user:remove")
@Log(title = "重置密码", businessType = BusinessType.UPDATE) @Log(title = "用户管理" , businessType = BusinessType.DELETE)
@PostMapping("/resetPwd") @PostMapping("/remove")
@ResponseBody @ResponseBody
public AjaxResult resetPwdSave(SysUser user) public AjaxResult remove(String ids) {
{ try {
user.setSalt(ShiroUtils.randomSalt()); return toAjax(userService.deleteUserByIds(ids));
user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt())); } catch (Exception e) {
return toAjax(userService.resetUserPwd(user)); return error(e.getMessage());
} }
}
@RequiresPermissions("system:user:remove")
@Log(title = "用户管理", businessType = BusinessType.DELETE) /**
@PostMapping("/remove") * 校验用户名
@ResponseBody */
public AjaxResult remove(String ids) @PostMapping("/checkLoginNameUnique")
{ @ResponseBody
try public String checkLoginNameUnique(SysUser user) {
{ return userService.checkLoginNameUnique(user.getLoginName());
return toAjax(userService.deleteUserByIds(ids)); }
}
catch (Exception e) /**
{ * 校验手机号码
return error(e.getMessage()); */
} @PostMapping("/checkPhoneUnique")
} @ResponseBody
public String checkPhoneUnique(SysUser user) {
/** return userService.checkPhoneUnique(user);
* 校验用户名 }
*/
@PostMapping("/checkLoginNameUnique") /**
@ResponseBody * 校验email邮箱
public String checkLoginNameUnique(SysUser user) */
{ @PostMapping("/checkEmailUnique")
return userService.checkLoginNameUnique(user.getLoginName()); @ResponseBody
} public String checkEmailUnique(SysUser user) {
return userService.checkEmailUnique(user);
/** }
* 校验手机号码
*/
@PostMapping("/checkPhoneUnique")
@ResponseBody
public String checkPhoneUnique(SysUser user)
{
return userService.checkPhoneUnique(user);
}
/**
* 校验email邮箱
*/
@PostMapping("/checkEmailUnique")
@ResponseBody
public String checkEmailUnique(SysUser user)
{
return userService.checkEmailUnique(user);
}
} }

View File

@ -1,26 +1,24 @@
package com.ruoyi.web.controller.tool; package com.ruoyi.web.controller.tool;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.framework.web.base.BaseController;
/** /**
* build 表单构建 * build 表单构建
* *
* @author ruoyi * @author ruoyi
*/ */
@Controller @Controller
@RequestMapping("/tool/build") @RequestMapping("/tool/build")
public class BuildController extends BaseController public class BuildController extends BaseController {
{ private String prefix = "tool/build" ;
private String prefix = "tool/build";
@RequiresPermissions("tool:build:view")
@RequiresPermissions("tool:build:view") @GetMapping()
@GetMapping() public String build() {
public String build() return prefix + "/build" ;
{ }
return prefix + "/build"; }
}
}

View File

@ -1,89 +1,85 @@
package com.ruoyi.web.controller.tool; package com.ruoyi.web.controller.tool;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.annotation.Log; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.support.Convert; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.common.support.Convert;
import com.ruoyi.generator.domain.TableInfo; import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.generator.service.IGenService; import com.ruoyi.generator.domain.TableInfo;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.generator.service.IGenService;
import com.ruoyi.framework.web.base.BaseController;
/**
* 代码生成 操作处理 /**
* * 代码生成 操作处理
* @author ruoyi *
*/ * @author ruoyi
@Controller */
@RequestMapping("/tool/gen") @Controller
public class GenController extends BaseController @RequestMapping("/tool/gen")
{ public class GenController extends BaseController {
private String prefix = "tool/gen"; private String prefix = "tool/gen" ;
@Autowired @Autowired
private IGenService genService; private IGenService genService;
@RequiresPermissions("tool:gen:view") @RequiresPermissions("tool:gen:view")
@GetMapping() @GetMapping()
public String gen() public String gen() {
{ return prefix + "/gen" ;
return prefix + "/gen"; }
}
@RequiresPermissions("tool:gen:list")
@RequiresPermissions("tool:gen:list") @PostMapping("/list")
@PostMapping("/list") @ResponseBody
@ResponseBody public TableDataInfo list(TableInfo tableInfo) {
public TableDataInfo list(TableInfo tableInfo) startPage();
{ List<TableInfo> list = genService.selectTableList(tableInfo);
startPage(); return getDataTable(list);
List<TableInfo> list = genService.selectTableList(tableInfo); }
return getDataTable(list);
} /**
* 生成代码
/** */
* 生成代码 @RequiresPermissions("tool:gen:code")
*/ @Log(title = "代码生成" , businessType = BusinessType.GENCODE)
@RequiresPermissions("tool:gen:code") @GetMapping("/genCode/{tableName}")
@Log(title = "代码生成", businessType = BusinessType.GENCODE) public void genCode(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException {
@GetMapping("/genCode/{tableName}") byte[] data = genService.generatorCode(tableName);
public void genCode(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException response.reset();
{ response.setHeader("Content-Disposition" , "attachment; filename=\"ruoyi.zip\"");
byte[] data = genService.generatorCode(tableName); response.addHeader("Content-Length" , "" + data.length);
response.reset(); response.setContentType("application/octet-stream; charset=UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=\"ruoyi.zip\"");
response.addHeader("Content-Length", "" + data.length); IOUtils.write(data, response.getOutputStream());
response.setContentType("application/octet-stream; charset=UTF-8"); }
IOUtils.write(data, response.getOutputStream()); /**
} * 批量生成代码
*/
/** @RequiresPermissions("tool:gen:code")
* 批量生成代码 @Log(title = "代码生成" , businessType = BusinessType.GENCODE)
*/ @GetMapping("/batchGenCode")
@RequiresPermissions("tool:gen:code") @ResponseBody
@Log(title = "代码生成", businessType = BusinessType.GENCODE) public void batchGenCode(HttpServletResponse response, String tables) throws IOException {
@GetMapping("/batchGenCode") String[] tableNames = Convert.toStrArray(tables);
@ResponseBody byte[] data = genService.generatorCode(tableNames);
public void batchGenCode(HttpServletResponse response, String tables) throws IOException response.reset();
{ response.setHeader("Content-Disposition" , "attachment; filename=\"ruoyi.zip\"");
String[] tableNames = Convert.toStrArray(tables); response.addHeader("Content-Length" , "" + data.length);
byte[] data = genService.generatorCode(tableNames); response.setContentType("application/octet-stream; charset=UTF-8");
response.reset();
response.setHeader("Content-Disposition", "attachment; filename=\"ruoyi.zip\""); IOUtils.write(data, response.getOutputStream());
response.addHeader("Content-Length", "" + data.length); }
response.setContentType("application/octet-stream; charset=UTF-8"); }
IOUtils.write(data, response.getOutputStream());
}
}

View File

@ -1,24 +1,22 @@
package com.ruoyi.web.controller.tool; package com.ruoyi.web.controller.tool;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.framework.web.base.BaseController;
/** /**
* swagger 接口 * swagger 接口
* *
* @author ruoyi * @author ruoyi
*/ */
@Controller @Controller
@RequestMapping("/tool/swagger") @RequestMapping("/tool/swagger")
public class SwaggerController extends BaseController public class SwaggerController extends BaseController {
{ @RequiresPermissions("tool:swagger:view")
@RequiresPermissions("tool:swagger:view") @GetMapping()
@GetMapping() public String index() {
public String index() return redirect("/swagger-ui.html");
{ }
return redirect("/swagger-ui.html"); }
}
}

View File

@ -1,140 +1,123 @@
package com.ruoyi.web.controller.tool; package com.ruoyi.web.controller.tool;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.framework.web.base.BaseController;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
/** /**
* swagger 测试方法 * swagger 测试方法
* *
* @author ruoyi * @author ruoyi
*/ */
@Api("用户信息管理") @Api("用户信息管理")
@RestController @RestController
@RequestMapping("/test/*") @RequestMapping("/test/*")
public class TestController extends BaseController public class TestController extends BaseController {
{ private final static List<Test> testList = new ArrayList<>();
private final static List<Test> testList = new ArrayList<>();
{ {
testList.add(new Test("1", "admin", "admin123")); testList.add(new Test("1" , "admin" , "admin123"));
testList.add(new Test("2", "ry", "admin123")); testList.add(new Test("2" , "ry" , "admin123"));
} }
@ApiOperation("获取列表") @ApiOperation("获取列表")
@GetMapping("list") @GetMapping("list")
public List<Test> testList() public List<Test> testList() {
{ return testList;
return testList; }
}
@ApiOperation("新增用户")
@ApiOperation("新增用户") @PostMapping("save")
@PostMapping("save") public AjaxResult save(Test test) {
public AjaxResult save(Test test) return testList.add(test) ? success() : error();
{ }
return testList.add(test) ? success() : error();
} @ApiOperation("更新用户")
@ApiImplicitParam(name = "Test" , value = "单个用户信息" , dataType = "Test")
@ApiOperation("更新用户") @PutMapping("update")
@ApiImplicitParam(name = "Test", value = "单个用户信息", dataType = "Test") public AjaxResult update(Test test) {
@PutMapping("update") return testList.remove(test) && testList.add(test) ? success() : error();
public AjaxResult update(Test test) }
{
return testList.remove(test) && testList.add(test) ? success() : error(); @ApiOperation("删除用户")
} @ApiImplicitParam(name = "Tests" , value = "单个用户信息" , dataType = "Test")
@DeleteMapping("delete")
@ApiOperation("删除用户") public AjaxResult delete(Test test) {
@ApiImplicitParam(name = "Tests", value = "单个用户信息", dataType = "Test") return testList.remove(test) ? success() : error();
@DeleteMapping("delete") }
public AjaxResult delete(Test test) }
{
return testList.remove(test) ? success() : error(); class Test {
} private String userId;
} private String username;
private String password;
class Test
{ public Test() {
private String userId;
private String username; }
private String password;
public Test(String userId, String username, String password) {
public Test() this.userId = userId;
{ this.username = username;
this.password = password;
} }
public Test(String userId, String username, String password) @Override
{ public boolean equals(Object o) {
this.userId = userId; if (this == o) {
this.username = username; return true;
this.password = password; }
} if (o == null || getClass() != o.getClass()) {
return false;
@Override }
public boolean equals(Object o)
{ Test test = (Test) o;
if (this == o)
{ return userId != null ? userId.equals(test.userId) : test.userId == null;
return true; }
}
if (o == null || getClass() != o.getClass()) @Override
{ public int hashCode() {
return false; int result = userId != null ? userId.hashCode() : 0;
} result = 31 * result + (username != null ? username.hashCode() : 0);
result = 31 * result + (password != null ? password.hashCode() : 0);
Test test = (Test) o; return result;
}
return userId != null ? userId.equals(test.userId) : test.userId == null;
} public String getUserId() {
return userId;
@Override }
public int hashCode()
{ public void setUserId(String userId) {
int result = userId != null ? userId.hashCode() : 0; this.userId = userId;
result = 31 * result + (username != null ? username.hashCode() : 0); }
result = 31 * result + (password != null ? password.hashCode() : 0);
return result; public String getUsername() {
} return username;
}
public String getUserId()
{ public void setUsername(String username) {
return userId; this.username = username;
} }
public void setUserId(String userId) public String getPassword() {
{ return password;
this.userId = userId; }
}
public void setPassword(String password) {
public String getUsername() this.password = password;
{ }
return username; }
}
public void setUsername(String username)
{
this.username = username;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
}

View File

@ -1,54 +1,51 @@
package com.ruoyi.web.core.config; package com.ruoyi.web.core.config;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import com.ruoyi.common.config.Global; import com.ruoyi.common.config.Global;
import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo; import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact; import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2; import springfox.documentation.swagger2.annotations.EnableSwagger2;
/** /**
* Swagger2的接口配置 * Swagger2的接口配置
* *
* @author ruoyi * @author ruoyi
*/ */
@Configuration @Configuration
@EnableSwagger2 @EnableSwagger2
public class SwaggerConfig public class SwaggerConfig {
{ /**
/** * 创建API
* 创建API */
*/ @Bean
@Bean public Docket createRestApi() {
public Docket createRestApi() return new Docket(DocumentationType.SWAGGER_2)
{ // 详细定制
return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo())
// 详细定制 .select()
.apiInfo(apiInfo()) // 指定当前包路径
.select() .apis(RequestHandlerSelectors.basePackage("com.ruoyi.web.controller.tool"))
// 指定当前包路径 // 扫描所有 .apis(RequestHandlerSelectors.any())
.apis(RequestHandlerSelectors.basePackage("com.ruoyi.web.controller.tool")) .paths(PathSelectors.any())
// 扫描所有 .apis(RequestHandlerSelectors.any()) .build();
.paths(PathSelectors.any()) }
.build();
} /**
* 添加摘要信息
/** */
* 添加摘要信息 private ApiInfo apiInfo() {
*/ // 用ApiInfoBuilder进行定制
private ApiInfo apiInfo() return new ApiInfoBuilder()
{ .title("标题若依管理系统_接口文档")
// 用ApiInfoBuilder进行定制 .description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...")
return new ApiInfoBuilder() .contact(new Contact(Global.getName(), null, null))
.title("标题若依管理系统_接口文档") .version("版本号:" + Global.getVersion())
.description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...") .build();
.contact(new Contact(Global.getName(), null, null)) }
.version("版本号:" + Global.getVersion()) }
.build();
}
}

View File

@ -1,48 +1,48 @@
# 数据源配置 # 数据源配置
spring: spring:
datasource: datasource:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver driverClassName: com.mysql.jdbc.Driver
druid: druid:
# 主库数据源 # 主库数据源
master: master:
url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true
username: root username: root
password: password password: password
# 从库数据源 # 从库数据源
slave: slave:
# 从数据源开关/默认关闭 # 从数据源开关/默认关闭
enabled: false enabled: false
url: url:
username: username:
password: password:
# 初始连接数 # 初始连接数
initial-size: 10 initial-size: 10
# 最大连接池数量 # 最大连接池数量
max-active: 100 max-active: 100
# 最小连接池数量 # 最小连接池数量
min-idle: 10 min-idle: 10
# 配置获取连接等待超时的时间 # 配置获取连接等待超时的时间
max-wait: 60000 max-wait: 60000
# 打开PSCache并且指定每个连接上PSCache的大小 # 打开PSCache并且指定每个连接上PSCache的大小
pool-prepared-statements: true pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20 max-pool-prepared-statement-per-connection-size: 20
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000 timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒 # 配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 300000 min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM DUAL validation-query: SELECT 1 FROM DUAL
test-while-idle: true test-while-idle: true
test-on-borrow: false test-on-borrow: false
test-on-return: false test-on-return: false
stat-view-servlet: stat-view-servlet:
enabled: true enabled: true
url-pattern: /monitor/druid/* url-pattern: /monitor/druid/*
filter: filter:
stat: stat:
log-slow-sql: true log-slow-sql: true
slow-sql-millis: 1000 slow-sql-millis: 1000
merge-sql: false merge-sql: false
wall: wall:
config: config:
multi-statement-allow: true multi-statement-allow: true

View File

@ -1,134 +1,134 @@
# 项目相关配置 # 项目相关配置
ruoyi: ruoyi:
# 名称 # 名称
name: RuoYi name: RuoYi
# 版本 # 版本
version: 3.1.0 version: 3.1.0
# 版权年份 # 版权年份
copyrightYear: 2018 copyrightYear: 2018
# 文件上传路径 # 文件上传路径
profile: D:/profile/ profile: D:/profile/
# 获取ip地址开关 # 获取ip地址开关
addressEnabled: true addressEnabled: true
# 开发环境配置 # 开发环境配置
server: server:
# 服务端口 # 服务端口
port: 80 port: 80
servlet: servlet:
# 项目contextPath # 项目contextPath
context-path: / context-path: /
tomcat: tomcat:
# tomcat的URI编码 # tomcat的URI编码
uri-encoding: UTF-8 uri-encoding: UTF-8
# tomcat最大线程数默认为200 # tomcat最大线程数默认为200
max-threads: 800 max-threads: 800
# Tomcat启动初始化的线程数默认值25 # Tomcat启动初始化的线程数默认值25
min-spare-threads: 30 min-spare-threads: 30
# 日志配置 # 日志配置
logging: logging:
level: level:
com.ruoyi: debug com.ruoyi: debug
org.springframework: WARN org.springframework: WARN
org.spring.springboot.dao: debug org.spring.springboot.dao: debug
# 用户配置 # 用户配置
user: user:
password: password:
# 密码错误{maxRetryCount}次锁定10分钟 # 密码错误{maxRetryCount}次锁定10分钟
maxRetryCount: 5 maxRetryCount: 5
# Spring配置 # Spring配置
spring: spring:
# 模板引擎 # 模板引擎
thymeleaf: thymeleaf:
mode: HTML mode: HTML
encoding: utf-8 encoding: utf-8
# 禁用缓存 # 禁用缓存
cache: false cache: false
# 资源信息 # 资源信息
messages: messages:
# 国际化资源文件路径 # 国际化资源文件路径
basename: i18n/messages basename: i18n/messages
jackson: jackson:
time-zone: GMT+8 time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss date-format: yyyy-MM-dd HH:mm:ss
profiles: profiles:
active: druid active: druid
# 文件上传 # 文件上传
servlet: servlet:
multipart: multipart:
max-file-size: 30MB max-file-size: 30MB
max-request-size: 30MB max-request-size: 30MB
# 服务模块 # 服务模块
devtools: devtools:
restart: restart:
# 热部署开关 # 热部署开关
enabled: true enabled: true
# MyBatis # MyBatis
mybatis: mybatis:
# 搜索指定包别名 # 搜索指定包别名
typeAliasesPackage: com.ruoyi typeAliasesPackage: com.ruoyi
# 配置mapper的扫描找到所有的mapper.xml映射文件 # 配置mapper的扫描找到所有的mapper.xml映射文件
mapperLocations: classpath*:mapper/**/*Mapper.xml mapperLocations: classpath*:mapper/**/*Mapper.xml
# 加载全局的配置文件 # 加载全局的配置文件
configLocation: classpath:mapper/mybatis-config.xml configLocation: classpath:mapper/mybatis-config.xml
# PageHelper分页插件 # PageHelper分页插件
pagehelper: pagehelper:
helperDialect: mysql helperDialect: mysql
reasonable: true reasonable: true
supportMethodsArguments: true supportMethodsArguments: true
params: count=countSql params: count=countSql
# Shiro # Shiro
shiro: shiro:
user: user:
# 登录地址 # 登录地址
loginUrl: /login loginUrl: /login
# 权限认证失败地址 # 权限认证失败地址
unauthorizedUrl: /unauth unauthorizedUrl: /unauth
# 首页地址 # 首页地址
indexUrl: /index indexUrl: /index
# 验证码开关 # 验证码开关
captchaEnabled: true captchaEnabled: true
# 验证码类型 math 数组计算 char 字符 # 验证码类型 math 数组计算 char 字符
captchaType: math captchaType: math
cookie: cookie:
# 设置Cookie的域名 默认空,即当前访问的域名 # 设置Cookie的域名 默认空,即当前访问的域名
domain: domain:
# 设置cookie的有效访问路径 # 设置cookie的有效访问路径
path: / path: /
# 设置HttpOnly属性 # 设置HttpOnly属性
httpOnly: true httpOnly: true
# 设置Cookie的过期时间天为单位 # 设置Cookie的过期时间天为单位
maxAge: 30 maxAge: 30
session: session:
# Session超时时间默认30分钟 # Session超时时间默认30分钟
expireTime: 30 expireTime: 30
# 同步session到数据库的周期默认1分钟 # 同步session到数据库的周期默认1分钟
dbSyncPeriod: 1 dbSyncPeriod: 1
# 相隔多久检查一次session的有效性默认就是10分钟 # 相隔多久检查一次session的有效性默认就是10分钟
validationInterval: 10 validationInterval: 10
# 防止XSS攻击 # 防止XSS攻击
xss: xss:
# 过滤开关 # 过滤开关
enabled: true enabled: true
# 排除链接(多个用逗号分隔) # 排除链接(多个用逗号分隔)
excludes: /system/notice/* excludes: /system/notice/*
# 匹配链接 # 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/* urlPatterns: /system/*,/monitor/*,/tool/*
# 代码生成 # 代码生成
gen: gen:
# 作者 # 作者
author: ruoyi author: ruoyi
# 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
packageName: com.ruoyi.system packageName: com.ruoyi.system
# 自动去除表前缀默认是true # 自动去除表前缀默认是true
autoRemovePre: true autoRemovePre: true
# 表前缀(类名不会包含表前缀) # 表前缀(类名不会包含表前缀)
tablePrefix: sys_ tablePrefix: sys_

View File

@ -1,38 +1,34 @@
#错误消息 #错误消息
not.null=* 必须填写 not.null=* 必须填写
user.jcaptcha.error=验证码错误 user.jcaptcha.error=验证码错误
user.not.exists=用户不存在/密码错误 user.not.exists=用户不存在/密码错误
user.password.not.match=用户不存在/密码错误 user.password.not.match=用户不存在/密码错误
user.password.retry.limit.count=密码输入错误{0}次 user.password.retry.limit.count=密码输入错误{0}次
user.password.retry.limit.exceed=密码输入错误{0}次帐户锁定10分钟 user.password.retry.limit.exceed=密码输入错误{0}次帐户锁定10分钟
user.password.delete=对不起,您的账号已被删除 user.password.delete=对不起,您的账号已被删除
user.blocked=用户已封禁,原因:{0} user.blocked=用户已封禁,原因:{0}
role.blocked=角色已封禁,原因:{0} role.blocked=角色已封禁,原因:{0}
user.logout.success=退出成功 user.logout.success=退出成功
length.not.valid=长度必须在{min}到{max}个字符之间
length.not.valid=长度必须在{min}到{max}个字符之间 user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成且必须以非数字开头
user.password.not.valid=* 5-50个字符
user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成且必须以非数字开头 user.email.not.valid=邮箱格式错误
user.password.not.valid=* 5-50个字符 user.mobile.phone.number.not.valid=手机号格式错误
user.login.success=登录成功
user.email.not.valid=邮箱格式错误 user.notfound=请重新登录
user.mobile.phone.number.not.valid=手机号格式错误 user.forcelogout=管理员强制退出,请重新登录
user.login.success=登录成功 user.unknown.error=未知错误,请重新登录
user.notfound=请重新登录 #批量插入用户错误信息
user.forcelogout=管理员强制退出,请重新登录 user.import.excel.null=Excel数据为空请按照导入模板填写数据
user.unknown.error=未知错误,请重新登录 user.import.excel.data.null=Excel数据为空只有标题行请按照导入模板填写数据
user.import.excel.filetype.error=文件不是Excel文件
#批量插入用户错误信息 user.import.excel.file.error=文件名为空,文件为空
user.import.excel.null=Excel数据为空请按照导入模板填写数据 user.import.excel.fileinput.error=获取Excel2003流错误
user.import.excel.data.null=Excel数据为空只有标题行请按照导入模板填写数据 user.import.excel.fileinputx.error=获取Excel2007流错误
user.import.excel.filetype.error=文件不是Excel文件 ##权限
user.import.excel.file.error=文件名为空,文件为空 no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
user.import.excel.fileinput.error=获取Excel2003流错误 no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
user.import.excel.fileinputx.error=获取Excel2007流错误 no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
##权限 no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
no.permission=您没有数据的权限,请联系管理员添加权限 [{0}] no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}] no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]

View File

@ -1,86 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<configuration> <configuration>
<property name="log.path" value="/home/ruoyi/logs" /> <property name="log.path" value="/home/ruoyi/logs"/>
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<!-- 控制台输出 --> <!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder> <encoder>
<pattern>${log.pattern}</pattern> <pattern>${log.pattern}</pattern>
</encoder> </encoder>
</appender> </appender>
<!-- 系统日志输出 --> <!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-info.log</file> <file>${log.path}/sys-info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily --> <!-- 按天回滚 daily -->
<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern> <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 --> <!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory> <maxHistory>60</maxHistory>
</rollingPolicy> </rollingPolicy>
<encoder> <encoder>
<pattern>${log.pattern}</pattern> <pattern>${log.pattern}</pattern>
</encoder> </encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level> <level>INFO</level>
<onMatch>ACCEPT</onMatch> <onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch> <onMismatch>DENY</onMismatch>
</filter> </filter>
</appender> </appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-error.log</file> <file>${log.path}/sys-error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern> <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 --> <!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory> <maxHistory>60</maxHistory>
</rollingPolicy> </rollingPolicy>
<encoder> <encoder>
<pattern>${log.pattern}</pattern> <pattern>${log.pattern}</pattern>
</encoder> </encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level> <level>ERROR</level>
<onMatch>ACCEPT</onMatch> <onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch> <onMismatch>DENY</onMismatch>
</filter> </filter>
</appender> </appender>
<!-- 用户访问日志输出 --> <!-- 用户访问日志输出 -->
<appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-user.log</file> <file>${log.path}/sys-user.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily --> <!-- 按天回滚 daily -->
<fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern> <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 --> <!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory> <maxHistory>60</maxHistory>
</rollingPolicy> </rollingPolicy>
<encoder> <encoder>
<pattern>${log.pattern}</pattern> <pattern>${log.pattern}</pattern>
</encoder> </encoder>
</appender> </appender>
<!-- 显示形成的sql、使用的参数、结果集 --> <!-- 显示形成的sql、使用的参数、结果集 -->
<!-- <!--
<logger name="java.sql" level="debug" /> <logger name="java.sql" level="debug" />
<logger name="org.springframework.jdbc" level="debug" /> <logger name="org.springframework.jdbc" level="debug" />
--> -->
<logger name="com.ruoyi" level="info" /> <logger name="com.ruoyi" level="info"/>
<root level="info"> <root level="info">
<appender-ref ref="console" /> <appender-ref ref="console"/>
</root> </root>
<!--系统操作日志--> <!--系统操作日志-->
<root level="info"> <root level="info">
<appender-ref ref="file_info" /> <appender-ref ref="file_info"/>
<appender-ref ref="file_error" /> <appender-ref ref="file_error"/>
</root> </root>
<!--系统用户操作日志--> <!--系统用户操作日志-->
<logger name="sys-user" level="info"> <logger name="sys-user" level="info">
<appender-ref ref="sys-user"/> <appender-ref ref="sys-user"/>
</logger> </logger>
</configuration> </configuration>

View File

@ -1,146 +1,146 @@
/** /**
* @author zhixin wen <wenzhixin2010@gmail.com> * @author zhixin wen <wenzhixin2010@gmail.com>
* extensions: https://github.com/vitalets/x-editable * extensions: https://github.com/vitalets/x-editable
*/ */
(function($) { (function ($) {
'use strict'; 'use strict';
$.extend($.fn.bootstrapTable.defaults, { $.extend($.fn.bootstrapTable.defaults, {
editable: true, editable: true,
onEditableInit: function() { onEditableInit: function () {
return false; return false;
}, },
onEditableSave: function(field, row, oldValue, $el) { onEditableSave: function (field, row, oldValue, $el) {
return false; return false;
}, },
onEditableShown: function(field, row, $el, editable) { onEditableShown: function (field, row, $el, editable) {
return false; return false;
}, },
onEditableHidden: function(field, row, $el, reason) { onEditableHidden: function (field, row, $el, reason) {
return false; return false;
} }
}); });
$.extend($.fn.bootstrapTable.Constructor.EVENTS, { $.extend($.fn.bootstrapTable.Constructor.EVENTS, {
'editable-init.bs.table': 'onEditableInit', 'editable-init.bs.table': 'onEditableInit',
'editable-save.bs.table': 'onEditableSave', 'editable-save.bs.table': 'onEditableSave',
'editable-shown.bs.table': 'onEditableShown', 'editable-shown.bs.table': 'onEditableShown',
'editable-hidden.bs.table': 'onEditableHidden' 'editable-hidden.bs.table': 'onEditableHidden'
}); });
var BootstrapTable = $.fn.bootstrapTable.Constructor, var BootstrapTable = $.fn.bootstrapTable.Constructor,
_initTable = BootstrapTable.prototype.initTable, _initTable = BootstrapTable.prototype.initTable,
_initBody = BootstrapTable.prototype.initBody; _initBody = BootstrapTable.prototype.initBody;
BootstrapTable.prototype.initTable = function() { BootstrapTable.prototype.initTable = function () {
var that = this; var that = this;
_initTable.apply(this, Array.prototype.slice.apply(arguments)); _initTable.apply(this, Array.prototype.slice.apply(arguments));
if (!this.options.editable) { if (!this.options.editable) {
return; return;
} }
$.each(this.columns, function(i, column) { $.each(this.columns, function (i, column) {
if (!column.editable) { if (!column.editable) {
return; return;
} }
var editableOptions = {}, var editableOptions = {},
editableDataMarkup = [], editableDataMarkup = [],
editableDataPrefix = 'editable-'; editableDataPrefix = 'editable-';
var processDataOptions = function(key, value) { var processDataOptions = function (key, value) {
// Replace camel case with dashes. // Replace camel case with dashes.
var dashKey = key.replace(/([A-Z])/g, function($1) { var dashKey = key.replace(/([A-Z])/g, function ($1) {
return "-" + $1.toLowerCase(); return "-" + $1.toLowerCase();
}); });
if (dashKey.slice(0, editableDataPrefix.length) == editableDataPrefix) { if (dashKey.slice(0, editableDataPrefix.length) == editableDataPrefix) {
var dataKey = dashKey.replace(editableDataPrefix, 'data-'); var dataKey = dashKey.replace(editableDataPrefix, 'data-');
editableOptions[dataKey] = value; editableOptions[dataKey] = value;
} }
}; };
$.each(that.options, processDataOptions); $.each(that.options, processDataOptions);
column.formatter = column.formatter || function(value, row, index) { column.formatter = column.formatter || function (value, row, index) {
return value; return value;
}; };
column._formatter = column._formatter ? column._formatter : column.formatter; column._formatter = column._formatter ? column._formatter : column.formatter;
column.formatter = function(value, row, index) { column.formatter = function (value, row, index) {
var result = column._formatter ? column._formatter(value, row, index) : value; var result = column._formatter ? column._formatter(value, row, index) : value;
$.each(column, processDataOptions); $.each(column, processDataOptions);
$.each(editableOptions, function(key, value) { $.each(editableOptions, function (key, value) {
editableDataMarkup.push(' ' + key + '="' + value + '"'); editableDataMarkup.push(' ' + key + '="' + value + '"');
}); });
var _dont_edit_formatter = false; var _dont_edit_formatter = false;
if (column.editable.hasOwnProperty('noeditFormatter')) { if (column.editable.hasOwnProperty('noeditFormatter')) {
_dont_edit_formatter = column.editable.noeditFormatter(value, row, index); _dont_edit_formatter = column.editable.noeditFormatter(value, row, index);
} }
if (_dont_edit_formatter === false) { if (_dont_edit_formatter === false) {
return ['<a href="javascript:void(0)"', return ['<a href="javascript:void(0)"',
' data-name="' + column.field + '"', ' data-name="' + column.field + '"',
' data-pk="' + row[that.options.idField] + '"', ' data-pk="' + row[that.options.idField] + '"',
' data-value="' + result + '"', ' data-value="' + result + '"',
editableDataMarkup.join(''), editableDataMarkup.join(''),
'>' + '</a>' '>' + '</a>'
].join(''); ].join('');
} else { } else {
return _dont_edit_formatter; return _dont_edit_formatter;
} }
}; };
}); });
}; };
BootstrapTable.prototype.initBody = function() { BootstrapTable.prototype.initBody = function () {
var that = this; var that = this;
_initBody.apply(this, Array.prototype.slice.apply(arguments)); _initBody.apply(this, Array.prototype.slice.apply(arguments));
if (!this.options.editable) { if (!this.options.editable) {
return; return;
} }
$.each(this.columns, function(i, column) { $.each(this.columns, function (i, column) {
if (!column.editable) { if (!column.editable) {
return; return;
} }
that.$body.find('a[data-name="' + column.field + '"]').editable(column.editable) that.$body.find('a[data-name="' + column.field + '"]').editable(column.editable)
.off('save').on('save', function(e, params) { .off('save').on('save', function (e, params) {
var data = that.getData(), var data = that.getData(),
index = $(this).parents('tr[data-index]').data('index'), index = $(this).parents('tr[data-index]').data('index'),
row = data[index], row = data[index],
oldValue = row[column.field]; oldValue = row[column.field];
$(this).data('value', params.submitValue); $(this).data('value', params.submitValue);
row[column.field] = params.submitValue; row[column.field] = params.submitValue;
that.trigger('editable-save', column.field, row, oldValue, $(this)); that.trigger('editable-save', column.field, row, oldValue, $(this));
that.resetFooter(); that.resetFooter();
}); });
that.$body.find('a[data-name="' + column.field + '"]').editable(column.editable) that.$body.find('a[data-name="' + column.field + '"]').editable(column.editable)
.off('shown').on('shown', function(e, editable) { .off('shown').on('shown', function (e, editable) {
var data = that.getData(), var data = that.getData(),
index = $(this).parents('tr[data-index]').data('index'), index = $(this).parents('tr[data-index]').data('index'),
row = data[index]; row = data[index];
that.trigger('editable-shown', column.field, row, $(this), editable); that.trigger('editable-shown', column.field, row, $(this), editable);
}); });
that.$body.find('a[data-name="' + column.field + '"]').editable(column.editable) that.$body.find('a[data-name="' + column.field + '"]').editable(column.editable)
.off('hidden').on('hidden', function(e, reason) { .off('hidden').on('hidden', function (e, reason) {
var data = that.getData(), var data = that.getData(),
index = $(this).parents('tr[data-index]').data('index'), index = $(this).parents('tr[data-index]').data('index'),
row = data[index]; row = data[index];
that.trigger('editable-hidden', column.field, row, $(this), reason); that.trigger('editable-hidden', column.field, row, $(this), reason);
}); });
}); });
this.trigger('editable-init'); this.trigger('editable-init');
}; };
})(jQuery); })(jQuery);

View File

@ -1,119 +1,120 @@
/** /**
* @author zhixin wen <wenzhixin2010@gmail.com> * @author zhixin wen <wenzhixin2010@gmail.com>
* extensions: https://github.com/kayalshri/tableExport.jquery.plugin * extensions: https://github.com/kayalshri/tableExport.jquery.plugin
*/ */
(function ($) { (function ($) {
'use strict'; 'use strict';
var sprintf = $.fn.bootstrapTable.utils.sprintf; var sprintf = $.fn.bootstrapTable.utils.sprintf;
var TYPE_NAME = { var TYPE_NAME = {
csv: 'CSV', csv: 'CSV',
txt: 'TXT', txt: 'TXT',
doc: 'Word', doc: 'Word',
excel: 'Excel' excel: 'Excel'
}; };
$.extend($.fn.bootstrapTable.defaults, { $.extend($.fn.bootstrapTable.defaults, {
showExport: false, showExport: false,
exportDataType: 'all', // basic, all, selected exportDataType: 'all', // basic, all, selected
exportTypes: ['csv', 'txt', 'doc', 'excel'], exportTypes: ['csv', 'txt', 'doc', 'excel'],
exportOptions: { exportOptions: {
ignoreColumn: [0] //忽略列索引 ignoreColumn: [0] //忽略列索引
} }
}); });
$.extend($.fn.bootstrapTable.defaults.icons, { $.extend($.fn.bootstrapTable.defaults.icons, {
export: 'glyphicon glyphicon-save' export: 'glyphicon glyphicon-save'
}); });
$.extend($.fn.bootstrapTable.locales, { $.extend($.fn.bootstrapTable.locales, {
formatExport: function () { formatExport: function () {
return 'Export data'; return 'Export data';
} }
}); });
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales); $.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales);
var BootstrapTable = $.fn.bootstrapTable.Constructor, var BootstrapTable = $.fn.bootstrapTable.Constructor,
_initToolbar = BootstrapTable.prototype.initToolbar; _initToolbar = BootstrapTable.prototype.initToolbar;
BootstrapTable.prototype.initToolbar = function () { BootstrapTable.prototype.initToolbar = function () {
this.showToolbar = this.options.showExport; this.showToolbar = this.options.showExport;
_initToolbar.apply(this, Array.prototype.slice.apply(arguments)); _initToolbar.apply(this, Array.prototype.slice.apply(arguments));
if (this.options.showExport) { if (this.options.showExport) {
var that = this, var that = this,
$btnGroup = this.$toolbar.find('>.btn-group'), $btnGroup = this.$toolbar.find('>.btn-group'),
$export = $btnGroup.find('div.export'); $export = $btnGroup.find('div.export');
if (!$export.length) { if (!$export.length) {
$export = $([ $export = $([
'<div class="export btn-group">', '<div class="export btn-group">',
'<button class="btn' + '<button class="btn' +
sprintf(' btn-%s', this.options.buttonsClass) + sprintf(' btn-%s', this.options.buttonsClass) +
sprintf(' btn-%s', this.options.iconSize) + sprintf(' btn-%s', this.options.iconSize) +
' dropdown-toggle" ' + ' dropdown-toggle" ' +
'title="' + this.options.formatExport() + '" ' + 'title="' + this.options.formatExport() + '" ' +
'data-toggle="dropdown" type="button">', 'data-toggle="dropdown" type="button">',
sprintf('<i class="%s %s"></i> ', this.options.iconsPrefix, this.options.icons.export), sprintf('<i class="%s %s"></i> ', this.options.iconsPrefix, this.options.icons.export),
'<span class="caret"></span>', '<span class="caret"></span>',
'</button>', '</button>',
'<ul class="dropdown-menu" role="menu">', '<ul class="dropdown-menu" role="menu">',
'</ul>', '</ul>',
'</div>'].join('')).appendTo($btnGroup); '</div>'].join('')).appendTo($btnGroup);
var $menu = $export.find('.dropdown-menu'), var $menu = $export.find('.dropdown-menu'),
exportTypes = this.options.exportTypes; exportTypes = this.options.exportTypes;
if (typeof this.options.exportTypes === 'string') { if (typeof this.options.exportTypes === 'string') {
var types = this.options.exportTypes.slice(1, -1).replace(/ /g, '').split(','); var types = this.options.exportTypes.slice(1, -1).replace(/ /g, '').split(',');
exportTypes = []; exportTypes = [];
$.each(types, function (i, value) { $.each(types, function (i, value) {
exportTypes.push(value.slice(1, -1)); exportTypes.push(value.slice(1, -1));
}); });
} }
$.each(exportTypes, function (i, type) { $.each(exportTypes, function (i, type) {
if (TYPE_NAME.hasOwnProperty(type)) { if (TYPE_NAME.hasOwnProperty(type)) {
$menu.append(['<li data-type="' + type + '">', $menu.append(['<li data-type="' + type + '">',
'<a href="javascript:void(0)">', '<a href="javascript:void(0)">',
TYPE_NAME[type], TYPE_NAME[type],
'</a>', '</a>',
'</li>'].join('')); '</li>'].join(''));
} }
}); });
$menu.find('li').click(function () { $menu.find('li').click(function () {
var type = $(this).data('type'), var type = $(this).data('type'),
doExport = function () { doExport = function () {
that.$el.tableExport($.extend({}, that.options.exportOptions, { that.$el.tableExport($.extend({}, that.options.exportOptions, {
type: type, type: type,
escape: false escape: false
})); }));
}; };
if (that.options.exportDataType === 'all' && that.options.pagination) { if (that.options.exportDataType === 'all' && that.options.pagination) {
that.$el.one(that.options.sidePagination === 'server' ? 'post-body.bs.table' : 'page-change.bs.table', function () { that.$el.one(that.options.sidePagination === 'server' ? 'post-body.bs.table' : 'page-change.bs.table', function () {
doExport(); doExport();
that.togglePagination(); that.togglePagination();
}); });
that.togglePagination(); that.togglePagination();
} else if (that.options.exportDataType === 'selected') { } else if (that.options.exportDataType === 'selected') {
//修改sidePagination属性为server无法导出选中数据 //修改sidePagination属性为server无法导出选中数据
var trs = that.$body.children(); var trs = that.$body.children();
for (var i = 0; i < trs.length; i++) { for (var i = 0; i < trs.length; i++) {
var $this = $(trs[i]); var $this = $(trs[i]);
if(!$this.find(sprintf('[name="%s"]',that.options.selectItemName)).prop('checked')){ if (!$this.find(sprintf('[name="%s"]', that.options.selectItemName)).prop('checked')) {
$this['hide'](); $this['hide']();
}} }
doExport(); }
that.getRowsHidden(true); doExport();
} else { that.getRowsHidden(true);
doExport(); } else {
} doExport();
}); }
} });
} }
}; }
})(jQuery); };
})(jQuery);

View File

@ -1,136 +1,136 @@
/** /**
* @author: Dennis Hernández * @author: Dennis Hernández
* @webSite: http://djhvscf.github.io/Blog * @webSite: http://djhvscf.github.io/Blog
* @version: v1.1.0 * @version: v1.1.0
*/ */
!function ($) { !function ($) {
'use strict'; 'use strict';
var showHideColumns = function (that, checked) { var showHideColumns = function (that, checked) {
if (that.options.columnsHidden.length > 0 ) { if (that.options.columnsHidden.length > 0) {
$.each(that.columns, function (i, column) { $.each(that.columns, function (i, column) {
if (that.options.columnsHidden.indexOf(column.field) !== -1) { if (that.options.columnsHidden.indexOf(column.field) !== -1) {
if (column.visible !== checked) { if (column.visible !== checked) {
that.toggleColumn($.fn.bootstrapTable.utils.getFieldIndex(that.columns, column.field), checked, true); that.toggleColumn($.fn.bootstrapTable.utils.getFieldIndex(that.columns, column.field), checked, true);
} }
} }
}); });
} }
}; };
var resetView = function (that) { var resetView = function (that) {
if (that.options.height || that.options.showFooter) { if (that.options.height || that.options.showFooter) {
setTimeout(function(){ setTimeout(function () {
that.resetView.call(that); that.resetView.call(that);
}, 1); }, 1);
} }
}; };
var changeView = function (that, width, height) { var changeView = function (that, width, height) {
if (that.options.minHeight) { if (that.options.minHeight) {
if ((width <= that.options.minWidth) && (height <= that.options.minHeight)) { if ((width <= that.options.minWidth) && (height <= that.options.minHeight)) {
conditionCardView(that); conditionCardView(that);
} else if ((width > that.options.minWidth) && (height > that.options.minHeight)) { } else if ((width > that.options.minWidth) && (height > that.options.minHeight)) {
conditionFullView(that); conditionFullView(that);
} }
} else { } else {
if (width <= that.options.minWidth) { if (width <= that.options.minWidth) {
conditionCardView(that); conditionCardView(that);
} else if (width > that.options.minWidth) { } else if (width > that.options.minWidth) {
conditionFullView(that); conditionFullView(that);
} }
} }
resetView(that); resetView(that);
}; };
var conditionCardView = function (that) { var conditionCardView = function (that) {
changeTableView(that, false); changeTableView(that, false);
showHideColumns(that, false); showHideColumns(that, false);
}; };
var conditionFullView = function (that) { var conditionFullView = function (that) {
changeTableView(that, true); changeTableView(that, true);
showHideColumns(that, true); showHideColumns(that, true);
}; };
var changeTableView = function (that, cardViewState) { var changeTableView = function (that, cardViewState) {
that.options.cardView = cardViewState; that.options.cardView = cardViewState;
that.toggleView(); that.toggleView();
}; };
var debounce = function(func,wait) { var debounce = function (func, wait) {
var timeout; var timeout;
return function() { return function () {
var context = this, var context = this,
args = arguments; args = arguments;
var later = function() { var later = function () {
timeout = null; timeout = null;
func.apply(context,args); func.apply(context, args);
}; };
clearTimeout(timeout); clearTimeout(timeout);
timeout = setTimeout(later, wait); timeout = setTimeout(later, wait);
}; };
}; };
$.extend($.fn.bootstrapTable.defaults, { $.extend($.fn.bootstrapTable.defaults, {
mobileResponsive: false, mobileResponsive: false,
minWidth: 562, minWidth: 562,
minHeight: undefined, minHeight: undefined,
heightThreshold: 100, // just slightly larger than mobile chrome's auto-hiding toolbar heightThreshold: 100, // just slightly larger than mobile chrome's auto-hiding toolbar
checkOnInit: true, checkOnInit: true,
columnsHidden: [] columnsHidden: []
}); });
var BootstrapTable = $.fn.bootstrapTable.Constructor, var BootstrapTable = $.fn.bootstrapTable.Constructor,
_init = BootstrapTable.prototype.init; _init = BootstrapTable.prototype.init;
BootstrapTable.prototype.init = function () { BootstrapTable.prototype.init = function () {
_init.apply(this, Array.prototype.slice.apply(arguments)); _init.apply(this, Array.prototype.slice.apply(arguments));
if (!this.options.mobileResponsive) { if (!this.options.mobileResponsive) {
return; return;
} }
if (!this.options.minWidth) { if (!this.options.minWidth) {
return; return;
} }
if (this.options.minWidth < 100 && this.options.resizable) { if (this.options.minWidth < 100 && this.options.resizable) {
console.log("The minWidth when the resizable extension is active should be greater or equal than 100"); console.log("The minWidth when the resizable extension is active should be greater or equal than 100");
this.options.minWidth = 100; this.options.minWidth = 100;
} }
var that = this, var that = this,
old = { old = {
width: $(window).width(), width: $(window).width(),
height: $(window).height() height: $(window).height()
}; };
$(window).on('resize orientationchange',debounce(function (evt) { $(window).on('resize orientationchange', debounce(function (evt) {
// reset view if height has only changed by at least the threshold. // reset view if height has only changed by at least the threshold.
var height = $(this).height(), var height = $(this).height(),
width = $(this).width(); width = $(this).width();
if (Math.abs(old.height - height) > that.options.heightThreshold || old.width != width) { if (Math.abs(old.height - height) > that.options.heightThreshold || old.width != width) {
changeView(that, width, height); changeView(that, width, height);
old = { old = {
width: width, width: width,
height: height height: height
}; };
} }
},200)); }, 200));
if (this.options.checkOnInit) { if (this.options.checkOnInit) {
var height = $(window).height(), var height = $(window).height(),
width = $(window).width(); width = $(window).width();
changeView(this, width, height); changeView(this, width, height);
old = { old = {
width: width, width: width,
height: height height: height
}; };
} }
}; };
}(jQuery); }(jQuery);

View File

@ -1,211 +1,212 @@
/** /**
* @author: aperez <aperez@datadec.es> * @author: aperez <aperez@datadec.es>
* @version: v2.0.0 * @version: v2.0.0
* *
* @update Dennis Hernández <http://djhvscf.github.io/Blog> * @update Dennis Hernández <http://djhvscf.github.io/Blog>
*/ */
!function($) { !function ($) {
'use strict'; 'use strict';
var firstLoad = false; var firstLoad = false;
var sprintf = $.fn.bootstrapTable.utils.sprintf; var sprintf = $.fn.bootstrapTable.utils.sprintf;
var showAvdSearch = function(pColumns, searchTitle, searchText, that) { var showAvdSearch = function (pColumns, searchTitle, searchText, that) {
if (!$("#avdSearchModal" + "_" + that.options.idTable).hasClass("modal")) { if (!$("#avdSearchModal" + "_" + that.options.idTable).hasClass("modal")) {
var vModal = sprintf("<div id=\"avdSearchModal%s\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"mySmallModalLabel\" aria-hidden=\"true\">", "_" + that.options.idTable); var vModal = sprintf("<div id=\"avdSearchModal%s\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"mySmallModalLabel\" aria-hidden=\"true\">", "_" + that.options.idTable);
vModal += "<div class=\"modal-dialog modal-xs\">"; vModal += "<div class=\"modal-dialog modal-xs\">";
vModal += " <div class=\"modal-content\">"; vModal += " <div class=\"modal-content\">";
vModal += " <div class=\"modal-header\">"; vModal += " <div class=\"modal-header\">";
vModal += " <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\" >&times;</button>"; vModal += " <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\" >&times;</button>";
vModal += sprintf(" <h4 class=\"modal-title\">%s</h4>", searchTitle); vModal += sprintf(" <h4 class=\"modal-title\">%s</h4>", searchTitle);
vModal += " </div>"; vModal += " </div>";
vModal += " <div class=\"modal-body modal-body-custom\">"; vModal += " <div class=\"modal-body modal-body-custom\">";
vModal += sprintf(" <div class=\"container-fluid\" id=\"avdSearchModalContent%s\" style=\"padding-right: 0px;padding-left: 0px;\" >", "_" + that.options.idTable); vModal += sprintf(" <div class=\"container-fluid\" id=\"avdSearchModalContent%s\" style=\"padding-right: 0px;padding-left: 0px;\" >", "_" + that.options.idTable);
vModal += " </div>"; vModal += " </div>";
vModal += " </div>"; vModal += " </div>";
vModal += " </div>"; vModal += " </div>";
vModal += " </div>"; vModal += " </div>";
vModal += "</div>"; vModal += "</div>";
$("body").append($(vModal)); $("body").append($(vModal));
var vFormAvd = createFormAvd(pColumns, searchText, that), var vFormAvd = createFormAvd(pColumns, searchText, that),
timeoutId = 0;; timeoutId = 0;
;
$('#avdSearchModalContent' + "_" + that.options.idTable).append(vFormAvd.join(''));
$('#avdSearchModalContent' + "_" + that.options.idTable).append(vFormAvd.join(''));
$('#' + that.options.idForm).off('keyup blur', 'input').on('keyup blur', 'input', function (event) {
clearTimeout(timeoutId); $('#' + that.options.idForm).off('keyup blur', 'input').on('keyup blur', 'input', function (event) {
timeoutId = setTimeout(function () { clearTimeout(timeoutId);
that.onColumnAdvancedSearch(event); timeoutId = setTimeout(function () {
}, that.options.searchTimeOut); that.onColumnAdvancedSearch(event);
}); }, that.options.searchTimeOut);
});
$("#btnCloseAvd" + "_" + that.options.idTable).click(function() {
$("#avdSearchModal" + "_" + that.options.idTable).modal('hide'); $("#btnCloseAvd" + "_" + that.options.idTable).click(function () {
}); $("#avdSearchModal" + "_" + that.options.idTable).modal('hide');
});
$("#avdSearchModal" + "_" + that.options.idTable).modal();
} else { $("#avdSearchModal" + "_" + that.options.idTable).modal();
$("#avdSearchModal" + "_" + that.options.idTable).modal(); } else {
} $("#avdSearchModal" + "_" + that.options.idTable).modal();
}; }
};
var createFormAvd = function(pColumns, searchText, that) {
var htmlForm = []; var createFormAvd = function (pColumns, searchText, that) {
htmlForm.push(sprintf('<form class="form-horizontal" id="%s" action="%s" >', that.options.idForm, that.options.actionForm)); var htmlForm = [];
for (var i in pColumns) { htmlForm.push(sprintf('<form class="form-horizontal" id="%s" action="%s" >', that.options.idForm, that.options.actionForm));
var vObjCol = pColumns[i]; for (var i in pColumns) {
if (!vObjCol.checkbox && vObjCol.visible && vObjCol.searchable) { var vObjCol = pColumns[i];
htmlForm.push('<div class="form-group">'); if (!vObjCol.checkbox && vObjCol.visible && vObjCol.searchable) {
htmlForm.push(sprintf('<label class="col-sm-4 control-label">%s</label>', vObjCol.title)); htmlForm.push('<div class="form-group">');
htmlForm.push('<div class="col-sm-6">'); htmlForm.push(sprintf('<label class="col-sm-4 control-label">%s</label>', vObjCol.title));
htmlForm.push(sprintf('<input type="text" class="form-control input-md" name="%s" placeholder="%s" id="%s">', vObjCol.field, vObjCol.title, vObjCol.field)); htmlForm.push('<div class="col-sm-6">');
htmlForm.push('</div>'); htmlForm.push(sprintf('<input type="text" class="form-control input-md" name="%s" placeholder="%s" id="%s">', vObjCol.field, vObjCol.title, vObjCol.field));
htmlForm.push('</div>'); htmlForm.push('</div>');
} htmlForm.push('</div>');
} }
}
htmlForm.push('<div class="form-group">');
htmlForm.push('<div class="col-sm-offset-9 col-sm-3">'); htmlForm.push('<div class="form-group">');
htmlForm.push(sprintf('<button type="button" id="btnCloseAvd%s" class="btn btn-default" >%s</button>', "_" + that.options.idTable, searchText)); htmlForm.push('<div class="col-sm-offset-9 col-sm-3">');
htmlForm.push('</div>'); htmlForm.push(sprintf('<button type="button" id="btnCloseAvd%s" class="btn btn-default" >%s</button>', "_" + that.options.idTable, searchText));
htmlForm.push('</div>'); htmlForm.push('</div>');
htmlForm.push('</form>'); htmlForm.push('</div>');
htmlForm.push('</form>');
return htmlForm;
}; return htmlForm;
};
$.extend($.fn.bootstrapTable.defaults, {
advancedSearch: false, $.extend($.fn.bootstrapTable.defaults, {
idForm: 'advancedSearch', advancedSearch: false,
actionForm: '', idForm: 'advancedSearch',
idTable: undefined, actionForm: '',
onColumnAdvancedSearch: function (field, text) { idTable: undefined,
return false; onColumnAdvancedSearch: function (field, text) {
} return false;
}); }
});
$.extend($.fn.bootstrapTable.defaults.icons, {
advancedSearchIcon: 'glyphicon-chevron-down' $.extend($.fn.bootstrapTable.defaults.icons, {
}); advancedSearchIcon: 'glyphicon-chevron-down'
});
$.extend($.fn.bootstrapTable.Constructor.EVENTS, {
'column-advanced-search.bs.table': 'onColumnAdvancedSearch' $.extend($.fn.bootstrapTable.Constructor.EVENTS, {
}); 'column-advanced-search.bs.table': 'onColumnAdvancedSearch'
});
$.extend($.fn.bootstrapTable.locales, {
formatAdvancedSearch: function() { $.extend($.fn.bootstrapTable.locales, {
return 'Advanced search'; formatAdvancedSearch: function () {
}, return 'Advanced search';
formatAdvancedCloseButton: function() { },
return "Close"; formatAdvancedCloseButton: function () {
} return "Close";
}); }
});
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales);
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales);
var BootstrapTable = $.fn.bootstrapTable.Constructor,
_initToolbar = BootstrapTable.prototype.initToolbar, var BootstrapTable = $.fn.bootstrapTable.Constructor,
_load = BootstrapTable.prototype.load, _initToolbar = BootstrapTable.prototype.initToolbar,
_initSearch = BootstrapTable.prototype.initSearch; _load = BootstrapTable.prototype.load,
_initSearch = BootstrapTable.prototype.initSearch;
BootstrapTable.prototype.initToolbar = function() {
_initToolbar.apply(this, Array.prototype.slice.apply(arguments)); BootstrapTable.prototype.initToolbar = function () {
_initToolbar.apply(this, Array.prototype.slice.apply(arguments));
if (!this.options.search) {
return; if (!this.options.search) {
} return;
}
if (!this.options.advancedSearch) {
return; if (!this.options.advancedSearch) {
} return;
}
if (!this.options.idTable) {
return; if (!this.options.idTable) {
} return;
}
var that = this,
html = []; var that = this,
html = [];
html.push(sprintf('<div class="columns columns-%s btn-group pull-%s" role="group">', this.options.buttonsAlign, this.options.buttonsAlign));
html.push(sprintf('<button class="btn btn-default%s' + '" type="button" name="advancedSearch" title="%s">', that.options.iconSize === undefined ? '' : ' btn-' + that.options.iconSize, that.options.formatAdvancedSearch())); html.push(sprintf('<div class="columns columns-%s btn-group pull-%s" role="group">', this.options.buttonsAlign, this.options.buttonsAlign));
html.push(sprintf('<i class="%s %s"></i>', that.options.iconsPrefix, that.options.icons.advancedSearchIcon)) html.push(sprintf('<button class="btn btn-default%s' + '" type="button" name="advancedSearch" title="%s">', that.options.iconSize === undefined ? '' : ' btn-' + that.options.iconSize, that.options.formatAdvancedSearch()));
html.push('</button></div>'); html.push(sprintf('<i class="%s %s"></i>', that.options.iconsPrefix, that.options.icons.advancedSearchIcon))
html.push('</button></div>');
that.$toolbar.prepend(html.join(''));
that.$toolbar.prepend(html.join(''));
that.$toolbar.find('button[name="advancedSearch"]')
.off('click').on('click', function() { that.$toolbar.find('button[name="advancedSearch"]')
showAvdSearch(that.columns, that.options.formatAdvancedSearch(), that.options.formatAdvancedCloseButton(), that); .off('click').on('click', function () {
}); showAvdSearch(that.columns, that.options.formatAdvancedSearch(), that.options.formatAdvancedCloseButton(), that);
}; });
};
BootstrapTable.prototype.load = function(data) {
_load.apply(this, Array.prototype.slice.apply(arguments)); BootstrapTable.prototype.load = function (data) {
_load.apply(this, Array.prototype.slice.apply(arguments));
if (!this.options.advancedSearch) {
return; if (!this.options.advancedSearch) {
} return;
}
if (typeof this.options.idTable === 'undefined') {
return; if (typeof this.options.idTable === 'undefined') {
} else { return;
if (!firstLoad) { } else {
var height = parseInt($(".bootstrap-table").height()); if (!firstLoad) {
height += 10; var height = parseInt($(".bootstrap-table").height());
$("#" + this.options.idTable).bootstrapTable("resetView", {height: height}); height += 10;
firstLoad = true; $("#" + this.options.idTable).bootstrapTable("resetView", {height: height});
} firstLoad = true;
} }
}; }
};
BootstrapTable.prototype.initSearch = function () {
_initSearch.apply(this, Array.prototype.slice.apply(arguments)); BootstrapTable.prototype.initSearch = function () {
_initSearch.apply(this, Array.prototype.slice.apply(arguments));
if (!this.options.advancedSearch) {
return; if (!this.options.advancedSearch) {
} return;
}
var that = this;
var fp = $.isEmptyObject(this.filterColumnsPartial) ? null : this.filterColumnsPartial; var that = this;
var fp = $.isEmptyObject(this.filterColumnsPartial) ? null : this.filterColumnsPartial;
this.data = fp ? $.grep(this.data, function (item, i) {
for (var key in fp) { this.data = fp ? $.grep(this.data, function (item, i) {
var fval = fp[key].toLowerCase(); for (var key in fp) {
var value = item[key]; var fval = fp[key].toLowerCase();
value = $.fn.bootstrapTable.utils.calculateObjectValue(that.header, var value = item[key];
that.header.formatters[$.inArray(key, that.header.fields)], value = $.fn.bootstrapTable.utils.calculateObjectValue(that.header,
[value, item, i], value); that.header.formatters[$.inArray(key, that.header.fields)],
[value, item, i], value);
if (!($.inArray(key, that.header.fields) !== -1 &&
(typeof value === 'string' || typeof value === 'number') && if (!($.inArray(key, that.header.fields) !== -1 &&
(value + '').toLowerCase().indexOf(fval) !== -1)) { (typeof value === 'string' || typeof value === 'number') &&
return false; (value + '').toLowerCase().indexOf(fval) !== -1)) {
} return false;
} }
return true; }
}) : this.data; return true;
}; }) : this.data;
};
BootstrapTable.prototype.onColumnAdvancedSearch = function (event) {
var text = $.trim($(event.currentTarget).val()); BootstrapTable.prototype.onColumnAdvancedSearch = function (event) {
var $field = $(event.currentTarget)[0].id; var text = $.trim($(event.currentTarget).val());
var $field = $(event.currentTarget)[0].id;
if ($.isEmptyObject(this.filterColumnsPartial)) {
this.filterColumnsPartial = {}; if ($.isEmptyObject(this.filterColumnsPartial)) {
} this.filterColumnsPartial = {};
if (text) { }
this.filterColumnsPartial[$field] = text; if (text) {
} else { this.filterColumnsPartial[$field] = text;
delete this.filterColumnsPartial[$field]; } else {
} delete this.filterColumnsPartial[$field];
}
this.options.pageNumber = 1;
this.onSearch(event); this.options.pageNumber = 1;
this.updatePagination(); this.onSearch(event);
this.trigger('column-advanced-search', $field, text); this.updatePagination();
}; this.trigger('column-advanced-search', $field, text);
};
}(jQuery); }(jQuery);

View File

@ -1,14 +1,85 @@
.bootstrap-tree-table .treetable-indent {width:16px; height: 16px; display: inline-block; position: relative;} .bootstrap-tree-table .treetable-indent {
.bootstrap-tree-table .treetable-expander {width:16px; height: 16px; display: inline-block; position: relative; cursor: pointer;} width: 16px;
.bootstrap-tree-table .treetable-selected{background: #f5f5f5 !important;} height: 16px;
.bootstrap-tree-table .treetable-table{border:0 !important;margin-bottom:0} display: inline-block;
.bootstrap-tree-table .treetable-table tbody {display:block;height:auto;overflow-y:auto;} position: relative;
.bootstrap-tree-table .treetable-table thead, .treetable-table tbody tr {display:table;width:100%;table-layout:fixed;} }
.bootstrap-tree-table .treetable-thead th{line-height:24px;border: 0 !important;border-radius: 4px;border-left:0px solid #e7eaec !important;border-bottom:1px solid #ccc!important;text-align: left;}
.bootstrap-tree-table .treetable-thead tr :first-child{border-left:0 !important} .bootstrap-tree-table .treetable-expander {
.bootstrap-tree-table .treetable-tbody td{border: 0 !important;border-left:0px solid #e7eaec !important;border-bottom:1px solid #e7eaec!important;overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} width: 16px;
.bootstrap-tree-table .treetable-tbody tr :first-child{border-left:0 !important} height: 16px;
.bootstrap-tree-table .treetable-bars .tool-left, .bootstrap-tree-table .treetable-bars .tool-right{margin-top: 10px; margin-bottom: 10px;} display: inline-block;
.bootstrap-tree-table .treetable-bars .tool-left{float: left;} position: relative;
.bootstrap-tree-table .treetable-bars .tool-right{float: right;} cursor: pointer;
.bootstrap-tree-table .treetable-bars .columns li label{display: block;padding: 3px 20px;clear: both;font-weight: 400;line-height: 1.428571429;max-width: 100%;margin-bottom: 5px;cursor:pointer;} }
.bootstrap-tree-table .treetable-selected {
background: #f5f5f5 !important;
}
.bootstrap-tree-table .treetable-table {
border: 0 !important;
margin-bottom: 0
}
.bootstrap-tree-table .treetable-table tbody {
display: block;
height: auto;
overflow-y: auto;
}
.bootstrap-tree-table .treetable-table thead, .treetable-table tbody tr {
display: table;
width: 100%;
table-layout: fixed;
}
.bootstrap-tree-table .treetable-thead th {
line-height: 24px;
border: 0 !important;
border-radius: 4px;
border-left: 0px solid #e7eaec !important;
border-bottom: 1px solid #ccc !important;
text-align: left;
}
.bootstrap-tree-table .treetable-thead tr :first-child {
border-left: 0 !important
}
.bootstrap-tree-table .treetable-tbody td {
border: 0 !important;
border-left: 0px solid #e7eaec !important;
border-bottom: 1px solid #e7eaec !important;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.bootstrap-tree-table .treetable-tbody tr :first-child {
border-left: 0 !important
}
.bootstrap-tree-table .treetable-bars .tool-left, .bootstrap-tree-table .treetable-bars .tool-right {
margin-top: 10px;
margin-bottom: 10px;
}
.bootstrap-tree-table .treetable-bars .tool-left {
float: left;
}
.bootstrap-tree-table .treetable-bars .tool-right {
float: right;
}
.bootstrap-tree-table .treetable-bars .columns li label {
display: block;
padding: 3px 20px;
clear: both;
font-weight: 400;
line-height: 1.428571429;
max-width: 100%;
margin-bottom: 5px;
cursor: pointer;
}

View File

@ -1,127 +1,144 @@
@charset "utf-8"; @charset "utf-8";
.container { .container {
margin: 10px auto 0 auto; margin: 10px auto 0 auto;
position: relative; position: relative;
font-family: 微软雅黑; font-family: 微软雅黑;
font-size: 12px; font-size: 12px;
} }
.container p {
line-height: 12px; .container p {
line-height: 0px; line-height: 12px;
height: 0px; line-height: 0px;
margin: 10px; height: 0px;
color: #bbb margin: 10px;
} color: #bbb
.action { }
width: 400px;
height: 30px; .action {
margin: 10px 0; width: 400px;
} height: 30px;
.cropped { margin: 10px 0;
position: absolute; }
left: 500px;
top: 0; .cropped {
width: 200px; position: absolute;
border: 1px #ddd solid; left: 500px;
height: 440px; top: 0;
padding: 4px; width: 200px;
box-shadow: 0px 0px 12px #ddd; border: 1px #ddd solid;
text-align: center; height: 440px;
} padding: 4px;
.imageBox { box-shadow: 0px 0px 12px #ddd;
position: relative; text-align: center;
height: 400px; }
width: 400px;
border: 1px solid #aaa; .imageBox {
background: #fff; position: relative;
overflow: hidden; height: 400px;
background-repeat: no-repeat; width: 400px;
cursor: move; border: 1px solid #aaa;
box-shadow: 4px 4px 12px #B0B0B0; background: #fff;
} overflow: hidden;
.imageBox .thumbBox { background-repeat: no-repeat;
position: absolute; cursor: move;
top: 50%; box-shadow: 4px 4px 12px #B0B0B0;
left: 50%; }
width: 200px;
height: 200px; .imageBox .thumbBox {
margin-top: -100px; position: absolute;
margin-left: -100px; top: 50%;
box-sizing: border-box; left: 50%;
border: 1px solid rgb(102, 102, 102); width: 200px;
box-shadow: 0 0 0 1000px rgba(0, 0, 0, 0.5); height: 200px;
background: none repeat scroll 0% 0% transparent; margin-top: -100px;
} margin-left: -100px;
.imageBox .spinner { box-sizing: border-box;
position: absolute; border: 1px solid rgb(102, 102, 102);
top: 0; box-shadow: 0 0 0 1000px rgba(0, 0, 0, 0.5);
left: 0; background: none repeat scroll 0% 0% transparent;
bottom: 0; }
right: 0;
text-align: center; .imageBox .spinner {
line-height: 400px; position: absolute;
background: rgba(0,0,0,0.7); top: 0;
} left: 0;
.Btnsty_peyton{ float: right; bottom: 0;
width: 46px; right: 0;
display: inline-block; text-align: center;
margin-bottom: 10px; line-height: 400px;
height: 37px; background: rgba(0, 0, 0, 0.7);
line-height: 37px; }
font-size: 14px;
color: #FFFFFF; .Btnsty_peyton {
margin:0px 2px; float: right;
background-color: #f38e81; width: 46px;
border-radius: 3px; display: inline-block;
text-decoration: none; margin-bottom: 10px;
cursor: pointer; height: 37px;
box-shadow: 0px 0px 5px #B0B0B0; line-height: 37px;
border: 0px #fff solid;} font-size: 14px;
/*选择文件上传*/ color: #FFFFFF;
.new-contentarea { margin: 0px 2px;
width: 165px; background-color: #f38e81;
overflow:hidden; border-radius: 3px;
margin: 0 auto; text-decoration: none;
position:relative;float:left; cursor: pointer;
} box-shadow: 0px 0px 5px #B0B0B0;
.new-contentarea label { border: 0px #fff solid;
width:100%; }
height:100%;
display:block; /*选择文件上传*/
} .new-contentarea {
.new-contentarea input[type=file] { width: 165px;
width:188px; overflow: hidden;
height:60px; margin: 0 auto;
background:#333; position: relative;
margin: 0 auto; float: left;
position:absolute; }
right:50%;
margin-right:-94px; .new-contentarea label {
top:0; width: 100%;
right/*\**/:0px\9; height: 100%;
margin-right/*\**/:0px\9; display: block;
width/*\**/:10px\9; }
opacity:0;
filter:alpha(opacity=0); .new-contentarea input[type=file] {
z-index:2; width: 188px;
} height: 60px;
a.upload-img{ background: #333;
width:165px; margin: 0 auto;
display: inline-block; position: absolute;
margin-bottom: 10px; right: 50%;
height:37px; margin-right: -94px;
line-height: 37px; top: 0;
font-size: 14px; right /*\**/: 0px \9;
color: #FFFFFF; margin-right /*\**/: 0px \9;
background-color: #f38e81; width /*\**/: 10px \9;
border-radius: 3px; opacity: 0;
text-decoration:none; filter: alpha(opacity=0);
cursor:pointer; z-index: 2;
border: 0px #fff solid; }
box-shadow: 0px 0px 5px #B0B0B0;
} a.upload-img {
a.upload-img:hover{ width: 165px;
background-color: #ec7e70; display: inline-block;
} margin-bottom: 10px;
height: 37px;
.tc{text-align:center;} line-height: 37px;
font-size: 14px;
color: #FFFFFF;
background-color: #f38e81;
border-radius: 3px;
text-decoration: none;
cursor: pointer;
border: 0px #fff solid;
box-shadow: 0px 0px 5px #B0B0B0;
}
a.upload-img:hover {
background-color: #ec7e70;
}
.tc {
text-align: center;
}

View File

@ -1,135 +1,128 @@
"use strict"; "use strict";
(function (factory) { (function (factory) {
if (typeof define === 'function' && define.amd) { if (typeof define === 'function' && define.amd) {
define(['jquery'], factory); define(['jquery'], factory);
} else { } else {
factory(jQuery); factory(jQuery);
} }
}(function ($) { }(function ($) {
var cropbox = function(options, el){ var cropbox = function (options, el) {
var el = el || $(options.imageBox), var el = el || $(options.imageBox),
obj = obj =
{ {
state : {}, state: {},
ratio : 1, ratio: 1,
options : options, options: options,
imageBox : el, imageBox: el,
thumbBox : el.find(options.thumbBox), thumbBox: el.find(options.thumbBox),
spinner : el.find(options.spinner), spinner: el.find(options.spinner),
image : new Image(), image: new Image(),
getDataURL: function () getDataURL: function () {
{ var width = this.thumbBox.width(),
var width = this.thumbBox.width(), height = this.thumbBox.height(),
height = this.thumbBox.height(), canvas = document.createElement("canvas"),
canvas = document.createElement("canvas"), dim = el.css('background-position').split(' '),
dim = el.css('background-position').split(' '), size = el.css('background-size').split(' '),
size = el.css('background-size').split(' '), dx = parseInt(dim[0]) - el.width() / 2 + width / 2,
dx = parseInt(dim[0]) - el.width()/2 + width/2, dy = parseInt(dim[1]) - el.height() / 2 + height / 2,
dy = parseInt(dim[1]) - el.height()/2 + height/2, dw = parseInt(size[0]),
dw = parseInt(size[0]), dh = parseInt(size[1]),
dh = parseInt(size[1]), sh = parseInt(this.image.height),
sh = parseInt(this.image.height), sw = parseInt(this.image.width);
sw = parseInt(this.image.width);
canvas.width = width;
canvas.width = width; canvas.height = height;
canvas.height = height; var context = canvas.getContext("2d");
var context = canvas.getContext("2d"); context.drawImage(this.image, 0, 0, sw, sh, dx, dy, dw, dh);
context.drawImage(this.image, 0, 0, sw, sh, dx, dy, dw, dh); var imageData = canvas.toDataURL('image/png');
var imageData = canvas.toDataURL('image/png'); return imageData;
return imageData; },
}, getBlob: function () {
getBlob: function() var imageData = this.getDataURL();
{ var b64 = imageData.replace('data:image/png;base64,', '');
var imageData = this.getDataURL(); var binary = atob(b64);
var b64 = imageData.replace('data:image/png;base64,',''); var array = [];
var binary = atob(b64); for (var i = 0; i < binary.length; i++) {
var array = []; array.push(binary.charCodeAt(i));
for (var i = 0; i < binary.length; i++) { }
array.push(binary.charCodeAt(i)); return new Blob([new Uint8Array(array)], {type: 'image/png'});
} },
return new Blob([new Uint8Array(array)], {type: 'image/png'}); zoomIn: function () {
}, this.ratio *= 1.1;
zoomIn: function () setBackground();
{ },
this.ratio*=1.1; zoomOut: function () {
setBackground(); this.ratio *= 0.9;
}, setBackground();
zoomOut: function () }
{ },
this.ratio*=0.9; setBackground = function () {
setBackground(); var w = parseInt(obj.image.width) * obj.ratio;
} var h = parseInt(obj.image.height) * obj.ratio;
},
setBackground = function() var pw = (el.width() - w) / 2;
{ var ph = (el.height() - h) / 2;
var w = parseInt(obj.image.width)*obj.ratio;
var h = parseInt(obj.image.height)*obj.ratio; el.css({
'background-image': 'url(' + obj.image.src + ')',
var pw = (el.width() - w) / 2; 'background-size': w + 'px ' + h + 'px',
var ph = (el.height() - h) / 2; 'background-position': pw + 'px ' + ph + 'px',
'background-repeat': 'no-repeat'
el.css({ });
'background-image': 'url(' + obj.image.src + ')', },
'background-size': w +'px ' + h + 'px', imgMouseDown = function (e) {
'background-position': pw + 'px ' + ph + 'px', e.stopImmediatePropagation();
'background-repeat': 'no-repeat'});
}, obj.state.dragable = true;
imgMouseDown = function(e) obj.state.mouseX = e.clientX;
{ obj.state.mouseY = e.clientY;
e.stopImmediatePropagation(); },
imgMouseMove = function (e) {
obj.state.dragable = true; e.stopImmediatePropagation();
obj.state.mouseX = e.clientX;
obj.state.mouseY = e.clientY; if (obj.state.dragable) {
}, var x = e.clientX - obj.state.mouseX;
imgMouseMove = function(e) var y = e.clientY - obj.state.mouseY;
{
e.stopImmediatePropagation(); var bg = el.css('background-position').split(' ');
if (obj.state.dragable) var bgX = x + parseInt(bg[0]);
{ var bgY = y + parseInt(bg[1]);
var x = e.clientX - obj.state.mouseX;
var y = e.clientY - obj.state.mouseY; el.css('background-position', bgX + 'px ' + bgY + 'px');
var bg = el.css('background-position').split(' '); obj.state.mouseX = e.clientX;
obj.state.mouseY = e.clientY;
var bgX = x + parseInt(bg[0]); }
var bgY = y + parseInt(bg[1]); },
imgMouseUp = function (e) {
el.css('background-position', bgX +'px ' + bgY + 'px'); e.stopImmediatePropagation();
obj.state.dragable = false;
obj.state.mouseX = e.clientX; },
obj.state.mouseY = e.clientY; zoomImage = function (e) {
} e.originalEvent.wheelDelta > 0 || e.originalEvent.detail < 0 ? obj.ratio *= 1.1 : obj.ratio *= 0.9;
}, setBackground();
imgMouseUp = function(e) }
{
e.stopImmediatePropagation(); obj.spinner.show();
obj.state.dragable = false; obj.image.onload = function () {
}, obj.spinner.hide();
zoomImage = function(e) setBackground();
{
e.originalEvent.wheelDelta > 0 || e.originalEvent.detail < 0 ? obj.ratio*=1.1 : obj.ratio*=0.9; el.bind('mousedown', imgMouseDown);
setBackground(); el.bind('mousemove', imgMouseMove);
} $(window).bind('mouseup', imgMouseUp);
el.bind('mousewheel DOMMouseScroll', zoomImage);
obj.spinner.show(); };
obj.image.onload = function() { obj.image.src = options.imgSrc;
obj.spinner.hide(); el.on('remove', function () {
setBackground(); $(window).unbind('mouseup', imgMouseUp)
});
el.bind('mousedown', imgMouseDown);
el.bind('mousemove', imgMouseMove); return obj;
$(window).bind('mouseup', imgMouseUp); };
el.bind('mousewheel DOMMouseScroll', zoomImage);
}; jQuery.fn.cropbox = function (options) {
obj.image.src = options.imgSrc; return new cropbox(options, this);
el.on('remove', function(){$(window).unbind('mouseup', imgMouseUp)}); };
}));
return obj;
};
jQuery.fn.cropbox = function(options){
return new cropbox(options, this);
};
}));

View File

@ -1,147 +1,147 @@
/** /**
* @name jQuery FullScreen Plugin * @name jQuery FullScreen Plugin
* @author Martin Angelov, Morten Sjøgren * @author Martin Angelov, Morten Sjøgren
* @version 1.2 * @version 1.2
* @url http://tutorialzine.com/2012/02/enhance-your-website-fullscreen-api/ * @url http://tutorialzine.com/2012/02/enhance-your-website-fullscreen-api/
* @license MIT License * @license MIT License
*/ */
/*jshint browser: true, jquery: true */ /*jshint browser: true, jquery: true */
(function($){ (function ($) {
"use strict"; "use strict";
// These helper functions available only to our plugin scope. // These helper functions available only to our plugin scope.
function supportFullScreen(){ function supportFullScreen() {
var doc = document.documentElement; var doc = document.documentElement;
return ('requestFullscreen' in doc) || return ('requestFullscreen' in doc) ||
('mozRequestFullScreen' in doc && document.mozFullScreenEnabled) || ('mozRequestFullScreen' in doc && document.mozFullScreenEnabled) ||
('webkitRequestFullScreen' in doc); ('webkitRequestFullScreen' in doc);
} }
function requestFullScreen(elem){ function requestFullScreen(elem) {
if (elem.requestFullscreen) { if (elem.requestFullscreen) {
elem.requestFullscreen(); elem.requestFullscreen();
} else if (elem.mozRequestFullScreen) { } else if (elem.mozRequestFullScreen) {
elem.mozRequestFullScreen(); elem.mozRequestFullScreen();
} else if (elem.webkitRequestFullScreen) { } else if (elem.webkitRequestFullScreen) {
elem.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); elem.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
} }
} }
function fullScreenStatus(){ function fullScreenStatus() {
return document.fullscreen || return document.fullscreen ||
document.mozFullScreen || document.mozFullScreen ||
document.webkitIsFullScreen || document.webkitIsFullScreen ||
false; false;
} }
function cancelFullScreen(){ function cancelFullScreen() {
if (document.exitFullscreen) { if (document.exitFullscreen) {
document.exitFullscreen(); document.exitFullscreen();
} else if (document.mozCancelFullScreen) { } else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen(); document.mozCancelFullScreen();
} else if (document.webkitCancelFullScreen) { } else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen(); document.webkitCancelFullScreen();
} }
} }
function onFullScreenEvent(callback){ function onFullScreenEvent(callback) {
$(document).on("fullscreenchange mozfullscreenchange webkitfullscreenchange", function(){ $(document).on("fullscreenchange mozfullscreenchange webkitfullscreenchange", function () {
// The full screen status is automatically // The full screen status is automatically
// passed to our callback as an argument. // passed to our callback as an argument.
callback(fullScreenStatus()); callback(fullScreenStatus());
}); });
} }
// Adding a new test to the jQuery support object // Adding a new test to the jQuery support object
$.support.fullscreen = supportFullScreen(); $.support.fullscreen = supportFullScreen();
// Creating the plugin // Creating the plugin
$.fn.fullScreen = function(props){ $.fn.fullScreen = function (props) {
if(!$.support.fullscreen || this.length !== 1) { if (!$.support.fullscreen || this.length !== 1) {
// The plugin can be called only // The plugin can be called only
// on one element at a time // on one element at a time
return this; return this;
} }
if(fullScreenStatus()){ if (fullScreenStatus()) {
// if we are already in fullscreen, exit // if we are already in fullscreen, exit
cancelFullScreen(); cancelFullScreen();
return this; return this;
} }
// You can potentially pas two arguments a color // You can potentially pas two arguments a color
// for the background and a callback function // for the background and a callback function
var options = $.extend({ var options = $.extend({
'background' : '#111', 'background': '#111',
'callback' : $.noop( ), 'callback': $.noop(),
'fullscreenClass' : 'fullScreen' 'fullscreenClass': 'fullScreen'
}, props), }, props),
elem = this, elem = this,
// This temporary div is the element that is // This temporary div is the element that is
// actually going to be enlarged in full screen // actually going to be enlarged in full screen
fs = $('<div>', { fs = $('<div>', {
'css' : { 'css': {
'overflow-y' : 'auto', 'overflow-y': 'auto',
'background' : options.background, 'background': options.background,
'width' : '100%', 'width': '100%',
'height' : '100%' 'height': '100%'
} }
}) })
.insertBefore(elem) .insertBefore(elem)
.append(elem); .append(elem);
// You can use the .fullScreen class to // You can use the .fullScreen class to
// apply styling to your element // apply styling to your element
elem.addClass( options.fullscreenClass ); elem.addClass(options.fullscreenClass);
// Inserting our element in the temporary // Inserting our element in the temporary
// div, after which we zoom it in fullscreen // div, after which we zoom it in fullscreen
requestFullScreen(fs.get(0)); requestFullScreen(fs.get(0));
fs.click(function(e){ fs.click(function (e) {
if(e.target == this){ if (e.target == this) {
// If the black bar was clicked // If the black bar was clicked
cancelFullScreen(); cancelFullScreen();
} }
}); });
elem.cancel = function(){ elem.cancel = function () {
cancelFullScreen(); cancelFullScreen();
return elem; return elem;
}; };
onFullScreenEvent(function(fullScreen){ onFullScreenEvent(function (fullScreen) {
if(!fullScreen){ if (!fullScreen) {
// We have exited full screen. // We have exited full screen.
// Detach event listener // Detach event listener
$(document).off( 'fullscreenchange mozfullscreenchange webkitfullscreenchange' ); $(document).off('fullscreenchange mozfullscreenchange webkitfullscreenchange');
// Remove the class and destroy // Remove the class and destroy
// the temporary div // the temporary div
elem.removeClass( options.fullscreenClass ).insertBefore(fs); elem.removeClass(options.fullscreenClass).insertBefore(fs);
fs.remove(); fs.remove();
} }
// Calling the facultative user supplied callback // Calling the facultative user supplied callback
if(options.callback) { if (options.callback) {
options.callback(fullScreen); options.callback(fullScreen);
} }
}); });
return elem; return elem;
}; };
$.fn.cancelFullScreen = function( ) { $.fn.cancelFullScreen = function () {
cancelFullScreen(); cancelFullScreen();
return this; return this;
}; };
}(jQuery)); }(jQuery));

View File

@ -1,72 +1,80 @@
/* iCheck plugin Square skin, green /* iCheck plugin Square skin, green
----------------------------------- */ ----------------------------------- */
.icheckbox_square-green, .icheckbox_square-green,
.iradio_square-green { .iradio_square-green {
display: inline-block; display: inline-block;
*display: inline; *display: inline;
vertical-align: middle; vertical-align: middle;
margin: 0; margin: 0;
padding: 0; padding: 0;
width: 22px; width: 22px;
height: 22px; height: 22px;
background: url(green.png) no-repeat; background: url(green.png) no-repeat;
border: none; border: none;
cursor: pointer; cursor: pointer;
} }
.icheckbox_square-green-login{ .icheckbox_square-green-login {
display: inline-block; display: inline-block;
*display: inline; *display: inline;
vertical-align: middle; vertical-align: middle;
margin: 0; margin: 0;
padding: 0; padding: 0;
width: 22px; width: 22px;
height: 22px; height: 22px;
background: url(green-login.png) no-repeat; background: url(green-login.png) no-repeat;
border: none; border: none;
cursor: pointer; cursor: pointer;
} }
.icheckbox_square-green,.icheckbox_square-green-login { .icheckbox_square-green, .icheckbox_square-green-login {
background-position: 0 0; background-position: 0 0;
} }
.icheckbox_square-green.hover,.icheckbox_square-green-login.hover {
background-position: -24px 0; .icheckbox_square-green.hover, .icheckbox_square-green-login.hover {
} background-position: -24px 0;
.icheckbox_square-green.checked,.icheckbox_square-green-login.checked { }
background-position: -48px 0;
} .icheckbox_square-green.checked, .icheckbox_square-green-login.checked {
.icheckbox_square-green.disabled,.icheckbox_square-green.disabled-login { background-position: -48px 0;
background-position: -72px 0; }
cursor: default;
} .icheckbox_square-green.disabled, .icheckbox_square-green.disabled-login {
.icheckbox_square-green.checked.disabled,.icheckbox_square-green-login.checked.disabled { background-position: -72px 0;
background-position: -96px 0; cursor: default;
} }
.iradio_square-green { .icheckbox_square-green.checked.disabled, .icheckbox_square-green-login.checked.disabled {
background-position: -120px 0; background-position: -96px 0;
} }
.iradio_square-green.hover {
background-position: -144px 0; .iradio_square-green {
} background-position: -120px 0;
.iradio_square-green.checked { }
background-position: -168px 0;
} .iradio_square-green.hover {
.iradio_square-green.disabled { background-position: -144px 0;
background-position: -192px 0; }
cursor: default;
} .iradio_square-green.checked {
.iradio_square-green.checked.disabled { background-position: -168px 0;
background-position: -216px 0; }
}
.iradio_square-green.disabled {
/* HiDPI support */ background-position: -192px 0;
@media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { cursor: default;
.icheckbox_square-green,.icheckbox_square-green-login, }
.iradio_square-green {
background-image: url(green%402x.png); .iradio_square-green.checked.disabled {
-webkit-background-size: 240px 24px; background-position: -216px 0;
background-size: 240px 24px; }
}
} /* HiDPI support */
@media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) {
.icheckbox_square-green, .icheckbox_square-green-login,
.iradio_square-green {
background-image: url(green%402x.png);
-webkit-background-size: 240px 24px;
background-size: 240px 24px;
}
}

View File

@ -1,102 +1,375 @@
/*------------------------------------- /*-------------------------------------
zTree Style zTree Style
version: 3.4 version: 3.4
author: Hunter.z author: Hunter.z
email: hunter.z@263.net email: hunter.z@263.net
website: http://code.google.com/p/jquerytree/ website: http://code.google.com/p/jquerytree/
-------------------------------------*/ -------------------------------------*/
.ztree * {padding:0; margin:0; font-size:12px;} .ztree * {
.ztree {margin:0; padding:2px; color:#333} padding: 0;
.ztree li{padding:0; margin:0; list-style:none; line-height:18px; text-align:left; white-space:nowrap; outline:0} margin: 0;
.ztree li ul{ margin:0; padding:0 0 0 18px} font-size: 12px;
.ztree li ul.line{ background:url(./img/line_conn.gif) 0 0 repeat-y;} }
.ztree li a {padding:1px 3px 0 0; margin:0; cursor:pointer; /* height:17px; */ color:#333; background-color: transparent; .ztree {
text-decoration:none; vertical-align:top; display: inline-block} margin: 0;
.ztree li a:hover {text-decoration:underline} padding: 2px;
/*.ztree li a.curSelectedNode {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;}*/ color: #333
.ztree li a.curSelectedNode {padding-top:0px; background-color:#F6F6F6; color:#0663A2; border:1px #DDDDDD solid; opacity:0.8;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} }
/*.ztree li a.curSelectedNode {padding-top:0px; color:#0663a2; font-weight:bold; height:16px; opacity:0.8;}*/
.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;} .ztree li {
.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#316AC5; color:white; height:16px; border:1px #316AC5 solid; padding: 0;
opacity:0.8; filter:alpha(opacity=80)} margin: 0;
.ztree li a.tmpTargetNode_prev {} list-style: none;
.ztree li a.tmpTargetNode_next {} line-height: 18px;
.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0; text-align: left;
font-size:12px; border:1px #7EC4CC solid; *border:0px} white-space: nowrap;
.ztree li span {line-height:16px; margin-right:2px} outline: 0
.ztree li span.button {line-height:0; margin:0; width:16px; height:16px; display: inline-block; vertical-align:middle; }
border:0 none; cursor: pointer;outline:none;
background-color:transparent; background-repeat:no-repeat; background-attachment: scroll; .ztree li ul {
background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")} margin: 0;
padding: 0 0 0 18px
/* IE7 fix */ }
.ztree li span.button.level0 {*margin-left:-15px;}
.ztree li ul.line {
.ztree li span.button.chk {width:13px; height:13px; margin:0 3px 0 0; cursor: auto} background: url(./img/line_conn.gif) 0 0 repeat-y;
.ztree li span.button.chk.checkbox_false_full {background-position:0 0} }
.ztree li span.button.chk.checkbox_false_full_focus {background-position:0 -14px}
.ztree li span.button.chk.checkbox_false_part {background-position:0 -28px} .ztree li a {
.ztree li span.button.chk.checkbox_false_part_focus {background-position:0 -42px} padding: 1px 3px 0 0;
.ztree li span.button.chk.checkbox_false_disable {background-position:0 -56px} margin: 0;
.ztree li span.button.chk.checkbox_true_full {background-position:-14px 0} cursor: pointer; /* height:17px; */
.ztree li span.button.chk.checkbox_true_full_focus {background-position:-14px -14px} color: #333;
.ztree li span.button.chk.checkbox_true_part {background-position:-14px -28px} background-color: transparent;
.ztree li span.button.chk.checkbox_true_part_focus {background-position:-14px -42px} text-decoration: none;
.ztree li span.button.chk.checkbox_true_disable {background-position:-14px -56px} vertical-align: top;
.ztree li span.button.chk.radio_false_full {background-position:-28px 0} display: inline-block
.ztree li span.button.chk.radio_false_full_focus {background-position:-28px -14px} }
.ztree li span.button.chk.radio_false_part {background-position:-28px -28px}
.ztree li span.button.chk.radio_false_part_focus {background-position:-28px -42px} .ztree li a:hover {
.ztree li span.button.chk.radio_false_disable {background-position:-28px -56px} text-decoration: underline
.ztree li span.button.chk.radio_true_full {background-position:-42px 0} }
.ztree li span.button.chk.radio_true_full_focus {background-position:-42px -14px}
.ztree li span.button.chk.radio_true_part {background-position:-42px -28px} /*.ztree li a.curSelectedNode {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;}*/
.ztree li span.button.chk.radio_true_part_focus {background-position:-42px -42px} .ztree li a.curSelectedNode {
.ztree li span.button.chk.radio_true_disable {background-position:-42px -56px} padding-top: 0px;
background-color: #F6F6F6;
.ztree li span.button.switch {width:18px; height:18px} color: #0663A2;
.ztree li span.button.root_open{background-position:-92px -54px} border: 1px #DDDDDD solid;
.ztree li span.button.root_close{background-position:-74px -54px} opacity: 0.8;
.ztree li span.button.roots_open{background-position:-92px 0} -webkit-border-radius: 3px;
.ztree li span.button.roots_close{background-position:-74px 0} -moz-border-radius: 3px;
.ztree li span.button.center_open{background-position:-92px -18px} border-radius: 3px;
.ztree li span.button.center_close{background-position:-74px -18px} }
.ztree li span.button.bottom_open{background-position:-92px -36px}
.ztree li span.button.bottom_close{background-position:-74px -36px} /*.ztree li a.curSelectedNode {padding-top:0px; color:#0663a2; font-weight:bold; height:16px; opacity:0.8;}*/
.ztree li span.button.noline_open{background-position:-92px -72px} .ztree li a.curSelectedNode_Edit {
.ztree li span.button.noline_close{background-position:-74px -72px} padding-top: 0px;
.ztree li span.button.root_docu{ background:none;} background-color: #FFE6B0;
.ztree li span.button.roots_docu{background-position:-56px 0} color: black;
.ztree li span.button.center_docu{background-position:-56px -18px} height: 16px;
.ztree li span.button.bottom_docu{background-position:-56px -36px} border: 1px #FFB951 solid;
.ztree li span.button.noline_docu{ background:none;} opacity: 0.8;
}
.ztree li span.button.ico_open{margin-right:2px; background-position:-110px -16px; vertical-align:top; *vertical-align:middle}
.ztree li span.button.ico_close{margin-right:2px; background-position:-110px 0; vertical-align:top; *vertical-align:middle} .ztree li a.tmpTargetNode_inner {
.ztree li span.button.ico_docu{margin-right:2px; background-position:-110px -32px; /* vertical-align:top; * */vertical-align:middle} padding-top: 0px;
.ztree li span.button.edit {margin-right:2px; background-position:-110px -48px; vertical-align:top; *vertical-align:middle} background-color: #316AC5;
.ztree li span.button.remove {margin-right:2px; background-position:-110px -64px; vertical-align:top; *vertical-align:middle} color: white;
height: 16px;
.ztree li span.button.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle} border: 1px #316AC5 solid;
opacity: 0.8;
ul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)} filter: alpha(opacity=80)
}
span.tmpzTreeMove_arrow {width:16px; height:16px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;
background-color:transparent; background-repeat:no-repeat; background-attachment: scroll; .ztree li a.tmpTargetNode_prev {
background-position:-110px -80px; background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")} }
ul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)} .ztree li a.tmpTargetNode_next {
.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute} }
/* level style*/ .ztree li a input.rename {
/*.ztree li span.button.level0 { height: 14px;
display:none; width: 80px;
} padding: 0;
.ztree li ul.level0 { margin: 0;
padding:0; font-size: 12px;
background:none; border: 1px #7EC4CC solid;
}*/ *border: 0px
}
.ztree li span {
line-height: 16px;
margin-right: 2px
}
.ztree li span.button {
line-height: 0;
margin: 0;
width: 16px;
height: 16px;
display: inline-block;
vertical-align: middle;
border: 0 none;
cursor: pointer;
outline: none;
background-color: transparent;
background-repeat: no-repeat;
background-attachment: scroll;
background-image: url("./img/zTreeStandard.png");
*background-image: url("./img/zTreeStandard.gif")
}
/* IE7 fix */
.ztree li span.button.level0 {
*margin-left: -15px;
}
.ztree li span.button.chk {
width: 13px;
height: 13px;
margin: 0 3px 0 0;
cursor: auto
}
.ztree li span.button.chk.checkbox_false_full {
background-position: 0 0
}
.ztree li span.button.chk.checkbox_false_full_focus {
background-position: 0 -14px
}
.ztree li span.button.chk.checkbox_false_part {
background-position: 0 -28px
}
.ztree li span.button.chk.checkbox_false_part_focus {
background-position: 0 -42px
}
.ztree li span.button.chk.checkbox_false_disable {
background-position: 0 -56px
}
.ztree li span.button.chk.checkbox_true_full {
background-position: -14px 0
}
.ztree li span.button.chk.checkbox_true_full_focus {
background-position: -14px -14px
}
.ztree li span.button.chk.checkbox_true_part {
background-position: -14px -28px
}
.ztree li span.button.chk.checkbox_true_part_focus {
background-position: -14px -42px
}
.ztree li span.button.chk.checkbox_true_disable {
background-position: -14px -56px
}
.ztree li span.button.chk.radio_false_full {
background-position: -28px 0
}
.ztree li span.button.chk.radio_false_full_focus {
background-position: -28px -14px
}
.ztree li span.button.chk.radio_false_part {
background-position: -28px -28px
}
.ztree li span.button.chk.radio_false_part_focus {
background-position: -28px -42px
}
.ztree li span.button.chk.radio_false_disable {
background-position: -28px -56px
}
.ztree li span.button.chk.radio_true_full {
background-position: -42px 0
}
.ztree li span.button.chk.radio_true_full_focus {
background-position: -42px -14px
}
.ztree li span.button.chk.radio_true_part {
background-position: -42px -28px
}
.ztree li span.button.chk.radio_true_part_focus {
background-position: -42px -42px
}
.ztree li span.button.chk.radio_true_disable {
background-position: -42px -56px
}
.ztree li span.button.switch {
width: 18px;
height: 18px
}
.ztree li span.button.root_open {
background-position: -92px -54px
}
.ztree li span.button.root_close {
background-position: -74px -54px
}
.ztree li span.button.roots_open {
background-position: -92px 0
}
.ztree li span.button.roots_close {
background-position: -74px 0
}
.ztree li span.button.center_open {
background-position: -92px -18px
}
.ztree li span.button.center_close {
background-position: -74px -18px
}
.ztree li span.button.bottom_open {
background-position: -92px -36px
}
.ztree li span.button.bottom_close {
background-position: -74px -36px
}
.ztree li span.button.noline_open {
background-position: -92px -72px
}
.ztree li span.button.noline_close {
background-position: -74px -72px
}
.ztree li span.button.root_docu {
background: none;
}
.ztree li span.button.roots_docu {
background-position: -56px 0
}
.ztree li span.button.center_docu {
background-position: -56px -18px
}
.ztree li span.button.bottom_docu {
background-position: -56px -36px
}
.ztree li span.button.noline_docu {
background: none;
}
.ztree li span.button.ico_open {
margin-right: 2px;
background-position: -110px -16px;
vertical-align: top;
*vertical-align: middle
}
.ztree li span.button.ico_close {
margin-right: 2px;
background-position: -110px 0;
vertical-align: top;
*vertical-align: middle
}
.ztree li span.button.ico_docu {
margin-right: 2px;
background-position: -110px -32px; /* vertical-align:top; * */
vertical-align: middle
}
.ztree li span.button.edit {
margin-right: 2px;
background-position: -110px -48px;
vertical-align: top;
*vertical-align: middle
}
.ztree li span.button.remove {
margin-right: 2px;
background-position: -110px -64px;
vertical-align: top;
*vertical-align: middle
}
.ztree li span.button.ico_loading {
margin-right: 2px;
background: url(./img/loading.gif) no-repeat scroll 0 0 transparent;
vertical-align: top;
*vertical-align: middle
}
ul.tmpTargetzTree {
background-color: #FFE6B0;
opacity: 0.8;
filter: alpha(opacity=80)
}
span.tmpzTreeMove_arrow {
width: 16px;
height: 16px;
display: inline-block;
padding: 0;
margin: 2px 0 0 1px;
border: 0 none;
position: absolute;
background-color: transparent;
background-repeat: no-repeat;
background-attachment: scroll;
background-position: -110px -80px;
background-image: url("./img/zTreeStandard.png");
*background-image: url("./img/zTreeStandard.gif")
}
ul.ztree.zTreeDragUL {
margin: 0;
padding: 0;
position: absolute;
width: auto;
height: auto;
overflow: hidden;
background-color: #cfcfcf;
border: 1px #00B83F dotted;
opacity: 0.8;
filter: alpha(opacity=80)
}
.zTreeMask {
z-index: 10000;
background-color: #cfcfcf;
opacity: 0.0;
filter: alpha(opacity=0);
position: absolute
}
/* level style*/
/*.ztree li span.button.level0 {
display:none;
}
.ztree li ul.level0 {
padding:0;
background:none;
}*/

View File

@ -1,107 +1,449 @@
/*------------------------------------- /*-------------------------------------
zTree Style zTree Style
version: 3.4 version: 3.4
author: Hunter.z author: Hunter.z
email: hunter.z@263.net email: hunter.z@263.net
website: http://code.google.com/p/jquerytree/ website: http://code.google.com/p/jquerytree/
-------------------------------------*/ -------------------------------------*/
.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif} .ztree * {
.ztree {margin:0; padding:5px; color:#333} padding: 0;
.ztree li{padding:0; margin:0; list-style:none; line-height:21px; text-align:left; white-space:nowrap; outline:0} margin: 0;
.ztree li ul{ margin:0; padding:0 0 0 18px} font-size: 12px;
.ztree li ul.line{ background:url(./img/line_conn.png) 0 0 repeat-y;} font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif
}
.ztree li a {padding-right:3px; margin:0; cursor:pointer; height:21px; color:#333; background-color: transparent; text-decoration:none; display: inline-block}
.ztree li a:hover {text-decoration:underline} .ztree {
.ztree li a.curSelectedNode {padding-top:0px; background-color:#e5e5e5; color:black; height:22px; -webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} margin: 0;
.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#e5e5e5; color:black; height:22px; border:1px #666 solid; -webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} padding: 5px;
.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#aaa; color:white; height:21px; border:1px #666 solid; color: #333
opacity:0.8; filter:alpha(opacity=80)} }
.ztree li a.tmpTargetNode_prev {}
.ztree li a.tmpTargetNode_next {} .ztree li {
.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0; padding: 0;
font-size:12px; border:1px #7EC4CC solid; *border:0px} margin: 0;
.ztree li span {line-height:21px; margin-right:2px} list-style: none;
.ztree li span.button {line-height:0; margin:0; width:21px; height:21px; display: inline-block; vertical-align:middle; line-height: 21px;
border:0 none; cursor: pointer;outline:none; text-align: left;
background-color:transparent; background-repeat:no-repeat; background-attachment: scroll; white-space: nowrap;
background-image:url("./img/metro.png"); *background-image:url("./img/metro.gif")} outline: 0
}
.ztree li span.button.chk {width:13px; height:13px; margin:0 2px; cursor: auto}
.ztree li span.button.chk.checkbox_false_full {background-position: -5px -5px;} .ztree li ul {
.ztree li span.button.chk.checkbox_false_full_focus {background-position: -5px -26px;} margin: 0;
.ztree li span.button.chk.checkbox_false_part {background-position: -5px -48px;} padding: 0 0 0 18px
.ztree li span.button.chk.checkbox_false_part_focus {background-position: -5px -68px;} }
.ztree li span.button.chk.checkbox_false_disable {background-position: -5px -89px;}
.ztree li span.button.chk.checkbox_true_full {background-position: -26px -5px;} .ztree li ul.line {
.ztree li span.button.chk.checkbox_true_full_focus {background-position: -26px -26px;} background: url(./img/line_conn.png) 0 0 repeat-y;
.ztree li span.button.chk.checkbox_true_part {background-position: -26px -48px;} }
.ztree li span.button.chk.checkbox_true_part_focus {background-position: -26px -68px;}
.ztree li span.button.chk.checkbox_true_disable {background-position: -26px -89px;} .ztree li a {
.ztree li span.button.chk.radio_false_full {background-position: -47px -5px;} padding-right: 3px;
.ztree li span.button.chk.radio_false_full_focus {background-position: -47px -26px;} margin: 0;
.ztree li span.button.chk.radio_false_part {background-position: -47px -47px;} cursor: pointer;
.ztree li span.button.chk.radio_false_part_focus {background-position: -47px -68px;} height: 21px;
.ztree li span.button.chk.radio_false_disable {background-position: -47px -89px;} color: #333;
.ztree li span.button.chk.radio_true_full {background-position: -68px -5px;} background-color: transparent;
.ztree li span.button.chk.radio_true_full_focus {background-position: -68px -26px;} text-decoration: none;
.ztree li span.button.chk.radio_true_part {background-position: -68px -47px;} display: inline-block
.ztree li span.button.chk.radio_true_part_focus {background-position: -68px -68px;} }
.ztree li span.button.chk.radio_true_disable {background-position: -68px -89px;}
.ztree li a:hover {
.ztree li span.button.switch {width:21px; height:21px} text-decoration: underline
.ztree li span.button.root_open{background-position:-105px -85px} }
.ztree li span.button.root_close{background-position:-126px -85px}
.ztree li span.button.roots_open{background-position: -105px 0;} .ztree li a.curSelectedNode {
.ztree li span.button.roots_close{background-position: -126px 0;} padding-top: 0px;
.ztree li span.button.center_open{background-position: -105px -21px;} background-color: #e5e5e5;
.ztree li span.button.center_close{background-position: -126px -21px;} color: black;
.ztree li span.button.bottom_open{background-position: -105px -42px;} height: 22px;
.ztree li span.button.bottom_close{background-position: -126px -42px;} -webkit-border-radius: 3px;
.ztree li span.button.noline_open{background-position: -126px -84px;} -moz-border-radius: 3px;
.ztree li span.button.noline_close{background-position: -105px -84px;} border-radius: 3px;
.ztree li span.button.root_docu{ background:none;} }
.ztree li span.button.roots_docu{background-position: -84px 0;}
.ztree li span.button.center_docu{background-position: -84px -21px;} .ztree li a.curSelectedNode_Edit {
.ztree li span.button.bottom_docu{background-position: -84px -42px;} padding-top: 0px;
.ztree li span.button.noline_docu{ background:none;} background-color: #e5e5e5;
color: black;
.ztree li span.button.ico_open{margin-right:2px; background-position: -147px -21px; vertical-align:top; *vertical-align:middle} height: 22px;
.ztree li span.button.ico_close{margin-right:2px; margin-right:2px; background-position: -147px 0; vertical-align:top; *vertical-align:middle} border: 1px #666 solid;
.ztree li span.button.ico_docu{margin-right:2px; background-position: -147px -42px; vertical-align:top; *vertical-align:middle} -webkit-border-radius: 3px;
.ztree li span.button.edit {margin-left:2px; margin-right: -1px; background-position: -189px -21px; vertical-align:top; *vertical-align:middle} -moz-border-radius: 3px;
.ztree li span.button.edit:hover { border-radius: 3px;
background-position: -168px -21px; }
}
.ztree li span.button.remove {margin-left:2px; margin-right: -1px; background-position: -189px -42px; vertical-align:top; *vertical-align:middle} .ztree li a.tmpTargetNode_inner {
.ztree li span.button.remove:hover { padding-top: 0px;
background-position: -168px -42px; background-color: #aaa;
} color: white;
.ztree li span.button.add {margin-left:2px; margin-right: -1px; background-position: -189px 0; vertical-align:top; *vertical-align:middle} height: 21px;
.ztree li span.button.add:hover { border: 1px #666 solid;
background-position: -168px 0; opacity: 0.8;
} filter: alpha(opacity=80)
.ztree li span.button.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle} }
ul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)} .ztree li a.tmpTargetNode_prev {
}
span.tmpzTreeMove_arrow {width:16px; height:21px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;
background-color:transparent; background-repeat:no-repeat; background-attachment: scroll; .ztree li a.tmpTargetNode_next {
background-position:-168px -84px; background-image:url("./img/metro.png"); *background-image:url("./img/metro.gif")} }
ul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)} .ztree li a input.rename {
.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute} height: 14px;
width: 80px;
/* 树搜索相关 */ padding: 0;
.treeSearchInput {padding:13px 0 0 20px;} margin: 0;
.treeSearchInput label {padding:5px 0 3px 0;font-size:13px;font-weight:normal;vertical-align:middle;} font-size: 12px;
.treeSearchInput input {width:145px;vertical-align:middle;line-height:24px;height:26px;border:1px solid #bbb;padding:0 4px;} border: 1px #7EC4CC solid;
.treeSearchInput button {border:1px solid #bbb;vertical-align:middle;height:26px;height:26px\9;font-size:13px;background:#efefef;padding:0 8px;} *border: 0px
.treeShowHideButton {position:absolute;right:8px;top:2px;font-size:12px;color:#333;z-index:3;} }
.treeShowHideButton label {cursor:pointer;}
.treeExpandCollapse {float:right;margin:6px 5px;padding:5px;font-size:12px;color:#333;position:relative;z-index:2;background:#fff;} .ztree li span {
.treeExpandCollapse a {text-decoration:none;color:#333} line-height: 21px;
.treeselect.ztree {padding:10px 20px;} margin-right: 2px
}
.ztree li span.button {
line-height: 0;
margin: 0;
width: 21px;
height: 21px;
display: inline-block;
vertical-align: middle;
border: 0 none;
cursor: pointer;
outline: none;
background-color: transparent;
background-repeat: no-repeat;
background-attachment: scroll;
background-image: url("./img/metro.png");
*background-image: url("./img/metro.gif")
}
.ztree li span.button.chk {
width: 13px;
height: 13px;
margin: 0 2px;
cursor: auto
}
.ztree li span.button.chk.checkbox_false_full {
background-position: -5px -5px;
}
.ztree li span.button.chk.checkbox_false_full_focus {
background-position: -5px -26px;
}
.ztree li span.button.chk.checkbox_false_part {
background-position: -5px -48px;
}
.ztree li span.button.chk.checkbox_false_part_focus {
background-position: -5px -68px;
}
.ztree li span.button.chk.checkbox_false_disable {
background-position: -5px -89px;
}
.ztree li span.button.chk.checkbox_true_full {
background-position: -26px -5px;
}
.ztree li span.button.chk.checkbox_true_full_focus {
background-position: -26px -26px;
}
.ztree li span.button.chk.checkbox_true_part {
background-position: -26px -48px;
}
.ztree li span.button.chk.checkbox_true_part_focus {
background-position: -26px -68px;
}
.ztree li span.button.chk.checkbox_true_disable {
background-position: -26px -89px;
}
.ztree li span.button.chk.radio_false_full {
background-position: -47px -5px;
}
.ztree li span.button.chk.radio_false_full_focus {
background-position: -47px -26px;
}
.ztree li span.button.chk.radio_false_part {
background-position: -47px -47px;
}
.ztree li span.button.chk.radio_false_part_focus {
background-position: -47px -68px;
}
.ztree li span.button.chk.radio_false_disable {
background-position: -47px -89px;
}
.ztree li span.button.chk.radio_true_full {
background-position: -68px -5px;
}
.ztree li span.button.chk.radio_true_full_focus {
background-position: -68px -26px;
}
.ztree li span.button.chk.radio_true_part {
background-position: -68px -47px;
}
.ztree li span.button.chk.radio_true_part_focus {
background-position: -68px -68px;
}
.ztree li span.button.chk.radio_true_disable {
background-position: -68px -89px;
}
.ztree li span.button.switch {
width: 21px;
height: 21px
}
.ztree li span.button.root_open {
background-position: -105px -85px
}
.ztree li span.button.root_close {
background-position: -126px -85px
}
.ztree li span.button.roots_open {
background-position: -105px 0;
}
.ztree li span.button.roots_close {
background-position: -126px 0;
}
.ztree li span.button.center_open {
background-position: -105px -21px;
}
.ztree li span.button.center_close {
background-position: -126px -21px;
}
.ztree li span.button.bottom_open {
background-position: -105px -42px;
}
.ztree li span.button.bottom_close {
background-position: -126px -42px;
}
.ztree li span.button.noline_open {
background-position: -126px -84px;
}
.ztree li span.button.noline_close {
background-position: -105px -84px;
}
.ztree li span.button.root_docu {
background: none;
}
.ztree li span.button.roots_docu {
background-position: -84px 0;
}
.ztree li span.button.center_docu {
background-position: -84px -21px;
}
.ztree li span.button.bottom_docu {
background-position: -84px -42px;
}
.ztree li span.button.noline_docu {
background: none;
}
.ztree li span.button.ico_open {
margin-right: 2px;
background-position: -147px -21px;
vertical-align: top;
*vertical-align: middle
}
.ztree li span.button.ico_close {
margin-right: 2px;
margin-right: 2px;
background-position: -147px 0;
vertical-align: top;
*vertical-align: middle
}
.ztree li span.button.ico_docu {
margin-right: 2px;
background-position: -147px -42px;
vertical-align: top;
*vertical-align: middle
}
.ztree li span.button.edit {
margin-left: 2px;
margin-right: -1px;
background-position: -189px -21px;
vertical-align: top;
*vertical-align: middle
}
.ztree li span.button.edit:hover {
background-position: -168px -21px;
}
.ztree li span.button.remove {
margin-left: 2px;
margin-right: -1px;
background-position: -189px -42px;
vertical-align: top;
*vertical-align: middle
}
.ztree li span.button.remove:hover {
background-position: -168px -42px;
}
.ztree li span.button.add {
margin-left: 2px;
margin-right: -1px;
background-position: -189px 0;
vertical-align: top;
*vertical-align: middle
}
.ztree li span.button.add:hover {
background-position: -168px 0;
}
.ztree li span.button.ico_loading {
margin-right: 2px;
background: url(./img/loading.gif) no-repeat scroll 0 0 transparent;
vertical-align: top;
*vertical-align: middle
}
ul.tmpTargetzTree {
background-color: #FFE6B0;
opacity: 0.8;
filter: alpha(opacity=80)
}
span.tmpzTreeMove_arrow {
width: 16px;
height: 21px;
display: inline-block;
padding: 0;
margin: 2px 0 0 1px;
border: 0 none;
position: absolute;
background-color: transparent;
background-repeat: no-repeat;
background-attachment: scroll;
background-position: -168px -84px;
background-image: url("./img/metro.png");
*background-image: url("./img/metro.gif")
}
ul.ztree.zTreeDragUL {
margin: 0;
padding: 0;
position: absolute;
width: auto;
height: auto;
overflow: hidden;
background-color: #cfcfcf;
border: 1px #00B83F dotted;
opacity: 0.8;
filter: alpha(opacity=80)
}
.zTreeMask {
z-index: 10000;
background-color: #cfcfcf;
opacity: 0.0;
filter: alpha(opacity=0);
position: absolute
}
/* 树搜索相关 */
.treeSearchInput {
padding: 13px 0 0 20px;
}
.treeSearchInput label {
padding: 5px 0 3px 0;
font-size: 13px;
font-weight: normal;
vertical-align: middle;
}
.treeSearchInput input {
width: 145px;
vertical-align: middle;
line-height: 24px;
height: 26px;
border: 1px solid #bbb;
padding: 0 4px;
}
.treeSearchInput button {
border: 1px solid #bbb;
vertical-align: middle;
height: 26px;
height: 26px \9;
font-size: 13px;
background: #efefef;
padding: 0 8px;
}
.treeShowHideButton {
position: absolute;
right: 8px;
top: 2px;
font-size: 12px;
color: #333;
z-index: 3;
}
.treeShowHideButton label {
cursor: pointer;
}
.treeExpandCollapse {
float: right;
margin: 6px 5px;
padding: 5px;
font-size: 12px;
color: #333;
position: relative;
z-index: 2;
background: #fff;
}
.treeExpandCollapse a {
text-decoration: none;
color: #333
}
.treeselect.ztree {
padding: 10px 20px;
}

View File

@ -1,118 +1,472 @@
/*------------------------------------- /*-------------------------------------
zTree Style zTree Style
version: 3.4 version: 3.4
author: Hunter.z author: Hunter.z
email: hunter.z@263.net email: hunter.z@263.net
website: http://code.google.com/p/jquerytree/ website: http://code.google.com/p/jquerytree/
-------------------------------------*/ -------------------------------------*/
.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif} .ztree * {
.ztree {margin:0; padding:5px; color:#333} padding: 0;
.ztree li{padding:0; margin:0; list-style:none; line-height:21px; text-align:left; white-space:nowrap; outline:0} margin: 0;
.ztree li ul{ margin:0; padding:0 0 0 18px} font-size: 12px;
.ztree li ul.line{ background:url(./img/line_conn.png) 0 0 repeat-y;} font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif
}
.ztree li a {padding-right:3px; margin:0; cursor:pointer; height:21px; color:#333; background-color: transparent; text-decoration:none; display: inline-block}
.ztree li a:hover {text-decoration:underline} .ztree {
.ztree li a.curSelectedNode {padding-top:0px; background-color:#e5e5e5; color:black; height:21px; opacity:0.8;} margin: 0;
.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#e5e5e5; color:black; height:21px; border:1px #666 solid; opacity:0.8;} padding: 5px;
.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#aaa; color:white; height:21px; border:1px #666 solid; color: #333
opacity:0.8; filter:alpha(opacity=80)} }
.ztree li a.tmpTargetNode_prev {}
.ztree li a.tmpTargetNode_next {} .ztree li {
.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0; padding: 0;
font-size:12px; border:1px #7EC4CC solid; *border:0px} margin: 0;
.ztree li span {line-height:21px; margin-right:2px} list-style: none;
.ztree li span.button {line-height:0; margin:0; width:21px; height:21px; display: inline-block; vertical-align:middle; line-height: 21px;
border:0 none; cursor: pointer;outline:none; text-align: left;
background-color:transparent; background-repeat:no-repeat; background-attachment: scroll; white-space: nowrap;
background-image:url("./img/metro.png"); *background-image:url("./img/metro.gif")} outline: 0
}
.ztree li span.button.chk {width:13px; height:13px; margin:0 2px; cursor: auto}
.ztree li span.button.chk.checkbox_false_full {background-position: -5px -5px;} .ztree li ul {
.ztree li span.button.chk.checkbox_false_full_focus {background-position: -5px -26px;} margin: 0;
.ztree li span.button.chk.checkbox_false_part {background-position: -5px -48px;} padding: 0 0 0 18px
.ztree li span.button.chk.checkbox_false_part_focus {background-position: -5px -68px;} }
.ztree li span.button.chk.checkbox_false_disable {background-position: -5px -89px;}
.ztree li span.button.chk.checkbox_true_full {background-position: -26px -5px;} .ztree li ul.line {
.ztree li span.button.chk.checkbox_true_full_focus {background-position: -26px -26px;} background: url(./img/line_conn.png) 0 0 repeat-y;
.ztree li span.button.chk.checkbox_true_part {background-position: -26px -48px;} }
.ztree li span.button.chk.checkbox_true_part_focus {background-position: -26px -68px;}
.ztree li span.button.chk.checkbox_true_disable {background-position: -26px -89px;} .ztree li a {
.ztree li span.button.chk.radio_false_full {background-position: -47px -5px;} padding-right: 3px;
.ztree li span.button.chk.radio_false_full_focus {background-position: -47px -26px;} margin: 0;
.ztree li span.button.chk.radio_false_part {background-position: -47px -47px;} cursor: pointer;
.ztree li span.button.chk.radio_false_part_focus {background-position: -47px -68px;} height: 21px;
.ztree li span.button.chk.radio_false_disable {background-position: -47px -89px;} color: #333;
.ztree li span.button.chk.radio_true_full {background-position: -68px -5px;} background-color: transparent;
.ztree li span.button.chk.radio_true_full_focus {background-position: -68px -26px;} text-decoration: none;
.ztree li span.button.chk.radio_true_part {background-position: -68px -47px;} display: inline-block
.ztree li span.button.chk.radio_true_part_focus {background-position: -68px -68px;} }
.ztree li span.button.chk.radio_true_disable {background-position: -68px -89px;}
.ztree li a:hover {
.ztree li span.button.switch {width:21px; height:21px} text-decoration: underline
.ztree li span.button.root_open{background-position:-92px -54px} }
.ztree li span.button.root_close{background-position:-74px -54px}
.ztree li span.button.roots_open{background-position: -105px 0;} .ztree li a.curSelectedNode {
.ztree li span.button.roots_close{background-position: -126px 0;} padding-top: 0px;
.ztree li span.button.center_open{background-position: -105px -21px;} background-color: #e5e5e5;
.ztree li span.button.center_close{background-position: -126px -21px;} color: black;
.ztree li span.button.bottom_open{background-position: -105px -42px;} height: 21px;
.ztree li span.button.bottom_close{background-position: -126px -42px;} opacity: 0.8;
.ztree li span.button.noline_open{background-position: -126px -84px;} }
.ztree li span.button.noline_close{background-position: -105px -84px;}
.ztree li span.button.root_docu{ background:none;} .ztree li a.curSelectedNode_Edit {
.ztree li span.button.roots_docu{background-position: -84px 0;} padding-top: 0px;
.ztree li span.button.center_docu{background-position: -84px -21px;} background-color: #e5e5e5;
.ztree li span.button.bottom_docu{background-position: -84px -42px;} color: black;
.ztree li span.button.noline_docu{ background:none;} height: 21px;
border: 1px #666 solid;
.ztree li span.button.ico_open{margin-right:2px; background-position: -147px -21px; vertical-align:top; *vertical-align:middle} opacity: 0.8;
.ztree li span.button.ico_close{margin-right:2px; margin-right:2px; background-position: -147px 0; vertical-align:top; *vertical-align:middle} }
.ztree li span.button.ico_docu{margin-right:2px; background-position: -147px -42px; vertical-align:top; *vertical-align:middle}
.ztree li span.button.edit {margin-left:2px; margin-right: -1px; background-position: -189px -21px; vertical-align:top; *vertical-align:middle} .ztree li a.tmpTargetNode_inner {
.ztree li span.button.edit:hover { padding-top: 0px;
background-position: -168px -21px; background-color: #aaa;
} color: white;
.ztree li span.button.remove {margin-left:2px; margin-right: -1px; background-position: -189px -42px; vertical-align:top; *vertical-align:middle} height: 21px;
.ztree li span.button.remove:hover { border: 1px #666 solid;
background-position: -168px -42px; opacity: 0.8;
} filter: alpha(opacity=80)
.ztree li span.button.add {margin-left:2px; margin-right: -1px; background-position: -189px 0; vertical-align:top; *vertical-align:middle} }
.ztree li span.button.add:hover {
background-position: -168px 0; .ztree li a.tmpTargetNode_prev {
} }
.ztree li span.button.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}
.ztree li a.tmpTargetNode_next {
ul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)} }
span.tmpzTreeMove_arrow {width:16px; height:21px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute; .ztree li a input.rename {
background-color:transparent; background-repeat:no-repeat; background-attachment: scroll; height: 14px;
background-position:-168px -84px; background-image:url("./img/metro.png"); *background-image:url("./img/metro.gif")} width: 80px;
padding: 0;
ul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)} margin: 0;
.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute} font-size: 12px;
border: 1px #7EC4CC solid;
/* simple */ *border: 0px
}
.ztree * {font-size:14px;font-family:"Microsoft Yahei",Verdana,Simsun,"Segoe UI Web Light","Segoe UI Light","Segoe UI Web Regular","Segoe UI","Segoe UI Symbol","Helvetica Neue",Arial;}
.ztree li ul{ margin:0; padding:0} .ztree li span {
.ztree li {line-height:28px;} line-height: 21px;
.ztree li a {width:100%;height:28px;padding-top: 0px;} margin-right: 2px
.ztree li a:hover {text-decoration:none; background-color: #E7E7E7;} }
.ztree11 li a span.button.switch {visibility:hidden}
.ztree11.showIcon li a span.button.switch {visibility:visible} .ztree li span.button {
.ztree li a.curSelectedNode {background-color:#D4D4D4;border:0;height:28px;} line-height: 0;
.ztree li span {line-height:26px;margin-right:0px;} margin: 0;
.ztree li span.button {margin-top: -7px;} width: 21px;
.ztree li span.button.switch {width:16px;height: 16px;} height: 21px;
.ztree li a.level0 span {font-size:15px;font-weight:bold;} display: inline-block;
.ztree li span.button {background-image:url("img/left_menu.png"); *background-image:url("./left_menu.gif")} vertical-align: middle;
.ztree li span.button.switch.level0 {width: 20px; height:20px} border: 0 none;
.ztree li span.button.switch.level1 {width: 20px; height:20px} cursor: pointer;
.ztree li span.button.noline_open {background-position: 0 0;} outline: none;
.ztree li span.button.noline_close {background-position: -18px 0;} background-color: transparent;
.ztree li span.button.noline_open.level0 {background-position: 0 -17px;} background-repeat: no-repeat;
.ztree li span.button.noline_close.level0 {background-position: -18px -17px;} background-attachment: scroll;
background-image: url("./img/metro.png");
*background-image: url("./img/metro.gif")
}
.ztree li span.button.chk {
width: 13px;
height: 13px;
margin: 0 2px;
cursor: auto
}
.ztree li span.button.chk.checkbox_false_full {
background-position: -5px -5px;
}
.ztree li span.button.chk.checkbox_false_full_focus {
background-position: -5px -26px;
}
.ztree li span.button.chk.checkbox_false_part {
background-position: -5px -48px;
}
.ztree li span.button.chk.checkbox_false_part_focus {
background-position: -5px -68px;
}
.ztree li span.button.chk.checkbox_false_disable {
background-position: -5px -89px;
}
.ztree li span.button.chk.checkbox_true_full {
background-position: -26px -5px;
}
.ztree li span.button.chk.checkbox_true_full_focus {
background-position: -26px -26px;
}
.ztree li span.button.chk.checkbox_true_part {
background-position: -26px -48px;
}
.ztree li span.button.chk.checkbox_true_part_focus {
background-position: -26px -68px;
}
.ztree li span.button.chk.checkbox_true_disable {
background-position: -26px -89px;
}
.ztree li span.button.chk.radio_false_full {
background-position: -47px -5px;
}
.ztree li span.button.chk.radio_false_full_focus {
background-position: -47px -26px;
}
.ztree li span.button.chk.radio_false_part {
background-position: -47px -47px;
}
.ztree li span.button.chk.radio_false_part_focus {
background-position: -47px -68px;
}
.ztree li span.button.chk.radio_false_disable {
background-position: -47px -89px;
}
.ztree li span.button.chk.radio_true_full {
background-position: -68px -5px;
}
.ztree li span.button.chk.radio_true_full_focus {
background-position: -68px -26px;
}
.ztree li span.button.chk.radio_true_part {
background-position: -68px -47px;
}
.ztree li span.button.chk.radio_true_part_focus {
background-position: -68px -68px;
}
.ztree li span.button.chk.radio_true_disable {
background-position: -68px -89px;
}
.ztree li span.button.switch {
width: 21px;
height: 21px
}
.ztree li span.button.root_open {
background-position: -92px -54px
}
.ztree li span.button.root_close {
background-position: -74px -54px
}
.ztree li span.button.roots_open {
background-position: -105px 0;
}
.ztree li span.button.roots_close {
background-position: -126px 0;
}
.ztree li span.button.center_open {
background-position: -105px -21px;
}
.ztree li span.button.center_close {
background-position: -126px -21px;
}
.ztree li span.button.bottom_open {
background-position: -105px -42px;
}
.ztree li span.button.bottom_close {
background-position: -126px -42px;
}
.ztree li span.button.noline_open {
background-position: -126px -84px;
}
.ztree li span.button.noline_close {
background-position: -105px -84px;
}
.ztree li span.button.root_docu {
background: none;
}
.ztree li span.button.roots_docu {
background-position: -84px 0;
}
.ztree li span.button.center_docu {
background-position: -84px -21px;
}
.ztree li span.button.bottom_docu {
background-position: -84px -42px;
}
.ztree li span.button.noline_docu {
background: none;
}
.ztree li span.button.ico_open {
margin-right: 2px;
background-position: -147px -21px;
vertical-align: top;
*vertical-align: middle
}
.ztree li span.button.ico_close {
margin-right: 2px;
margin-right: 2px;
background-position: -147px 0;
vertical-align: top;
*vertical-align: middle
}
.ztree li span.button.ico_docu {
margin-right: 2px;
background-position: -147px -42px;
vertical-align: top;
*vertical-align: middle
}
.ztree li span.button.edit {
margin-left: 2px;
margin-right: -1px;
background-position: -189px -21px;
vertical-align: top;
*vertical-align: middle
}
.ztree li span.button.edit:hover {
background-position: -168px -21px;
}
.ztree li span.button.remove {
margin-left: 2px;
margin-right: -1px;
background-position: -189px -42px;
vertical-align: top;
*vertical-align: middle
}
.ztree li span.button.remove:hover {
background-position: -168px -42px;
}
.ztree li span.button.add {
margin-left: 2px;
margin-right: -1px;
background-position: -189px 0;
vertical-align: top;
*vertical-align: middle
}
.ztree li span.button.add:hover {
background-position: -168px 0;
}
.ztree li span.button.ico_loading {
margin-right: 2px;
background: url(./img/loading.gif) no-repeat scroll 0 0 transparent;
vertical-align: top;
*vertical-align: middle
}
ul.tmpTargetzTree {
background-color: #FFE6B0;
opacity: 0.8;
filter: alpha(opacity=80)
}
span.tmpzTreeMove_arrow {
width: 16px;
height: 21px;
display: inline-block;
padding: 0;
margin: 2px 0 0 1px;
border: 0 none;
position: absolute;
background-color: transparent;
background-repeat: no-repeat;
background-attachment: scroll;
background-position: -168px -84px;
background-image: url("./img/metro.png");
*background-image: url("./img/metro.gif")
}
ul.ztree.zTreeDragUL {
margin: 0;
padding: 0;
position: absolute;
width: auto;
height: auto;
overflow: hidden;
background-color: #cfcfcf;
border: 1px #00B83F dotted;
opacity: 0.8;
filter: alpha(opacity=80)
}
.zTreeMask {
z-index: 10000;
background-color: #cfcfcf;
opacity: 0.0;
filter: alpha(opacity=0);
position: absolute
}
/* simple */
.ztree * {
font-size: 14px;
font-family: "Microsoft Yahei", Verdana, Simsun, "Segoe UI Web Light", "Segoe UI Light", "Segoe UI Web Regular", "Segoe UI", "Segoe UI Symbol", "Helvetica Neue", Arial;
}
.ztree li ul {
margin: 0;
padding: 0
}
.ztree li {
line-height: 28px;
}
.ztree li a {
width: 100%;
height: 28px;
padding-top: 0px;
}
.ztree li a:hover {
text-decoration: none;
background-color: #E7E7E7;
}
.ztree11 li a span.button.switch {
visibility: hidden
}
.ztree11.showIcon li a span.button.switch {
visibility: visible
}
.ztree li a.curSelectedNode {
background-color: #D4D4D4;
border: 0;
height: 28px;
}
.ztree li span {
line-height: 26px;
margin-right: 0px;
}
.ztree li span.button {
margin-top: -7px;
}
.ztree li span.button.switch {
width: 16px;
height: 16px;
}
.ztree li a.level0 span {
font-size: 15px;
font-weight: bold;
}
.ztree li span.button {
background-image: url("img/left_menu.png");
*background-image: url("./left_menu.gif")
}
.ztree li span.button.switch.level0 {
width: 20px;
height: 20px
}
.ztree li span.button.switch.level1 {
width: 20px;
height: 20px
}
.ztree li span.button.noline_open {
background-position: 0 0;
}
.ztree li span.button.noline_close {
background-position: -18px 0;
}
.ztree li span.button.noline_open.level0 {
background-position: 0 -17px;
}
.ztree li span.button.noline_close.level0 {
background-position: -18px -17px;
}

View File

@ -1,366 +1,367 @@
/* /*
* JQuery zTree exHideNodes 3.5.12 * JQuery zTree exHideNodes 3.5.12
* http://zTree.me/ * http://zTree.me/
* *
* Copyright (c) 2010 Hunter.z * Copyright (c) 2010 Hunter.z
* *
* Licensed same as jquery - MIT License * Licensed same as jquery - MIT License
* http://www.opensource.org/licenses/mit-license.php * http://www.opensource.org/licenses/mit-license.php
* *
* email: hunter.z@263.net * email: hunter.z@263.net
* Date: 2013-03-11 * Date: 2013-03-11
*/ */
(function($){ (function ($) {
//default init node of exLib //default init node of exLib
var _initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) { var _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
if (typeof n.isHidden == "string") n.isHidden = tools.eqs(n.isHidden, "true"); if (typeof n.isHidden == "string") n.isHidden = tools.eqs(n.isHidden, "true");
n.isHidden = !!n.isHidden; n.isHidden = !!n.isHidden;
data.initHideForExCheck(setting, n); data.initHideForExCheck(setting, n);
}, },
//add dom for check //add dom for check
_beforeA = function(setting, node, html) {}, _beforeA = function (setting, node, html) {
//update zTreeObj, add method of exLib },
_zTreeTools = function(setting, zTreeTools) { //update zTreeObj, add method of exLib
zTreeTools.showNodes = function(nodes, options) { _zTreeTools = function (setting, zTreeTools) {
view.showNodes(setting, nodes, options); zTreeTools.showNodes = function (nodes, options) {
} view.showNodes(setting, nodes, options);
zTreeTools.showNode = function(node, options) { }
if (!node) { zTreeTools.showNode = function (node, options) {
return; if (!node) {
} return;
view.showNodes(setting, [node], options); }
} view.showNodes(setting, [node], options);
zTreeTools.hideNodes = function(nodes, options) { }
view.hideNodes(setting, nodes, options); zTreeTools.hideNodes = function (nodes, options) {
} view.hideNodes(setting, nodes, options);
zTreeTools.hideNode = function(node, options) { }
if (!node) { zTreeTools.hideNode = function (node, options) {
return; if (!node) {
} return;
view.hideNodes(setting, [node], options); }
} view.hideNodes(setting, [node], options);
}
var _checkNode = zTreeTools.checkNode;
if (_checkNode) { var _checkNode = zTreeTools.checkNode;
zTreeTools.checkNode = function(node, checked, checkTypeFlag, callbackFlag) { if (_checkNode) {
if (!!node && !!node.isHidden) { zTreeTools.checkNode = function (node, checked, checkTypeFlag, callbackFlag) {
return; if (!!node && !!node.isHidden) {
} return;
_checkNode.apply(zTreeTools, arguments); }
} _checkNode.apply(zTreeTools, arguments);
} }
}, }
//method of operate data },
_data = { //method of operate data
initHideForExCheck: function(setting, n) { _data = {
if (n.isHidden && setting.check && setting.check.enable) { initHideForExCheck: function (setting, n) {
if(typeof n._nocheck == "undefined") { if (n.isHidden && setting.check && setting.check.enable) {
n._nocheck = !!n.nocheck if (typeof n._nocheck == "undefined") {
n.nocheck = true; n._nocheck = !!n.nocheck
} n.nocheck = true;
n.check_Child_State = -1; }
if (view.repairParentChkClassWithSelf) { n.check_Child_State = -1;
view.repairParentChkClassWithSelf(setting, n); if (view.repairParentChkClassWithSelf) {
} view.repairParentChkClassWithSelf(setting, n);
} }
}, }
initShowForExCheck: function(setting, n) { },
if (!n.isHidden && setting.check && setting.check.enable) { initShowForExCheck: function (setting, n) {
if(typeof n._nocheck != "undefined") { if (!n.isHidden && setting.check && setting.check.enable) {
n.nocheck = n._nocheck; if (typeof n._nocheck != "undefined") {
delete n._nocheck; n.nocheck = n._nocheck;
} delete n._nocheck;
if (view.setChkClass) { }
var checkObj = $("#" + n.tId + consts.id.CHECK); if (view.setChkClass) {
view.setChkClass(setting, checkObj, n); var checkObj = $("#" + n.tId + consts.id.CHECK);
} view.setChkClass(setting, checkObj, n);
if (view.repairParentChkClassWithSelf) { }
view.repairParentChkClassWithSelf(setting, n); if (view.repairParentChkClassWithSelf) {
} view.repairParentChkClassWithSelf(setting, n);
} }
} }
}, }
//method of operate ztree dom },
_view = { //method of operate ztree dom
clearOldFirstNode: function(setting, node) { _view = {
var n = node.getNextNode(); clearOldFirstNode: function (setting, node) {
while(!!n){ var n = node.getNextNode();
if (n.isFirstNode) { while (!!n) {
n.isFirstNode = false; if (n.isFirstNode) {
view.setNodeLineIcos(setting, n); n.isFirstNode = false;
break; view.setNodeLineIcos(setting, n);
} break;
if (n.isLastNode) { }
break; if (n.isLastNode) {
} break;
n = n.getNextNode(); }
} n = n.getNextNode();
}, }
clearOldLastNode: function(setting, node) { },
var n = node.getPreNode(); clearOldLastNode: function (setting, node) {
while(!!n){ var n = node.getPreNode();
if (n.isLastNode) { while (!!n) {
n.isLastNode = false; if (n.isLastNode) {
view.setNodeLineIcos(setting, n); n.isLastNode = false;
break; view.setNodeLineIcos(setting, n);
} break;
if (n.isFirstNode) { }
break; if (n.isFirstNode) {
} break;
n = n.getPreNode(); }
} n = n.getPreNode();
}, }
makeDOMNodeMainBefore: function(html, setting, node) { },
html.push("<li ", (node.isHidden ? "style='display:none;' " : ""), "id='", node.tId, "' class='", consts.className.LEVEL, node.level,"' tabindex='0' hidefocus='true' treenode>"); makeDOMNodeMainBefore: function (html, setting, node) {
}, html.push("<li ", (node.isHidden ? "style='display:none;' " : ""), "id='", node.tId, "' class='", consts.className.LEVEL, node.level, "' tabindex='0' hidefocus='true' treenode>");
showNode: function(setting, node, options) { },
node.isHidden = false; showNode: function (setting, node, options) {
data.initShowForExCheck(setting, node); node.isHidden = false;
$("#" + node.tId).show(); data.initShowForExCheck(setting, node);
}, $("#" + node.tId).show();
showNodes: function(setting, nodes, options) { },
if (!nodes || nodes.length == 0) { showNodes: function (setting, nodes, options) {
return; if (!nodes || nodes.length == 0) {
} return;
var pList = {}, i, j; }
for (i=0, j=nodes.length; i<j; i++) { var pList = {}, i, j;
var n = nodes[i]; for (i = 0, j = nodes.length; i < j; i++) {
if (!pList[n.parentTId]) { var n = nodes[i];
var pn = n.getParentNode(); if (!pList[n.parentTId]) {
pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode(); var pn = n.getParentNode();
} pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode();
view.showNode(setting, n, options); }
} view.showNode(setting, n, options);
for (var tId in pList) { }
var children = pList[tId][setting.data.key.children]; for (var tId in pList) {
view.setFirstNodeForShow(setting, children); var children = pList[tId][setting.data.key.children];
view.setLastNodeForShow(setting, children); view.setFirstNodeForShow(setting, children);
} view.setLastNodeForShow(setting, children);
}, }
hideNode: function(setting, node, options) { },
node.isHidden = true; hideNode: function (setting, node, options) {
node.isFirstNode = false; node.isHidden = true;
node.isLastNode = false; node.isFirstNode = false;
data.initHideForExCheck(setting, node); node.isLastNode = false;
view.cancelPreSelectedNode(setting, node); data.initHideForExCheck(setting, node);
$("#" + node.tId).hide(); view.cancelPreSelectedNode(setting, node);
}, $("#" + node.tId).hide();
hideNodes: function(setting, nodes, options) { },
if (!nodes || nodes.length == 0) { hideNodes: function (setting, nodes, options) {
return; if (!nodes || nodes.length == 0) {
} return;
var pList = {}, i, j; }
for (i=0, j=nodes.length; i<j; i++) { var pList = {}, i, j;
var n = nodes[i]; for (i = 0, j = nodes.length; i < j; i++) {
if ((n.isFirstNode || n.isLastNode) && !pList[n.parentTId]) { var n = nodes[i];
var pn = n.getParentNode(); if ((n.isFirstNode || n.isLastNode) && !pList[n.parentTId]) {
pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode(); var pn = n.getParentNode();
} pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode();
view.hideNode(setting, n, options); }
} view.hideNode(setting, n, options);
for (var tId in pList) { }
var children = pList[tId][setting.data.key.children]; for (var tId in pList) {
view.setFirstNodeForHide(setting, children); var children = pList[tId][setting.data.key.children];
view.setLastNodeForHide(setting, children); view.setFirstNodeForHide(setting, children);
} view.setLastNodeForHide(setting, children);
}, }
setFirstNode: function(setting, parentNode) { },
var childKey = setting.data.key.children, childLength = parentNode[childKey].length; setFirstNode: function (setting, parentNode) {
if (childLength > 0 && !parentNode[childKey][0].isHidden) { var childKey = setting.data.key.children, childLength = parentNode[childKey].length;
parentNode[childKey][0].isFirstNode = true; if (childLength > 0 && !parentNode[childKey][0].isHidden) {
} else if (childLength > 0) { parentNode[childKey][0].isFirstNode = true;
view.setFirstNodeForHide(setting, parentNode[childKey]); } else if (childLength > 0) {
} view.setFirstNodeForHide(setting, parentNode[childKey]);
}, }
setLastNode: function(setting, parentNode) { },
var childKey = setting.data.key.children, childLength = parentNode[childKey].length; setLastNode: function (setting, parentNode) {
if (childLength > 0 && !parentNode[childKey][0].isHidden) { var childKey = setting.data.key.children, childLength = parentNode[childKey].length;
parentNode[childKey][childLength - 1].isLastNode = true; if (childLength > 0 && !parentNode[childKey][0].isHidden) {
} else if (childLength > 0) { parentNode[childKey][childLength - 1].isLastNode = true;
view.setLastNodeForHide(setting, parentNode[childKey]); } else if (childLength > 0) {
} view.setLastNodeForHide(setting, parentNode[childKey]);
}, }
setFirstNodeForHide: function(setting, nodes) { },
var n,i,j; setFirstNodeForHide: function (setting, nodes) {
for (i=0, j=nodes.length; i<j; i++) { var n, i, j;
n = nodes[i]; for (i = 0, j = nodes.length; i < j; i++) {
if (n.isFirstNode) { n = nodes[i];
break; if (n.isFirstNode) {
} break;
if (!n.isHidden && !n.isFirstNode) { }
n.isFirstNode = true; if (!n.isHidden && !n.isFirstNode) {
view.setNodeLineIcos(setting, n); n.isFirstNode = true;
break; view.setNodeLineIcos(setting, n);
} else { break;
n = null; } else {
} n = null;
} }
return n; }
}, return n;
setFirstNodeForShow: function(setting, nodes) { },
var n,i,j, first, old; setFirstNodeForShow: function (setting, nodes) {
for(i=0, j=nodes.length; i<j; i++) { var n, i, j, first, old;
n = nodes[i]; for (i = 0, j = nodes.length; i < j; i++) {
if (!first && !n.isHidden && n.isFirstNode) { n = nodes[i];
first = n; if (!first && !n.isHidden && n.isFirstNode) {
break; first = n;
} else if (!first && !n.isHidden && !n.isFirstNode) { break;
n.isFirstNode = true; } else if (!first && !n.isHidden && !n.isFirstNode) {
first = n; n.isFirstNode = true;
view.setNodeLineIcos(setting, n); first = n;
} else if (first && n.isFirstNode) { view.setNodeLineIcos(setting, n);
n.isFirstNode = false; } else if (first && n.isFirstNode) {
old = n; n.isFirstNode = false;
view.setNodeLineIcos(setting, n); old = n;
break; view.setNodeLineIcos(setting, n);
} else { break;
n = null; } else {
} n = null;
} }
return {"new":first, "old":old}; }
}, return {"new": first, "old": old};
setLastNodeForHide: function(setting, nodes) { },
var n,i; setLastNodeForHide: function (setting, nodes) {
for (i=nodes.length-1; i>=0; i--) { var n, i;
n = nodes[i]; for (i = nodes.length - 1; i >= 0; i--) {
if (n.isLastNode) { n = nodes[i];
break; if (n.isLastNode) {
} break;
if (!n.isHidden && !n.isLastNode) { }
n.isLastNode = true; if (!n.isHidden && !n.isLastNode) {
view.setNodeLineIcos(setting, n); n.isLastNode = true;
break; view.setNodeLineIcos(setting, n);
} else { break;
n = null; } else {
} n = null;
} }
return n; }
}, return n;
setLastNodeForShow: function(setting, nodes) { },
var n,i,j, last, old; setLastNodeForShow: function (setting, nodes) {
for (i=nodes.length-1; i>=0; i--) { var n, i, j, last, old;
n = nodes[i]; for (i = nodes.length - 1; i >= 0; i--) {
if (!last && !n.isHidden && n.isLastNode) { n = nodes[i];
last = n; if (!last && !n.isHidden && n.isLastNode) {
break; last = n;
} else if (!last && !n.isHidden && !n.isLastNode) { break;
n.isLastNode = true; } else if (!last && !n.isHidden && !n.isLastNode) {
last = n; n.isLastNode = true;
view.setNodeLineIcos(setting, n); last = n;
} else if (last && n.isLastNode) { view.setNodeLineIcos(setting, n);
n.isLastNode = false; } else if (last && n.isLastNode) {
old = n; n.isLastNode = false;
view.setNodeLineIcos(setting, n); old = n;
break; view.setNodeLineIcos(setting, n);
} else { break;
n = null; } else {
} n = null;
} }
return {"new":last, "old":old}; }
} return {"new": last, "old": old};
}, }
},
_z = {
view: _view, _z = {
data: _data view: _view,
}; data: _data
$.extend(true, $.fn.zTree._z, _z); };
$.extend(true, $.fn.zTree._z, _z);
var zt = $.fn.zTree,
tools = zt._z.tools, var zt = $.fn.zTree,
consts = zt.consts, tools = zt._z.tools,
view = zt._z.view, consts = zt.consts,
data = zt._z.data, view = zt._z.view,
event = zt._z.event; data = zt._z.data,
event = zt._z.event;
data.addInitNode(_initNode);
data.addBeforeA(_beforeA); data.addInitNode(_initNode);
data.addZTreeTools(_zTreeTools); data.addBeforeA(_beforeA);
data.addZTreeTools(_zTreeTools);
// Override method in core
var _dInitNode = data.initNode; // Override method in core
data.tmpHideParent = -1; var _dInitNode = data.initNode;
data.initNode = function(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag) { data.tmpHideParent = -1;
if (data.tmpHideParent !== parentNode) { data.initNode = function (setting, level, node, parentNode, isFirstNode, isLastNode, openFlag) {
data.tmpHideParent = parentNode; if (data.tmpHideParent !== parentNode) {
var tmpPNode = (parentNode) ? parentNode: data.getRoot(setting), data.tmpHideParent = parentNode;
children = tmpPNode[setting.data.key.children]; var tmpPNode = (parentNode) ? parentNode : data.getRoot(setting),
data.tmpHideFirstNode = view.setFirstNodeForHide(setting, children); children = tmpPNode[setting.data.key.children];
data.tmpHideLastNode = view.setLastNodeForHide(setting, children); data.tmpHideFirstNode = view.setFirstNodeForHide(setting, children);
view.setNodeLineIcos(setting, data.tmpHideFirstNode); data.tmpHideLastNode = view.setLastNodeForHide(setting, children);
view.setNodeLineIcos(setting, data.tmpHideLastNode); view.setNodeLineIcos(setting, data.tmpHideFirstNode);
} view.setNodeLineIcos(setting, data.tmpHideLastNode);
isFirstNode = (data.tmpHideFirstNode === node); }
isLastNode = (data.tmpHideLastNode === node); isFirstNode = (data.tmpHideFirstNode === node);
if (_dInitNode) _dInitNode.apply(data, arguments); isLastNode = (data.tmpHideLastNode === node);
if (isLastNode) { if (_dInitNode) _dInitNode.apply(data, arguments);
view.clearOldLastNode(setting, node); if (isLastNode) {
} view.clearOldLastNode(setting, node);
} }
}
var _makeChkFlag = data.makeChkFlag;
if (!!_makeChkFlag) { var _makeChkFlag = data.makeChkFlag;
data.makeChkFlag = function(setting, node) { if (!!_makeChkFlag) {
if (!!node && !!node.isHidden) { data.makeChkFlag = function (setting, node) {
return; if (!!node && !!node.isHidden) {
} return;
_makeChkFlag.apply(data, arguments); }
} _makeChkFlag.apply(data, arguments);
} }
}
var _getTreeCheckedNodes = data.getTreeCheckedNodes;
if (!!_getTreeCheckedNodes) { var _getTreeCheckedNodes = data.getTreeCheckedNodes;
data.getTreeCheckedNodes = function(setting, nodes, checked, results) { if (!!_getTreeCheckedNodes) {
if (!!nodes && nodes.length > 0) { data.getTreeCheckedNodes = function (setting, nodes, checked, results) {
var p = nodes[0].getParentNode(); if (!!nodes && nodes.length > 0) {
if (!!p && !!p.isHidden) { var p = nodes[0].getParentNode();
return []; if (!!p && !!p.isHidden) {
} return [];
} }
return _getTreeCheckedNodes.apply(data, arguments); }
} return _getTreeCheckedNodes.apply(data, arguments);
} }
}
var _getTreeChangeCheckedNodes = data.getTreeChangeCheckedNodes;
if (!!_getTreeChangeCheckedNodes) { var _getTreeChangeCheckedNodes = data.getTreeChangeCheckedNodes;
data.getTreeChangeCheckedNodes = function(setting, nodes, results) { if (!!_getTreeChangeCheckedNodes) {
if (!!nodes && nodes.length > 0) { data.getTreeChangeCheckedNodes = function (setting, nodes, results) {
var p = nodes[0].getParentNode(); if (!!nodes && nodes.length > 0) {
if (!!p && !!p.isHidden) { var p = nodes[0].getParentNode();
return []; if (!!p && !!p.isHidden) {
} return [];
} }
return _getTreeChangeCheckedNodes.apply(data, arguments); }
} return _getTreeChangeCheckedNodes.apply(data, arguments);
} }
}
var _expandCollapseSonNode = view.expandCollapseSonNode;
if (!!_expandCollapseSonNode) { var _expandCollapseSonNode = view.expandCollapseSonNode;
view.expandCollapseSonNode = function(setting, node, expandFlag, animateFlag, callback) { if (!!_expandCollapseSonNode) {
if (!!node && !!node.isHidden) { view.expandCollapseSonNode = function (setting, node, expandFlag, animateFlag, callback) {
return; if (!!node && !!node.isHidden) {
} return;
_expandCollapseSonNode.apply(view, arguments); }
} _expandCollapseSonNode.apply(view, arguments);
} }
}
var _setSonNodeCheckBox = view.setSonNodeCheckBox;
if (!!_setSonNodeCheckBox) { var _setSonNodeCheckBox = view.setSonNodeCheckBox;
view.setSonNodeCheckBox = function(setting, node, value, srcNode) { if (!!_setSonNodeCheckBox) {
if (!!node && !!node.isHidden) { view.setSonNodeCheckBox = function (setting, node, value, srcNode) {
return; if (!!node && !!node.isHidden) {
} return;
_setSonNodeCheckBox.apply(view, arguments); }
} _setSonNodeCheckBox.apply(view, arguments);
} }
}
var _repairParentChkClassWithSelf = view.repairParentChkClassWithSelf;
if (!!_repairParentChkClassWithSelf) { var _repairParentChkClassWithSelf = view.repairParentChkClassWithSelf;
view.repairParentChkClassWithSelf = function(setting, node) { if (!!_repairParentChkClassWithSelf) {
if (!!node && !!node.isHidden) { view.repairParentChkClassWithSelf = function (setting, node) {
return; if (!!node && !!node.isHidden) {
} return;
_repairParentChkClassWithSelf.apply(view, arguments); }
} _repairParentChkClassWithSelf.apply(view, arguments);
} }
}
})(jQuery); })(jQuery);

View File

@ -1,45 +1,51 @@
<?xml version="1.0" standalone="no"?> <?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!-- <!--
2013-9-30: Created. 2013-9-30: Created.
--> -->
<svg> <svg>
<metadata> <metadata>
Created by iconfont Created by iconfont
</metadata> </metadata>
<defs> <defs>
<font id="laydate-icon" horiz-adv-x="1024" > <font id="laydate-icon" horiz-adv-x="1024">
<font-face <font-face
font-family="laydate-icon" font-family="laydate-icon"
font-weight="500" font-weight="500"
font-stretch="normal" font-stretch="normal"
units-per-em="1024" units-per-em="1024"
ascent="896" ascent="896"
descent="-128" descent="-128"
/> />
<missing-glyph /> <missing-glyph/>
<glyph glyph-name="x" unicode="x" horiz-adv-x="1001" <glyph glyph-name="x" unicode="x" horiz-adv-x="1001"
d="M281 543q-27 -1 -53 -1h-83q-18 0 -36.5 -6t-32.5 -18.5t-23 -32t-9 -45.5v-76h912v41q0 16 -0.5 30t-0.5 18q0 13 -5 29t-17 29.5t-31.5 22.5t-49.5 9h-133v-97h-438v97zM955 310v-52q0 -23 0.5 -52t0.5 -58t-10.5 -47.5t-26 -30t-33 -16t-31.5 -4.5q-14 -1 -29.5 -0.5 d="M281 543q-27 -1 -53 -1h-83q-18 0 -36.5 -6t-32.5 -18.5t-23 -32t-9 -45.5v-76h912v41q0 16 -0.5 30t-0.5 18q0 13 -5 29t-17 29.5t-31.5 22.5t-49.5 9h-133v-97h-438v97zM955 310v-52q0 -23 0.5 -52t0.5 -58t-10.5 -47.5t-26 -30t-33 -16t-31.5 -4.5q-14 -1 -29.5 -0.5
t-29.5 0.5h-32l-45 128h-439l-44 -128h-29h-34q-20 0 -45 1q-25 0 -41 9.5t-25.5 23t-13.5 29.5t-4 30v167h911zM163 247q-12 0 -21 -8.5t-9 -21.5t9 -21.5t21 -8.5q13 0 22 8.5t9 21.5t-9 21.5t-22 8.5zM316 123q-8 -26 -14 -48q-5 -19 -10.5 -37t-7.5 -25t-3 -15t1 -14.5 t-29.5 0.5h-32l-45 128h-439l-44 -128h-29h-34q-20 0 -45 1q-25 0 -41 9.5t-25.5 23t-13.5 29.5t-4 30v167h911zM163 247q-12 0 -21 -8.5t-9 -21.5t9 -21.5t21 -8.5q13 0 22 8.5t9 21.5t-9 21.5t-22 8.5zM316 123q-8 -26 -14 -48q-5 -19 -10.5 -37t-7.5 -25t-3 -15t1 -14.5
t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-5 19 -11 39h-368zM336 498v228q0 11 2.5 23t10 21.5t20.5 15.5t34 6h188q31 0 51.5 -14.5t20.5 -52.5v-227h-327z" /> t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-5 19 -11 39h-368zM336 498v228q0 11 2.5 23t10 21.5t20.5 15.5t34 6h188q31 0 51.5 -14.5t20.5 -52.5v-227h-327z"/>
<glyph glyph-name="youyou" unicode="&#58882;"
<glyph glyph-name="youyou" unicode="&#58882;" d="M283.648 721.918976 340.873216 780.926976 740.352 383.997952 340.876288-12.925952 283.648 46.077952 619.52 383.997952Z" horiz-adv-x="1024" /> d="M283.648 721.918976 340.873216 780.926976 740.352 383.997952 340.876288-12.925952 283.648 46.077952 619.52 383.997952Z"
horiz-adv-x="1024"/>
<glyph glyph-name="zuozuo" unicode="&#58883;" d="M740.352 721.918976 683.126784 780.926976 283.648 383.997952 683.123712-12.925952 740.352 46.077952 404.48 383.997952Z" horiz-adv-x="1024" />
<glyph glyph-name="zuozuo" unicode="&#58883;"
d="M740.352 721.918976 683.126784 780.926976 283.648 383.997952 683.123712-12.925952 740.352 46.077952 404.48 383.997952Z"
<glyph glyph-name="xiayiye" unicode="&#58970;" d="M62.573 384.103l423.401 423.662c18.985 18.985 49.757 18.985 68.727 0 18.982-18.972 18.985-49.746 0-68.729l-355.058-355.067 356.796-356.796c18.977-18.971 18.976-49.746 0-68.727-18.982-18.976-49.751-18.976-68.727 0l-39.753 39.753 0.269 0.246-385.655 385.661zM451.365 384.103l423.407 423.662c18.985 18.985 49.757 18.985 68.727 0 18.982-18.972 18.985-49.746 0-68.729l-355.058-355.067 356.796-356.796c18.977-18.971 18.976-49.746 0-68.727-18.982-18.976-49.757-18.977-68.727 0l-39.762 39.754 0.273 0.249-385.662 385.661zM451.365 384.103z" horiz-adv-x="1024" /> horiz-adv-x="1024"/>
<glyph glyph-name="xiayiye1" unicode="&#58971;" d="M948.066926 382.958838l-411.990051-412.24426c-18.47333-18.47333-48.417689-18.47333-66.875207 0-18.47333 18.461167-18.47333 48.405526 0 66.875207L814.691135 383.088983 467.512212 730.269123c-18.466032 18.458735-18.466032 48.405526 0 66.873991 18.468465 18.464816 48.410391 18.464816 66.872774 0l38.682336-38.682336-0.261507-0.239614 375.259894-375.265975v0.003649m-378.312834 0L157.756743-29.285422c-18.47333-18.47333-48.415256-18.47333-66.872775 0-18.47333 18.461167-18.47333 48.405526 0 66.875207L436.369787 383.088983 89.19208 730.269123c-18.4636 18.458735-18.4636 48.405526 0 66.873991 18.470898 18.464816 48.415256 18.464816 66.872774 0l38.692067-38.682336-0.266372-0.239614 375.267191-375.265975-0.004865 0.003649m0 0z" horiz-adv-x="1024" /> <glyph glyph-name="xiayiye" unicode="&#58970;"
d="M62.573 384.103l423.401 423.662c18.985 18.985 49.757 18.985 68.727 0 18.982-18.972 18.985-49.746 0-68.729l-355.058-355.067 356.796-356.796c18.977-18.971 18.976-49.746 0-68.727-18.982-18.976-49.751-18.976-68.727 0l-39.753 39.753 0.269 0.246-385.655 385.661zM451.365 384.103l423.407 423.662c18.985 18.985 49.757 18.985 68.727 0 18.982-18.972 18.985-49.746 0-68.729l-355.058-355.067 356.796-356.796c18.977-18.971 18.976-49.746 0-68.727-18.982-18.976-49.757-18.977-68.727 0l-39.762 39.754 0.273 0.249-385.662 385.661zM451.365 384.103z"
horiz-adv-x="1024"/>
</font> <glyph glyph-name="xiayiye1" unicode="&#58971;"
</defs></svg> d="M948.066926 382.958838l-411.990051-412.24426c-18.47333-18.47333-48.417689-18.47333-66.875207 0-18.47333 18.461167-18.47333 48.405526 0 66.875207L814.691135 383.088983 467.512212 730.269123c-18.466032 18.458735-18.466032 48.405526 0 66.873991 18.468465 18.464816 48.410391 18.464816 66.872774 0l38.682336-38.682336-0.261507-0.239614 375.259894-375.265975v0.003649m-378.312834 0L157.756743-29.285422c-18.47333-18.47333-48.415256-18.47333-66.872775 0-18.47333 18.461167-18.47333 48.405526 0 66.875207L436.369787 383.088983 89.19208 730.269123c-18.4636 18.458735-18.4636 48.405526 0 66.873991 18.470898 18.464816 48.415256 18.464816 66.872774 0l38.692067-38.682336-0.266372-0.239614 375.267191-375.265975-0.004865 0.003649m0 0z"
horiz-adv-x="1024"/>
</font>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -1,103 +1,103 @@
(function ($) { (function ($) {
$.extend($.summernote.lang, { $.extend($.summernote.lang, {
'zh-CN': { 'zh-CN': {
font: { font: {
bold: '粗体', bold: '粗体',
italic: '斜体', italic: '斜体',
underline: '下划线', underline: '下划线',
strikethrough: '删除线', strikethrough: '删除线',
clear: '清除格式', clear: '清除格式',
height: '行高', height: '行高',
name: '字体', name: '字体',
size: '字号' size: '字号'
}, },
image: { image: {
image: '图片', image: '图片',
insert: '插入图片', insert: '插入图片',
resizeFull: '调整至 100%', resizeFull: '调整至 100%',
resizeHalf: '调整至 50%', resizeHalf: '调整至 50%',
resizeQuarter: '调整至 25%', resizeQuarter: '调整至 25%',
floatLeft: '左浮动', floatLeft: '左浮动',
floatRight: '右浮动', floatRight: '右浮动',
floatNone: '不浮动', floatNone: '不浮动',
dragImageHere: '将图片拖至此处', dragImageHere: '将图片拖至此处',
selectFromFiles: '从本地上传', selectFromFiles: '从本地上传',
url: '图片地址' url: '图片地址'
}, },
link: { link: {
link: '链接', link: '链接',
insert: '插入链接', insert: '插入链接',
unlink: '去除链接', unlink: '去除链接',
edit: '编辑链接', edit: '编辑链接',
textToDisplay: '显示文本', textToDisplay: '显示文本',
url: '链接地址', url: '链接地址',
openInNewWindow: '在新窗口打开' openInNewWindow: '在新窗口打开'
}, },
video: { video: {
video: '视频', video: '视频',
videoLink: '视频链接', videoLink: '视频链接',
insert: '插入视频', insert: '插入视频',
url: '视频地址', url: '视频地址',
providers: '(优酷, Instagram, DailyMotion, Youtube等)' providers: '(优酷, Instagram, DailyMotion, Youtube等)'
}, },
table: { table: {
table: '表格' table: '表格'
}, },
hr: { hr: {
insert: '水平线' insert: '水平线'
}, },
style: { style: {
style: '样式', style: '样式',
normal: '普通', normal: '普通',
blockquote: '引用', blockquote: '引用',
pre: '代码', pre: '代码',
h1: '标题 1', h1: '标题 1',
h2: '标题 2', h2: '标题 2',
h3: '标题 3', h3: '标题 3',
h4: '标题 4', h4: '标题 4',
h5: '标题 5', h5: '标题 5',
h6: '标题 6' h6: '标题 6'
}, },
lists: { lists: {
unordered: '无序列表', unordered: '无序列表',
ordered: '有序列表' ordered: '有序列表'
}, },
options: { options: {
help: '帮助', help: '帮助',
fullscreen: '全屏', fullscreen: '全屏',
codeview: '源代码' codeview: '源代码'
}, },
paragraph: { paragraph: {
paragraph: '段落', paragraph: '段落',
outdent: '减少缩进', outdent: '减少缩进',
indent: '增加缩进', indent: '增加缩进',
left: '左对齐', left: '左对齐',
center: '居中对齐', center: '居中对齐',
right: '右对齐', right: '右对齐',
justify: '两端对齐' justify: '两端对齐'
}, },
color: { color: {
recent: '最近使用', recent: '最近使用',
more: '更多', more: '更多',
background: '背景', background: '背景',
foreground: '前景', foreground: '前景',
transparent: '透明', transparent: '透明',
setTransparent: '透明', setTransparent: '透明',
reset: '重置', reset: '重置',
resetToDefault: '默认' resetToDefault: '默认'
}, },
shortcut: { shortcut: {
shortcuts: '快捷键', shortcuts: '快捷键',
close: '关闭', close: '关闭',
textFormatting: '文本格式', textFormatting: '文本格式',
action: '动作', action: '动作',
paragraphFormatting: '段落格式', paragraphFormatting: '段落格式',
documentStyle: '文档样式' documentStyle: '文档样式'
}, },
history: { history: {
undo: '撤销', undo: '撤销',
redo: '重做' redo: '重做'
} }
} }
}); });
})(jQuery); })(jQuery);

View File

@ -1,169 +1,170 @@
/*this is basic form validation using for validation person's basic information author:Clara Guo data:2017/07/20*/ /*this is basic form validation using for validation person's basic information author:Clara Guo data:2017/07/20*/
$(document).ready(function(){ $(document).ready(function () {
$.validator.setDefaults({ $.validator.setDefaults({
submitHandler: function(form) { submitHandler: function (form) {
form.submit(); form.submit();
} }
}); });
//手机号码验证身份证正则合并:(^\d{15}$)|(^\d{17}([0-9]|X)$) //手机号码验证身份证正则合并:(^\d{15}$)|(^\d{17}([0-9]|X)$)
jQuery.validator.addMethod("isPhone",function(value,element){ jQuery.validator.addMethod("isPhone", function (value, element) {
var length = value.length; var length = value.length;
var phone=/^1[3|4|5|6|7|8][0-9]\d{8}$/; var phone = /^1[3|4|5|6|7|8][0-9]\d{8}$/;
return this.optional(element)||(length == 11 && phone.test(value)); return this.optional(element) || (length == 11 && phone.test(value));
},"请填写正确的11位手机号"); }, "请填写正确的11位手机号");
//电话号码验证 //电话号码验证
jQuery.validator.addMethod("isTel",function(value,element){ jQuery.validator.addMethod("isTel", function (value, element) {
var tel = /^(0\d{2,3}-)?\d{7,8}$/g;//区号3,4位,号码7,8位 var tel = /^(0\d{2,3}-)?\d{7,8}$/g;//区号3,4位,号码7,8位
return this.optional(element) || (tel.test(value)); return this.optional(element) || (tel.test(value));
},"请填写正确的座机号码"); }, "请填写正确的座机号码");
//姓名校验 //姓名校验
jQuery.validator.addMethod("isName",function(value,element){ jQuery.validator.addMethod("isName", function (value, element) {
var name=/^[\u4e00-\u9fa5]{2,6}$/; var name = /^[\u4e00-\u9fa5]{2,6}$/;
return this.optional(element) || (name.test(value)); return this.optional(element) || (name.test(value));
},"姓名只能用汉字,长度2-4位"); }, "姓名只能用汉字,长度2-4位");
//校验用户名 //校验用户名
jQuery.validator.addMethod("isUserName",function(value,element){ jQuery.validator.addMethod("isUserName", function (value, element) {
var userName=/^[a-zA-Z0-9]{2,13}$/; var userName = /^[a-zA-Z0-9]{2,13}$/;
return this.optional(element) || (userName).test(value); return this.optional(element) || (userName).test(value);
},'请输入数字或者字母,不包含特殊字符'); }, '请输入数字或者字母,不包含特殊字符');
//校验身份证 //校验身份证
jQuery.validator.addMethod("isIdentity",function(value,element){ jQuery.validator.addMethod("isIdentity", function (value, element) {
var id= /^(\d{15}$|^\d{18}$|^\d{17}(\d|X))$/; var id = /^(\d{15}$|^\d{18}$|^\d{17}(\d|X))$/;
return this.optional(element) || (id.test(value)); return this.optional(element) || (id.test(value));
},"请输入正确的15或18位身份证号,末尾为大写X"); }, "请输入正确的15或18位身份证号,末尾为大写X");
//校验出生日期 //校验出生日期
jQuery.validator.addMethod("isBirth",function(value,element){ jQuery.validator.addMethod("isBirth", function (value, element) {
var birth = /^(19|20)\d{2}-(1[0-2]|0?[1-9])-(0?[1-9]|[1-2][0-9]|3[0-1])$/; var birth = /^(19|20)\d{2}-(1[0-2]|0?[1-9])-(0?[1-9]|[1-2][0-9]|3[0-1])$/;
return this.optional(element) || (birth).test(value); return this.optional(element) || (birth).test(value);
},"出生日期格式示例2000-01-01"); }, "出生日期格式示例2000-01-01");
//校验新旧密码是否相同 //校验新旧密码是否相同
jQuery.validator.addMethod("isdiff",function(){ jQuery.validator.addMethod("isdiff", function () {
var p1=$("#pwdOld").val(); var p1 = $("#pwdOld").val();
var p2=$("#pwdNew").val(); var p2 = $("#pwdNew").val();
if(p1==p2){ if (p1 == p2) {
return false; return false;
}else{ } else {
return true; return true;
} }
}); });
//校验新密码和确认密码是否相同 //校验新密码和确认密码是否相同
jQuery.validator.addMethod("issame",function(){ jQuery.validator.addMethod("issame", function () {
var p3=$("#confirm_password").val(); var p3 = $("#confirm_password").val();
var p4=$("#pwdNew").val(); var p4 = $("#pwdNew").val();
if(p3==p4){ if (p3 == p4) {
return true; return true;
}else{ } else {
return false; return false;
} }
}); });
//校验基础信息表单 //校验基础信息表单
$("#basicInfoForm").validate({ $("#basicInfoForm").validate({
errorElement:'span', errorElement: 'span',
errorClass:'help-block error-mes', errorClass: 'help-block error-mes',
rules:{ rules: {
name:{ name: {
required:true, required: true,
isName:true isName: true
}, },
sex:"required", sex: "required",
birth:"required", birth: "required",
mobile:{ mobile: {
required:true, required: true,
isPhone:true isPhone: true
}, },
email:{ email: {
required:true, required: true,
email:true email: true
} }
}, },
messages:{ messages: {
name:{ name: {
required:"请输入中文姓名", required: "请输入中文姓名",
isName:"姓名只能为汉字" isName: "姓名只能为汉字"
}, },
sex:{ sex: {
required:"请输入性别" required: "请输入性别"
}, },
birth:{ birth: {
required:"请输入出生年月" required: "请输入出生年月"
}, },
mobile:{ mobile: {
required:"请输入手机号", required: "请输入手机号",
isPhone:"请填写正确的11位手机号" isPhone: "请填写正确的11位手机号"
}, },
email:{ email: {
required:"请输入邮箱", required: "请输入邮箱",
email:"请填写正确的邮箱格式" email: "请填写正确的邮箱格式"
} }
}, },
errorPlacement:function(error,element){ errorPlacement: function (error, element) {
element.next().remove(); element.next().remove();
element.closest('.gg-formGroup').append(error); element.closest('.gg-formGroup').append(error);
}, },
highlight:function(element){ highlight: function (element) {
$(element).closest('.gg-formGroup').addClass('has-error has-feedback'); $(element).closest('.gg-formGroup').addClass('has-error has-feedback');
}, },
success:function(label){ success: function (label) {
var el = label.closest('.gg-formGroup').find("input"); var el = label.closest('.gg-formGroup').find("input");
el.next().remove(); el.next().remove();
label.closest('.gg-formGroup').removeClass('has-error').addClass("has-feedback has-success"); label.closest('.gg-formGroup').removeClass('has-error').addClass("has-feedback has-success");
label.remove(); label.remove();
}, },
submitHandler:function(form){ submitHandler: function (form) {
alert("保存成功!"); alert("保存成功!");
} }
}); });
//校验修改密码表单 //校验修改密码表单
$("#modifyPwd").validate({ $("#modifyPwd").validate({
onfocusout: function(element) { $(element).valid()}, onfocusout: function (element) {
debug:false, //表示校验通过后是否直接提交表单 $(element).valid()
onkeyup:false, //表示按键松开时候监听验证 },
rules:{ debug: false, //表示校验通过后是否直接提交表单
pwdOld:{ onkeyup: false, //表示按键松开时候监听验证
required:true, rules: {
minlength:6 pwdOld: {
}, required: true,
pwdNew:{ minlength: 6
required:true, },
minlength:6, pwdNew: {
isdiff:true, required: true,
//issame:true, minlength: 6,
}, isdiff: true,
confirm_password:{ //issame:true,
required:true, },
minlength:6, confirm_password: {
issame:true, required: true,
} minlength: 6,
issame: true,
}, }
messages:{
pwdOld : { },
required:'必填', messages: {
minlength:$.validator.format('密码长度要大于6') pwdOld: {
}, required: '必填',
pwdNew:{ minlength: $.validator.format('密码长度要大于6')
required:'必填', },
minlength:$.validator.format('密码长度要大于6'), pwdNew: {
isdiff:'原密码与新密码不能重复', required: '必填',
minlength: $.validator.format('密码长度要大于6'),
}, isdiff: '原密码与新密码不能重复',
confirm_password:{
required:'必填', },
minlength:$.validator.format('密码长度要大于6'), confirm_password: {
issame:'新密码要与确认新密码一致', required: '必填',
} minlength: $.validator.format('密码长度要大于6'),
issame: '新密码要与确认新密码一致',
}, }
errorElement:"mes",
errorClass:"gg-star", },
errorPlacement: function(error, element) errorElement: "mes",
{ errorClass: "gg-star",
element.closest('.gg-formGroup').append(error); errorPlacement: function (error, element) {
element.closest('.gg-formGroup').append(error);
}
}); }
});
}); });

View File

@ -1,86 +1,106 @@
html { html {
height:100% height: 100%
} }
body.signin {
height:auto; body.signin {
background:url(../img/login-background.jpg) no-repeat center fixed; height: auto;
-webkit-background-size:cover; background: url(../img/login-background.jpg) no-repeat center fixed;
-moz-background-size:cover; -webkit-background-size: cover;
-o-background-size:cover; -moz-background-size: cover;
background-size:cover; -o-background-size: cover;
color:rgba(255,255,255,.95) background-size: cover;
} color: rgba(255, 255, 255, .95)
.signinpanel { }
width:750px;
margin:10% auto 0 .signinpanel {
} width: 750px;
.signinpanel .logopanel { margin: 10% auto 0
float:none; }
width:auto;
padding:0; .signinpanel .logopanel {
background:0 0 float: none;
} width: auto;
.signinpanel .signin-info ul { padding: 0;
list-style:none; background: 0 0
padding:0; }
margin:20px 0
} .signinpanel .signin-info ul {
.signinpanel .form-control { list-style: none;
display:block; padding: 0;
margin-top:15px margin: 20px 0
} }
.signinpanel .uname {
background:#fff url(../img/user.png) no-repeat 95% center; .signinpanel .form-control {
color:#333 display: block;
} margin-top: 15px
.signinpanel .pword { }
background:#fff url(../img/locked.png) no-repeat 95% center;
color:#333 .signinpanel .uname {
} background: #fff url(../img/user.png) no-repeat 95% center;
.signinpanel .code { color: #333
background: #fff no-repeat 95% center;color:#333; margin:0 0 15px 0; }
}
.signinpanel .btn { .signinpanel .pword {
margin-top:15px background: #fff url(../img/locked.png) no-repeat 95% center;
} color: #333
.signinpanel form { }
background:rgba(255,255,255,.2);
border:1px solid rgba(255,255,255,.3); .signinpanel .code {
-moz-box-shadow:0 3px 0 rgba(12,12,12,.03); background: #fff no-repeat 95% center;
-webkit-box-shadow:0 3px 0 rgba(12,12,12,.03); color: #333;
box-shadow:0 3px 0 rgba(12,12,12,.03); margin: 0 0 15px 0;
-moz-border-radius:3px; }
-webkit-border-radius:3px;
border-radius:3px; .signinpanel .btn {
padding:30px margin-top: 15px
} }
.signup-footer {
border-top:solid 1px rgba(255,255,255,.3); .signinpanel form {
margin:20px 0; background: rgba(255, 255, 255, .2);
padding-top:15px border: 1px solid rgba(255, 255, 255, .3);
} -moz-box-shadow: 0 3px 0 rgba(12, 12, 12, .03);
@media screen and (max-width:768px) { -webkit-box-shadow: 0 3px 0 rgba(12, 12, 12, .03);
.signinpanel,.signuppanel { box-shadow: 0 3px 0 rgba(12, 12, 12, .03);
margin:0 auto; -moz-border-radius: 3px;
width:420px!important; -webkit-border-radius: 3px;
padding:20px border-radius: 3px;
} padding: 30px
.signinpanel form { }
margin-top:20px
} .signup-footer {
.signup-footer,.signuppanel .form-control { border-top: solid 1px rgba(255, 255, 255, .3);
margin-bottom:10px margin: 20px 0;
} padding-top: 15px
.signup-footer .pull-left,.signup-footer .pull-right { }
float:none!important;
text-align:center @media screen and (max-width: 768px) {
} .signinpanel, .signuppanel {
.signinpanel .signin-info ul { margin: 0 auto;
display:none width: 420px !important;
} padding: 20px
}@media screen and (max-width:320px) { }
.signinpanel,.signuppanel {
margin:0 20px; .signinpanel form {
width:auto margin-top: 20px
} }
}
.signup-footer, .signuppanel .form-control {
margin-bottom: 10px
}
.signup-footer .pull-left, .signup-footer .pull-right {
float: none !important;
text-align: center
}
.signinpanel .signin-info ul {
display: none
}
}
@media screen and (max-width: 320px) {
.signinpanel, .signuppanel {
margin: 0 20px;
width: auto
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 437 KiB

After

Width:  |  Height:  |  Size: 451 KiB

View File

@ -1,288 +1,543 @@
<?xml version="1.0" standalone="no"?> <?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg"> <svg xmlns="http://www.w3.org/2000/svg">
<metadata></metadata> <metadata></metadata>
<defs> <defs>
<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > <font id="glyphicons_halflingsregular" horiz-adv-x="1200">
<font-face units-per-em="1200" ascent="960" descent="-240" /> <font-face units-per-em="1200" ascent="960" descent="-240"/>
<missing-glyph horiz-adv-x="500" /> <missing-glyph horiz-adv-x="500"/>
<glyph horiz-adv-x="0" /> <glyph horiz-adv-x="0"/>
<glyph horiz-adv-x="400" /> <glyph horiz-adv-x="400"/>
<glyph unicode=" " /> <glyph unicode=" "/>
<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" /> <glyph unicode="*"
<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" /> d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z"/>
<glyph unicode="&#xa0;" /> <glyph unicode="+"
<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" /> d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#x2000;" horiz-adv-x="650" /> <glyph unicode="&#xa0;"/>
<glyph unicode="&#x2001;" horiz-adv-x="1300" /> <glyph unicode="&#xa5;"
<glyph unicode="&#x2002;" horiz-adv-x="650" /> d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z"/>
<glyph unicode="&#x2003;" horiz-adv-x="1300" /> <glyph unicode="&#x2000;" horiz-adv-x="650"/>
<glyph unicode="&#x2004;" horiz-adv-x="433" /> <glyph unicode="&#x2001;" horiz-adv-x="1300"/>
<glyph unicode="&#x2005;" horiz-adv-x="325" /> <glyph unicode="&#x2002;" horiz-adv-x="650"/>
<glyph unicode="&#x2006;" horiz-adv-x="216" /> <glyph unicode="&#x2003;" horiz-adv-x="1300"/>
<glyph unicode="&#x2007;" horiz-adv-x="216" /> <glyph unicode="&#x2004;" horiz-adv-x="433"/>
<glyph unicode="&#x2008;" horiz-adv-x="162" /> <glyph unicode="&#x2005;" horiz-adv-x="325"/>
<glyph unicode="&#x2009;" horiz-adv-x="260" /> <glyph unicode="&#x2006;" horiz-adv-x="216"/>
<glyph unicode="&#x200a;" horiz-adv-x="72" /> <glyph unicode="&#x2007;" horiz-adv-x="216"/>
<glyph unicode="&#x202f;" horiz-adv-x="260" /> <glyph unicode="&#x2008;" horiz-adv-x="162"/>
<glyph unicode="&#x205f;" horiz-adv-x="325" /> <glyph unicode="&#x2009;" horiz-adv-x="260"/>
<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" /> <glyph unicode="&#x200a;" horiz-adv-x="72"/>
<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" /> <glyph unicode="&#x202f;" horiz-adv-x="260"/>
<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> <glyph unicode="&#x205f;" horiz-adv-x="325"/>
<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" /> <glyph unicode="&#x20ac;"
<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" /> d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z"/>
<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" /> <glyph unicode="&#x20bd;"
<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " /> d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z"/>
<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" /> <glyph unicode="&#x2212;"
<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" /> d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" /> <glyph unicode="&#x231b;"
<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" /> d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z"/>
<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" /> <glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z"/>
<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" /> <glyph unicode="&#x2601;"
<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" /> d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z"/>
<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" /> <glyph unicode="&#x26fa;"
<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" /> d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z "/>
<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" /> <glyph unicode="&#x2709;"
<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z"/>
<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" /> <glyph unicode="&#x270f;"
<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z"/>
<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" /> <glyph unicode="&#xe001;"
<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" /> d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z"/>
<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" /> <glyph unicode="&#xe002;"
<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z"/>
<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" /> <glyph unicode="&#xe003;"
<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" /> d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z"/>
<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" /> <glyph unicode="&#xe005;"
<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" /> d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z"/>
<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" /> <glyph unicode="&#xe006;"
<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" /> d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z"/>
<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" /> <glyph unicode="&#xe007;"
<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" /> d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z"/>
<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" /> <glyph unicode="&#xe008;"
<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " /> d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z"/>
<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" /> <glyph unicode="&#xe009;"
<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" /> d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z"/>
<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> <glyph unicode="&#xe010;"
<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" /> d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" /> <glyph unicode="&#xe011;"
<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" /> d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z"/>
<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" /> <glyph unicode="&#xe012;"
<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" /> d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" /> <glyph unicode="&#xe013;"
<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" /> d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z"/>
<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" /> <glyph unicode="&#xe014;"
<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" /> d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z"/>
<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" /> <glyph unicode="&#xe015;"
<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" /> d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z"/>
<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> <glyph unicode="&#xe016;"
<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z"/>
<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" /> <glyph unicode="&#xe017;"
<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" /> d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z"/>
<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" /> <glyph unicode="&#xe018;"
<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" /> d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z"/>
<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" /> <glyph unicode="&#xe019;"
<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" /> d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z"/>
<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" /> <glyph unicode="&#xe020;"
<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" /> d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z"/>
<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" /> <glyph unicode="&#xe021;"
<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z"/>
<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> <glyph unicode="&#xe022;"
<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" /> d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z"/>
<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> <glyph unicode="&#xe023;"
<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z"/>
<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> <glyph unicode="&#xe024;"
<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z"/>
<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" /> <glyph unicode="&#xe025;"
<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" /> d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z"/>
<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" /> <glyph unicode="&#xe026;"
<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" /> d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z "/>
<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" /> <glyph unicode="&#xe027;"
<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" /> d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z"/>
<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" /> <glyph unicode="&#xe028;"
<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" /> d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z"/>
<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" /> <glyph unicode="&#xe029;"
<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z"/>
<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> <glyph unicode="&#xe030;"
<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" /> d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z"/>
<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" /> <glyph unicode="&#xe031;"
<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" /> d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z"/>
<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" /> <glyph unicode="&#xe032;"
<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" /> d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z"/>
<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" /> <glyph unicode="&#xe033;"
<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" /> d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z"/>
<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> <glyph unicode="&#xe034;"
<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" /> d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z"/>
<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" /> <glyph unicode="&#xe035;"
<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" /> d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z"/>
<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" /> <glyph unicode="&#xe036;"
<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" /> d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z"/>
<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" /> <glyph unicode="&#xe037;"
<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z"/>
<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" /> <glyph unicode="&#xe038;"
<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" /> d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z"/>
<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" /> <glyph unicode="&#xe039;"
<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" /> d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z"/>
<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" /> <glyph unicode="&#xe040;"
<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" /> d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z"/>
<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" /> <glyph unicode="&#xe041;"
<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" /> d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z"/>
<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" /> <glyph unicode="&#xe042;"
<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" /> d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z"/>
<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" /> <glyph unicode="&#xe043;"
<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" /> d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z"/>
<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> <glyph unicode="&#xe044;"
<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" /> d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" /> <glyph unicode="&#xe045;"
<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" /> d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z"/>
<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> <glyph unicode="&#xe046;"
<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z"/>
<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" /> <glyph unicode="&#xe047;"
<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" /> d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z"/>
<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" /> <glyph unicode="&#xe048;"
<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" /> d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z"/>
<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" /> <glyph unicode="&#xe049;"
<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" /> d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z"/>
<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" /> <glyph unicode="&#xe050;"
<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" /> d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z"/>
<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> <glyph unicode="&#xe051;"
<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" /> d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z"/>
<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" /> <glyph unicode="&#xe052;"
<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" /> d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> <glyph unicode="&#xe053;"
<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" /> d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" /> <glyph unicode="&#xe054;"
<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" /> d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z"/>
<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" /> <glyph unicode="&#xe055;"
<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" /> d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" /> <glyph unicode="&#xe056;"
<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" /> d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" /> <glyph unicode="&#xe057;"
<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" /> d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> <glyph unicode="&#xe058;"
<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" /> d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" /> <glyph unicode="&#xe059;"
<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" /> d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z"/>
<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" /> <glyph unicode="&#xe060;"
<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" /> d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z"/>
<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" /> <glyph unicode="&#xe062;"
<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" /> d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z"/>
<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " /> <glyph unicode="&#xe063;"
<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" /> d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z"/>
<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" /> <glyph unicode="&#xe064;"
<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" /> d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z"/>
<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" /> <glyph unicode="&#xe065;"
<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" /> d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z"/>
<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" /> <glyph unicode="&#xe066;"
<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" /> d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z"/>
<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" /> <glyph unicode="&#xe067;"
<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" /> d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z"/>
<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" /> <glyph unicode="&#xe068;"
<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" /> d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z"/>
<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> <glyph unicode="&#xe069;"
<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " /> d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " /> <glyph unicode="&#xe070;"
<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" /> d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" /> <glyph unicode="&#xe071;"
<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" /> d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z"/>
<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" /> <glyph unicode="&#xe072;"
<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" /> d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z"/>
<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> <glyph unicode="&#xe073;"
<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" /> d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" /> <glyph unicode="&#xe074;"
<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z"/>
<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" /> <glyph unicode="&#xe075;"
<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z"/>
<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" /> <glyph unicode="&#xe076;"
<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" /> d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> <glyph unicode="&#xe077;"
<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" /> <glyph unicode="&#xe078;"
<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> <glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z"/>
<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" /> <glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z"/>
<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" /> <glyph unicode="&#xe081;"
<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" /> d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z"/>
<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" /> <glyph unicode="&#xe082;"
<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" /> d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z"/>
<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" /> <glyph unicode="&#xe083;"
<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" /> d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z"/>
<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" /> <glyph unicode="&#xe084;"
<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" /> d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z"/>
<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" /> <glyph unicode="&#xe085;"
<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" /> d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z"/>
<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" /> <glyph unicode="&#xe086;"
<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" /> d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z"/>
<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> <glyph unicode="&#xe087;"
<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " /> d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z"/>
<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> <glyph unicode="&#xe088;"
<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z"/>
<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" /> <glyph unicode="&#xe089;"
<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" /> d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z"/>
<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" /> <glyph unicode="&#xe090;"
<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" /> d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z"/>
<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" /> <glyph unicode="&#xe091;"
<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" /> d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z"/>
<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" /> <glyph unicode="&#xe092;"
<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" /> d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z"/>
<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" /> <glyph unicode="&#xe093;"
<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" /> d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z"/>
<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" /> <glyph unicode="&#xe094;"
<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" /> d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" /> <glyph unicode="&#xe095;"
<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" /> d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z"/>
<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" /> <glyph unicode="&#xe096;"
<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" /> d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z"/>
<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" /> <glyph unicode="&#xe097;"
<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" /> d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z"/>
<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" /> <glyph unicode="&#xe101;"
<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z"/>
<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> <glyph unicode="&#xe102;"
<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z"/>
<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> <glyph unicode="&#xe103;"
<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z"/>
<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> <glyph unicode="&#xe104;"
<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" /> d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z"/>
<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" /> <glyph unicode="&#xe105;"
<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" /> d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z"/>
<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" /> <glyph unicode="&#xe106;"
<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" /> d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z"/>
<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " /> <glyph unicode="&#xe107;"
<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" /> d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z"/>
<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" /> <glyph unicode="&#xe108;"
<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" /> d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z"/>
<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" /> <glyph unicode="&#xe109;"
<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z"/>
<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> <glyph unicode="&#xe110;"
<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" /> d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z"/>
<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> <glyph unicode="&#xe111;"
<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z"/>
<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> <glyph unicode="&#xe112;"
<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" /> d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z"/>
<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" /> <glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z"/>
<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" /> <glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z"/>
<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" /> <glyph unicode="&#xe115;"
<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" /> d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z"/>
<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" /> <glyph unicode="&#xe116;"
<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" /> d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z"/>
<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" /> <glyph unicode="&#xe117;"
<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" /> d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z"/>
<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" /> <glyph unicode="&#xe118;"
<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z"/>
<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" /> <glyph unicode="&#xe119;"
<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z"/>
<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" /> <glyph unicode="&#xe120;"
<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" /> d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z"/>
<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" /> <glyph unicode="&#xe121;"
<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" /> d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z"/>
<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" /> <glyph unicode="&#xe122;"
<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" /> d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z"/>
<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" /> <glyph unicode="&#xe123;"
<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" /> d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z"/>
<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" /> <glyph unicode="&#xe124;"
<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" /> d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z"/>
<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" /> <glyph unicode="&#xe125;"
<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" /> d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" /> <glyph unicode="&#xe126;"
<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" /> d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z"/>
</font> <glyph unicode="&#xe127;"
</defs></svg> d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe128;"
d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe129;"
d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe130;"
d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z"/>
<glyph unicode="&#xe131;"
d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z"/>
<glyph unicode="&#xe132;"
d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z"/>
<glyph unicode="&#xe133;"
d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z"/>
<glyph unicode="&#xe134;"
d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z"/>
<glyph unicode="&#xe135;"
d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z"/>
<glyph unicode="&#xe136;"
d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z"/>
<glyph unicode="&#xe137;" horiz-adv-x="1220"
d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z "/>
<glyph unicode="&#xe138;"
d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z"/>
<glyph unicode="&#xe139;"
d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z"/>
<glyph unicode="&#xe140;"
d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z"/>
<glyph unicode="&#xe141;"
d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z"/>
<glyph unicode="&#xe142;"
d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z"/>
<glyph unicode="&#xe143;"
d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z"/>
<glyph unicode="&#xe144;"
d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z"/>
<glyph unicode="&#xe145;"
d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z"/>
<glyph unicode="&#xe146;"
d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z"/>
<glyph unicode="&#xe148;"
d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z"/>
<glyph unicode="&#xe149;"
d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z"/>
<glyph unicode="&#xe150;"
d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z"/>
<glyph unicode="&#xe151;"
d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z "/>
<glyph unicode="&#xe152;"
d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z "/>
<glyph unicode="&#xe153;"
d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z"/>
<glyph unicode="&#xe154;"
d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z"/>
<glyph unicode="&#xe155;"
d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z"/>
<glyph unicode="&#xe156;"
d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z"/>
<glyph unicode="&#xe157;"
d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z"/>
<glyph unicode="&#xe158;"
d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z"/>
<glyph unicode="&#xe159;"
d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z"/>
<glyph unicode="&#xe160;"
d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z"/>
<glyph unicode="&#xe161;"
d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z"/>
<glyph unicode="&#xe162;"
d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z"/>
<glyph unicode="&#xe163;"
d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z"/>
<glyph unicode="&#xe164;"
d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z"/>
<glyph unicode="&#xe165;"
d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z"/>
<glyph unicode="&#xe166;"
d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z"/>
<glyph unicode="&#xe167;"
d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z"/>
<glyph unicode="&#xe168;"
d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z"/>
<glyph unicode="&#xe169;"
d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z"/>
<glyph unicode="&#xe170;"
d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z"/>
<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z"/>
<glyph unicode="&#xe172;"
d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z"/>
<glyph unicode="&#xe173;"
d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z"/>
<glyph unicode="&#xe174;"
d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z"/>
<glyph unicode="&#xe175;"
d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe176;"
d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z"/>
<glyph unicode="&#xe177;"
d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z"/>
<glyph unicode="&#xe178;"
d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z"/>
<glyph unicode="&#xe179;"
d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z"/>
<glyph unicode="&#xe180;"
d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z"/>
<glyph unicode="&#xe181;"
d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z"/>
<glyph unicode="&#xe182;"
d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z"/>
<glyph unicode="&#xe183;"
d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z"/>
<glyph unicode="&#xe184;"
d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe185;"
d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z "/>
<glyph unicode="&#xe186;"
d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z"/>
<glyph unicode="&#xe187;"
d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z"/>
<glyph unicode="&#xe188;"
d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z"/>
<glyph unicode="&#xe189;"
d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z"/>
<glyph unicode="&#xe190;"
d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z"/>
<glyph unicode="&#xe191;"
d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z"/>
<glyph unicode="&#xe192;"
d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z"/>
<glyph unicode="&#xe193;"
d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z"/>
<glyph unicode="&#xe194;"
d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z"/>
<glyph unicode="&#xe195;"
d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z"/>
<glyph unicode="&#xe197;"
d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z"/>
<glyph unicode="&#xe198;"
d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z"/>
<glyph unicode="&#xe199;"
d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z"/>
<glyph unicode="&#xe200;"
d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z"/>
<glyph unicode="&#xe201;"
d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z"/>
<glyph unicode="&#xe202;"
d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z"/>
<glyph unicode="&#xe203;"
d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z"/>
<glyph unicode="&#xe204;"
d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z"/>
<glyph unicode="&#xe205;"
d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z"/>
<glyph unicode="&#xe206;"
d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z"/>
<glyph unicode="&#xe209;"
d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z"/>
<glyph unicode="&#xe210;"
d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z"/>
<glyph unicode="&#xe211;"
d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe212;"
d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe213;"
d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe214;"
d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe215;"
d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe216;"
d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z"/>
<glyph unicode="&#xe218;"
d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z"/>
<glyph unicode="&#xe219;"
d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z"/>
<glyph unicode="&#xe221;"
d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe223;"
d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z"/>
<glyph unicode="&#xe224;"
d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z "/>
<glyph unicode="&#xe225;"
d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z"/>
<glyph unicode="&#xe226;"
d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z"/>
<glyph unicode="&#xe227;"
d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z"/>
<glyph unicode="&#xe230;"
d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z"/>
<glyph unicode="&#xe231;"
d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z"/>
<glyph unicode="&#xe232;"
d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z"/>
<glyph unicode="&#xe233;"
d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z"/>
<glyph unicode="&#xe234;"
d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z"/>
<glyph unicode="&#xe235;"
d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z"/>
<glyph unicode="&#xe236;"
d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z"/>
<glyph unicode="&#xe237;"
d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z"/>
<glyph unicode="&#xe238;"
d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe239;"
d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z"/>
<glyph unicode="&#xe240;"
d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z"/>
<glyph unicode="&#xe241;"
d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z"/>
<glyph unicode="&#xe242;"
d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z"/>
<glyph unicode="&#xe243;"
d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z"/>
<glyph unicode="&#xe244;"
d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z"/>
<glyph unicode="&#xe245;"
d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z"/>
<glyph unicode="&#xe246;"
d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z"/>
<glyph unicode="&#xe247;"
d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe248;"
d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z"/>
<glyph unicode="&#xe249;"
d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z"/>
<glyph unicode="&#xe250;"
d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z"/>
<glyph unicode="&#xe251;"
d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z"/>
<glyph unicode="&#xe252;"
d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z"/>
<glyph unicode="&#xe253;"
d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z"/>
<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z"/>
<glyph unicode="&#xe255;"
d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z"/>
<glyph unicode="&#xe256;"
d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z"/>
<glyph unicode="&#xe257;"
d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z"/>
<glyph unicode="&#xe258;"
d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z"/>
<glyph unicode="&#xe259;"
d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z"/>
<glyph unicode="&#xe260;"
d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z"/>
<glyph unicode="&#xf8ff;"
d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z"/>
<glyph unicode="&#x1f511;"
d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z"/>
<glyph unicode="&#x1f6aa;"
d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z"/>
</font>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 114 KiB

View File

@ -1,120 +1,120 @@
/* /*
* metismenu - v1.1.3 * metismenu - v1.1.3
* Easy menu jQuery plugin for Twitter Bootstrap 3 * Easy menu jQuery plugin for Twitter Bootstrap 3
* https://github.com/onokumus/metisMenu * https://github.com/onokumus/metisMenu
* *
* Made by Osman Nuri Okumus * Made by Osman Nuri Okumus
* Under MIT License * Under MIT License
*/ */
;(function($, window, document, undefined) { ;(function ($, window, document, undefined) {
var pluginName = "metisMenu", var pluginName = "metisMenu",
defaults = { defaults = {
toggle: true, toggle: true,
doubleTapToGo: false doubleTapToGo: false
}; };
function Plugin(element, options) { function Plugin(element, options) {
this.element = $(element); this.element = $(element);
this.settings = $.extend({}, defaults, options); this.settings = $.extend({}, defaults, options);
this._defaults = defaults; this._defaults = defaults;
this._name = pluginName; this._name = pluginName;
this.init(); this.init();
} }
Plugin.prototype = { Plugin.prototype = {
init: function() { init: function () {
var $this = this.element, var $this = this.element,
$toggle = this.settings.toggle, $toggle = this.settings.toggle,
obj = this; obj = this;
if (this.isIE() <= 9) { if (this.isIE() <= 9) {
$this.find("li.active").has("ul").children("ul").collapse("show"); $this.find("li.active").has("ul").children("ul").collapse("show");
$this.find("li").not(".active").has("ul").children("ul").collapse("hide"); $this.find("li").not(".active").has("ul").children("ul").collapse("hide");
} else { } else {
$this.find("li.active").has("ul").children("ul").addClass("collapse in"); $this.find("li.active").has("ul").children("ul").addClass("collapse in");
$this.find("li").not(".active").has("ul").children("ul").addClass("collapse"); $this.find("li").not(".active").has("ul").children("ul").addClass("collapse");
} }
//add the "doubleTapToGo" class to active items if needed //add the "doubleTapToGo" class to active items if needed
if (obj.settings.doubleTapToGo) { if (obj.settings.doubleTapToGo) {
$this.find("li.active").has("ul").children("a").addClass("doubleTapToGo"); $this.find("li.active").has("ul").children("a").addClass("doubleTapToGo");
} }
$this.find("li").has("ul").children("a").on("click" + "." + pluginName, function(e) { $this.find("li").has("ul").children("a").on("click" + "." + pluginName, function (e) {
e.preventDefault(); e.preventDefault();
//Do we need to enable the double tap //Do we need to enable the double tap
if (obj.settings.doubleTapToGo) { if (obj.settings.doubleTapToGo) {
//if we hit a second time on the link and the href is valid, navigate to that url //if we hit a second time on the link and the href is valid, navigate to that url
if (obj.doubleTapToGo($(this)) && $(this).attr("href") !== "#" && $(this).attr("href") !== "") { if (obj.doubleTapToGo($(this)) && $(this).attr("href") !== "#" && $(this).attr("href") !== "") {
e.stopPropagation(); e.stopPropagation();
document.location = $(this).attr("href"); document.location = $(this).attr("href");
return; return;
} }
} }
$(this).parent("li").toggleClass("active").children("ul").collapse("toggle"); $(this).parent("li").toggleClass("active").children("ul").collapse("toggle");
if ($toggle) { if ($toggle) {
$(this).parent("li").siblings().removeClass("active").children("ul.in").collapse("hide"); $(this).parent("li").siblings().removeClass("active").children("ul.in").collapse("hide");
} }
}); });
}, },
isIE: function() { //https://gist.github.com/padolsey/527683 isIE: function () { //https://gist.github.com/padolsey/527683
var undef, var undef,
v = 3, v = 3,
div = document.createElement("div"), div = document.createElement("div"),
all = div.getElementsByTagName("i"); all = div.getElementsByTagName("i");
while ( while (
div.innerHTML = "<!--[if gt IE " + (++v) + "]><i></i><![endif]-->", div.innerHTML = "<!--[if gt IE " + (++v) + "]><i></i><![endif]-->",
all[0] all[0]
) { ) {
return v > 4 ? v : undef; return v > 4 ? v : undef;
} }
}, },
//Enable the link on the second click. //Enable the link on the second click.
doubleTapToGo: function(elem) { doubleTapToGo: function (elem) {
var $this = this.element; var $this = this.element;
//if the class "doubleTapToGo" exists, remove it and return //if the class "doubleTapToGo" exists, remove it and return
if (elem.hasClass("doubleTapToGo")) { if (elem.hasClass("doubleTapToGo")) {
elem.removeClass("doubleTapToGo"); elem.removeClass("doubleTapToGo");
return true; return true;
} }
//does not exists, add a new class and return false //does not exists, add a new class and return false
if (elem.parent().children("ul").length) { if (elem.parent().children("ul").length) {
//first remove all other class //first remove all other class
$this.find(".doubleTapToGo").removeClass("doubleTapToGo"); $this.find(".doubleTapToGo").removeClass("doubleTapToGo");
//add the class on the current element //add the class on the current element
elem.addClass("doubleTapToGo"); elem.addClass("doubleTapToGo");
return false; return false;
} }
}, },
remove: function() { remove: function () {
this.element.off("." + pluginName); this.element.off("." + pluginName);
this.element.removeData(pluginName); this.element.removeData(pluginName);
} }
}; };
$.fn[pluginName] = function(options) { $.fn[pluginName] = function (options) {
this.each(function () { this.each(function () {
var el = $(this); var el = $(this);
if (el.data(pluginName)) { if (el.data(pluginName)) {
el.data(pluginName).remove(); el.data(pluginName).remove();
} }
el.data(pluginName, new Plugin(this, options)); el.data(pluginName, new Plugin(this, options));
}); });
return this; return this;
}; };
})(jQuery, window, document); })(jQuery, window, document);

View File

@ -1,448 +1,448 @@
/** /**
* 通用css样式布局处理 * 通用css样式布局处理
* Copyright (c) 2018 ruoyi * Copyright (c) 2018 ruoyi
*/ */
/** 用户管理 样式布局 */ /** 用户管理 样式布局 */
.box { .box {
position: relative; position: relative;
border-radius: 3px; border-radius: 3px;
background: #ffffff; background: #ffffff;
border-top: 3px solid #d2d6de; border-top: 3px solid #d2d6de;
margin-bottom: 20px; margin-bottom: 20px;
width: 100%; width: 100%;
box-shadow: 0 1px 1px rgba(0,0,0,0.1) box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1)
} }
.box-header:before,.box-body:before,.box-footer:before,.box-header:after,.box-body:after,.box-footer:after { .box-header:before, .box-body:before, .box-footer:before, .box-header:after, .box-body:after, .box-footer:after {
content: " "; content: " ";
display: table display: table
} }
.box-header:after,.box-body:after,.box-footer:after { .box-header:after, .box-body:after, .box-footer:after {
clear: both clear: both
} }
.btn-box-tool { .btn-box-tool {
padding: 5px; padding: 5px;
font-size: 12px; font-size: 12px;
background: transparent; background: transparent;
color: #97a0b3; color: #97a0b3;
} }
.open .btn-box-tool, .open .btn-box-tool,
.btn-box-tool:hover { .btn-box-tool:hover {
color: #606c84; color: #606c84;
} }
.box-main { .box-main {
margin: 0; margin: 0;
border: 0; border: 0;
padding-top: 2px; padding-top: 2px;
border-radius: 0; border-radius: 0;
box-shadow: none box-shadow: none
} }
.box-main>.box-header { .box-main > .box-header {
border-bottom: 1px solid #eee; border-bottom: 1px solid #eee;
padding: 12px 10px 2px 15px padding: 12px 10px 2px 15px
} }
.box-header .box-title { .box-header .box-title {
display: inline-block; display: inline-block;
font-size: 18px; font-size: 18px;
margin: 0; margin: 0;
line-height: 1; line-height: 1;
} }
.box-main>.box-header .box-title { .box-main > .box-header .box-title {
font-size: 16px; font-size: 16px;
margin-bottom: 13px; margin-bottom: 13px;
float: left float: left
} }
.box-main>.box-header .box-title .fa { .box-main > .box-header .box-title .fa {
font-size: 14px; font-size: 14px;
padding-right: 3px; padding-right: 3px;
margin-top: -2px margin-top: -2px
} }
.box-main>.box-header .box-tools { .box-main > .box-header .box-tools {
position: relative; position: relative;
top: -5px; top: -5px;
right: 0 right: 0
} }
.box-main>.box-header .box-tools .btn { .box-main > .box-header .box-tools .btn {
padding: 3px 10px 5px 10px; padding: 3px 10px 5px 10px;
font-size: 14px; font-size: 14px;
margin-bottom: 2px margin-bottom: 2px
} }
.box-main>.box-header .box-tools .btn-box-tool { .box-main > .box-header .box-tools .btn-box-tool {
padding: 4px 2px padding: 4px 2px
} }
.box-main form>.box-footer,.nav-main form>.box-footer { .box-main form > .box-footer, .nav-main form > .box-footer {
background: #fafafa background: #fafafa
} }
.box-main form>.box-footer .row,.nav-main form>.box-footer .row { .box-main form > .box-footer .row, .nav-main form > .box-footer .row {
margin: 5px 0 5px -25px margin: 5px 0 5px -25px
} }
/** select2 样式修改 */ /** select2 样式修改 */
.select2-container--default .select2-selection--multiple .select2-selection__choice { .select2-container--default .select2-selection--multiple .select2-selection__choice {
background-color: #1AB394; background-color: #1AB394;
border-color: #1AB394; border-color: #1AB394;
padding: 1px 10px; padding: 1px 10px;
color: #fff color: #fff
} }
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
margin-right: 5px; margin-right: 5px;
color: rgba(255,255,255,0.7) color: rgba(255, 255, 255, 0.7)
} }
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
color: #fff color: #fff
} }
.select2-container .select2-selection--single .select2-selection__rendered { .select2-container .select2-selection--single .select2-selection__rendered {
padding-right: 10px padding-right: 10px
} }
/** 表单验证 样式布局 */ /** 表单验证 样式布局 */
label.error { label.error {
position: absolute; position: absolute;
right: 18px; right: 18px;
top: 7px; top: 7px;
color: #ef392b; color: #ef392b;
font-size: 12px font-size: 12px
} }
.Validform_error,input.error,select.error { .Validform_error, input.error, select.error {
background-color: #fbe2e2; background-color: #fbe2e2;
border-color: #c66161; border-color: #c66161;
color: #c00 color: #c00
} }
.Validform_wrong,.Validform_right,.Validform_warning { .Validform_wrong, .Validform_right, .Validform_warning {
display: inline-block; display: inline-block;
height: 20px; height: 20px;
font-size: 12px; font-size: 12px;
vertical-align: middle; vertical-align: middle;
padding-left: 25px padding-left: 25px
} }
.i-checks label.error, .check-box label.error, .radio-box label.error { .i-checks label.error, .check-box label.error, .radio-box label.error {
right: auto; right: auto;
width: 150px; width: 150px;
left: 210px; left: 210px;
top: 1px; top: 1px;
max-width: none; max-width: none;
} }
/** 复选框&单选框 */ /** 复选框&单选框 */
.check-box,.radio-box { .check-box, .radio-box {
display: inline-block; display: inline-block;
box-sizing: border-box; box-sizing: border-box;
cursor: pointer; cursor: pointer;
position: relative; position: relative;
padding-left: 25px; padding-left: 25px;
padding-right: 15px; padding-right: 15px;
padding-top: 8px; padding-top: 8px;
} }
.icheckbox, .icheckbox-blue, .iradio, .iradio-blue, .iradio-purple { .icheckbox, .icheckbox-blue, .iradio, .iradio-blue, .iradio-purple {
position: absolute; position: absolute;
top: 8px; top: 8px;
left: 0 left: 0
} }
/* iCheck */ /* iCheck */
.icheckbox-blue,.iradio-blue { .icheckbox-blue, .iradio-blue {
display: block; display: block;
margin: 0; margin: 0;
padding: 0; padding: 0;
width: 18px; width: 18px;
height: 18px; height: 18px;
background: url(../../img/blue.png) no-repeat; background: url(../../img/blue.png) no-repeat;
border: none; border: none;
cursor: pointer cursor: pointer
} }
.icheckbox-blue,.icheckbox-blue.static:hover { .icheckbox-blue, .icheckbox-blue.static:hover {
background-position: 0 0 background-position: 0 0
} }
.icheckbox-blue.hover,.icheckbox-blue:hover { .icheckbox-blue.hover, .icheckbox-blue:hover {
background-position: -20px 0 background-position: -20px 0
} }
.icheckbox-blue.checked { .icheckbox-blue.checked {
background-position: -40px 0 background-position: -40px 0
} }
.icheckbox-blue.disabled { .icheckbox-blue.disabled {
background-position: -60px 0; background-position: -60px 0;
cursor: default cursor: default
} }
.icheckbox-blue.checked.disabled { .icheckbox-blue.checked.disabled {
background-position: -80px 0 background-position: -80px 0
} }
.iradio-blue,.iradio-blue.static:hover { .iradio-blue, .iradio-blue.static:hover {
background-position: -100px 0 background-position: -100px 0
} }
.iradio-blue.hover,.iradio-blue:hover { .iradio-blue.hover, .iradio-blue:hover {
background-position: -120px 0 background-position: -120px 0
} }
.iradio-blue.checked { .iradio-blue.checked {
background-position: -140px 0 background-position: -140px 0
} }
.iradio-blue.disabled { .iradio-blue.disabled {
background-position: -160px 0; background-position: -160px 0;
cursor: default cursor: default
} }
.iradio-blue.checked.disabled { .iradio-blue.checked.disabled {
background-position: -180px 0 background-position: -180px 0
} }
/** 遮罩层 */ /** 遮罩层 */
.loaderbox { .loaderbox {
display: inline-block; display: inline-block;
min-width: 125px; min-width: 125px;
padding: 10px; padding: 10px;
margin: 0 auto; margin: 0 auto;
color: #000 !important; color: #000 !important;
font-size: 13px; font-size: 13px;
font-weight: 400; font-weight: 400;
text-align: center; text-align: center;
vertical-align: middle; vertical-align: middle;
border: 1px solid #ddd; border: 1px solid #ddd;
background-color: #eee; background-color: #eee;
-webkit-border-radius: 2px; -webkit-border-radius: 2px;
-moz-border-radius: 2px; -moz-border-radius: 2px;
-ms-border-radius: 2px; -ms-border-radius: 2px;
-o-border-radius: 2px; -o-border-radius: 2px;
border-radius: 2px; border-radius: 2px;
-webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
} }
.loaderbox .loading-activity { .loaderbox .loading-activity {
float: left; float: left;
width: 18px; width: 18px;
height: 18px; height: 18px;
border: solid 2px transparent; border: solid 2px transparent;
border-top-color: #000; border-top-color: #000;
border-left-color: #000; border-left-color: #000;
border-radius: 10px; border-radius: 10px;
-webkit-animation: pace-spinner 400ms linear infinite; -webkit-animation: pace-spinner 400ms linear infinite;
-moz-animation: pace-spinner 400ms linear infinite; -moz-animation: pace-spinner 400ms linear infinite;
-ms-animation: pace-spinner 400ms linear infinite; -ms-animation: pace-spinner 400ms linear infinite;
-o-animation: pace-spinner 400ms linear infinite; -o-animation: pace-spinner 400ms linear infinite;
animation: pace-spinner 400ms linear infinite; animation: pace-spinner 400ms linear infinite;
} }
@media (max-width: 767px) { @media (max-width: 767px) {
.loading-activity { .loading-activity {
width: 18px; width: 18px;
height: 18px; height: 18px;
} }
} }
@-ms-keyframes pace-spinner { @-ms-keyframes pace-spinner {
0% { 0% {
-ms-transform: rotate(0deg); -ms-transform: rotate(0deg);
transform: rotate(0deg); transform: rotate(0deg);
} }
100% { 100% {
-ms-transform: rotate(360deg); -ms-transform: rotate(360deg);
transform: rotate(360deg); transform: rotate(360deg);
} }
} }
@keyframes pace-spinner { @keyframes pace-spinner {
0% { 0% {
transform: rotate(0deg); transform: rotate(0deg);
} }
100% { 100% {
transform: rotate(360deg); transform: rotate(360deg);
} }
} }
/** 表单查询条件 */ /** 表单查询条件 */
ul { ul {
margin: 0; margin: 0;
padding: 0; padding: 0;
-webkit-tap-highlight-color: rgba(0,0,0,0); -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
} }
li { li {
list-style: none; list-style: none;
} }
.time-input { .time-input {
display: block; display: block;
width: 100%; width: 100%;
padding-left: 10px; padding-left: 10px;
} }
label { label {
font-weight: normal; font-weight: normal;
} }
.container-div { .container-div {
padding: 10px 35px; padding: 10px 35px;
height: 100%; height: 100%;
} }
.container-div .row { .container-div .row {
height: 100%; height: 100%;
} }
.search-collapse,.select-table { .search-collapse, .select-table {
width: 100%; width: 100%;
background: #fff; background: #fff;
border-radius: 6px; border-radius: 6px;
margin-top: 10px; margin-top: 10px;
padding-top: 5px; padding-top: 5px;
padding-bottom: 13px; padding-bottom: 13px;
box-shadow: 1px 1px 3px rgba(0,0,0,.2); box-shadow: 1px 1px 3px rgba(0, 0, 0, .2);
} }
.search-collapse { .search-collapse {
position: relative; position: relative;
} }
.search-collapse .col-sm-6 .control-label { .search-collapse .col-sm-6 .control-label {
color: #333; color: #333;
} }
@media ( max-width : 768px) { @media ( max-width: 768px) {
.search-collapse { .search-collapse {
display: none; display: none;
} }
} }
@media ( min-width : 768px) { @media ( min-width: 768px) {
.select-list li { .select-list li {
float: left; float: left;
} }
} }
.select-list li { .select-list li {
color: #333; color: #333;
margin: 5px 15px 5px 0px; margin: 5px 15px 5px 0px;
} }
.select-list li input { .select-list li input {
border: 1px solid #ddd; border: 1px solid #ddd;
border-radius: 4px; border-radius: 4px;
background: transparent; background: transparent;
outline: none; outline: none;
height: 30px; height: 30px;
width: 280px; width: 280px;
padding-left: 5px; padding-left: 5px;
} }
.select-list li .submit-btn { .select-list li .submit-btn {
border: 0px; border: 0px;
border-radius: 4px; border-radius: 4px;
background: transparent; background: transparent;
outline: none; outline: none;
width: 40px; width: 40px;
height: 23px; height: 23px;
} }
.select-list li select { .select-list li select {
border: 1px solid #ddd; border: 1px solid #ddd;
border-radius: 4px; border-radius: 4px;
background: transparent; background: transparent;
outline: none; outline: none;
height: 30px; height: 30px;
width: 280px; width: 280px;
} }
.select-list .select-time input { .select-list .select-time input {
width: 133px; width: 133px;
} }
.select-time label,.select-time span,.select-time input { .select-time label, .select-time span, .select-time input {
float: left; float: left;
} }
.select-time label { .select-time label {
margin-top: 5px; margin-top: 5px;
} }
.select-time span { .select-time span {
display: block; display: block;
margin: 5px 5px; margin: 5px 5px;
} }
.search-btn { .search-btn {
background-color: #1ab394; background-color: #1ab394;
border-color: #1ab394; border-color: #1ab394;
color: #FFF; color: #FFF;
margin-bottom: 5px; margin-bottom: 5px;
display: inline-block; display: inline-block;
padding: 6px 12px; padding: 6px 12px;
margin-bottom: 0; margin-bottom: 0;
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
line-height: 1.42857143; line-height: 1.42857143;
text-align: center; text-align: center;
white-space: nowrap; white-space: nowrap;
border-radius: 3px; border-radius: 3px;
vertical-align: middle; vertical-align: middle;
cursor: pointer; cursor: pointer;
} }
/** 表格查询数据 */ /** 表格查询数据 */
.table-striped { .table-striped {
min-height: 75%; min-height: 75%;
} }
.table-striped .bootstrap-table { .table-striped .bootstrap-table {
border: 0px!important; border: 0px !important;
} }
.table-striped .table, .fixed-table-container, table, .table-striped .table, .table>thead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, .table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td { .table-striped .table, .fixed-table-container, table, .table-striped .table, .table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td {
border-bottom: 1px solid #e7eaec!important; border-bottom: 1px solid #e7eaec !important;
background-color: transparent!important; background-color: transparent !important;
border: 0px; border: 0px;
} }
.table-striped .table>thead>tr>th, .table-striped .table>tbody>tr>th { .table-striped .table > thead > tr > th, .table-striped .table > tbody > tr > th {
border-bottom: 1px solid #ccc!important; border-bottom: 1px solid #ccc !important;
border-top: 0px!important; border-top: 0px !important;
} }
.table-striped .table>thead:first-child>tr:first-child>th { .table-striped .table > thead:first-child > tr:first-child > th {
color: #333; color: #333;
} }
.table-bordered td,.table-bordered th { .table-bordered td, .table-bordered th {
border: 1px solid #ddd!important border: 1px solid #ddd !important
} }
/** 首页样式 */ /** 首页样式 */
.ax_close_max { .ax_close_max {
position: fixed; position: fixed;
top: 5px; top: 5px;
left: 5px; left: 5px;
z-index: 9999; z-index: 9999;
display: none; display: none;
color: #ccc; color: #ccc;
} }

View File

@ -1,423 +1,425 @@
/** /**
* 菜单处理 * 菜单处理
*/ */
$(function() { $(function () {
// MetsiMenu // MetsiMenu
$('#side-menu').metisMenu(); $('#side-menu').metisMenu();
//固定菜单栏 //固定菜单栏
$(function() { $(function () {
$('.sidebar-collapse').slimScroll({ $('.sidebar-collapse').slimScroll({
height: '100%', height: '100%',
railOpacity: 0.9, railOpacity: 0.9,
alwaysVisible: false alwaysVisible: false
}); });
}); });
// 菜单切换 // 菜单切换
$('.navbar-minimalize').click(function() { $('.navbar-minimalize').click(function () {
$("body").toggleClass("mini-navbar"); $("body").toggleClass("mini-navbar");
SmoothlyMenu(); SmoothlyMenu();
}); });
$('#side-menu>li').click(function() { $('#side-menu>li').click(function () {
if ($('body').hasClass('mini-navbar')) { if ($('body').hasClass('mini-navbar')) {
NavToggle(); NavToggle();
} }
}); });
$('#side-menu>li li a').click(function() { $('#side-menu>li li a').click(function () {
if ($(window).width() < 769) { if ($(window).width() < 769) {
NavToggle(); NavToggle();
} }
}); });
$('.nav-close').click(NavToggle); $('.nav-close').click(NavToggle);
//ios浏览器兼容性处理 //ios浏览器兼容性处理
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
$('#content-main').css('overflow-y', 'auto'); $('#content-main').css('overflow-y', 'auto');
} }
}); });
$(window).bind("load resize", $(window).bind("load resize",
function() { function () {
if ($(this).width() < 769) { if ($(this).width() < 769) {
$('body').addClass('mini-navbar'); $('body').addClass('mini-navbar');
$('.navbar-static-side').fadeIn(); $('.navbar-static-side').fadeIn();
} }
}); });
function NavToggle() { function NavToggle() {
$('.navbar-minimalize').trigger('click'); $('.navbar-minimalize').trigger('click');
} }
function SmoothlyMenu() { function SmoothlyMenu() {
if (!$('body').hasClass('mini-navbar')) { if (!$('body').hasClass('mini-navbar')) {
$('#side-menu').hide(); $('#side-menu').hide();
setTimeout(function() { setTimeout(function () {
$('#side-menu').fadeIn(500); $('#side-menu').fadeIn(500);
}, },
100); 100);
} else if ($('body').hasClass('fixed-sidebar')) { } else if ($('body').hasClass('fixed-sidebar')) {
$('#side-menu').hide(); $('#side-menu').hide();
setTimeout(function() { setTimeout(function () {
$('#side-menu').fadeIn(500); $('#side-menu').fadeIn(500);
}, },
300); 300);
} else { } else {
$('#side-menu').removeAttr('style'); $('#side-menu').removeAttr('style');
} }
} }
/** /**
* iframe处理 * iframe处理
*/ */
$(function() { $(function () {
//计算元素集合的总宽度 //计算元素集合的总宽度
function calSumWidth(elements) { function calSumWidth(elements) {
var width = 0; var width = 0;
$(elements).each(function() { $(elements).each(function () {
width += $(this).outerWidth(true); width += $(this).outerWidth(true);
}); });
return width; return width;
} }
//滚动到指定选项卡 //滚动到指定选项卡
function scrollToTab(element) { function scrollToTab(element) {
var marginLeftVal = calSumWidth($(element).prevAll()), var marginLeftVal = calSumWidth($(element).prevAll()),
marginRightVal = calSumWidth($(element).nextAll()); marginRightVal = calSumWidth($(element).nextAll());
// 可视区域非tab宽度 // 可视区域非tab宽度
var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".menuTabs")); var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".menuTabs"));
//可视区域tab宽度 //可视区域tab宽度
var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth; var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth;
//实际滚动宽度 //实际滚动宽度
var scrollVal = 0; var scrollVal = 0;
if ($(".page-tabs-content").outerWidth() < visibleWidth) { if ($(".page-tabs-content").outerWidth() < visibleWidth) {
scrollVal = 0; scrollVal = 0;
} else if (marginRightVal <= (visibleWidth - $(element).outerWidth(true) - $(element).next().outerWidth(true))) { } else if (marginRightVal <= (visibleWidth - $(element).outerWidth(true) - $(element).next().outerWidth(true))) {
if ((visibleWidth - $(element).next().outerWidth(true)) > marginRightVal) { if ((visibleWidth - $(element).next().outerWidth(true)) > marginRightVal) {
scrollVal = marginLeftVal; scrollVal = marginLeftVal;
var tabElement = element; var tabElement = element;
while ((scrollVal - $(tabElement).outerWidth()) > ($(".page-tabs-content").outerWidth() - visibleWidth)) { while ((scrollVal - $(tabElement).outerWidth()) > ($(".page-tabs-content").outerWidth() - visibleWidth)) {
scrollVal -= $(tabElement).prev().outerWidth(); scrollVal -= $(tabElement).prev().outerWidth();
tabElement = $(tabElement).prev(); tabElement = $(tabElement).prev();
} }
} }
} else if (marginLeftVal > (visibleWidth - $(element).outerWidth(true) - $(element).prev().outerWidth(true))) { } else if (marginLeftVal > (visibleWidth - $(element).outerWidth(true) - $(element).prev().outerWidth(true))) {
scrollVal = marginLeftVal - $(element).prev().outerWidth(true); scrollVal = marginLeftVal - $(element).prev().outerWidth(true);
} }
$('.page-tabs-content').animate({ $('.page-tabs-content').animate({
marginLeft: 0 - scrollVal + 'px' marginLeft: 0 - scrollVal + 'px'
}, },
"fast"); "fast");
} }
//查看左侧隐藏的选项卡 //查看左侧隐藏的选项卡
function scrollTabLeft() { function scrollTabLeft() {
var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css('margin-left'))); var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css('margin-left')));
// 可视区域非tab宽度 // 可视区域非tab宽度
var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".menuTabs")); var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".menuTabs"));
//可视区域tab宽度 //可视区域tab宽度
var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth; var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth;
//实际滚动宽度 //实际滚动宽度
var scrollVal = 0; var scrollVal = 0;
if ($(".page-tabs-content").width() < visibleWidth) { if ($(".page-tabs-content").width() < visibleWidth) {
return false; return false;
} else { } else {
var tabElement = $(".menuTab:first"); var tabElement = $(".menuTab:first");
var offsetVal = 0; var offsetVal = 0;
while ((offsetVal + $(tabElement).outerWidth(true)) <= marginLeftVal) { //找到离当前tab最近的元素 while ((offsetVal + $(tabElement).outerWidth(true)) <= marginLeftVal) { //找到离当前tab最近的元素
offsetVal += $(tabElement).outerWidth(true); offsetVal += $(tabElement).outerWidth(true);
tabElement = $(tabElement).next(); tabElement = $(tabElement).next();
} }
offsetVal = 0; offsetVal = 0;
if (calSumWidth($(tabElement).prevAll()) > visibleWidth) { if (calSumWidth($(tabElement).prevAll()) > visibleWidth) {
while ((offsetVal + $(tabElement).outerWidth(true)) < (visibleWidth) && tabElement.length > 0) { while ((offsetVal + $(tabElement).outerWidth(true)) < (visibleWidth) && tabElement.length > 0) {
offsetVal += $(tabElement).outerWidth(true); offsetVal += $(tabElement).outerWidth(true);
tabElement = $(tabElement).prev(); tabElement = $(tabElement).prev();
} }
scrollVal = calSumWidth($(tabElement).prevAll()); scrollVal = calSumWidth($(tabElement).prevAll());
} }
} }
$('.page-tabs-content').animate({ $('.page-tabs-content').animate({
marginLeft: 0 - scrollVal + 'px' marginLeft: 0 - scrollVal + 'px'
}, },
"fast"); "fast");
} }
//查看右侧隐藏的选项卡 //查看右侧隐藏的选项卡
function scrollTabRight() { function scrollTabRight() {
var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css('margin-left'))); var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css('margin-left')));
// 可视区域非tab宽度 // 可视区域非tab宽度
var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".menuTabs")); var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".menuTabs"));
//可视区域tab宽度 //可视区域tab宽度
var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth; var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth;
//实际滚动宽度 //实际滚动宽度
var scrollVal = 0; var scrollVal = 0;
if ($(".page-tabs-content").width() < visibleWidth) { if ($(".page-tabs-content").width() < visibleWidth) {
return false; return false;
} else { } else {
var tabElement = $(".menuTab:first"); var tabElement = $(".menuTab:first");
var offsetVal = 0; var offsetVal = 0;
while ((offsetVal + $(tabElement).outerWidth(true)) <= marginLeftVal) { //找到离当前tab最近的元素 while ((offsetVal + $(tabElement).outerWidth(true)) <= marginLeftVal) { //找到离当前tab最近的元素
offsetVal += $(tabElement).outerWidth(true); offsetVal += $(tabElement).outerWidth(true);
tabElement = $(tabElement).next(); tabElement = $(tabElement).next();
} }
offsetVal = 0; offsetVal = 0;
while ((offsetVal + $(tabElement).outerWidth(true)) < (visibleWidth) && tabElement.length > 0) { while ((offsetVal + $(tabElement).outerWidth(true)) < (visibleWidth) && tabElement.length > 0) {
offsetVal += $(tabElement).outerWidth(true); offsetVal += $(tabElement).outerWidth(true);
tabElement = $(tabElement).next(); tabElement = $(tabElement).next();
} }
scrollVal = calSumWidth($(tabElement).prevAll()); scrollVal = calSumWidth($(tabElement).prevAll());
if (scrollVal > 0) { if (scrollVal > 0) {
$('.page-tabs-content').animate({ $('.page-tabs-content').animate({
marginLeft: 0 - scrollVal + 'px' marginLeft: 0 - scrollVal + 'px'
}, },
"fast"); "fast");
} }
} }
} }
//通过遍历给菜单项加上data-index属性 //通过遍历给菜单项加上data-index属性
$(".menuItem").each(function(index) { $(".menuItem").each(function (index) {
if (!$(this).attr('data-index')) { if (!$(this).attr('data-index')) {
$(this).attr('data-index', index); $(this).attr('data-index', index);
} }
}); });
function menuItem() { function menuItem() {
// 获取标识数据 // 获取标识数据
var dataUrl = $(this).attr('href'), var dataUrl = $(this).attr('href'),
dataIndex = $(this).data('index'), dataIndex = $(this).data('index'),
menuName = $.trim($(this).text()), menuName = $.trim($(this).text()),
flag = true; flag = true;
if (dataUrl == undefined || $.trim(dataUrl).length == 0) return false; if (dataUrl == undefined || $.trim(dataUrl).length == 0) return false;
// 选项卡菜单已存在 // 选项卡菜单已存在
$('.menuTab').each(function() { $('.menuTab').each(function () {
if ($(this).data('id') == dataUrl) { if ($(this).data('id') == dataUrl) {
if (!$(this).hasClass('active')) { if (!$(this).hasClass('active')) {
$(this).addClass('active').siblings('.menuTab').removeClass('active'); $(this).addClass('active').siblings('.menuTab').removeClass('active');
scrollToTab(this); scrollToTab(this);
// 显示tab对应的内容区 // 显示tab对应的内容区
$('.mainContent .RuoYi_iframe').each(function() { $('.mainContent .RuoYi_iframe').each(function () {
if ($(this).data('id') == dataUrl) { if ($(this).data('id') == dataUrl) {
$(this).show().siblings('.RuoYi_iframe').hide(); $(this).show().siblings('.RuoYi_iframe').hide();
return false; return false;
} }
}); });
} }
flag = false; flag = false;
return false; return false;
} }
}); });
// 选项卡菜单不存在 // 选项卡菜单不存在
if (flag) { if (flag) {
var str = '<a href="javascript:;" class="active menuTab" data-id="' + dataUrl + '">' + menuName + ' <i class="fa fa-times-circle"></i></a>'; var str = '<a href="javascript:;" class="active menuTab" data-id="' + dataUrl + '">' + menuName + ' <i class="fa fa-times-circle"></i></a>';
$('.menuTab').removeClass('active'); $('.menuTab').removeClass('active');
// 添加选项卡对应的iframe // 添加选项卡对应的iframe
var str1 = '<iframe class="RuoYi_iframe" name="iframe' + dataIndex + '" width="100%" height="100%" src="' + dataUrl + '" frameborder="0" data-id="' + dataUrl + '" seamless></iframe>'; var str1 = '<iframe class="RuoYi_iframe" name="iframe' + dataIndex + '" width="100%" height="100%" src="' + dataUrl + '" frameborder="0" data-id="' + dataUrl + '" seamless></iframe>';
$('.mainContent').find('iframe.RuoYi_iframe').hide().parents('.mainContent').append(str1); $('.mainContent').find('iframe.RuoYi_iframe').hide().parents('.mainContent').append(str1);
$.modal.loading("数据加载中,请稍后..."); $.modal.loading("数据加载中,请稍后...");
$('.mainContent iframe:visible').load(function () { $('.mainContent iframe:visible').load(function () {
$.modal.closeLoading(); $.modal.closeLoading();
}); });
// 添加选项卡 // 添加选项卡
$('.menuTabs .page-tabs-content').append(str); $('.menuTabs .page-tabs-content').append(str);
scrollToTab($('.menuTab.active')); scrollToTab($('.menuTab.active'));
} }
return false; return false;
} }
$('.menuItem').on('click', menuItem); $('.menuItem').on('click', menuItem);
// 关闭选项卡菜单 // 关闭选项卡菜单
function closeTab() { function closeTab() {
var closeTabId = $(this).parents('.menuTab').data('id'); var closeTabId = $(this).parents('.menuTab').data('id');
var currentWidth = $(this).parents('.menuTab').width(); var currentWidth = $(this).parents('.menuTab').width();
// 当前元素处于活动状态 // 当前元素处于活动状态
if ($(this).parents('.menuTab').hasClass('active')) { if ($(this).parents('.menuTab').hasClass('active')) {
// 当前元素后面有同辈元素,使后面的一个元素处于活动状态 // 当前元素后面有同辈元素,使后面的一个元素处于活动状态
if ($(this).parents('.menuTab').next('.menuTab').size()) { if ($(this).parents('.menuTab').next('.menuTab').size()) {
var activeId = $(this).parents('.menuTab').next('.menuTab:eq(0)').data('id'); var activeId = $(this).parents('.menuTab').next('.menuTab:eq(0)').data('id');
$(this).parents('.menuTab').next('.menuTab:eq(0)').addClass('active'); $(this).parents('.menuTab').next('.menuTab:eq(0)').addClass('active');
$('.mainContent .RuoYi_iframe').each(function() { $('.mainContent .RuoYi_iframe').each(function () {
if ($(this).data('id') == activeId) { if ($(this).data('id') == activeId) {
$(this).show().siblings('.RuoYi_iframe').hide(); $(this).show().siblings('.RuoYi_iframe').hide();
return false; return false;
} }
}); });
var marginLeftVal = parseInt($('.page-tabs-content').css('margin-left')); var marginLeftVal = parseInt($('.page-tabs-content').css('margin-left'));
if (marginLeftVal < 0) { if (marginLeftVal < 0) {
$('.page-tabs-content').animate({ $('.page-tabs-content').animate({
marginLeft: (marginLeftVal + currentWidth) + 'px' marginLeft: (marginLeftVal + currentWidth) + 'px'
}, },
"fast"); "fast");
} }
// 移除当前选项卡 // 移除当前选项卡
$(this).parents('.menuTab').remove(); $(this).parents('.menuTab').remove();
// 移除tab对应的内容区 // 移除tab对应的内容区
$('.mainContent .RuoYi_iframe').each(function() { $('.mainContent .RuoYi_iframe').each(function () {
if ($(this).data('id') == closeTabId) { if ($(this).data('id') == closeTabId) {
$(this).remove(); $(this).remove();
return false; return false;
} }
}); });
} }
// 当前元素后面没有同辈元素,使当前元素的上一个元素处于活动状态 // 当前元素后面没有同辈元素,使当前元素的上一个元素处于活动状态
if ($(this).parents('.menuTab').prev('.menuTab').size()) { if ($(this).parents('.menuTab').prev('.menuTab').size()) {
var activeId = $(this).parents('.menuTab').prev('.menuTab:last').data('id'); var activeId = $(this).parents('.menuTab').prev('.menuTab:last').data('id');
$(this).parents('.menuTab').prev('.menuTab:last').addClass('active'); $(this).parents('.menuTab').prev('.menuTab:last').addClass('active');
$('.mainContent .RuoYi_iframe').each(function() { $('.mainContent .RuoYi_iframe').each(function () {
if ($(this).data('id') == activeId) { if ($(this).data('id') == activeId) {
$(this).show().siblings('.RuoYi_iframe').hide(); $(this).show().siblings('.RuoYi_iframe').hide();
return false; return false;
} }
}); });
// 移除当前选项卡 // 移除当前选项卡
$(this).parents('.menuTab').remove(); $(this).parents('.menuTab').remove();
// 移除tab对应的内容区 // 移除tab对应的内容区
$('.mainContent .RuoYi_iframe').each(function() { $('.mainContent .RuoYi_iframe').each(function () {
if ($(this).data('id') == closeTabId) { if ($(this).data('id') == closeTabId) {
$(this).remove(); $(this).remove();
return false; return false;
} }
}); });
} }
} }
// 当前元素不处于活动状态 // 当前元素不处于活动状态
else { else {
// 移除当前选项卡 // 移除当前选项卡
$(this).parents('.menuTab').remove(); $(this).parents('.menuTab').remove();
// 移除相应tab对应的内容区 // 移除相应tab对应的内容区
$('.mainContent .RuoYi_iframe').each(function() { $('.mainContent .RuoYi_iframe').each(function () {
if ($(this).data('id') == closeTabId) { if ($(this).data('id') == closeTabId) {
$(this).remove(); $(this).remove();
return false; return false;
} }
}); });
scrollToTab($('.menuTab.active')); scrollToTab($('.menuTab.active'));
} }
return false; return false;
} }
$('.menuTabs').on('click', '.menuTab i', closeTab); $('.menuTabs').on('click', '.menuTab i', closeTab);
//关闭其他选项卡 //关闭其他选项卡
function closeOtherTabs() { function closeOtherTabs() {
$('.page-tabs-content').children("[data-id]").not(":first").not(".active").each(function() { $('.page-tabs-content').children("[data-id]").not(":first").not(".active").each(function () {
$('.RuoYi_iframe[data-id="' + $(this).data('id') + '"]').remove(); $('.RuoYi_iframe[data-id="' + $(this).data('id') + '"]').remove();
$(this).remove(); $(this).remove();
}); });
$('.page-tabs-content').css("margin-left", "0"); $('.page-tabs-content').css("margin-left", "0");
} }
$('.tabCloseOther').on('click', closeOtherTabs);
$('.tabCloseOther').on('click', closeOtherTabs);
//滚动到已激活的选项卡
function showActiveTab() { //滚动到已激活的选项卡
scrollToTab($('.menuTab.active')); function showActiveTab() {
} scrollToTab($('.menuTab.active'));
$('.tabShowActive').on('click', showActiveTab); }
// 点击选项卡菜单 $('.tabShowActive').on('click', showActiveTab);
function activeTab() {
if (!$(this).hasClass('active')) { // 点击选项卡菜单
var currentId = $(this).data('id'); function activeTab() {
// 显示tab对应的内容区 if (!$(this).hasClass('active')) {
$('.mainContent .RuoYi_iframe').each(function() { var currentId = $(this).data('id');
if ($(this).data('id') == currentId) { // 显示tab对应的内容区
$(this).show().siblings('.RuoYi_iframe').hide(); $('.mainContent .RuoYi_iframe').each(function () {
return false; if ($(this).data('id') == currentId) {
} $(this).show().siblings('.RuoYi_iframe').hide();
}); return false;
$(this).addClass('active').siblings('.menuTab').removeClass('active'); }
scrollToTab(this); });
} $(this).addClass('active').siblings('.menuTab').removeClass('active');
} scrollToTab(this);
}
// 点击选项卡菜单 }
$('.menuTabs').on('click', '.menuTab', activeTab);
// 点击选项卡菜单
//刷新iframe $('.menuTabs').on('click', '.menuTab', activeTab);
function refreshTab() {
var currentId = $('.page-tabs-content').find('.active').attr('data-id'); //刷新iframe
var target = $('.RuoYi_iframe[data-id="' + currentId + '"]'); function refreshTab() {
var url = target.attr('src'); var currentId = $('.page-tabs-content').find('.active').attr('data-id');
target.attr('src', url).ready(); var target = $('.RuoYi_iframe[data-id="' + currentId + '"]');
} var url = target.attr('src');
target.attr('src', url).ready();
// 全屏显示 }
$('#fullScreen').on('click', function () {
$('#wrapper').fullScreen(); // 全屏显示
}); $('#fullScreen').on('click', function () {
$('#wrapper').fullScreen();
// 刷新按钮 });
$('.tabReload').on('click', refreshTab);
// 刷新按钮
// 双击选项卡全屏显示 $('.tabReload').on('click', refreshTab);
$('.menuTabs').on('dblclick', '.menuTab', activeTabMax);
// 双击选项卡全屏显示
// 左移按扭 $('.menuTabs').on('dblclick', '.menuTab', activeTabMax);
$('.tabLeft').on('click', scrollTabLeft);
// 左移按扭
// 右移按扭 $('.tabLeft').on('click', scrollTabLeft);
$('.tabRight').on('click', scrollTabRight);
// 右移按扭
// 关闭当前 $('.tabRight').on('click', scrollTabRight);
$('.tabCloseCurrent').on('click', function () {
$('.page-tabs-content').find('.active i').trigger("click"); // 关闭当前
}); $('.tabCloseCurrent').on('click', function () {
$('.page-tabs-content').find('.active i').trigger("click");
// 关闭全部 });
$('.tabCloseAll').on('click', function() {
$('.page-tabs-content').children("[data-id]").not(":first").each(function() { // 关闭全部
$('.RuoYi_iframe[data-id="' + $(this).data('id') + '"]').remove(); $('.tabCloseAll').on('click', function () {
$(this).remove(); $('.page-tabs-content').children("[data-id]").not(":first").each(function () {
}); $('.RuoYi_iframe[data-id="' + $(this).data('id') + '"]').remove();
$('.page-tabs-content').children("[data-id]:first").each(function() { $(this).remove();
$('.RuoYi_iframe[data-id="' + $(this).data('id') + '"]').show(); });
$(this).addClass("active"); $('.page-tabs-content').children("[data-id]:first").each(function () {
}); $('.RuoYi_iframe[data-id="' + $(this).data('id') + '"]').show();
$('.page-tabs-content').css("margin-left", "0"); $(this).addClass("active");
}); });
$('.page-tabs-content').css("margin-left", "0");
// tab全屏显示 });
$('.tabMaxCurrent').on('click', function () {
$('.page-tabs-content').find('.active').trigger("dblclick"); // tab全屏显示
}); $('.tabMaxCurrent').on('click', function () {
$('.page-tabs-content').find('.active').trigger("dblclick");
// 关闭全屏 });
$('#ax_close_max').click(function(){
$('#content-main').toggleClass('max'); // 关闭全屏
$('#ax_close_max').hide(); $('#ax_close_max').click(function () {
}) $('#content-main').toggleClass('max');
$('#ax_close_max').hide();
// 双击选项卡全屏显示 })
function activeTabMax() {
$('#content-main').toggleClass('max'); // 双击选项卡全屏显示
$('#ax_close_max').show(); function activeTabMax() {
} $('#content-main').toggleClass('max');
$('#ax_close_max').show();
$(window).keydown(function(event) { }
if (event.keyCode == 27) {
$('#content-main').removeClass('max'); $(window).keydown(function (event) {
$('#ax_close_max').hide(); if (event.keyCode == 27) {
} $('#content-main').removeClass('max');
}); $('#ax_close_max').hide();
}
});
}); });

View File

@ -1,193 +1,195 @@
/** /**
* 通用方法封装处理 * 通用方法封装处理
* Copyright (c) 2018 ruoyi * Copyright (c) 2018 ruoyi
*/ */
$(function() { $(function () {
// select2复选框事件绑定 // select2复选框事件绑定
if ($.fn.select2 !== undefined) { if ($.fn.select2 !== undefined) {
$("select.form-control:not(.noselect2)").each(function () { $("select.form-control:not(.noselect2)").each(function () {
$(this).select2().on("change", function () { $(this).select2().on("change", function () {
$(this).valid(); $(this).valid();
}) })
}) })
} }
// checkbox 事件绑定 // checkbox 事件绑定
if ($(".check-box").length > 0) { if ($(".check-box").length > 0) {
$(".check-box").iCheck({ $(".check-box").iCheck({
checkboxClass: 'icheckbox-blue', checkboxClass: 'icheckbox-blue',
radioClass: 'iradio-blue', radioClass: 'iradio-blue',
}) })
} }
// radio 事件绑定 // radio 事件绑定
if ($(".radio-box").length > 0) { if ($(".radio-box").length > 0) {
$(".radio-box").iCheck({ $(".radio-box").iCheck({
checkboxClass: 'icheckbox-blue', checkboxClass: 'icheckbox-blue',
radioClass: 'iradio-blue', radioClass: 'iradio-blue',
}) })
} }
// laydate 时间控件绑定 // laydate 时间控件绑定
if ($(".select-time").length > 0) { if ($(".select-time").length > 0) {
layui.use('laydate', function() { layui.use('laydate', function () {
var laydate = layui.laydate; var laydate = layui.laydate;
var startDate = laydate.render({ var startDate = laydate.render({
elem: '#startTime', elem: '#startTime',
max: $('#endTime').val(), max: $('#endTime').val(),
theme: 'molv', theme: 'molv',
trigger: 'click', trigger: 'click',
done: function(value, date) { done: function (value, date) {
// 结束时间大于开始时间 // 结束时间大于开始时间
if (value !== '') { if (value !== '') {
endDate.config.min.year = date.year; endDate.config.min.year = date.year;
endDate.config.min.month = date.month - 1; endDate.config.min.month = date.month - 1;
endDate.config.min.date = date.date; endDate.config.min.date = date.date;
} else { } else {
endDate.config.min.year = ''; endDate.config.min.year = '';
endDate.config.min.month = ''; endDate.config.min.month = '';
endDate.config.min.date = ''; endDate.config.min.date = '';
} }
} }
}); });
var endDate = laydate.render({ var endDate = laydate.render({
elem: '#endTime', elem: '#endTime',
min: $('#startTime').val(), min: $('#startTime').val(),
theme: 'molv', theme: 'molv',
trigger: 'click', trigger: 'click',
done: function(value, date) { done: function (value, date) {
// 开始时间小于结束时间 // 开始时间小于结束时间
if (value !== '') { if (value !== '') {
startDate.config.max.year = date.year; startDate.config.max.year = date.year;
startDate.config.max.month = date.month - 1; startDate.config.max.month = date.month - 1;
startDate.config.max.date = date.date; startDate.config.max.date = date.date;
} else { } else {
startDate.config.max.year = ''; startDate.config.max.year = '';
startDate.config.max.month = ''; startDate.config.max.month = '';
startDate.config.max.date = ''; startDate.config.max.date = '';
} }
} }
}); });
}); });
} }
// laydate time-input 时间控件绑定 // laydate time-input 时间控件绑定
if ($(".time-input").length > 0) { if ($(".time-input").length > 0) {
layui.use('laydate', function() { layui.use('laydate', function () {
var laydate = layui.laydate; var laydate = layui.laydate;
var times = $(".time-input"); var times = $(".time-input");
for (var i = 0; i < times.length; i++) { for (var i = 0; i < times.length; i++) {
var time = times[i]; var time = times[i];
laydate.render({ laydate.render({
elem: time, elem: time,
theme: 'molv', theme: 'molv',
trigger: 'click', trigger: 'click',
done: function(value, date) {} done: function (value, date) {
}); }
} });
}); }
} });
// tree 关键字搜索绑定 }
if ($("#keyword").length > 0) { // tree 关键字搜索绑定
$("#keyword").bind("focus", function focusKey(e) { if ($("#keyword").length > 0) {
if ($("#keyword").hasClass("empty")) { $("#keyword").bind("focus", function focusKey(e) {
$("#keyword").removeClass("empty"); if ($("#keyword").hasClass("empty")) {
} $("#keyword").removeClass("empty");
}).bind("blur", function blurKey(e) { }
if ($("#keyword").val() === "") { }).bind("blur", function blurKey(e) {
$("#keyword").addClass("empty"); if ($("#keyword").val() === "") {
} $("#keyword").addClass("empty");
$.tree.searchNode(e); }
}).bind("input propertychange", $.tree.searchNode); $.tree.searchNode(e);
} }).bind("input propertychange", $.tree.searchNode);
// 复选框后按钮样式状态变更 }
$("#bootstrap-table").on("check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table", function () { // 复选框后按钮样式状态变更
var ids = $("#bootstrap-table").bootstrapTable("getSelections"); $("#bootstrap-table").on("check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table", function () {
$('#toolbar .btn-del').toggleClass('disabled', !ids.length); var ids = $("#bootstrap-table").bootstrapTable("getSelections");
$('#toolbar .btn-edit').toggleClass('disabled', ids.length!=1);; $('#toolbar .btn-del').toggleClass('disabled', !ids.length);
}); $('#toolbar .btn-edit').toggleClass('disabled', ids.length != 1);
// tree表格树 展开/折叠 ;
var expandFlag = false; });
$("#expandAllBtn").click(function() { // tree表格树 展开/折叠
if (expandFlag) { var expandFlag = false;
$('#bootstrap-tree-table').bootstrapTreeTable('expandAll'); $("#expandAllBtn").click(function () {
} else { if (expandFlag) {
$('#bootstrap-tree-table').bootstrapTreeTable('collapseAll'); $('#bootstrap-tree-table').bootstrapTreeTable('expandAll');
} } else {
expandFlag = expandFlag ? false: true; $('#bootstrap-tree-table').bootstrapTreeTable('collapseAll');
}) }
}); expandFlag = expandFlag ? false : true;
})
/** 刷新选项卡 */ });
var refreshItem = function(){
var topWindow = $(window.parent.document); /** 刷新选项卡 */
var currentId = $('.page-tabs-content', topWindow).find('.active').attr('data-id'); var refreshItem = function () {
var target = $('.RuoYi_iframe[data-id="' + currentId + '"]', topWindow); var topWindow = $(window.parent.document);
var url = target.attr('src'); var currentId = $('.page-tabs-content', topWindow).find('.active').attr('data-id');
target.attr('src', url).ready(); var target = $('.RuoYi_iframe[data-id="' + currentId + '"]', topWindow);
} var url = target.attr('src');
target.attr('src', url).ready();
/** 创建选项卡 */ }
function createMenuItem(dataUrl, menuName) {
dataIndex = $.common.random(1,100), /** 创建选项卡 */
flag = true; function createMenuItem(dataUrl, menuName) {
if (dataUrl == undefined || $.trim(dataUrl).length == 0) return false; dataIndex = $.common.random(1, 100),
var topWindow = $(window.parent.document); flag = true;
// 选项卡菜单已存在 if (dataUrl == undefined || $.trim(dataUrl).length == 0) return false;
$('.menuTab', topWindow).each(function() { var topWindow = $(window.parent.document);
if ($(this).data('id') == dataUrl) { // 选项卡菜单已存在
if (!$(this).hasClass('active')) { $('.menuTab', topWindow).each(function () {
$(this).addClass('active').siblings('.menuTab').removeClass('active'); if ($(this).data('id') == dataUrl) {
$('.page-tabs-content').animate({ marginLeft: ""}, "fast"); if (!$(this).hasClass('active')) {
// 显示tab对应的内容区 $(this).addClass('active').siblings('.menuTab').removeClass('active');
$('.mainContent .RuoYi_iframe', topWindow).each(function() { $('.page-tabs-content').animate({marginLeft: ""}, "fast");
if ($(this).data('id') == dataUrl) { // 显示tab对应的内容区
$(this).show().siblings('.RuoYi_iframe').hide(); $('.mainContent .RuoYi_iframe', topWindow).each(function () {
return false; if ($(this).data('id') == dataUrl) {
} $(this).show().siblings('.RuoYi_iframe').hide();
}); return false;
} }
flag = false; });
return false; }
} flag = false;
}); return false;
// 选项卡菜单不存在 }
if (flag) { });
var str = '<a href="javascript:;" class="active menuTab" data-id="' + dataUrl + '">' + menuName + ' <i class="fa fa-times-circle"></i></a>'; // 选项卡菜单不存在
$('.menuTab', topWindow).removeClass('active'); if (flag) {
var str = '<a href="javascript:;" class="active menuTab" data-id="' + dataUrl + '">' + menuName + ' <i class="fa fa-times-circle"></i></a>';
// 添加选项卡对应的iframe $('.menuTab', topWindow).removeClass('active');
var str1 = '<iframe class="RuoYi_iframe" name="iframe' + dataIndex + '" width="100%" height="100%" src="' + dataUrl + '" frameborder="0" data-id="' + dataUrl + '" seamless></iframe>';
$('.mainContent', topWindow).find('iframe.RuoYi_iframe').hide().parents('.mainContent').append(str1); // 添加选项卡对应的iframe
var str1 = '<iframe class="RuoYi_iframe" name="iframe' + dataIndex + '" width="100%" height="100%" src="' + dataUrl + '" frameborder="0" data-id="' + dataUrl + '" seamless></iframe>';
// 添加选项卡 $('.mainContent', topWindow).find('iframe.RuoYi_iframe').hide().parents('.mainContent').append(str1);
$('.menuTabs .page-tabs-content', topWindow).append(str);
} // 添加选项卡
return false; $('.menuTabs .page-tabs-content', topWindow).append(str);
} }
return false;
//日志打印封装处理 }
var log = {
log: function (msg) { //日志打印封装处理
console.log(msg); var log = {
}, log: function (msg) {
info: function(msg) { console.log(msg);
console.info(msg); },
}, info: function (msg) {
warn: function(msg) { console.info(msg);
console.warn(msg); },
}, warn: function (msg) {
error: function(msg) { console.warn(msg);
console.error(msg); },
} error: function (msg) {
}; console.error(msg);
}
/** 设置全局ajax处理 */ };
$.ajaxSetup({
complete: function(XMLHttpRequest, textStatus) { /** 设置全局ajax处理 */
if (textStatus == 'timeout') { $.ajaxSetup({
$.modal.alertWarning("服务器超时,请稍后再试!"); complete: function (XMLHttpRequest, textStatus) {
$.modal.closeLoading(); if (textStatus == 'timeout') {
} else if (textStatus == "parsererror") { $.modal.alertWarning("服务器超时,请稍后再试!");
$.modal.alertWarning("服务器错误,请联系管理员!"); $.modal.closeLoading();
$.modal.closeLoading(); } else if (textStatus == "parsererror") {
} $.modal.alertWarning("服务器错误,请联系管理员!");
} $.modal.closeLoading();
}); }
}
});

File diff suppressed because it is too large Load Diff

View File

@ -1,65 +1,64 @@
$(function () {
$(function() { validateRule();
validateRule(); $(".i-checks").iCheck({checkboxClass: "icheckbox_square-green-login"});
$(".i-checks").iCheck({checkboxClass:"icheckbox_square-green-login"}); $('.imgcode').click(function () {
$('.imgcode').click(function() { var url = ctx + "captcha/captchaImage?type=" + captchaType + "&s=" + Math.random();
var url = ctx + "captcha/captchaImage?type=" + captchaType + "&s=" + Math.random(); $(".imgcode").attr("src", url);
$(".imgcode").attr("src", url); });
}); });
});
$.validator.setDefaults({
$.validator.setDefaults({ submitHandler: function () {
submitHandler: function() { login();
login(); }
} });
});
function login() {
function login() { $.modal.loading($("#btnSubmit").data("loading"));
$.modal.loading($("#btnSubmit").data("loading")); var username = $.common.trim($("input[name='username']").val());
var username = $.common.trim($("input[name='username']").val()); var password = $.common.trim($("input[name='password']").val());
var password = $.common.trim($("input[name='password']").val()); var validateCode = $("input[name='validateCode']").val();
var validateCode = $("input[name='validateCode']").val(); var rememberMe = $("input[name='rememberme']").is(':checked');
var rememberMe = $("input[name='rememberme']").is(':checked'); $.ajax({
$.ajax({ type: "post",
type: "post", url: ctx + "login",
url: ctx + "login", data: {
data: { "username": username,
"username": username, "password": password,
"password": password, "validateCode": validateCode,
"validateCode" : validateCode, "rememberMe": rememberMe
"rememberMe": rememberMe },
}, success: function (r) {
success: function(r) { if (r.code == 0) {
if (r.code == 0) { location.href = ctx + 'index';
location.href = ctx + 'index'; } else {
} else { $.modal.closeLoading();
$.modal.closeLoading(); $('.imgcode').click();
$('.imgcode').click(); $(".code").val("");
$(".code").val(""); $.modal.msg(r.msg);
$.modal.msg(r.msg); }
} }
} });
}); }
}
function validateRule() {
function validateRule() { var icon = "<i class='fa fa-times-circle'></i> ";
var icon = "<i class='fa fa-times-circle'></i> "; $("#signupForm").validate({
$("#signupForm").validate({ rules: {
rules: { username: {
username: { required: true
required: true },
}, password: {
password: { required: true
required: true }
} },
}, messages: {
messages: { username: {
username: { required: icon + "请输入您的用户名",
required: icon + "请输入您的用户名", },
}, password: {
password: { required: icon + "请输入您的密码",
required: icon + "请输入您的密码", }
} }
} })
}) }
}

View File

@ -1,23 +1,23 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh"> <html lang="zh">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RuoYi - 404</title> <title>RuoYi - 404</title>
<link href="/css/bootstrap.min.css" rel="stylesheet"/> <link href="/css/bootstrap.min.css" rel="stylesheet"/>
<link href="/css/animate.css" rel="stylesheet"/> <link href="/css/animate.css" rel="stylesheet"/>
<link href="/css/style.css" rel="stylesheet"/> <link href="/css/style.css" rel="stylesheet"/>
</head> </head>
<body class="gray-bg"> <body class="gray-bg">
<div class="middle-box text-center animated fadeInDown"> <div class="middle-box text-center animated fadeInDown">
<h1>404</h1> <h1>404</h1>
<h3 class="font-bold">找不到网页!</h3> <h3 class="font-bold">找不到网页!</h3>
<div class="error-desc"> <div class="error-desc">
对不起您正在寻找的页面不存在。尝试检查URL的错误然后按浏览器上的刷新按钮或尝试在我们的应用程序中找到其他内容。 对不起您正在寻找的页面不存在。尝试检查URL的错误然后按浏览器上的刷新按钮或尝试在我们的应用程序中找到其他内容。
<a href="javascript:top.document.location.href='/'" class="btn btn-primary m-t">主页</a> <a href="javascript:top.document.location.href='/'" class="btn btn-primary m-t">主页</a>
</div> </div>
</div> </div>
<script src="/js/jquery.min.js?v=2.1.4"></script> <script src="/js/jquery.min.js?v=2.1.4"></script>
<script src="/js/bootstrap.min.js?v=3.3.6"></script> <script src="/js/bootstrap.min.js?v=3.3.6"></script>
</body> </body>
</html> </html>

View File

@ -1,24 +1,24 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh"> <html lang="zh">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RuoYi - 500</title> <title>RuoYi - 500</title>
<link href="/css/bootstrap.min.css" rel="stylesheet"/> <link href="/css/bootstrap.min.css" rel="stylesheet"/>
<link href="/css/animate.css" rel="stylesheet"/> <link href="/css/animate.css" rel="stylesheet"/>
<link href="/css/style.css" rel="stylesheet"/> <link href="/css/style.css" rel="stylesheet"/>
</head> </head>
<body class="gray-bg"> <body class="gray-bg">
<div class="middle-box text-center animated fadeInDown"> <div class="middle-box text-center animated fadeInDown">
<h1>500</h1> <h1>500</h1>
<h3 class="font-bold">内部服务器错误!</h3> <h3 class="font-bold">内部服务器错误!</h3>
<div class="error-desc"> <div class="error-desc">
服务器遇到意外事件,不允许完成请求。我们抱歉。您可以返回主页面。 服务器遇到意外事件,不允许完成请求。我们抱歉。您可以返回主页面。
<a href="javascript:top.document.location.href='/'" class="btn btn-primary m-t">主页</a> <a href="javascript:top.document.location.href='/'" class="btn btn-primary m-t">主页</a>
</div> </div>
</div> </div>
<script src="/js/jquery.min.js?v=2.1.4"></script> <script src="/js/jquery.min.js?v=2.1.4"></script>
<script src="/js/bootstrap.min.js?v=3.3.6"></script> <script src="/js/bootstrap.min.js?v=3.3.6"></script>
</body> </body>
</html> </html>

View File

@ -1,24 +1,24 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh"> <html lang="zh">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RuoYi - 403</title> <title>RuoYi - 403</title>
<link href="/css/bootstrap.min.css" rel="stylesheet"/> <link href="/css/bootstrap.min.css" rel="stylesheet"/>
<link href="/css/animate.css" rel="stylesheet"/> <link href="/css/animate.css" rel="stylesheet"/>
<link href="/css/style.css" rel="stylesheet"/> <link href="/css/style.css" rel="stylesheet"/>
</head> </head>
<body class="gray-bg"> <body class="gray-bg">
<div class="middle-box text-center animated fadeInDown"> <div class="middle-box text-center animated fadeInDown">
<h1>403</h1> <h1>403</h1>
<h3 class="font-bold">您没有访问权限!</h3> <h3 class="font-bold">您没有访问权限!</h3>
<div class="error-desc"> <div class="error-desc">
对不起您正在寻找的页面已经找到。尝试检查URL的错误然后按浏览器上的刷新按钮或尝试在我们的应用程序中找到其他内容。 对不起您正在寻找的页面已经找到。尝试检查URL的错误然后按浏览器上的刷新按钮或尝试在我们的应用程序中找到其他内容。
<a href="javascript:top.document.location.href='/'" class="btn btn-primary m-t">主页</a> <a href="javascript:top.document.location.href='/'" class="btn btn-primary m-t">主页</a>
</div> </div>
</div> </div>
<script src="/js/jquery.min.js?v=2.1.4"></script> <script src="/js/jquery.min.js?v=2.1.4"></script>
<script src="/js/bootstrap.min.js?v=3.3.6"></script> <script src="/js/bootstrap.min.js?v=3.3.6"></script>
</body> </body>
</html> </html>

View File

@ -1,45 +1,46 @@
<head th:fragment="header"> <head th:fragment="header">
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title> <title></title>
<meta name="keywords" content=""> <meta name="keywords" content="">
<meta name="description" content=""> <meta name="description" content="">
<link rel="shortcut icon" href="favicon.ico"> <link rel="shortcut icon" href="favicon.ico">
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/> <link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/> <link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
<!-- bootstrap-table 表格插件样式 --> <!-- bootstrap-table 表格插件样式 -->
<link th:href="@{/ajax/libs/bootstrap-table/bootstrap-table.min.css}" rel="stylesheet"/> <link th:href="@{/ajax/libs/bootstrap-table/bootstrap-table.min.css}" rel="stylesheet"/>
<link th:href="@{/ajax/libs/bootstrap-treetable/bootstrap-treetable.css}" rel="stylesheet"/> <link th:href="@{/ajax/libs/bootstrap-treetable/bootstrap-treetable.css}" rel="stylesheet"/>
<link th:href="@{/css/animate.css}" rel="stylesheet"/> <link th:href="@{/css/animate.css}" rel="stylesheet"/>
<link th:href="@{/css/style.css}" rel="stylesheet"/> <link th:href="@{/css/style.css}" rel="stylesheet"/>
<link th:href="@{/ajax/libs/select/select2.css}" rel="stylesheet"/> <link th:href="@{/ajax/libs/select/select2.css}" rel="stylesheet"/>
<link th:href="@{/ruoyi/css/ry-ui.css}" rel="stylesheet"/> <link th:href="@{/ruoyi/css/ry-ui.css}" rel="stylesheet"/>
</head> </head>
<div th:fragment="footer"> <div th:fragment="footer">
<script th:src="@{/js/jquery.min.js}"></script> <script th:src="@{/js/jquery.min.js}"></script>
<script th:src="@{/js/bootstrap.min.js}"></script> <script th:src="@{/js/bootstrap.min.js}"></script>
<!-- bootstrap-table 表格插件 --> <!-- bootstrap-table 表格插件 -->
<script th:src="@{/ajax/libs/bootstrap-table/bootstrap-table.min.js}"></script> <script th:src="@{/ajax/libs/bootstrap-table/bootstrap-table.min.js}"></script>
<script th:src="@{/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.min.js}"></script> <script th:src="@{/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.min.js}"></script>
<script th:src="@{/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js}"></script> <script th:src="@{/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js}"></script>
<script th:src="@{/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.min.js}"></script> <script th:src="@{/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.min.js}"></script>
<!-- jquery-validate 表单验证插件 --> <!-- jquery-validate 表单验证插件 -->
<script th:src="@{/ajax/libs/validate/jquery.validate.min.js}"></script> <script th:src="@{/ajax/libs/validate/jquery.validate.min.js}"></script>
<script th:src="@{/ajax/libs/validate/messages_zh.min.js}"></script> <script th:src="@{/ajax/libs/validate/messages_zh.min.js}"></script>
<script th:src="@{/ajax/libs/validate/jquery.validate.extend.js}"></script> <script th:src="@{/ajax/libs/validate/jquery.validate.extend.js}"></script>
<!-- jquery-validate 表单树插件 --> <!-- jquery-validate 表单树插件 -->
<script th:src="@{/ajax/libs/bootstrap-treetable/bootstrap-treetable.js}"></script> <script th:src="@{/ajax/libs/bootstrap-treetable/bootstrap-treetable.js}"></script>
<!-- jquery-export 表格导出插件 --> <!-- jquery-export 表格导出插件 -->
<script th:src="@{/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js}"></script> <script th:src="@{/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js}"></script>
<script th:src="@{/ajax/libs/bootstrap-table/extensions/export/tableExport.js}"></script> <script th:src="@{/ajax/libs/bootstrap-table/extensions/export/tableExport.js}"></script>
<!-- 遮罩层 --> <!-- 遮罩层 -->
<script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script> <script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
<script th:src="@{/ajax/libs/iCheck/icheck.min.js}"></script> <script th:src="@{/ajax/libs/iCheck/icheck.min.js}"></script>
<script th:src="@{/ajax/libs/layer/layer.min.js}"></script> <script th:src="@{/ajax/libs/layer/layer.min.js}"></script>
<script th:src="@{/ajax/libs/layui/layui.js}"></script> <script th:src="@{/ajax/libs/layui/layui.js}"></script>
<script th:src="@{/ruoyi/js/common.js?v=3.1.0}"></script> <script th:src="@{/ruoyi/js/common.js?v=3.1.0}"></script>
<script th:src="@{/ruoyi/js/ry-ui.js?v=3.1.0}"></script> <script th:src="@{/ruoyi/js/ry-ui.js?v=3.1.0}"></script>
<script src="http://tajs.qq.com/stats?sId=62048022"></script> <script src="http://tajs.qq.com/stats?sId=62048022"></script>
<script th:inline="javascript"> var ctx = [[@{/}]]; </script> <script th:inline="javascript"> var ctx = [[@{
</div> /}]]; </script>
</div>

View File

@ -1,143 +1,164 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org"> <html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<title>若依管理系统首页</title> <title>若依管理系统首页</title>
<meta name="keywords" content="若依管理系统首页"> <meta name="keywords" content="若依管理系统首页">
<meta name="description" content="若依管理系统首页"> <meta name="description" content="若依管理系统首页">
<!--[if lt IE 9]> <!--[if lt IE 9]>
<meta http-equiv="refresh" content="0;ie.html"/> <meta http-equiv="refresh" content="0;ie.html"/>
<![endif]--> <![endif]-->
<link th:href="@{favicon.ico}" rel="stylesheet"/> <link th:href="@{favicon.ico}" rel="stylesheet"/>
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/> <link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/> <link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
<link th:href="@{/css/animate.css}" rel="stylesheet"/> <link th:href="@{/css/animate.css}" rel="stylesheet"/>
<link th:href="@{/css/style.css}" rel="stylesheet"/> <link th:href="@{/css/style.css}" rel="stylesheet"/>
<link th:href="@{/ruoyi/css/ry-ui.css?v=3.1.0}" rel="stylesheet"/> <link th:href="@{/ruoyi/css/ry-ui.css?v=3.1.0}" rel="stylesheet"/>
<style type="text/css"> <style type="text/css">
.nav > li:hover .dropdown-menu {display: block;} .nav > li:hover .dropdown-menu {
#content-main.max { height: calc(100% - 110px); overflow: hidden; width: 100%; height: 100%; left: 0px; position: absolute; top: 0px; z-index: 9998; margin: 0; } display: block;
</style> }
</head>
<body class="fixed-sidebar full-height-layout gray-bg" style="overflow: hidden" th:classappend="${@config.getKey('sys.index.skinName')}"> #content-main.max {
<div id="wrapper"> height: calc(100% - 110px);
overflow: hidden;
<!--左侧导航开始--> width: 100%;
<nav class="navbar-default navbar-static-side" role="navigation"> height: 100%;
<div class="nav-close"> left: 0px;
<i class="fa fa-times-circle"></i> position: absolute;
</div> top: 0px;
<div class="sidebar-collapse"> z-index: 9998;
<ul class="nav" id="side-menu"> margin: 0;
<li class="nav-header"> }
<div class="dropdown profile-element"> <span> </style>
<img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{/profile/avatar/} + ${user.avatar}" alt="image" class="img-circle" height="60" width="60"/></span> </head>
<a data-toggle="dropdown" class="dropdown-toggle" href="#"> <body class="fixed-sidebar full-height-layout gray-bg" style="overflow: hidden"
<span class="clear"><span class="block m-t-xs"><strong class="font-bold" th:text="${user.userName}">用户</strong></span> th:classappend="${@config.getKey('sys.index.skinName')}">
<span class="text-muted text-xs block"><span th:text="${user.dept?.deptName}">部门</span> <b class="caret"></b></span> </span> </a> <div id="wrapper">
<ul class="dropdown-menu animated fadeInRight m-t-xs">
<li><a class="menuItem" th:href="@{/system/user/profile}">个人信息</a></li> <!--左侧导航开始-->
<li class="divider"></li> <nav class="navbar-default navbar-static-side" role="navigation">
<li><a th:href="@{logout}">退出</a></li> <div class="nav-close">
</ul> <i class="fa fa-times-circle"></i>
</div> </div>
</li> <div class="sidebar-collapse">
<li class="active"> <ul class="nav" id="side-menu">
<a href="index.html"><i class="fa fa-home"></i> <span class="nav-label">主页</span> <span class="fa arrow"></span></a> <li class="nav-header">
<ul class="nav nav-second-level"> <div class="dropdown profile-element"> <span>
<li class="active"><a class="menuItem" th:href="@{/system/main}">了解若依</a></li> <img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{/profile/avatar/} + ${user.avatar}"
</ul> alt="image" class="img-circle" height="60" width="60"/></span>
</li> <a data-toggle="dropdown" class="dropdown-toggle" href="#">
<li th:each="menu : ${menus}"> <span class="clear"><span class="block m-t-xs"><strong class="font-bold"
<a href="#"> th:text="${user.userName}">用户</strong></span>
<i class="fa fa fa-bar-chart-o" th:class="${menu.icon}"></i> <span class="text-muted text-xs block"><span th:text="${user.dept?.deptName}">部门</span> <b
<span class="nav-label" th:text="${menu.menuName}">一级菜单</span> class="caret"></b></span> </span> </a>
<span class="fa arrow"></span> <ul class="dropdown-menu animated fadeInRight m-t-xs">
</a> <li><a class="menuItem" th:href="@{/system/user/profile}">个人信息</a></li>
<ul class="nav nav-second-level collapse"> <li class="divider"></li>
<li th:each="cmenu : ${menu.children}"> <li><a th:href="@{logout}">退出</a></li>
<a th:if="${#lists.isEmpty(cmenu.children)}" class="menuItem" th:utext="${cmenu.menuName}" th:href="@{${cmenu.url}}">二级菜单</a> </ul>
<a th:if="${not #lists.isEmpty(cmenu.children)}" href="#">[[${cmenu.menuName}]]<span class="fa arrow"></span></a> </div>
<ul th:if="${not #lists.isEmpty(cmenu.children)}" class="nav nav-third-level"> </li>
<li th:each="emenu : ${cmenu.children}"><a class="menuItem" th:text="${emenu.menuName}" th:href="@{${emenu.url}}">三级菜单</a></li> <li class="active">
</ul> <a href="index.html"><i class="fa fa-home"></i> <span class="nav-label">主页</span> <span
</li> class="fa arrow"></span></a>
</ul> <ul class="nav nav-second-level">
</li> <li class="active"><a class="menuItem" th:href="@{/system/main}">了解若依</a></li>
</ul> </ul>
</div> </li>
</nav> <li th:each="menu : ${menus}">
<!--左侧导航结束--> <a href="#">
<i class="fa fa fa-bar-chart-o" th:class="${menu.icon}"></i>
<!--右侧部分开始--> <span class="nav-label" th:text="${menu.menuName}">一级菜单</span>
<div id="page-wrapper" class="gray-bg dashbard-1"> <span class="fa arrow"></span>
<div class="row border-bottom"> </a>
<nav class="navbar navbar-static-top" role="navigation" <ul class="nav nav-second-level collapse">
style="margin-bottom: 0"> <li th:each="cmenu : ${menu.children}">
<div class="navbar-header"> <a th:if="${#lists.isEmpty(cmenu.children)}" class="menuItem" th:utext="${cmenu.menuName}"
th:href="@{${cmenu.url}}">二级菜单</a>
<a class="navbar-minimalize minimalize-styl-2 btn btn-default " href="#" title="收起菜单"> <a th:if="${not #lists.isEmpty(cmenu.children)}" href="#">[[${cmenu.menuName}]]<span
<i class="fa fa-bars"></i> class="fa arrow"></span></a>
</a> <ul th:if="${not #lists.isEmpty(cmenu.children)}" class="nav nav-third-level">
</div> <li th:each="emenu : ${cmenu.children}"><a class="menuItem" th:text="${emenu.menuName}"
<ul class="nav navbar-top-links navbar-right welcome-message"> th:href="@{${emenu.url}}">三级菜单</a></li>
<li> </ul>
<span class="m-r-sm text-muted">欢迎来到若依管理后台.</span> </li>
</li> </ul>
<li><a id="fullScreen"><i class="fa fa-arrows-alt"></i>全屏</a></li> </li>
<li><a th:href="@{logout}"><i class="fa fa-sign-out"></i>退出</a></li> </ul>
</ul> </div>
</nav> </nav>
</div> <!--左侧导航结束-->
<div class="row content-tabs">
<button class="roll-nav roll-left tabLeft"> <!--右侧部分开始-->
<i class="fa fa-backward"></i> <div id="page-wrapper" class="gray-bg dashbard-1">
</button> <div class="row border-bottom">
<nav class="page-tabs menuTabs"> <nav class="navbar navbar-static-top" role="navigation"
<div class="page-tabs-content"> style="margin-bottom: 0">
<a href="javascript:;" class="active menuTab" data-id="/system/main">首页</a> <div class="navbar-header">
</div>
</nav> <a class="navbar-minimalize minimalize-styl-2 btn btn-default " href="#" title="收起菜单">
<button class="roll-nav roll-right tabRight"> <i class="fa fa-bars"></i>
<i class="fa fa-forward"></i> </a>
</button> </div>
<div class="btn-group roll-nav roll-right"> <ul class="nav navbar-top-links navbar-right welcome-message">
<button class="dropdown J_tabClose" data-toggle="dropdown"> <li>
页签操作<span class="caret"></span> <span class="m-r-sm text-muted">欢迎来到若依管理后台.</span>
</button> </li>
<ul role="menu" class="dropdown-menu dropdown-menu-right"> <li><a id="fullScreen"><i class="fa fa-arrows-alt"></i>全屏</a></li>
<li><a class="tabCloseCurrent" href="javascript:void();">关闭当前</a></li> <li><a th:href="@{logout}"><i class="fa fa-sign-out"></i>退出</a></li>
<li><a class="tabCloseOther" href="javascript:void();">关闭其他</a></li> </ul>
<li><a class="tabCloseAll" href="javascript:void();">全部关闭</a></li> </nav>
<li><a class="tabMaxCurrent" href="javascript:void();">全屏显示</a></li> </div>
</ul> <div class="row content-tabs">
</div> <button class="roll-nav roll-left tabLeft">
<a href="#" class="roll-nav roll-right tabReload"><i class="fa fa-refresh"></i> 刷新</a> <i class="fa fa-backward"></i>
</div> </button>
<nav class="page-tabs menuTabs">
<a id="ax_close_max" class="ax_close_max" href="#" title="关闭全屏"> <i class="fa fa-times-circle-o"></i> </a> <div class="page-tabs-content">
<a href="javascript:;" class="active menuTab" data-id="/system/main">首页</a>
<div class="row mainContent" id="content-main"> </div>
<iframe class="RuoYi_iframe" name="iframe0" width="100%" height="100%" data-id="/system/main" </nav>
th:src="@{/system/main}" frameborder="0" seamless></iframe> <button class="roll-nav roll-right tabRight">
</div> <i class="fa fa-forward"></i>
<div class="footer"> </button>
<div class="pull-right">© [[${copyrightYear}]] RuoYi Copyright </div> <div class="btn-group roll-nav roll-right">
</div> <button class="dropdown J_tabClose" data-toggle="dropdown">
</div> 页签操作<span class="caret"></span>
<!--右侧部分结束--> </button>
</div> <ul role="menu" class="dropdown-menu dropdown-menu-right">
<!-- 全局js --> <li><a class="tabCloseCurrent" href="javascript:void();">关闭当前</a></li>
<script th:src="@{/js/jquery.min.js}"></script> <li><a class="tabCloseOther" href="javascript:void();">关闭其他</a></li>
<script th:src="@{/js/bootstrap.min.js}"></script> <li><a class="tabCloseAll" href="javascript:void();">全部关闭</a></li>
<script th:src="@{/js/plugins/metisMenu/jquery.metisMenu.js}"></script> <li><a class="tabMaxCurrent" href="javascript:void();">全屏显示</a></li>
<script th:src="@{/js/plugins/slimscroll/jquery.slimscroll.min.js}"></script> </ul>
<script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script> </div>
<script src="http://tajs.qq.com/stats?sId=62048022"></script> <a href="#" class="roll-nav roll-right tabReload"><i class="fa fa-refresh"></i> 刷新</a>
<script th:src="@{/ruoyi/js/ry-ui.js?v=3.1.0}"></script> </div>
<script th:src="@{/ruoyi/index.js}"></script>
<script th:src="@{/ajax/libs/fullscreen/jquery.fullscreen.js}"></script> <a id="ax_close_max" class="ax_close_max" href="#" title="关闭全屏"> <i class="fa fa-times-circle-o"></i> </a>
</body>
</html> <div class="row mainContent" id="content-main">
<iframe class="RuoYi_iframe" name="iframe0" width="100%" height="100%" data-id="/system/main"
th:src="@{/system/main}" frameborder="0" seamless></iframe>
</div>
<div class="footer">
<div class="pull-right">© [[${copyrightYear}]] RuoYi Copyright</div>
</div>
</div>
<!--右侧部分结束-->
</div>
<!-- 全局js -->
<script th:src="@{/js/jquery.min.js}"></script>
<script th:src="@{/js/bootstrap.min.js}"></script>
<script th:src="@{/js/plugins/metisMenu/jquery.metisMenu.js}"></script>
<script th:src="@{/js/plugins/slimscroll/jquery.slimscroll.min.js}"></script>
<script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
<script src="http://tajs.qq.com/stats?sId=62048022"></script>
<script th:src="@{/ruoyi/js/ry-ui.js?v=3.1.0}"></script>
<script th:src="@{/ruoyi/index.js}"></script>
<script th:src="@{/ajax/libs/fullscreen/jquery.fullscreen.js}"></script>
</body>
</html>

View File

@ -1,89 +1,99 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org"> <html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<title>若依管理系统</title> <title>若依管理系统</title>
<meta name="keywords" content="若依,若依开源,若依框架,若依系统,ruoyi"> <meta name="keywords" content="若依,若依开源,若依框架,若依系统,ruoyi">
<meta name="description" content="若依基于SpringBoot2.0的权限管理系统 易读易懂、界面简洁美观。 核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖"> <meta name="description" content="若依基于SpringBoot2.0的权限管理系统 易读易懂、界面简洁美观。 核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖">
<link href="../static/css/bootstrap.min.css" th:href="@{css/bootstrap.min.css}" rel="stylesheet"/> <link href="../static/css/bootstrap.min.css" th:href="@{css/bootstrap.min.css}" rel="stylesheet"/>
<link href="../static/css/font-awesome.min.css" th:href="@{css/font-awesome.min.css}" rel="stylesheet"/> <link href="../static/css/font-awesome.min.css" th:href="@{css/font-awesome.min.css}" rel="stylesheet"/>
<link href="../static/css/style.css" th:href="@{css/style.css}" rel="stylesheet"/> <link href="../static/css/style.css" th:href="@{css/style.css}" rel="stylesheet"/>
<link href="../static/css/login.min.css" th:href="@{css/login.min.css}" rel="stylesheet"/> <link href="../static/css/login.min.css" th:href="@{css/login.min.css}" rel="stylesheet"/>
<link href="../static/ajax/libs/iCheck/custom.css" th:href="@{/ajax/libs/iCheck/custom.css}" rel="stylesheet"/> <link href="../static/ajax/libs/iCheck/custom.css" th:href="@{/ajax/libs/iCheck/custom.css}" rel="stylesheet"/>
<link href="../static/ruoyi/css/ry-ui.css" th:href="@{/ruoyi/css/ry-ui.css?v=3.1.0}" rel="stylesheet"/> <link href="../static/ruoyi/css/ry-ui.css" th:href="@{/ruoyi/css/ry-ui.css?v=3.1.0}" rel="stylesheet"/>
<!--[if lt IE 9]> <!--[if lt IE 9]>
<meta http-equiv="refresh" content="0;ie.html" /> <meta http-equiv="refresh" content="0;ie.html"/>
<![endif]--> <![endif]-->
<link rel="shortcut icon" href="../static/favicon.ico" th:href="@{favicon.ico}"/> <link rel="shortcut icon" href="../static/favicon.ico" th:href="@{favicon.ico}"/>
<style type="text/css">label.error { position:inherit; }</style> <style type="text/css">label.error {
<script> position: inherit;
if(window.top!==window.self){window.top.location=window.location}; }</style>
</script> <script>
</head> if (window.top !== window.self) {
window.top.location = window.location
<body class="signin"> }
;
<div class="signinpanel"> </script>
<div class="row"> </head>
<div class="col-sm-7">
<div class="signin-info"> <body class="signin">
<div class="logopanel m-b">
<h1><img alt="[ 若依 ]" src="../static/ruoyi.png" th:src="@{/ruoyi.png}"></h1> <div class="signinpanel">
</div> <div class="row">
<div class="m-b"></div> <div class="col-sm-7">
<h4>欢迎使用 <strong>若依 后台管理系统</strong></h4> <div class="signin-info">
<ul class="m-b"> <div class="logopanel m-b">
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> SpringBoot</li> <h1><img alt="[ 若依 ]" src="../static/ruoyi.png" th:src="@{/ruoyi.png}"></h1>
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Mybatis</li> </div>
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Shiro</li> <div class="m-b"></div>
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Thymeleaf</li> <h4>欢迎使用 <strong>若依 后台管理系统</strong></h4>
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Bootstrap</li> <ul class="m-b">
</ul> <li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> SpringBoot</li>
<strong>还没有账号? <a href="#">立即注册&raquo;</a></strong> <li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Mybatis</li>
</div> <li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Shiro</li>
</div> <li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Thymeleaf</li>
<div class="col-sm-5"> <li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Bootstrap</li>
<form id="signupForm"> </ul>
<h4 class="no-margins">登录:</h4> <strong>还没有账号? <a href="#">立即注册&raquo;</a></strong>
<p class="m-t-md">你若不离不弃,我必生死相依</p> </div>
<input type="text" name="username" class="form-control uname" placeholder="用户名" value="admin" /> </div>
<input type="password" name="password" class="form-control pword m-b" placeholder="密码" value="admin123" /> <div class="col-sm-5">
<div class="row" th:if="${captchaEnabled==true}"> <form id="signupForm">
<div class="col-xs-6"> <h4 class="no-margins">登录:</h4>
<input type="text" name="validateCode" class="form-control code" placeholder="验证码" maxlength="5"> <p class="m-t-md">你若不离不弃,我必生死相依</p>
</div> <input type="text" name="username" class="form-control uname" placeholder="用户名" value="admin"/>
<div class="col-xs-6"> <input type="password" name="password" class="form-control pword m-b" placeholder="密码"
<a href="javascript:void(0);" title="点击更换验证码"> value="admin123"/>
<img th:src="@{captcha/captchaImage(type=${captchaType})}" class="imgcode" width="85%"/> <div class="row" th:if="${captchaEnabled==true}">
</a> <div class="col-xs-6">
</div> <input type="text" name="validateCode" class="form-control code" placeholder="验证码"
</div> maxlength="5">
<input class="i-checks" type="checkbox" name="rememberme" />&nbsp;&nbsp;记住我 </div>
<button class="btn btn-success btn-block" id="btnSubmit" data-loading="正在验证登录,请稍后...">登录</button> <div class="col-xs-6">
</form> <a href="javascript:void(0);" title="点击更换验证码">
</div> <img th:src="@{captcha/captchaImage(type=${captchaType})}" class="imgcode" width="85%"/>
</div> </a>
<div class="signup-footer"> </div>
<div class="pull-left"> </div>
&copy; 2018 All Rights Reserved. RuoYi <br> <input class="i-checks" type="checkbox" name="rememberme"/>&nbsp;&nbsp;记住我
<a href="http://www.miitbeian.gov.cn/" target="_blank" rel="nofollow">粤ICP备18046899号</a><br> <button class="btn btn-success btn-block" id="btnSubmit" data-loading="正在验证登录,请稍后...">登录</button>
</div> </form>
</div> </div>
</div> </div>
<script th:inline="javascript"> var ctx = [[@{/}]]; var captchaType = [[${captchaType}]]; </script> <div class="signup-footer">
<!-- 全局js --> <div class="pull-left">
<script src="../static/js/jquery.min.js" th:src="@{/js/jquery.min.js}"></script> &copy; 2018 All Rights Reserved. RuoYi <br>
<script src="../static/js/bootstrap.min.js" th:src="@{/js/bootstrap.min.js}"></script> <a href="http://www.miitbeian.gov.cn/" target="_blank" rel="nofollow">粤ICP备18046899号</a><br>
<!-- 验证插件 --> </div>
<script src="../static/ajax/libs/validate/jquery.validate.min.js" th:src="@{/ajax/libs/validate/jquery.validate.min.js}"></script> </div>
<script src="../static/ajax/libs/validate/messages_zh.min.js" th:src="@{/ajax/libs/validate/messages_zh.min.js}"></script> </div>
<script src="../static/ajax/libs/layer/layer.min.js" th:src="@{/ajax/libs/layer/layer.min.js}"></script> <script th:inline="javascript"> var ctx = [[@{
<script src="../static/ajax/libs/iCheck/icheck.min.js" th:src="@{/ajax/libs/iCheck/icheck.min.js}"></script> /}]]; var captchaType = [[${captchaType}]]; </script>
<script src="../static/ajax/libs/blockUI/jquery.blockUI.js" th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script> <!-- 全局js -->
<script src="http://tajs.qq.com/stats?sId=62048022"></script> <script src="../static/js/jquery.min.js" th:src="@{/js/jquery.min.js}"></script>
<script src="../static/ruoyi/js/ry-ui.js" th:src="@{/ruoyi/js/ry-ui.js?v=3.1.0}"></script> <script src="../static/js/bootstrap.min.js" th:src="@{/js/bootstrap.min.js}"></script>
<script src="../static/ruoyi/login.js" th:src="@{/ruoyi/login.js}"></script> <!-- 验证插件 -->
</body> <script src="../static/ajax/libs/validate/jquery.validate.min.js"
</html> th:src="@{/ajax/libs/validate/jquery.validate.min.js}"></script>
<script src="../static/ajax/libs/validate/messages_zh.min.js"
th:src="@{/ajax/libs/validate/messages_zh.min.js}"></script>
<script src="../static/ajax/libs/layer/layer.min.js" th:src="@{/ajax/libs/layer/layer.min.js}"></script>
<script src="../static/ajax/libs/iCheck/icheck.min.js" th:src="@{/ajax/libs/iCheck/icheck.min.js}"></script>
<script src="../static/ajax/libs/blockUI/jquery.blockUI.js" th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
<script src="http://tajs.qq.com/stats?sId=62048022"></script>
<script src="../static/ruoyi/js/ry-ui.js" th:src="@{/ruoyi/js/ry-ui.js?v=3.1.0}"></script>
<script src="../static/ruoyi/login.js" th:src="@{/ruoyi/login.js}"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -1,106 +1,108 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" > <html lang="zh" xmlns:th="http://www.thymeleaf.org">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="white-bg"> <body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> <div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-job-add"> <form class="form-horizontal m" id="form-job-add">
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">任务名称:</label> <label class="col-sm-3 control-label">任务名称:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" name="jobName" id="jobName"> <input class="form-control" type="text" name="jobName" id="jobName">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">任务组名:</label> <label class="col-sm-3 control-label">任务组名:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" name="jobGroup" id="jobGroup"> <input class="form-control" type="text" name="jobGroup" id="jobGroup">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label ">方法名称:</label> <label class="col-sm-3 control-label ">方法名称:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" name="methodName" id="methodName"/> <input class="form-control" type="text" name="methodName" id="methodName"/>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label ">方法参数:</label> <label class="col-sm-3 control-label ">方法参数:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" name="methodParams" id="methodParams"/> <input class="form-control" type="text" name="methodParams" id="methodParams"/>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label ">cron表达式</label> <label class="col-sm-3 control-label ">cron表达式</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" name="cronExpression" id="cronExpression"/> <input class="form-control" type="text" name="cronExpression" id="cronExpression"/>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">执行策略:</label> <label class="col-sm-3 control-label">执行策略:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<label class="radio-box"> <input type="radio" name="misfirePolicy" value="1" th:checked="true"/> 立即执行 </label> <label class="radio-box"> <input type="radio" name="misfirePolicy" value="1" th:checked="true"/> 立即执行
<label class="radio-box"> <input type="radio" name="misfirePolicy" value="2" /> 执行一次 </label> </label>
<label class="radio-box"> <input type="radio" name="misfirePolicy" value="3" /> 放弃执行 </label> <label class="radio-box"> <input type="radio" name="misfirePolicy" value="2"/> 执行一次 </label>
</div> <label class="radio-box"> <input type="radio" name="misfirePolicy" value="3"/> 放弃执行 </label>
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">状态:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">状态:</label>
<div class="radio-box" th:each="dict : ${@dict.getType('sys_job_status')}"> <div class="col-sm-8">
<input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}" th:checked="${dict.isDefault == 'Y' ? true : false}"> <div class="radio-box" th:each="dict : ${@dict.getType('sys_job_status')}">
<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label> <input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}"
</div> th:checked="${dict.isDefault == 'Y' ? true : false}">
</div> <label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">备注:</label> </div>
<div class="col-sm-8"> <div class="form-group">
<textarea id="remark" name="remark" class="form-control"></textarea> <label class="col-sm-3 control-label">备注:</label>
</div> <div class="col-sm-8">
</div> <textarea id="remark" name="remark" class="form-control"></textarea>
</form> </div>
</div> </div>
<div th:include="include::footer"></div> </form>
<script type="text/javascript"> </div>
var prefix = ctx + "monitor/job"; <div th:include="include::footer"></div>
<script type="text/javascript">
$("#form-job-add").validate({ var prefix = ctx + "monitor/job";
rules:{
jobName:{ $("#form-job-add").validate({
required:true, rules: {
}, jobName: {
jobGroup:{ required: true,
required:true, },
}, jobGroup: {
cronExpression:{ required: true,
required:true, },
remote: { cronExpression: {
url: prefix + "/checkCronExpressionIsValid", required: true,
type: "post", remote: {
dataType: "json", url: prefix + "/checkCronExpressionIsValid",
data: { type: "post",
"cronExpression": function() { dataType: "json",
return $.common.trim($("#cronExpression").val()); data: {
} "cronExpression": function () {
}, return $.common.trim($("#cronExpression").val());
dataFilter: function(data, type) { }
return data; },
} dataFilter: function (data, type) {
} return data;
}, }
}, }
messages: { },
"cronExpression": { },
remote: "表达式不正确" messages: {
} "cronExpression": {
} remote: "表达式不正确"
}); }
}
function submitHandler() { });
if ($.validate.form()) {
$.operate.save(prefix + "/add", $('#form-job-add').serialize()); function submitHandler() {
} if ($.validate.form()) {
} $.operate.save(prefix + "/add", $('#form-job-add').serialize());
</script> }
</body> }
</html> </script>
</body>
</html>

View File

@ -1,94 +1,100 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" <html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="white-bg"> <body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> <div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m-t" id="jobLogForm" th:if="${name == 'jobLog'}"> <form class="form-horizontal m-t" id="jobLogForm" th:if="${name == 'jobLog'}">
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">日志序号:</label> <label class="col-sm-3 control-label">日志序号:</label>
<div class="form-control-static" th:text="${jobLog.jobLogId}"> <div class="form-control-static" th:text="${jobLog.jobLogId}">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">任务名称:</label> <label class="col-sm-3 control-label">任务名称:</label>
<div class="form-control-static" th:text="${jobLog.jobName}"> <div class="form-control-static" th:text="${jobLog.jobName}">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">任务组名:</label> <label class="col-sm-3 control-label">任务组名:</label>
<div class="form-control-static" th:text="${jobLog.jobGroup}"> <div class="form-control-static" th:text="${jobLog.jobGroup}">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">任务方法:</label> <label class="col-sm-3 control-label">任务方法:</label>
<div class="form-control-static" th:text="${jobLog.methodName} + '(' + ${#strings.defaultString(jobLog.methodParams,'')} + ')'"> <div class="form-control-static"
</div> th:text="${jobLog.methodName} + '(' + ${#strings.defaultString(jobLog.methodParams,'')} + ')'">
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">日志信息:</label> <div class="form-group">
<div class="form-control-static" th:text="${jobLog.jobMessage}"> <label class="col-sm-3 control-label">日志信息:</label>
</div> <div class="form-control-static" th:text="${jobLog.jobMessage}">
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">执行状态:</label> <div class="form-group">
<div class="form-control-static" th:class="${jobLog.status == '0' ? 'label label-primary' : 'label label-danger'}" th:text="${jobLog.status == '0' ? '正常' : '失败'}"> <label class="col-sm-3 control-label">执行状态:</label>
</div> <div class="form-control-static"
</div> th:class="${jobLog.status == '0' ? 'label label-primary' : 'label label-danger'}"
<div class="form-group" th:style="'display:' + ${jobLog.status == '0' ? 'none' : 'block'}"> th:text="${jobLog.status == '0' ? '正常' : '失败'}">
<label class="col-sm-3 control-label">异常信息:</label> </div>
<div class="form-control-static" th:text="${jobLog.exceptionInfo}"> </div>
</div> <div class="form-group" th:style="'display:' + ${jobLog.status == '0' ? 'none' : 'block'}">
</div> <label class="col-sm-3 control-label">异常信息:</label>
</form> <div class="form-control-static" th:text="${jobLog.exceptionInfo}">
</div>
<form class="form-horizontal m-t" id="jobForm" th:if="${name == 'job'}"> </div>
<div class="form-group"> </form>
<label class="col-sm-3 control-label">任务序号:</label>
<div class="form-control-static" th:text="${job.jobId}"> <form class="form-horizontal m-t" id="jobForm" th:if="${name == 'job'}">
</div> <div class="form-group">
</div> <label class="col-sm-3 control-label">任务序号:</label>
<div class="form-group"> <div class="form-control-static" th:text="${job.jobId}">
<label class="col-sm-3 control-label">任务名称:</label> </div>
<div class="form-control-static" th:text="${job.jobName}"> </div>
</div> <div class="form-group">
</div> <label class="col-sm-3 control-label">任务名称:</label>
<div class="form-group"> <div class="form-control-static" th:text="${job.jobName}">
<label class="col-sm-3 control-label">任务组名:</label> </div>
<div class="form-control-static" th:text="${job.jobGroup}"> </div>
</div> <div class="form-group">
</div> <label class="col-sm-3 control-label">任务组名:</label>
<div class="form-group"> <div class="form-control-static" th:text="${job.jobGroup}">
<label class="col-sm-3 control-label">任务方法:</label> </div>
<div class="form-control-static" th:text="${job.methodName} + '(' + ${#strings.defaultString(job.methodParams,'')} + ')'"> </div>
</div> <div class="form-group">
</div> <label class="col-sm-3 control-label">任务方法:</label>
<div class="form-group"> <div class="form-control-static"
<label class="col-sm-3 control-label">执行表达式:</label> th:text="${job.methodName} + '(' + ${#strings.defaultString(job.methodParams,'')} + ')'">
<div class="form-control-static" th:text="${job.cronExpression}"> </div>
</div> </div>
</div> <div class="form-group">
<div class="form-group"> <label class="col-sm-3 control-label">执行表达式:</label>
<label class="col-sm-3 control-label">下次执行时间:</label> <div class="form-control-static" th:text="${job.cronExpression}">
<div class="form-control-static" th:text="${#dates.format(job.nextValidTime, 'yyyy-MM-dd HH:mm:ss')}"> </div>
</div> </div>
</div> <div class="form-group">
<div class="form-group"> <label class="col-sm-3 control-label">下次执行时间:</label>
<label class="col-sm-3 control-label">执行策略:</label> <div class="form-control-static" th:text="${#dates.format(job.nextValidTime, 'yyyy-MM-dd HH:mm:ss')}">
<div class="form-control-static" th:if="${job.misfirePolicy == '0'}">默认策略</div> </div>
<div class="form-control-static" th:if="${job.misfirePolicy == '1'}">立即执行</div> </div>
<div class="form-control-static" th:if="${job.misfirePolicy == '2'}">执行一次</div> <div class="form-group">
<div class="form-control-static" th:if="${job.misfirePolicy == '3'}">放弃执行</div> <label class="col-sm-3 control-label">执行策略:</label>
</div> <div class="form-control-static" th:if="${job.misfirePolicy == '0'}">默认策略</div>
<div class="form-group"> <div class="form-control-static" th:if="${job.misfirePolicy == '1'}">立即执行</div>
<label class="col-sm-3 control-label">执行状态:</label> <div class="form-control-static" th:if="${job.misfirePolicy == '2'}">执行一次</div>
<div class="form-control-static" th:class="${job.status == '0' ? 'label label-primary' : 'label label-danger'}" th:text="${job.status == '0' ? '正常' : '暂停'}"> <div class="form-control-static" th:if="${job.misfirePolicy == '3'}">放弃执行</div>
</div> </div>
</div> <div class="form-group">
</form> <label class="col-sm-3 control-label">执行状态:</label>
<div class="form-control-static"
</div> th:class="${job.status == '0' ? 'label label-primary' : 'label label-danger'}"
th:text="${job.status == '0' ? '正常' : '暂停'}">
</div>
</div>
</form>
</div>
</body> </body>
</html> </html>

View File

@ -1,107 +1,113 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" > <html lang="zh" xmlns:th="http://www.thymeleaf.org">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="white-bg"> <body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> <div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-job-edit" th:object="${job}"> <form class="form-horizontal m" id="form-job-edit" th:object="${job}">
<input id="jobId" name="jobId" type="hidden" th:field="*{jobId}"/> <input id="jobId" name="jobId" type="hidden" th:field="*{jobId}"/>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">任务名称:</label> <label class="col-sm-3 control-label">任务名称:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" name="jobName" id="jobName" th:field="*{jobName}"/> <input class="form-control" type="text" name="jobName" id="jobName" th:field="*{jobName}"/>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">任务组名:</label> <label class="col-sm-3 control-label">任务组名:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" name="jobGroup" id="jobGroup" th:field="*{jobGroup}"/> <input class="form-control" type="text" name="jobGroup" id="jobGroup" th:field="*{jobGroup}"/>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label ">方法名称:</label> <label class="col-sm-3 control-label ">方法名称:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" name="methodName" id="methodName" th:field="*{methodName}"/> <input class="form-control" type="text" name="methodName" id="methodName" th:field="*{methodName}"/>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label ">方法参数:</label> <label class="col-sm-3 control-label ">方法参数:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" name="methodParams" id="methodParams" th:field="*{methodParams}"/> <input class="form-control" type="text" name="methodParams" id="methodParams"
</div> th:field="*{methodParams}"/>
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label ">cron表达式</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label ">cron表达式</label>
<input class="form-control" type="text" name="cronExpression" id="cronExpression" th:field="*{cronExpression}"/> <div class="col-sm-8">
</div> <input class="form-control" type="text" name="cronExpression" id="cronExpression"
</div> th:field="*{cronExpression}"/>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">执行策略:</label> </div>
<div class="col-sm-8"> <div class="form-group">
<label class="radio-box"> <input type="radio" th:field="*{misfirePolicy}" name="misfirePolicy" value="1" /> 立即执行 </label> <label class="col-sm-3 control-label">执行策略:</label>
<label class="radio-box"> <input type="radio" th:field="*{misfirePolicy}" name="misfirePolicy" value="2" /> 执行一次 </label> <div class="col-sm-8">
<label class="radio-box"> <input type="radio" th:field="*{misfirePolicy}" name="misfirePolicy" value="3" /> 放弃执行 </label> <label class="radio-box"> <input type="radio" th:field="*{misfirePolicy}" name="misfirePolicy"
</div> value="1"/> 立即执行 </label>
</div> <label class="radio-box"> <input type="radio" th:field="*{misfirePolicy}" name="misfirePolicy"
<div class="form-group"> value="2"/> 执行一次 </label>
<label class="col-sm-3 control-label">状态:</label> <label class="radio-box"> <input type="radio" th:field="*{misfirePolicy}" name="misfirePolicy"
<div class="col-sm-8"> value="3"/> 放弃执行 </label>
<div class="radio-box" th:each="dict : ${@dict.getType('sys_job_status')}"> </div>
<input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}" th:field="*{status}"> </div>
<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label> <div class="form-group">
</div> <label class="col-sm-3 control-label">状态:</label>
</div> <div class="col-sm-8">
</div> <div class="radio-box" th:each="dict : ${@dict.getType('sys_job_status')}">
<div class="form-group"> <input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}"
<label class="col-sm-3 control-label">备注:</label> th:field="*{status}">
<div class="col-sm-8"> <label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
<textarea id="remark" name="remark" class="form-control">[[*{remark}]]</textarea> </div>
</div> </div>
</div> </div>
</form> <div class="form-group">
</div> <label class="col-sm-3 control-label">备注:</label>
<div th:include="include::footer"></div> <div class="col-sm-8">
<script type="text/javascript"> <textarea id="remark" name="remark" class="form-control">[[*{remark}]]</textarea>
var prefix = ctx + "monitor/job"; </div>
</div>
$("#form-job-edit").validate({ </form>
rules:{ </div>
jobName:{ <div th:include="include::footer"></div>
required:true, <script type="text/javascript">
}, var prefix = ctx + "monitor/job";
jobGroup:{
required:true, $("#form-job-edit").validate({
}, rules: {
cronExpression:{ jobName: {
required:true, required: true,
remote: { },
url: prefix + "/checkCronExpressionIsValid", jobGroup: {
type: "post", required: true,
dataType: "json", },
data: { cronExpression: {
"cronExpression": function() { required: true,
return $.common.trim($("#cronExpression").val()); remote: {
} url: prefix + "/checkCronExpressionIsValid",
}, type: "post",
dataFilter: function(data, type) { dataType: "json",
return data; data: {
} "cronExpression": function () {
} return $.common.trim($("#cronExpression").val());
}, }
}, },
messages: { dataFilter: function (data, type) {
"cronExpression": { return data;
remote: "表达式不正确" }
} }
} },
}); },
messages: {
function submitHandler() { "cronExpression": {
if ($.validate.form()) { remote: "表达式不正确"
$.operate.save(prefix + "/edit", $('#form-job-edit').serialize()); }
} }
} });
</script>
</body> function submitHandler() {
</html> if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-job-edit').serialize());
}
}
</script>
</body>
</html>

View File

@ -1,173 +1,178 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" <html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="gray-bg"> <body class="gray-bg">
<div class="container-div"> <div class="container-div">
<div class="row"> <div class="row">
<div class="col-sm-12 search-collapse"> <div class="col-sm-12 search-collapse">
<form id="job-form"> <form id="job-form">
<div class="select-list"> <div class="select-list">
<ul> <ul>
<li> <li>
任务名称:<input type="text" name="jobName"/> 任务名称:<input type="text" name="jobName"/>
</li> </li>
<li> <li>
方法名称:<input type="text" name="methodName"/> 方法名称:<input type="text" name="methodName"/>
</li> </li>
<li> <li>
任务状态:<select name="status" th:with="type=${@dict.getType('sys_job_status')}"> 任务状态:<select name="status" th:with="type=${@dict.getType('sys_job_status')}">
<option value="">所有</option> <option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option> <option th:each="dict : ${type}" th:text="${dict.dictLabel}"
</select> th:value="${dict.dictValue}"></option>
</li> </select>
<li> </li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a> <li>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a> <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
</li> class="fa fa-search"></i>&nbsp;搜索</a>
</ul> <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i
</div> class="fa fa-refresh"></i>&nbsp;重置</a>
</form> </li>
</div> </ul>
</div>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group"> </form>
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="monitor:job:add"> </div>
<i class="fa fa-plus"></i> 新增
</a> <div class="btn-group-sm hidden-xs" id="toolbar" role="group">
<a class="btn btn-primary btn-edit disabled" onclick="$.operate.edit()" shiro:hasPermission="system:job:edit"> <a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="monitor:job:add">
<i class="fa fa-edit"></i> 修改 <i class="fa fa-plus"></i> 新增
</a> </a>
<a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()" shiro:hasPermission="monitor:job:remove"> <a class="btn btn-primary btn-edit disabled" onclick="$.operate.edit()"
<i class="fa fa-remove"></i> 删除 shiro:hasPermission="system:job:edit">
</a> <i class="fa fa-edit"></i> 修改
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:job:export"> </a>
<i class="fa fa-download"></i> 导出 <a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()"
</a> shiro:hasPermission="monitor:job:remove">
<a class="btn btn-info" onclick="javascript:jobLog()" shiro:hasPermission="monitor:job:list"> <i class="fa fa-remove"></i> 删除
<i class="fa fa-list"></i> 日志 </a>
</a> <a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:job:export">
</div> <i class="fa fa-download"></i> 导出
</a>
<div class="col-sm-12 select-table table-striped"> <a class="btn btn-info" onclick="javascript:jobLog()" shiro:hasPermission="monitor:job:list">
<table id="bootstrap-table" data-mobile-responsive="true"></table> <i class="fa fa-list"></i> 日志
</div> </a>
</div> </div>
</div>
<div th:include="include :: footer"></div> <div class="col-sm-12 select-table table-striped">
<script th:inline="javascript"> <table id="bootstrap-table" data-mobile-responsive="true"></table>
var detailFlag = [[${@permission.hasPermi('monitor:job:detail')}]]; </div>
var editFlag = [[${@permission.hasPermi('monitor:job:edit')}]]; </div>
var removeFlag = [[${@permission.hasPermi('monitor:job:remove')}]]; </div>
var statusFlag = [[${@permission.hasPermi('monitor:job:changeStatus')}]]; <div th:include="include :: footer"></div>
var datas = [[${@dict.getType('sys_job_status')}]]; <script th:inline="javascript">
var prefix = ctx + "monitor/job"; var detailFlag = [[${@permission.hasPermi('monitor:job:detail')}]];
var editFlag = [[${@permission.hasPermi('monitor:job:edit')}]];
$(function() { var removeFlag = [[${@permission.hasPermi('monitor:job:remove')}]];
var options = { var statusFlag = [[${@permission.hasPermi('monitor:job:changeStatus')}]];
url: prefix + "/list", var datas = [[${@dict.getType('sys_job_status')}]];
detailUrl: prefix + "/detail/{id}", var prefix = ctx + "monitor/job";
createUrl: prefix + "/add",
updateUrl: prefix + "/edit/{id}", $(function () {
removeUrl: prefix + "/remove", var options = {
exportUrl: prefix + "/export", url: prefix + "/list",
sortName: "createTime", detailUrl: prefix + "/detail/{id}",
sortOrder: "desc", createUrl: prefix + "/add",
modalName: "任务", updateUrl: prefix + "/edit/{id}",
search: false, removeUrl: prefix + "/remove",
showExport: false, exportUrl: prefix + "/export",
columns: [{ sortName: "createTime",
checkbox: true sortOrder: "desc",
}, modalName: "任务",
{ search: false,
field: 'jobId', showExport: false,
title: '任务编号' columns: [{
}, checkbox: true
{ },
field: 'jobName', {
title: '任务名称', field: 'jobId',
sortable: true title: '任务编号'
}, },
{ {
field: 'jobGroup', field: 'jobName',
title: '任务组名', title: '任务名称',
sortable: true sortable: true
}, },
{ {
field: 'methodName', field: 'jobGroup',
title: '方法名称' title: '任务组名',
}, sortable: true
{ },
field: 'methodParams', {
title: '方法参数' field: 'methodName',
}, title: '方法名称'
{ },
field: 'cronExpression', {
title: '执行表达式' field: 'methodParams',
}, title: '方法参数'
{ },
field: 'status', {
title: '任务状态', field: 'cronExpression',
align: 'center', title: '执行表达式'
formatter: function(value, row, index) { },
return $.table.selectDictLabel(datas, value); {
} field: 'status',
}, title: '任务状态',
{ align: 'center',
field: 'createTime', formatter: function (value, row, index) {
title: '创建时间', return $.table.selectDictLabel(datas, value);
sortable: true }
}, },
{ {
title: '操作', field: 'createTime',
align: 'center', title: '创建时间',
formatter: function(value, row, index) { sortable: true
var actions = []; },
actions.push(statusTools(row)); {
actions.push('<a class="btn btn-primary btn-xs ' + statusFlag + '" href="#" onclick="run(\'' + row.jobId + '\')"><i class="fa fa-play-circle-o"></i> 执行</a> '); title: '操作',
actions.push('<a class="btn btn-warning btn-xs ' + detailFlag + '" href="#" onclick="$.operate.detail(\'' + row.jobId + '\')"><i class="fa fa-search"></i>详细</a> '); align: 'center',
return actions.join(''); formatter: function (value, row, index) {
} var actions = [];
}] actions.push(statusTools(row));
}; actions.push('<a class="btn btn-primary btn-xs ' + statusFlag + '" href="#" onclick="run(\'' + row.jobId + '\')"><i class="fa fa-play-circle-o"></i> 执行</a> ');
$.table.init(options); actions.push('<a class="btn btn-warning btn-xs ' + detailFlag + '" href="#" onclick="$.operate.detail(\'' + row.jobId + '\')"><i class="fa fa-search"></i>详细</a> ');
}); return actions.join('');
}
function statusTools(row) { }]
if (row.status == 1) { };
return '<a class="btn btn-info btn-xs ' + statusFlag + '" href="#" onclick="start(\'' + row.jobId + '\')"><i class="fa fa-play"></i>启用</a> '; $.table.init(options);
} else { });
return '<a class="btn btn-danger btn-xs ' + statusFlag + '" href="#" onclick="stop(\'' + row.jobId + '\')"><i class="fa fa-pause"></i>暂停</a> ';
} function statusTools(row) {
} if (row.status == 1) {
return '<a class="btn btn-info btn-xs ' + statusFlag + '" href="#" onclick="start(\'' + row.jobId + '\')"><i class="fa fa-play"></i>启用</a> ';
/*立即执行一次*/ } else {
function run(jobId) { return '<a class="btn btn-danger btn-xs ' + statusFlag + '" href="#" onclick="stop(\'' + row.jobId + '\')"><i class="fa fa-pause"></i>暂停</a> ';
$.modal.confirm("确认要立即执行任务吗?", function() { }
$.operate.post(prefix + "/run", { "jobId": jobId}); }
})
} /*立即执行一次*/
function run(jobId) {
/*调度任务-停用*/ $.modal.confirm("确认要立即执行任务吗?", function () {
function stop(jobId) { $.operate.post(prefix + "/run", {"jobId": jobId});
$.modal.confirm("确认要停用任务吗?", function() { })
$.operate.post(prefix + "/changeStatus", { "jobId": jobId, "status": 1 }); }
})
} /*调度任务-停用*/
function stop(jobId) {
/*调度任务-启用*/ $.modal.confirm("确认要停用任务吗?", function () {
function start(jobId) { $.operate.post(prefix + "/changeStatus", {"jobId": jobId, "status": 1});
$.modal.confirm("确认要启用任务吗?", function() { })
$.operate.post(prefix + "/changeStatus", { "jobId": jobId, "status": 0 }); }
})
} /*调度任务-启用*/
function start(jobId) {
//调度日志查询 $.modal.confirm("确认要启用任务吗?", function () {
function jobLog(id) { $.operate.post(prefix + "/changeStatus", {"jobId": jobId, "status": 0});
var url = ctx + 'monitor/jobLog'; })
createMenuItem(url, "调度日志"); }
}
</script> //调度日志查询
</body> function jobLog(id) {
var url = ctx + 'monitor/jobLog';
createMenuItem(url, "调度日志");
}
</script>
</body>
</html> </html>

View File

@ -1,132 +1,139 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" <html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="gray-bg"> <body class="gray-bg">
<div class="container-div"> <div class="container-div">
<div class="row"> <div class="row">
<div class="col-sm-12 search-collapse"> <div class="col-sm-12 search-collapse">
<form id="jobLog-form"> <form id="jobLog-form">
<div class="select-list"> <div class="select-list">
<ul> <ul>
<li> <li>
<label>任务名称:</label><input type="text" name="jobName"/> <label>任务名称:</label><input type="text" name="jobName"/>
</li> </li>
<li> <li>
<label>方法名称:</label><input type="text" name="methodName"/> <label>方法名称:</label><input type="text" name="methodName"/>
</li> </li>
<li> <li>
<label>执行状态:</label><select name="status" th:with="type=${@dict.getType('sys_common_status')}"> <label>执行状态:</label><select name="status"
<option value="">所有</option> th:with="type=${@dict.getType('sys_common_status')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option> <option value="">所有</option>
</select> <option th:each="dict : ${type}" th:text="${dict.dictLabel}"
</li> th:value="${dict.dictValue}"></option>
<li class="select-time"> </select>
<label>执行时间: </label> </li>
<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginTime]"/> <li class="select-time">
<span>-</span> <label>执行时间: </label>
<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endTime]"/> <input type="text" class="time-input" id="startTime" placeholder="开始时间"
</li> name="params[beginTime]"/>
<li> <span>-</span>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a> <input type="text" class="time-input" id="endTime" placeholder="结束时间"
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a> name="params[endTime]"/>
</li> </li>
</ul> <li>
</div> <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
</form> class="fa fa-search"></i>&nbsp;搜索</a>
</div> <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i
class="fa fa-refresh"></i>&nbsp;重置</a>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group"> </li>
<a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()" shiro:hasPermission="monitor:job:remove"> </ul>
<i class="fa fa-remove"></i> 删除 </div>
</a> </form>
<a class="btn btn-danger" onclick="$.operate.clean()" shiro:hasPermission="monitor:job:remove"> </div>
<i class="fa fa-trash"></i> 清空
</a> <div class="btn-group-sm hidden-xs" id="toolbar" role="group">
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:job:export"> <a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()"
<i class="fa fa-download"></i> 导出 shiro:hasPermission="monitor:job:remove">
</a> <i class="fa fa-remove"></i> 删除
</div> </a>
<a class="btn btn-danger" onclick="$.operate.clean()" shiro:hasPermission="monitor:job:remove">
<div class="col-sm-12 select-table table-striped"> <i class="fa fa-trash"></i> 清空
<table id="bootstrap-table" data-mobile-responsive="true"></table> </a>
</div> <a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:job:export">
</div> <i class="fa fa-download"></i> 导出
</div> </a>
<div th:include="include :: footer"></div> </div>
<script th:inline="javascript">
var detailFlag = [[${@permission.hasPermi('monitor:job:detail')}]]; <div class="col-sm-12 select-table table-striped">
var datas = [[${@dict.getType('sys_common_status')}]]; <table id="bootstrap-table" data-mobile-responsive="true"></table>
var prefix = ctx + "monitor/jobLog"; </div>
</div>
$(function() { </div>
var options = { <div th:include="include :: footer"></div>
url: prefix + "/list", <script th:inline="javascript">
cleanUrl: prefix + "/clean", var detailFlag = [[${@permission.hasPermi('monitor:job:detail')}]];
detailUrl: prefix + "/detail/{id}", var datas = [[${@dict.getType('sys_common_status')}]];
removeUrl: prefix + "/remove", var prefix = ctx + "monitor/jobLog";
exportUrl: prefix + "/export",
sortName: "createTime", $(function () {
sortOrder: "desc", var options = {
modalName: "调度日志", url: prefix + "/list",
search: false, cleanUrl: prefix + "/clean",
showExport: false, detailUrl: prefix + "/detail/{id}",
columns: [{ removeUrl: prefix + "/remove",
checkbox: true exportUrl: prefix + "/export",
}, sortName: "createTime",
{ sortOrder: "desc",
field: 'jobLogId', modalName: "调度日志",
title: '日志编号' search: false,
}, showExport: false,
{ columns: [{
field: 'jobName', checkbox: true
title: '任务名称', },
sortable: true {
}, field: 'jobLogId',
{ title: '日志编号'
field: 'jobGroup', },
title: '任务组名', {
sortable: true field: 'jobName',
}, title: '任务名称',
{ sortable: true
field: 'methodName', },
title: '方法名称' {
}, field: 'jobGroup',
{ title: '任务组名',
field: 'methodParams', sortable: true
title: '方法参数' },
}, {
{ field: 'methodName',
field: 'jobMessage', title: '方法名称'
title: '日志信息' },
}, {
{ field: 'methodParams',
field: 'status', title: '方法参数'
title: '状态', },
align: 'center', {
formatter: function(value, row, index) { field: 'jobMessage',
return $.table.selectDictLabel(datas, value); title: '日志信息'
} },
}, {
{ field: 'status',
field: 'createTime', title: '状态',
title: '创建时间', align: 'center',
sortable: true formatter: function (value, row, index) {
}, return $.table.selectDictLabel(datas, value);
{ }
title: '操作', },
align: 'center', {
formatter: function(value, row, index) { field: 'createTime',
var actions = []; title: '创建时间',
actions.push('<a class="btn btn-warning btn-xs ' + detailFlag + '" href="#" onclick="$.operate.detail(\'' + row.jobLogId + '\')"><i class="fa fa-search"></i>详细</a>'); sortable: true
return actions.join(''); },
} {
}] title: '操作',
}; align: 'center',
$.table.init(options); formatter: function (value, row, index) {
}); var actions = [];
</script> actions.push('<a class="btn btn-warning btn-xs ' + detailFlag + '" href="#" onclick="$.operate.detail(\'' + row.jobLogId + '\')"><i class="fa fa-search"></i>详细</a>');
</body> return actions.join('');
}
}]
};
$.table.init(options);
});
</script>
</body>
</html> </html>

View File

@ -1,126 +1,133 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" <html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="gray-bg"> <body class="gray-bg">
<div class="container-div"> <div class="container-div">
<div class="row"> <div class="row">
<div class="col-sm-12 search-collapse"> <div class="col-sm-12 search-collapse">
<form id="logininfor-form"> <form id="logininfor-form">
<div class="select-list"> <div class="select-list">
<ul> <ul>
<li> <li>
<label>登录地址:</label><input type="text" name="ipaddr"/> <label>登录地址:</label><input type="text" name="ipaddr"/>
</li> </li>
<li> <li>
<label>登录名称:</label><input type="text" name="loginName"/> <label>登录名称:</label><input type="text" name="loginName"/>
</li> </li>
<li> <li>
<label>登录状态:</label><select name="status" th:with="type=${@dict.getType('sys_common_status')}"> <label>登录状态:</label><select name="status"
<option value="">所有</option> th:with="type=${@dict.getType('sys_common_status')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option> <option value="">所有</option>
</select> <option th:each="dict : ${type}" th:text="${dict.dictLabel}"
</li> th:value="${dict.dictValue}"></option>
<li class="select-time"> </select>
<label>登录时间: </label> </li>
<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginTime]"/> <li class="select-time">
<span>-</span> <label>登录时间: </label>
<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endTime]"/> <input type="text" class="time-input" id="startTime" placeholder="开始时间"
</li> name="params[beginTime]"/>
<li> <span>-</span>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a> <input type="text" class="time-input" id="endTime" placeholder="结束时间"
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a> name="params[endTime]"/>
</li> </li>
</ul> <li>
</div> <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
</form> class="fa fa-search"></i>&nbsp;搜索</a>
</div> <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i
class="fa fa-refresh"></i>&nbsp;重置</a>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group"> </li>
<a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()" shiro:hasPermission="monitor:logininfor:remove"> </ul>
<i class="fa fa-remove"></i> 删除 </div>
</a> </form>
<a class="btn btn-danger" onclick="$.operate.clean()" shiro:hasPermission="monitor:logininfor:remove"> </div>
<i class="fa fa-trash"></i> 清空
</a> <div class="btn-group-sm hidden-xs" id="toolbar" role="group">
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:logininfor:export"> <a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()"
<i class="fa fa-download"></i> 导出 shiro:hasPermission="monitor:logininfor:remove">
</a> <i class="fa fa-remove"></i> 删除
</div> </a>
<a class="btn btn-danger" onclick="$.operate.clean()" shiro:hasPermission="monitor:logininfor:remove">
<div class="col-sm-12 select-table table-striped"> <i class="fa fa-trash"></i> 清空
<table id="bootstrap-table" data-mobile-responsive="true"></table> </a>
</div> <a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:logininfor:export">
</div> <i class="fa fa-download"></i> 导出
</div> </a>
</div>
<div th:include="include :: footer"></div>
<script th:inline="javascript"> <div class="col-sm-12 select-table table-striped">
var datas = [[${@dict.getType('sys_common_status')}]]; <table id="bootstrap-table" data-mobile-responsive="true"></table>
var prefix = ctx + "monitor/logininfor"; </div>
</div>
$(function() { </div>
var options = {
url: prefix + "/list", <div th:include="include :: footer"></div>
cleanUrl: prefix + "/clean", <script th:inline="javascript">
removeUrl: prefix + "/remove", var datas = [[${@dict.getType('sys_common_status')}]];
exportUrl: prefix + "/export", var prefix = ctx + "monitor/logininfor";
sortName: "loginTime",
sortOrder: "desc", $(function () {
modalName: "登录日志", var options = {
search: false, url: prefix + "/list",
showExport: false, cleanUrl: prefix + "/clean",
escape: true, removeUrl: prefix + "/remove",
columns: [{ exportUrl: prefix + "/export",
checkbox: true sortName: "loginTime",
}, sortOrder: "desc",
{ modalName: "登录日志",
field: 'infoId', search: false,
title: '访问编号' showExport: false,
}, escape: true,
{ columns: [{
field: 'loginName', checkbox: true
title: '登录名称', },
sortable: true {
}, field: 'infoId',
{ title: '访问编号'
field: 'ipaddr', },
title: '登录地址' {
}, field: 'loginName',
{ title: '登录名称',
field: 'loginLocation', sortable: true
title: '登录地点' },
}, {
{ field: 'ipaddr',
field: 'browser', title: '登录地址'
title: '浏览器' },
}, {
{ field: 'loginLocation',
field: 'os', title: '登录地点'
title: '操作系统' },
}, {
{ field: 'browser',
field: 'status', title: '浏览器'
title: '登录状态', },
align: 'center', {
formatter: function(value, row, index) { field: 'os',
return $.table.selectDictLabel(datas, value); title: '操作系统'
} },
}, {
{ field: 'status',
field: 'msg', title: '登录状态',
title: '操作信息' align: 'center',
}, formatter: function (value, row, index) {
{ return $.table.selectDictLabel(datas, value);
field: 'loginTime', }
title: '登录时间', },
sortable: true {
}] field: 'msg',
}; title: '操作信息'
$.table.init(options); },
}); {
</script> field: 'loginTime',
</body> title: '登录时间',
sortable: true
}]
};
$.table.init(options);
});
</script>
</body>
</html> </html>

View File

@ -1,142 +1,145 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" <html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="gray-bg"> <body class="gray-bg">
<div class="container-div"> <div class="container-div">
<div class="row"> <div class="row">
<div class="col-sm-12 search-collapse"> <div class="col-sm-12 search-collapse">
<form id="online-form"> <form id="online-form">
<div class="select-list"> <div class="select-list">
<ul> <ul>
<li> <li>
登录地址:<input type="text" name="ipaddr"/> 登录地址:<input type="text" name="ipaddr"/>
</li> </li>
<li> <li>
操作人员:<input type="text" name="loginName"/> 操作人员:<input type="text" name="loginName"/>
</li> </li>
<li> <li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a> <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a> class="fa fa-search"></i>&nbsp;搜索</a>
</li> <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i
</ul> class="fa fa-refresh"></i>&nbsp;重置</a>
</div> </li>
</form> </ul>
</div> </div>
</form>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group"> </div>
<a class="btn btn-danger btn-del disabled" onclick="javascript:batchForceLogout()" shiro:hasPermission="monitor:online:batchForceLogout">
<i class="fa fa-sign-out"></i> 强退 <div class="btn-group-sm hidden-xs" id="toolbar" role="group">
</a> <a class="btn btn-danger btn-del disabled" onclick="javascript:batchForceLogout()"
</div> shiro:hasPermission="monitor:online:batchForceLogout">
<i class="fa fa-sign-out"></i> 强退
<div class="col-sm-12 select-table table-striped"> </a>
<table id="bootstrap-table" data-mobile-responsive="true"></table> </div>
</div>
</div> <div class="col-sm-12 select-table table-striped">
</div> <table id="bootstrap-table" data-mobile-responsive="true"></table>
<div th:include="include :: footer"></div> </div>
<script th:inline="javascript"> </div>
var forceFlag = [[${@permission.hasPermi('monitor:online:forceLogout')}]]; </div>
var prefix = ctx + "monitor/online"; <div th:include="include :: footer"></div>
<script th:inline="javascript">
$(function() { var forceFlag = [[${@permission.hasPermi('monitor:online:forceLogout')}]];
var options = { var prefix = ctx + "monitor/online";
url: prefix + "/list",
exportUrl: prefix + "/export", $(function () {
sortName: "lastAccessTime", var options = {
sortOrder: "desc", url: prefix + "/list",
search: false, exportUrl: prefix + "/export",
escape: true, sortName: "lastAccessTime",
columns: [{ sortOrder: "desc",
checkbox: true search: false,
}, escape: true,
{ columns: [{
field: 'sessionId', checkbox: true
title: '会话编号' },
}, {
{ field: 'sessionId',
field: 'loginName', title: '会话编号'
title: '登录名称', },
sortable: true {
}, field: 'loginName',
{ title: '登录名称',
field: 'deptName', sortable: true
title: '部门名称' },
}, {
{ field: 'deptName',
field: 'ipaddr', title: '部门名称'
title: '主机' },
}, {
{ field: 'ipaddr',
field: 'longinLocation', title: '主机'
title: '登录地点' },
}, {
{ field: 'longinLocation',
field: 'browser', title: '登录地点'
title: '浏览器' },
}, {
{ field: 'browser',
field: 'os', title: '浏览器'
title: '操作系统' },
}, {
{ field: 'os',
field: 'status', title: '操作系统'
title: '会话状态', },
align: 'center', {
formatter: function(value, row, index) { field: 'status',
if (value == 'on_line') { title: '会话状态',
return '<span class="badge badge-primary">在线</span>'; align: 'center',
} else if (value == 'off_line') { formatter: function (value, row, index) {
return '<span class="badge badge-danger">离线</span>'; if (value == 'on_line') {
} return '<span class="badge badge-primary">在线</span>';
} } else if (value == 'off_line') {
}, return '<span class="badge badge-danger">离线</span>';
{ }
field: 'startTimestamp', }
title: '登录时间', },
sortable: true {
}, field: 'startTimestamp',
{ title: '登录时间',
field: 'lastAccessTime', sortable: true
title: '最后访问时间', },
sortable: true {
}, field: 'lastAccessTime',
{ title: '最后访问时间',
title: '操作', sortable: true
align: 'center', },
formatter: function(value, row, index) { {
var msg = '<a class="btn btn-danger btn-xs ' + forceFlag + '" href="#" onclick="forceLogout(\'' + row.sessionId + '\')"><i class="fa fa-sign-out"></i>强退</a> '; title: '操作',
return msg; align: 'center',
} formatter: function (value, row, index) {
}] var msg = '<a class="btn btn-danger btn-xs ' + forceFlag + '" href="#" onclick="forceLogout(\'' + row.sessionId + '\')"><i class="fa fa-sign-out"></i>强退</a> ';
}; return msg;
$.table.init(options); }
}); }]
};
// 单条强退 $.table.init(options);
function forceLogout(sessionId) { });
$.modal.confirm("确定要强制选中用户下线吗?", function() {
var data = { "sessionId": sessionId }; // 单条强退
$.operate.post(prefix + "/forceLogout", data); function forceLogout(sessionId) {
}) $.modal.confirm("确定要强制选中用户下线吗?", function () {
} var data = {"sessionId": sessionId};
$.operate.post(prefix + "/forceLogout", data);
// 批量强退 })
function batchForceLogout() { }
var rows = $.table.selectColumns("sessionId");
if (rows.length == 0) { // 批量强退
$.modal.alertWarning("请选择要强退的用户"); function batchForceLogout() {
return; var rows = $.table.selectColumns("sessionId");
} if (rows.length == 0) {
$.modal.confirm("确认要强退选中的" + rows.length + "条数据吗?", function() { $.modal.alertWarning("请选择要强退的用户");
var url = prefix + "/batchForceLogout"; return;
var data = { "ids": rows }; }
$.operate.post(url, data); $.modal.confirm("确认要强退选中的" + rows.length + "条数据吗?", function () {
}); var url = prefix + "/batchForceLogout";
} var data = {"ids": rows};
</script> $.operate.post(url, data);
</body> });
}
</script>
</body>
</html> </html>

View File

@ -1,55 +1,61 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" <html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="white-bg"> <body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> <div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m-t" id="signupForm"> <form class="form-horizontal m-t" id="signupForm">
<div class="form-group"> <div class="form-group">
<label class="col-sm-2 control-label">操作模块:</label> <label class="col-sm-2 control-label">操作模块:</label>
<div class="form-control-static" th:text="${operLog.title} + ' / ' + ${@dict.getLabel('sys_oper_type',operLog.businessType)}"> <div class="form-control-static"
</div> th:text="${operLog.title} + ' / ' + ${@dict.getLabel('sys_oper_type',operLog.businessType)}">
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-2 control-label">登录信息:</label> <div class="form-group">
<div class="form-control-static" th:text="${operLog.operName} + ' / ' + ${operLog.deptName} + ' / ' + ${operLog.operIp}+ ' / ' + ${operLog.operLocation}"> <label class="col-sm-2 control-label">登录信息:</label>
</div> <div class="form-control-static"
</div> th:text="${operLog.operName} + ' / ' + ${operLog.deptName} + ' / ' + ${operLog.operIp}+ ' / ' + ${operLog.operLocation}">
<div class="form-group"> </div>
<label class="col-sm-2 control-label">请求地址:</label> </div>
<div class="form-control-static" th:text="${operLog.operUrl}"> <div class="form-group">
</div> <label class="col-sm-2 control-label">请求地址:</label>
</div> <div class="form-control-static" th:text="${operLog.operUrl}">
<div class="form-group"> </div>
<label class="col-sm-2 control-label">操作方法:</label> </div>
<div class="form-control-static" th:text="${operLog.method}"> <div class="form-group">
</div> <label class="col-sm-2 control-label">操作方法:</label>
</div> <div class="form-control-static" th:text="${operLog.method}">
<div class="form-group"> </div>
<label class="col-sm-2 control-label">请求参数:</label> </div>
<div class="form-control-static"><pre id="operParam"></pre></div> <div class="form-group">
</div> <label class="col-sm-2 control-label">请求参数:</label>
<div class="form-group"> <div class="form-control-static">
<label class="col-sm-2 control-label">状态:</label> <pre id="operParam"></pre>
<div class="form-control-static" th:class="${operLog.status == 0 ? 'label label-primary' : 'label label-danger'}" th:text="${operLog.status == 0 ? '正常' : '异常'}"> </div>
</div> </div>
</div> <div class="form-group">
<div class="form-group" th:style="'display:' + ${operLog.status == 0 ? 'none' : 'block'}"> <label class="col-sm-2 control-label">状态:</label>
<label class="col-sm-2 control-label">异常信息:</label> <div class="form-control-static"
<div class="form-control-static" th:text="${operLog.errorMsg}"> th:class="${operLog.status == 0 ? 'label label-primary' : 'label label-danger'}"
</div> th:text="${operLog.status == 0 ? '正常' : '异常'}">
</div> </div>
</form> </div>
</div> <div class="form-group" th:style="'display:' + ${operLog.status == 0 ? 'none' : 'block'}">
<div th:include="include :: footer"></div> <label class="col-sm-2 control-label">异常信息:</label>
<div class="form-control-static" th:text="${operLog.errorMsg}">
<script th:inline="javascript"> </div>
$(function() { </div>
var text = [[${operLog.operParam}]]; </form>
var result = JSON.stringify(JSON.parse(text), null, 2); </div>
$("#operParam").html(result); <div th:include="include :: footer"></div>
});
</script> <script th:inline="javascript">
</body> $(function () {
var text = [[${operLog.operParam}]];
var result = JSON.stringify(JSON.parse(text), null, 2);
$("#operParam").html(result);
});
</script>
</body>
</html> </html>

View File

@ -1,145 +1,152 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" <html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="gray-bg"> <body class="gray-bg">
<div class="container-div"> <div class="container-div">
<div class="row"> <div class="row">
<div class="col-sm-12 search-collapse"> <div class="col-sm-12 search-collapse">
<form id="operlog-form"> <form id="operlog-form">
<div class="select-list"> <div class="select-list">
<ul> <ul>
<li> <li>
<label>系统模块: </label><input type="text" name="title"/> <label>系统模块: </label><input type="text" name="title"/>
</li> </li>
<li> <li>
<label>操作人员: </label><input type="text" name="operName"/> <label>操作人员: </label><input type="text" name="operName"/>
</li> </li>
<li> <li>
<label>操作类型: </label><select name="businessType" th:with="type=${@dict.getType('sys_oper_type')}"> <label>操作类型: </label><select name="businessType"
<option value="">所有</option> th:with="type=${@dict.getType('sys_oper_type')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option> <option value="">所有</option>
</select> <option th:each="dict : ${type}" th:text="${dict.dictLabel}"
</li> th:value="${dict.dictValue}"></option>
<li class="select-time"> </select>
<label>操作时间: </label> </li>
<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginTime]"/> <li class="select-time">
<span>-</span> <label>操作时间: </label>
<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endTime]"/> <input type="text" class="time-input" id="startTime" placeholder="开始时间"
</li> name="params[beginTime]"/>
<li> <span>-</span>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a> <input type="text" class="time-input" id="endTime" placeholder="结束时间"
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a> name="params[endTime]"/>
</li> </li>
</ul> <li>
</div> <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
</form> class="fa fa-search"></i>&nbsp;搜索</a>
</div> <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i
class="fa fa-refresh"></i>&nbsp;重置</a>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group"> </li>
<a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()" shiro:hasPermission="monitor:logininfor:remove"> </ul>
<i class="fa fa-remove"></i> 删除 </div>
</a> </form>
<a class="btn btn-danger" onclick="$.operate.clean()" shiro:hasPermission="monitor:logininfor:remove"> </div>
<i class="fa fa-trash"></i> 清空
</a> <div class="btn-group-sm hidden-xs" id="toolbar" role="group">
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:logininfor:export"> <a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()"
<i class="fa fa-download"></i> 导出 shiro:hasPermission="monitor:logininfor:remove">
</a> <i class="fa fa-remove"></i> 删除
</div> </a>
<a class="btn btn-danger" onclick="$.operate.clean()" shiro:hasPermission="monitor:logininfor:remove">
<div class="col-sm-12 select-table table-striped"> <i class="fa fa-trash"></i> 清空
<table id="bootstrap-table" data-mobile-responsive="true"></table> </a>
</div> <a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:logininfor:export">
</div> <i class="fa fa-download"></i> 导出
</div> </a>
</div>
<div th:include="include :: footer"></div>
<script th:inline="javascript"> <div class="col-sm-12 select-table table-striped">
var detailFlag = [[${@permission.hasPermi('monitor:operlog:detail')}]]; <table id="bootstrap-table" data-mobile-responsive="true"></table>
var datas = [[${@dict.getType('sys_oper_type')}]]; </div>
var prefix = ctx + "monitor/operlog"; </div>
</div>
$(function() {
var options = { <div th:include="include :: footer"></div>
url: prefix + "/list", <script th:inline="javascript">
cleanUrl: prefix + "/clean", var detailFlag = [[${@permission.hasPermi('monitor:operlog:detail')}]];
detailUrl: prefix + "/detail/{id}", var datas = [[${@dict.getType('sys_oper_type')}]];
removeUrl: prefix + "/remove", var prefix = ctx + "monitor/operlog";
exportUrl: prefix + "/export",
sortName: "operTime", $(function () {
sortOrder: "desc", var options = {
modalName: "操作日志", url: prefix + "/list",
search: false, cleanUrl: prefix + "/clean",
showExport: false, detailUrl: prefix + "/detail/{id}",
escape: true, removeUrl: prefix + "/remove",
columns: [{ exportUrl: prefix + "/export",
checkbox: true sortName: "operTime",
}, sortOrder: "desc",
{ modalName: "操作日志",
field: 'operId', search: false,
title: '日志编号' showExport: false,
}, escape: true,
{ columns: [{
field: 'title', checkbox: true
title: '系统模块' },
}, {
{ field: 'operId',
field: 'businessType', title: '日志编号'
title: '操作类型', },
align: 'center', {
formatter: function(value, row, index) { field: 'title',
return $.table.selectDictLabel(datas, value); title: '系统模块'
} },
}, {
{ field: 'businessType',
field: 'operName', title: '操作类型',
title: '操作人员', align: 'center',
sortable: true formatter: function (value, row, index) {
}, return $.table.selectDictLabel(datas, value);
{ }
field: 'deptName', },
title: '部门名称' {
}, field: 'operName',
{ title: '操作人员',
field: 'operIp', sortable: true
title: '主机' },
}, {
{ field: 'deptName',
field: 'operLocation', title: '部门名称'
title: '操作地点' },
}, {
{ field: 'operIp',
field: 'status', title: '主机'
title: '操作状态', },
align: 'center', {
formatter: function(value, row, index) { field: 'operLocation',
if (value == 0) { title: '操作地点'
return '<span class="badge badge-primary">成功</span>'; },
} else if (value == 1) { {
return '<span class="badge badge-danger">异常</span>'; field: 'status',
} title: '操作状态',
} align: 'center',
}, formatter: function (value, row, index) {
{ if (value == 0) {
field: 'operTime', return '<span class="badge badge-primary">成功</span>';
title: '操作时间', } else if (value == 1) {
sortable: true return '<span class="badge badge-danger">异常</span>';
}, }
{ }
title: '操作', },
align: 'center', {
formatter: function(value, row, index) { field: 'operTime',
var actions = []; title: '操作时间',
actions.push('<a class="btn btn-warning btn-xs ' + detailFlag + '" href="#" onclick="$.operate.detail(\'' + row.operId + '\')"><i class="fa fa-search"></i>详细</a>'); sortable: true
return actions.join(''); },
} {
}] title: '操作',
}; align: 'center',
$.table.init(options); formatter: function (value, row, index) {
}); var actions = [];
</script> actions.push('<a class="btn btn-warning btn-xs ' + detailFlag + '" href="#" onclick="$.operate.detail(\'' + row.operId + '\')"><i class="fa fa-search"></i>详细</a>');
</body> return actions.join('');
}
}]
};
$.table.init(options);
});
</script>
</body>
</html> </html>

View File

@ -1,254 +1,254 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" <html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="gray-bg" id="test"> <body class="gray-bg" id="test">
<div class="wrapper wrapper-content"> <div class="wrapper wrapper-content">
<div class="col-sm-12"> <div class="col-sm-12">
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-6">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-title"> <div class="ibox-title">
<h5>CPU</h5> <h5>CPU</h5>
<div class="ibox-tools"> <div class="ibox-tools">
<a class="collapse-link"><i class="fa fa-chevron-up"></i> <a class="collapse-link"><i class="fa fa-chevron-up"></i>
</a> </a>
<a class="close-link"><i class="fa fa-times"></i></a> <a class="close-link"><i class="fa fa-times"></i></a>
</div> </div>
</div> </div>
<div class="ibox-content"> <div class="ibox-content">
<table class="table table-hover no-margins"> <table class="table table-hover no-margins">
<thead> <thead>
<tr> <tr>
<th>属性</th> <th>属性</th>
<th></th> <th></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td>核心数</td> <td>核心数</td>
<td th:text="${server.cpu.cpuNum}">0个</td> <td th:text="${server.cpu.cpuNum}">0个</td>
</tr> </tr>
<tr> <tr>
<td>用户使用率</td> <td>用户使用率</td>
<td th:text="${server.cpu.used + '%'}">0%</td> <td th:text="${server.cpu.used + '%'}">0%</td>
</tr> </tr>
<tr> <tr>
<td>系统使用率</td> <td>系统使用率</td>
<td th:text="${server.cpu.sys + '%'}">0%</td> <td th:text="${server.cpu.sys + '%'}">0%</td>
</tr> </tr>
<tr> <tr>
<td>当前空闲率</td> <td>当前空闲率</td>
<td th:text="${server.cpu.free + '%'}">0%</td> <td th:text="${server.cpu.free + '%'}">0%</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
</div> </div>
<div class="col-sm-6"> <div class="col-sm-6">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-title"> <div class="ibox-title">
<h5>内存</h5> <h5>内存</h5>
<div class="ibox-tools"> <div class="ibox-tools">
<a class="collapse-link"><i class="fa fa-chevron-up"></i></a> <a class="collapse-link"><i class="fa fa-chevron-up"></i></a>
<a class="close-link"><i class="fa fa-times"></i></a> <a class="close-link"><i class="fa fa-times"></i></a>
</div> </div>
</div> </div>
<div class="ibox-content"> <div class="ibox-content">
<table class="table table-hover no-margins"> <table class="table table-hover no-margins">
<thead> <thead>
<tr> <tr>
<th>属性</th> <th>属性</th>
<th>内存</th> <th>内存</th>
<th>JVM</th> <th>JVM</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td>总内存</td> <td>总内存</td>
<td th:text="${server.mem.total + 'G'}">0GB</td> <td th:text="${server.mem.total + 'G'}">0GB</td>
<td th:text="${server.jvm.total + 'M'}">0MB</td> <td th:text="${server.jvm.total + 'M'}">0MB</td>
</tr> </tr>
<tr> <tr>
<td>已用内存</td> <td>已用内存</td>
<td th:text="${server.mem.used + 'G'}">0GB</td> <td th:text="${server.mem.used + 'G'}">0GB</td>
<td th:text="${server.jvm.used + 'M'}">0MB</td> <td th:text="${server.jvm.used + 'M'}">0MB</td>
</tr> </tr>
<tr> <tr>
<td>剩余内存</td> <td>剩余内存</td>
<td th:text="${server.mem.free + 'G'}">0GB</td> <td th:text="${server.mem.free + 'G'}">0GB</td>
<td th:text="${server.jvm.free + 'M'}">0MB</td> <td th:text="${server.jvm.free + 'M'}">0MB</td>
</tr> </tr>
<tr> <tr>
<td>使用率</td> <td>使用率</td>
<td th:class="${server.mem.usage gt 80} ? 'text-danger'">[[${server.mem.usage}]]%</td> <td th:class="${server.mem.usage gt 80} ? 'text-danger'">[[${server.mem.usage}]]%</td>
<td th:class="${server.jvm.usage gt 80} ? 'text-danger'">[[${server.jvm.usage}]]%</td> <td th:class="${server.jvm.usage gt 80} ? 'text-danger'">[[${server.jvm.usage}]]%</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-title"> <div class="ibox-title">
<h5>服务器信息</h5> <h5>服务器信息</h5>
<div class="ibox-tools"> <div class="ibox-tools">
<a class="collapse-link"> <a class="collapse-link">
<i class="fa fa-chevron-up"></i> <i class="fa fa-chevron-up"></i>
</a> </a>
<a class="close-link"> <a class="close-link">
<i class="fa fa-times"></i> <i class="fa fa-times"></i>
</a> </a>
</div> </div>
</div> </div>
<div class="ibox-content"> <div class="ibox-content">
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
<table class="table table-hover margin bottom"> <table class="table table-hover margin bottom">
<tbody> <tbody>
<tr> <tr>
<td>服务器名称</td> <td>服务器名称</td>
<td th:text="${server.sys.computerName}">RuoYi</td> <td th:text="${server.sys.computerName}">RuoYi</td>
<td>操作系统</td> <td>操作系统</td>
<td th:text="${server.sys.osName}">Linux</td> <td th:text="${server.sys.osName}">Linux</td>
</tr> </tr>
<tr> <tr>
<td>服务器IP</td> <td>服务器IP</td>
<td th:text="${server.sys.computerIp}">127.0.0.1</td> <td th:text="${server.sys.computerIp}">127.0.0.1</td>
<td>系统架构</td> <td>系统架构</td>
<td th:text="${server.sys.osArch}">amd64</td> <td th:text="${server.sys.osArch}">amd64</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-title"> <div class="ibox-title">
<h5>Java虚拟机信息</h5> <h5>Java虚拟机信息</h5>
<div class="ibox-tools"> <div class="ibox-tools">
<a class="collapse-link"> <a class="collapse-link">
<i class="fa fa-chevron-up"></i> <i class="fa fa-chevron-up"></i>
</a> </a>
<a class="close-link"> <a class="close-link">
<i class="fa fa-times"></i> <i class="fa fa-times"></i>
</a> </a>
</div> </div>
</div> </div>
<div class="ibox-content"> <div class="ibox-content">
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
<table class="table table-hover margin bottom"> <table class="table table-hover margin bottom">
<tbody> <tbody>
<tr> <tr>
<td>Java名称</td> <td>Java名称</td>
<td th:text="${server.jvm.name}">Java</td> <td th:text="${server.jvm.name}">Java</td>
<td>Java版本</td> <td>Java版本</td>
<td th:text="${server.jvm.version}">1.8.0</td> <td th:text="${server.jvm.version}">1.8.0</td>
</tr> </tr>
<tr> <tr>
<td>启动时间</td> <td>启动时间</td>
<td th:text="${server.jvm.startTime}">2018-12-31 00:00:00</td> <td th:text="${server.jvm.startTime}">2018-12-31 00:00:00</td>
<td>运行时长</td> <td>运行时长</td>
<td th:text="${server.jvm.runTime}">0天0时0分0秒</td> <td th:text="${server.jvm.runTime}">0天0时0分0秒</td>
</tr> </tr>
<tr> <tr>
<td colspan="1">安装路径</td> <td colspan="1">安装路径</td>
<td colspan="3" th:text="${server.jvm.home}"></td> <td colspan="3" th:text="${server.jvm.home}"></td>
</tr> </tr>
<tr> <tr>
<td colspan="1">项目路径</td> <td colspan="1">项目路径</td>
<td colspan="3" th:text="${server.sys.userDir}"></td> <td colspan="3" th:text="${server.sys.userDir}"></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-title"> <div class="ibox-title">
<h5>磁盘状态</h5> <h5>磁盘状态</h5>
<div class="ibox-tools"> <div class="ibox-tools">
<a class="collapse-link"> <a class="collapse-link">
<i class="fa fa-chevron-up"></i> <i class="fa fa-chevron-up"></i>
</a> </a>
<a class="close-link"> <a class="close-link">
<i class="fa fa-times"></i> <i class="fa fa-times"></i>
</a> </a>
</div> </div>
</div> </div>
<div class="ibox-content"> <div class="ibox-content">
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
<table class="table table-hover margin bottom"> <table class="table table-hover margin bottom">
<thead> <thead>
<tr> <tr>
<th>盘符路径</th> <th>盘符路径</th>
<th>文件系统</th> <th>文件系统</th>
<th>盘符类型</th> <th>盘符类型</th>
<th>总大小</th> <th>总大小</th>
<th>可用大小</th> <th>可用大小</th>
<th>已用大小</th> <th>已用大小</th>
<th>已用百分比</th> <th>已用百分比</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr th:each="sysFile : ${server.sysFiles}"> <tr th:each="sysFile : ${server.sysFiles}">
<td th:text="${sysFile.dirName}">C:\</td> <td th:text="${sysFile.dirName}">C:\</td>
<td th:text="${sysFile.sysTypeName}">NTFS</td> <td th:text="${sysFile.sysTypeName}">NTFS</td>
<td th:text="${sysFile.typeName}">local</td> <td th:text="${sysFile.typeName}">local</td>
<td th:text="${sysFile.total}">0GB</td> <td th:text="${sysFile.total}">0GB</td>
<td th:text="${sysFile.free}">0GB</td> <td th:text="${sysFile.free}">0GB</td>
<td th:text="${sysFile.used}">0GB</td> <td th:text="${sysFile.used}">0GB</td>
<td th:class="${sysFile.usage gt 80} ? 'text-danger'">[[${sysFile.usage}]]%</td> <td th:class="${sysFile.usage gt 80} ? 'text-danger'">[[${sysFile.usage}]]%</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</body> </body>
<div th:include="include :: footer"></div> <div th:include="include :: footer"></div>
<script> <script>
$(".modal").appendTo("body"), $("[data-toggle=popover]").popover(), $(".collapse-link").click(function() { $(".modal").appendTo("body"), $("[data-toggle=popover]").popover(), $(".collapse-link").click(function () {
var div_ibox = $(this).closest("div.ibox"), var div_ibox = $(this).closest("div.ibox"),
e = $(this).find("i"), e = $(this).find("i"),
i = div_ibox.find("div.ibox-content"); i = div_ibox.find("div.ibox-content");
i.slideToggle(200), i.slideToggle(200),
e.toggleClass("fa-chevron-up").toggleClass("fa-chevron-down"), e.toggleClass("fa-chevron-up").toggleClass("fa-chevron-down"),
div_ibox.toggleClass("").toggleClass("border-bottom"), div_ibox.toggleClass("").toggleClass("border-bottom"),
setTimeout(function() { setTimeout(function () {
div_ibox.resize(); div_ibox.resize();
}, 50); }, 50);
}), $(".close-link").click(function () { }), $(".close-link").click(function () {
var div_ibox = $(this).closest("div.ibox"); var div_ibox = $(this).closest("div.ibox");
div_ibox.remove() div_ibox.remove()
}); });
</script> </script>
</html> </html>

View File

@ -1,86 +1,87 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" > <html lang="zh" xmlns:th="http://www.thymeleaf.org">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="white-bg"> <body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> <div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-config-add" name="form-config-add"> <form class="form-horizontal m" id="form-config-add" name="form-config-add">
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">参数名称:</label> <label class="col-sm-3 control-label">参数名称:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input id="configName" name="configName" class="form-control" type="text"> <input id="configName" name="configName" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">参数键名:</label> <label class="col-sm-3 control-label">参数键名:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input id="configKey" name="configKey" class="form-control" type="text"> <input id="configKey" name="configKey" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">参数键值:</label> <label class="col-sm-3 control-label">参数键值:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input id="configValue" name="configValue" class="form-control" type="text"> <input id="configValue" name="configValue" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">系统内置:</label> <label class="col-sm-3 control-label">系统内置:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="radio-box" th:each="dict : ${@dict.getType('sys_yes_no')}"> <div class="radio-box" th:each="dict : ${@dict.getType('sys_yes_no')}">
<input type="radio" th:id="${dict.dictCode}" name="configType" th:value="${dict.dictValue}" th:checked="${dict.isDefault == 'Y' ? true : false}"> <input type="radio" th:id="${dict.dictCode}" name="configType" th:value="${dict.dictValue}"
<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label> th:checked="${dict.isDefault == 'Y' ? true : false}">
</div> <label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div> </div>
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">备注:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">备注:</label>
<textarea id="remark" name="remark" class="form-control"></textarea> <div class="col-sm-8">
</div> <textarea id="remark" name="remark" class="form-control"></textarea>
</div> </div>
</form> </div>
</div> </form>
<div th:include="include::footer"></div> </div>
<script type="text/javascript"> <div th:include="include::footer"></div>
var prefix = ctx + "system/config"; <script type="text/javascript">
var prefix = ctx + "system/config";
$("#form-config-add").validate({
rules: { $("#form-config-add").validate({
configKey: { rules: {
required: true, configKey: {
remote: { required: true,
url: prefix + "/checkConfigKeyUnique", remote: {
type: "post", url: prefix + "/checkConfigKeyUnique",
dataType: "json", type: "post",
data: { dataType: "json",
"configKey": function() { data: {
return $.common.trim($("#configKey").val()); "configKey": function () {
} return $.common.trim($("#configKey").val());
}, }
dataFilter: function(data, type) { },
return $.validate.unique(data); dataFilter: function (data, type) {
} return $.validate.unique(data);
} }
}, }
configName: { },
required: true configName: {
}, required: true
configValue: { },
required: true configValue: {
}, required: true
}, },
messages: { },
"configKey": { messages: {
remote: "参数键名已经存在" "configKey": {
} remote: "参数键名已经存在"
} }
}); }
});
function submitHandler() {
if ($.validate.form()) { function submitHandler() {
$.operate.save(prefix + "/add", $('#form-config-add').serialize()); if ($.validate.form()) {
} $.operate.save(prefix + "/add", $('#form-config-add').serialize());
} }
</script> }
</body> </script>
</html> </body>
</html>

View File

@ -1,124 +1,131 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> <html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="gray-bg"> <body class="gray-bg">
<div class="container-div"> <div class="container-div">
<div class="row"> <div class="row">
<div class="col-sm-12 search-collapse"> <div class="col-sm-12 search-collapse">
<form id="config-form"> <form id="config-form">
<div class="select-list"> <div class="select-list">
<ul> <ul>
<li> <li>
参数名称:<input type="text" name="configName"/> 参数名称:<input type="text" name="configName"/>
</li> </li>
<li> <li>
参数键名:<input type="text" name="configKey"/> 参数键名:<input type="text" name="configKey"/>
</li> </li>
<li> <li>
系统内置:<select name="configType" th:with="type=${@dict.getType('sys_yes_no')}"> 系统内置:<select name="configType" th:with="type=${@dict.getType('sys_yes_no')}">
<option value="">所有</option> <option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option> <option th:each="dict : ${type}" th:text="${dict.dictLabel}"
</select> th:value="${dict.dictValue}"></option>
</li> </select>
<li class="select-time"> </li>
<label>创建时间: </label> <li class="select-time">
<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginTime]"/> <label>创建时间: </label>
<span>-</span> <input type="text" class="time-input" id="startTime" placeholder="开始时间"
<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endTime]"/> name="params[beginTime]"/>
</li> <span>-</span>
<li> <input type="text" class="time-input" id="endTime" placeholder="结束时间"
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a> name="params[endTime]"/>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a> </li>
</li> <li>
</ul> <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
</div> class="fa fa-search"></i>&nbsp;搜索</a>
</form> <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i
</div> class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group"> </ul>
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:config:add"> </div>
<i class="fa fa-plus"></i> 新增 </form>
</a> </div>
<a class="btn btn-primary btn-edit disabled" onclick="$.operate.edit()" shiro:hasPermission="system:config:edit">
<i class="fa fa-edit"></i> 修改 <div class="btn-group-sm hidden-xs" id="toolbar" role="group">
</a> <a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:config:add">
<a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()" shiro:hasPermission="system:config:remove"> <i class="fa fa-plus"></i> 新增
<i class="fa fa-remove"></i> 删除 </a>
</a> <a class="btn btn-primary btn-edit disabled" onclick="$.operate.edit()"
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="system:config:export"> shiro:hasPermission="system:config:edit">
<i class="fa fa-download"></i> 导出 <i class="fa fa-edit"></i> 修改
</a> </a>
</div> <a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()"
<div class="col-sm-12 select-table table-striped"> shiro:hasPermission="system:config:remove">
<table id="bootstrap-table" data-mobile-responsive="true"></table> <i class="fa fa-remove"></i> 删除
</div> </a>
</div> <a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="system:config:export">
</div> <i class="fa fa-download"></i> 导出
<div th:include="include :: footer"></div> </a>
<script th:inline="javascript"> </div>
var editFlag = [[${@permission.hasPermi('system:config:edit')}]]; <div class="col-sm-12 select-table table-striped">
var removeFlag = [[${@permission.hasPermi('system:config:remove')}]]; <table id="bootstrap-table" data-mobile-responsive="true"></table>
var datas = [[${@dict.getType('sys_yes_no')}]]; </div>
var prefix = ctx + "system/config"; </div>
</div>
$(function() { <div th:include="include :: footer"></div>
var options = { <script th:inline="javascript">
url: prefix + "/list", var editFlag = [[${@permission.hasPermi('system:config:edit')}]];
createUrl: prefix + "/add", var removeFlag = [[${@permission.hasPermi('system:config:remove')}]];
updateUrl: prefix + "/edit/{id}", var datas = [[${@dict.getType('sys_yes_no')}]];
removeUrl: prefix + "/remove", var prefix = ctx + "system/config";
exportUrl: prefix + "/export",
sortName: "createTime", $(function () {
sortOrder: "desc", var options = {
modalName: "参数", url: prefix + "/list",
search: false, createUrl: prefix + "/add",
showExport: false, updateUrl: prefix + "/edit/{id}",
columns: [{ removeUrl: prefix + "/remove",
checkbox: true exportUrl: prefix + "/export",
}, sortName: "createTime",
{ sortOrder: "desc",
field: 'configId', modalName: "参数",
title: '参数主键' search: false,
}, showExport: false,
{ columns: [{
field: 'configName', checkbox: true
title: '参数名称' },
}, {
{ field: 'configId',
field: 'configKey', title: '参数主键'
title: '参数键名' },
}, {
{ field: 'configName',
field: 'configValue', title: '参数名称'
title: '参数键值' },
}, {
{ field: 'configKey',
field: 'configType', title: '参数键名'
title: '系统内置', },
align: 'center', {
formatter: function(value, row, index) { field: 'configValue',
return $.table.selectDictLabel(datas, value); title: '参数键值'
} },
}, {
{ field: 'configType',
field: 'createTime', title: '系统内置',
title: '创建时间' align: 'center',
}, formatter: function (value, row, index) {
{ return $.table.selectDictLabel(datas, value);
title: '操作', }
align: 'center', },
formatter: function(value, row, index) { {
var actions = []; field: 'createTime',
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.configId + '\')"><i class="fa fa-edit"></i>编辑</a> '); title: '创建时间'
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.configId + '\')"><i class="fa fa-remove"></i>删除</a>'); },
return actions.join(''); {
} title: '操作',
}] align: 'center',
}; formatter: function (value, row, index) {
$.table.init(options); var actions = [];
}); actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.configId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
</script> actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.configId + '\')"><i class="fa fa-remove"></i>删除</a>');
</body> return actions.join('');
}
}]
};
$.table.init(options);
});
</script>
</body>
</html> </html>

View File

@ -1,90 +1,91 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" > <html lang="zh" xmlns:th="http://www.thymeleaf.org">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="white-bg"> <body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> <div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-config-edit" th:object="${config}"> <form class="form-horizontal m" id="form-config-edit" th:object="${config}">
<input id="configId" name="configId" th:field="*{configId}" type="hidden"> <input id="configId" name="configId" th:field="*{configId}" type="hidden">
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">参数名称:</label> <label class="col-sm-3 control-label">参数名称:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input id="configName" name="configName" th:field="*{configName}" class="form-control" type="text"> <input id="configName" name="configName" th:field="*{configName}" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">参数键名:</label> <label class="col-sm-3 control-label">参数键名:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input id="configKey" name="configKey" th:field="*{configKey}" class="form-control" type="text"> <input id="configKey" name="configKey" th:field="*{configKey}" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">参数键值:</label> <label class="col-sm-3 control-label">参数键值:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input id="configValue" name="configValue" th:field="*{configValue}" class="form-control" type="text"> <input id="configValue" name="configValue" th:field="*{configValue}" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">系统内置:</label> <label class="col-sm-3 control-label">系统内置:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="radio-box" th:each="dict : ${@dict.getType('sys_yes_no')}"> <div class="radio-box" th:each="dict : ${@dict.getType('sys_yes_no')}">
<input type="radio" th:id="${dict.dictCode}" name="configType" th:value="${dict.dictValue}" th:field="*{configType}"> <input type="radio" th:id="${dict.dictCode}" name="configType" th:value="${dict.dictValue}"
<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label> th:field="*{configType}">
</div> <label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div> </div>
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">备注:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">备注:</label>
<textarea id="remark" name="remark" class="form-control">[[*{remark}]]</textarea> <div class="col-sm-8">
</div> <textarea id="remark" name="remark" class="form-control">[[*{remark}]]</textarea>
</div> </div>
</form> </div>
</div> </form>
<div th:include="include::footer"></div> </div>
<script type="text/javascript"> <div th:include="include::footer"></div>
var prefix = ctx + "system/config"; <script type="text/javascript">
var prefix = ctx + "system/config";
$("#form-config-edit").validate({
rules: { $("#form-config-edit").validate({
configKey: { rules: {
required: true, configKey: {
remote: { required: true,
url: prefix + "/checkConfigKeyUnique", remote: {
type: "post", url: prefix + "/checkConfigKeyUnique",
dataType: "json", type: "post",
data: { dataType: "json",
"configId": function() { data: {
return $("#configId").val(); "configId": function () {
}, return $("#configId").val();
"configKey": function() { },
return $.common.trim($("#configKey").val()); "configKey": function () {
} return $.common.trim($("#configKey").val());
}, }
dataFilter: function(data, type) { },
return $.validate.unique(data); dataFilter: function (data, type) {
} return $.validate.unique(data);
} }
}, }
configName: { },
required: true configName: {
}, required: true
configValue: { },
required: true configValue: {
}, required: true
}, },
messages: { },
"configKey": { messages: {
remote: "参数键名已经存在" "configKey": {
} remote: "参数键名已经存在"
} }
}); }
});
function submitHandler() {
if ($.validate.form()) { function submitHandler() {
$.operate.save(prefix + "/edit", $('#form-config-edit').serialize()); if ($.validate.form()) {
} $.operate.save(prefix + "/edit", $('#form-config-edit').serialize());
} }
</script> }
</body> </script>
</html> </body>
</html>

View File

@ -1,124 +1,126 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" > <html lang="zh" xmlns:th="http://www.thymeleaf.org">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="white-bg"> <body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> <div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-dept-add"> <form class="form-horizontal m" id="form-dept-add">
<input id="treeId" name="parentId" type="hidden" th:value="${dept.deptId}" /> <input id="treeId" name="parentId" type="hidden" th:value="${dept.deptId}"/>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label ">上级部门:</label> <label class="col-sm-3 control-label ">上级部门:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" onclick="selectDeptTree()" id="treeName" readonly="true" th:value="${dept.deptName}"/> <input class="form-control" type="text" onclick="selectDeptTree()" id="treeName" readonly="true"
</div> th:value="${dept.deptName}"/>
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">部门名称:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">部门名称:</label>
<input class="form-control" type="text" name="deptName" id="deptName"> <div class="col-sm-8">
</div> <input class="form-control" type="text" name="deptName" id="deptName">
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">显示排序:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">显示排序:</label>
<input class="form-control" type="text" name="orderNum"> <div class="col-sm-8">
</div> <input class="form-control" type="text" name="orderNum">
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">负责人:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">负责人:</label>
<input class="form-control" type="text" name="leader"> <div class="col-sm-8">
</div> <input class="form-control" type="text" name="leader">
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">联系电话:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">联系电话:</label>
<input class="form-control" type="text" name="phone"> <div class="col-sm-8">
</div> <input class="form-control" type="text" name="phone">
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">邮箱:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">邮箱:</label>
<input class="form-control" type="text" name="email"> <div class="col-sm-8">
</div> <input class="form-control" type="text" name="email">
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">部门状态:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">部门状态:</label>
<div class="radio-box" th:each="dict : ${@dict.getType('sys_normal_disable')}"> <div class="col-sm-8">
<input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}" th:checked="${dict.isDefault == 'Y' ? true : false}"> <div class="radio-box" th:each="dict : ${@dict.getType('sys_normal_disable')}">
<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label> <input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}"
</div> th:checked="${dict.isDefault == 'Y' ? true : false}">
</div> <label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div> </div>
</form> </div>
</div> </div>
<div th:include="include::footer"></div> </form>
<script type="text/javascript"> </div>
var prefix = ctx + "system/dept"; <div th:include="include::footer"></div>
<script type="text/javascript">
$("#form-dept-add").validate({ var prefix = ctx + "system/dept";
rules:{
deptName:{ $("#form-dept-add").validate({
required:true, rules: {
remote: { deptName: {
url: prefix + "/checkDeptNameUnique", required: true,
type: "post", remote: {
dataType: "json", url: prefix + "/checkDeptNameUnique",
data: { type: "post",
"parentId": function() { dataType: "json",
return $("input[name='parentId']").val(); data: {
}, "parentId": function () {
"deptName" : function() { return $("input[name='parentId']").val();
return $.common.trim($("#deptName").val()); },
} "deptName": function () {
}, return $.common.trim($("#deptName").val());
dataFilter: function(data, type) { }
return $.validate.unique(data); },
} dataFilter: function (data, type) {
} return $.validate.unique(data);
}, }
orderNum:{ }
required:true, },
digits:true orderNum: {
}, required: true,
email:{ digits: true
email:true, },
}, email: {
phone:{ email: true,
isPhone:true, },
}, phone: {
}, isPhone: true,
messages: { },
"deptName": { },
remote: "部门已经存在" messages: {
} "deptName": {
} remote: "部门已经存在"
}); }
}
function submitHandler() { });
if ($.validate.form()) {
$.operate.save(prefix + "/add", $('#form-dept-add').serialize()); function submitHandler() {
} if ($.validate.form()) {
} $.operate.save(prefix + "/add", $('#form-dept-add').serialize());
}
/*部门管理-新增-选择父部门树*/ }
function selectDeptTree() {
var options = { /*部门管理-新增-选择父部门树*/
title: '部门选择', function selectDeptTree() {
width: "380", var options = {
url: prefix + "/selectDeptTree/" + $("#treeId").val(), title: '部门选择',
callBack: doSubmit width: "380",
}; url: prefix + "/selectDeptTree/" + $("#treeId").val(),
$.modal.openOptions(options); callBack: doSubmit
} };
$.modal.openOptions(options);
function doSubmit(index, layero){ }
var body = layer.getChildFrame('body', index);
$("#treeId").val(body.find('#treeId').val()); function doSubmit(index, layero) {
$("#treeName").val(body.find('#treeName').val()); var body = layer.getChildFrame('body', index);
layer.close(index); $("#treeId").val(body.find('#treeId').val());
} $("#treeName").val(body.find('#treeName').val());
</script> layer.close(index);
</body> }
</html> </script>
</body>
</html>

View File

@ -1,129 +1,132 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" <html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="gray-bg"> <body class="gray-bg">
<div class="container-div"> <div class="container-div">
<div class="row"> <div class="row">
<div class="col-sm-12 search-collapse"> <div class="col-sm-12 search-collapse">
<form id="dept-form"> <form id="dept-form">
<div class="select-list"> <div class="select-list">
<ul> <ul>
<li> <li>
部门名称:<input type="text" name="deptName"/> 部门名称:<input type="text" name="deptName"/>
</li> </li>
<li> <li>
部门状态:<select name="status" th:with="type=${@dict.getType('sys_normal_disable')}"> 部门状态:<select name="status" th:with="type=${@dict.getType('sys_normal_disable')}">
<option value="">所有</option> <option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option> <option th:each="dict : ${type}" th:text="${dict.dictLabel}"
</select> th:value="${dict.dictValue}"></option>
</li> </select>
<li> </li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.treeTable.search()"><i class="fa fa-search"></i>&nbsp;搜索</a> <li>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a> <a class="btn btn-primary btn-rounded btn-sm" onclick="$.treeTable.search()"><i
</li> class="fa fa-search"></i>&nbsp;搜索</a>
</ul> <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i
</div> class="fa fa-refresh"></i>&nbsp;重置</a>
</form> </li>
</div> </ul>
</div>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group"> </form>
<a class="btn btn-success" onclick="$.operate.add(100)" shiro:hasPermission="system:dept:add"> </div>
<i class="fa fa-plus"></i> 新增
</a> <div class="btn-group-sm hidden-xs" id="toolbar" role="group">
<a class="btn btn-primary" onclick="$.operate.editTree()" shiro:hasPermission="system:dept:edit"> <a class="btn btn-success" onclick="$.operate.add(100)" shiro:hasPermission="system:dept:add">
<i class="fa fa-edit"></i> 修改 <i class="fa fa-plus"></i> 新增
</a> </a>
<a class="btn btn-info" id="expandAllBtn"> <a class="btn btn-primary" onclick="$.operate.editTree()" shiro:hasPermission="system:dept:edit">
<i class="fa fa-exchange"></i> 展开/折叠 <i class="fa fa-edit"></i> 修改
</a> </a>
</div> <a class="btn btn-info" id="expandAllBtn">
<div class="col-sm-12 select-table table-striped"> <i class="fa fa-exchange"></i> 展开/折叠
<table id="bootstrap-tree-table" data-mobile-responsive="true"></table> </a>
</div> </div>
</div> <div class="col-sm-12 select-table table-striped">
</div> <table id="bootstrap-tree-table" data-mobile-responsive="true"></table>
<div th:include="include :: footer"></div> </div>
<script th:inline="javascript"> </div>
var addFlag = [[${@permission.hasPermi('system:dept:add')}]]; </div>
var editFlag = [[${@permission.hasPermi('system:dept:edit')}]]; <div th:include="include :: footer"></div>
var removeFlag = [[${@permission.hasPermi('system:dept:remove')}]]; <script th:inline="javascript">
var datas = [[${@dict.getType('sys_normal_disable')}]]; var addFlag = [[${@permission.hasPermi('system:dept:add')}]];
var prefix = ctx + "system/dept" var editFlag = [[${@permission.hasPermi('system:dept:edit')}]];
var removeFlag = [[${@permission.hasPermi('system:dept:remove')}]];
$(function() { var datas = [[${@dict.getType('sys_normal_disable')}]];
var options = { var prefix = ctx + "system/dept"
code: "deptId",
parentCode: "parentId", $(function () {
uniqueId: "deptId", var options = {
url: prefix + "/list", code: "deptId",
createUrl: prefix + "/add/{id}", parentCode: "parentId",
updateUrl: prefix + "/edit/{id}", uniqueId: "deptId",
removeUrl: prefix + "/remove/{id}", url: prefix + "/list",
modalName: "部门", createUrl: prefix + "/add/{id}",
columns: [{ updateUrl: prefix + "/edit/{id}",
field: 'selectItem', removeUrl: prefix + "/remove/{id}",
radio: true modalName: "部门",
}, columns: [{
{ field: 'selectItem',
field: 'deptName', radio: true
title: '部门名称', },
align: "left" {
}, field: 'deptName',
{ title: '部门名称',
field: 'orderNum', align: "left"
title: '排序', },
align: "left" {
}, field: 'orderNum',
{ title: '排序',
field: 'status', align: "left"
title: '状态', },
align: "left", {
formatter: function(value, item, index) { field: 'status',
return $.table.selectDictLabel(datas, item.status); title: '状态',
} align: "left",
}, formatter: function (value, item, index) {
{ return $.table.selectDictLabel(datas, item.status);
field: 'createTime', }
title: '创建时间', },
align: "left" {
}, field: 'createTime',
{ title: '创建时间',
title: '操作', align: "left"
align: 'left', },
formatter: function(value, row, index) { {
if (row.parentId != 0) { title: '操作',
var actions = []; align: 'left',
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.deptId + '\')"><i class="fa fa-edit">编辑</i></a> '); formatter: function (value, row, index) {
actions.push('<a class="btn btn-info btn-xs ' + addFlag + '" href="#" onclick="$.operate.add(\'' + row.deptId + '\')"><i class="fa fa-plus">新增</i></a> '); if (row.parentId != 0) {
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="remove(\'' + row.deptId + '\')"><i class="fa fa-remove">删除</i></a>'); var actions = [];
return actions.join(''); actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.deptId + '\')"><i class="fa fa-edit">编辑</i></a> ');
} else { actions.push('<a class="btn btn-info btn-xs ' + addFlag + '" href="#" onclick="$.operate.add(\'' + row.deptId + '\')"><i class="fa fa-plus">新增</i></a> ');
return ""; actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="remove(\'' + row.deptId + '\')"><i class="fa fa-remove">删除</i></a>');
} return actions.join('');
} } else {
}] return "";
}; }
$.treeTable.init(options); }
}); }]
};
function remove(id) { $.treeTable.init(options);
$.modal.confirm("确定删除该条" + $.table._option.modalName + "信息吗?", function() { });
$.ajax({
type : 'post', function remove(id) {
url: prefix + "/remove/" + id, $.modal.confirm("确定删除该条" + $.table._option.modalName + "信息吗?", function () {
success : function(result) { $.ajax({
if (result.code == web_status.SUCCESS) { type: 'post',
$.modal.msgSuccess(result.msg); url: prefix + "/remove/" + id,
$.treeTable.refresh(); success: function (result) {
} else { if (result.code == web_status.SUCCESS) {
$.modal.msgError(result.msg); $.modal.msgSuccess(result.msg);
} $.treeTable.refresh();
} } else {
}); $.modal.msgError(result.msg);
}); }
} }
</script> });
</body> });
}
</script>
</body>
</html> </html>

View File

@ -1,133 +1,135 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" > <html lang="zh" xmlns:th="http://www.thymeleaf.org">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="white-bg"> <body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> <div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-dept-edit" th:object="${dept}"> <form class="form-horizontal m" id="form-dept-edit" th:object="${dept}">
<input name="deptId" type="hidden" th:field="*{deptId}" /> <input name="deptId" type="hidden" th:field="*{deptId}"/>
<input id="treeId" name="parentId" type="hidden" th:field="*{parentId}" /> <input id="treeId" name="parentId" type="hidden" th:field="*{parentId}"/>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label ">上级部门:</label> <label class="col-sm-3 control-label ">上级部门:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" id="treeName" onclick="selectDeptTree()" readonly="true" th:field="*{parentName}"/> <input class="form-control" type="text" id="treeName" onclick="selectDeptTree()" readonly="true"
</div> th:field="*{parentName}"/>
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">部门名称:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">部门名称:</label>
<input class="form-control" type="text" name="deptName" th:field="*{deptName}" id="deptName"> <div class="col-sm-8">
</div> <input class="form-control" type="text" name="deptName" th:field="*{deptName}" id="deptName">
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">显示排序:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">显示排序:</label>
<input class="form-control" type="text" name="orderNum" th:field="*{orderNum}"> <div class="col-sm-8">
</div> <input class="form-control" type="text" name="orderNum" th:field="*{orderNum}">
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">负责人:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">负责人:</label>
<input class="form-control" type="text" name="leader" th:field="*{leader}"> <div class="col-sm-8">
</div> <input class="form-control" type="text" name="leader" th:field="*{leader}">
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">联系电话:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">联系电话:</label>
<input class="form-control" type="text" name="phone" th:field="*{phone}"> <div class="col-sm-8">
</div> <input class="form-control" type="text" name="phone" th:field="*{phone}">
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">邮箱:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">邮箱:</label>
<input class="form-control" type="text" name="email" th:field="*{email}"> <div class="col-sm-8">
</div> <input class="form-control" type="text" name="email" th:field="*{email}">
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">部门状态:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">部门状态:</label>
<div class="radio-box" th:each="dict : ${@dict.getType('sys_normal_disable')}"> <div class="col-sm-8">
<input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}" th:field="*{status}"> <div class="radio-box" th:each="dict : ${@dict.getType('sys_normal_disable')}">
<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label> <input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}"
</div> th:field="*{status}">
</div> <label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div> </div>
</form> </div>
</div> </div>
<div th:include="include::footer"></div> </form>
<script type="text/javascript"> </div>
var prefix = ctx + "system/dept"; <div th:include="include::footer"></div>
<script type="text/javascript">
$("#form-dept-edit").validate({ var prefix = ctx + "system/dept";
rules:{
deptName:{ $("#form-dept-edit").validate({
required:true, rules: {
remote: { deptName: {
url: prefix + "/checkDeptNameUnique", required: true,
type: "post", remote: {
dataType: "json", url: prefix + "/checkDeptNameUnique",
data: { type: "post",
"deptId": function() { dataType: "json",
return $("#deptId").val(); data: {
}, "deptId": function () {
"parentId": function() { return $("#deptId").val();
return $("input[name='parentId']").val(); },
}, "parentId": function () {
"deptName": function() { return $("input[name='parentId']").val();
return $.common.trim($("#deptName").val()); },
} "deptName": function () {
}, return $.common.trim($("#deptName").val());
dataFilter: function(data, type) { }
return $.validate.unique(data); },
} dataFilter: function (data, type) {
} return $.validate.unique(data);
}, }
orderNum:{ }
required:true, },
digits:true orderNum: {
}, required: true,
email:{ digits: true
email:true, },
}, email: {
phone:{ email: true,
isPhone:true, },
}, phone: {
}, isPhone: true,
messages: { },
"deptName": { },
remote: "部门已经存在" messages: {
} "deptName": {
} remote: "部门已经存在"
}); }
}
function submitHandler() { });
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-dept-edit').serialize()); function submitHandler() {
} if ($.validate.form()) {
} $.operate.save(prefix + "/edit", $('#form-dept-edit').serialize());
}
/*部门管理-修改-选择部门树*/ }
function selectDeptTree() {
var deptId = $("#treeId").val(); /*部门管理-修改-选择部门树*/
if(deptId > 0) { function selectDeptTree() {
var options = { var deptId = $("#treeId").val();
title: '部门选择', if (deptId > 0) {
width: "380", var options = {
url: prefix + "/selectDeptTree/" + $("#treeId").val(), title: '部门选择',
callBack: doSubmit width: "380",
}; url: prefix + "/selectDeptTree/" + $("#treeId").val(),
$.modal.openOptions(options); callBack: doSubmit
} else { };
$.modal.alertError("父部门不能选择"); $.modal.openOptions(options);
} } else {
} $.modal.alertError("父部门不能选择");
}
function doSubmit(index, layero){ }
var body = layer.getChildFrame('body', index);
$("#treeId").val(body.find('#treeId').val()); function doSubmit(index, layero) {
$("#treeName").val(body.find('#treeName').val()); var body = layer.getChildFrame('body', index);
layer.close(index); $("#treeId").val(body.find('#treeId').val());
} $("#treeName").val(body.find('#treeName').val());
</script> layer.close(index);
</body> }
</html> </script>
</body>
</html>

View File

@ -1,48 +1,55 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" > <html lang="zh" xmlns:th="http://www.thymeleaf.org">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<link th:href="@{/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/> <link th:href="@{/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/>
<style> <style>
body{height:auto;font-family: "Microsoft YaHei";} body {
button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;} height: auto;
</style> font-family: "Microsoft YaHei";
<body class="hold-transition box box-main"> }
<input id="treeId" name="treeId" type="hidden" th:value="${dept.deptId}"/>
<input id="treeName" name="treeName" type="hidden" th:value="${dept.deptName}"/> button {
<div class="wrapper"><div class="treeShowHideButton" onclick="$.tree.toggleSearch();"> font-family: "SimSun", "Helvetica Neue", Helvetica, Arial;
<label id="btnShow" title="显示搜索" style="display:none;"></label> }
<label id="btnHide" title="隐藏搜索"></label> </style>
</div> <body class="hold-transition box box-main">
<div class="treeSearchInput" id="search"> <input id="treeId" name="treeId" type="hidden" th:value="${dept.deptId}"/>
<label for="keyword">关键字:</label><input type="text" class="empty" id="keyword" maxlength="50"> <input id="treeName" name="treeName" type="hidden" th:value="${dept.deptName}"/>
<button class="btn" id="btn" onclick="$.tree.searchNode()"> 搜索 </button> <div class="wrapper">
</div> <div class="treeShowHideButton" onclick="$.tree.toggleSearch();">
<div class="treeExpandCollapse"> <label id="btnShow" title="显示搜索" style="display:none;"></label>
<a href="#" onclick="$.tree.expand()">展开</a> / <label id="btnHide" title="隐藏搜索"></label>
<a href="#" onclick="$.tree.collapse()">折叠</a> </div>
</div> <div class="treeSearchInput" id="search">
<div id="tree" class="ztree treeselect"></div> <label for="keyword">关键字:</label><input type="text" class="empty" id="keyword" maxlength="50">
</div> <button class="btn" id="btn" onclick="$.tree.searchNode()"> 搜索</button>
<div th:include="include::footer"></div> </div>
<script th:src="@{/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js}"></script> <div class="treeExpandCollapse">
<script th:inline="javascript"> <a href="#" onclick="$.tree.expand()">展开</a> /
$(function() { <a href="#" onclick="$.tree.collapse()">折叠</a>
var url = ctx + "system/dept/treeData"; </div>
var options = { <div id="tree" class="ztree treeselect"></div>
url: url, </div>
expandLevel: 2, <div th:include="include::footer"></div>
onClick : zOnClick <script th:src="@{/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js}"></script>
}; <script th:inline="javascript">
$.tree.init(options); $(function () {
}); var url = ctx + "system/dept/treeData";
var options = {
function zOnClick(event, treeId, treeNode) { url: url,
var treeId = treeNode.id; expandLevel: 2,
var treeName = treeNode.name; onClick: zOnClick
$("#treeId").val(treeId); };
$("#treeName").val(treeName); $.tree.init(options);
} });
</script>
</body> function zOnClick(event, treeId, treeNode) {
</html> var treeId = treeNode.id;
var treeName = treeNode.name;
$("#treeId").val(treeId);
$("#treeName").val(treeName);
}
</script>
</body>
</html>

View File

@ -1,105 +1,108 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" > <html lang="zh" xmlns:th="http://www.thymeleaf.org">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="white-bg"> <body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> <div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-dict-add"> <form class="form-horizontal m" id="form-dict-add">
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label ">字典标签:</label> <label class="col-sm-3 control-label ">字典标签:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" name="dictLabel" id="dictLabel"/> <input class="form-control" type="text" name="dictLabel" id="dictLabel"/>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label ">字典键值:</label> <label class="col-sm-3 control-label ">字典键值:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" name="dictValue" id="dictValue"/> <input class="form-control" type="text" name="dictValue" id="dictValue"/>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">字典类型:</label> <label class="col-sm-3 control-label">字典类型:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" id="dictType" name="dictType" readonly="true" th:value="${dictType}"> <input class="form-control" type="text" id="dictType" name="dictType" readonly="true"
</div> th:value="${dictType}">
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">样式属性:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">样式属性:</label>
<input class="form-control" type="text" id="cssClass" name="cssClass"> <div class="col-sm-8">
</div> <input class="form-control" type="text" id="cssClass" name="cssClass">
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">字典排序:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">字典排序:</label>
<input class="form-control" type="text" name="dictSort"> <div class="col-sm-8">
</div> <input class="form-control" type="text" name="dictSort">
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">回显样式:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">回显样式:</label>
<select name="listClass" class="form-control m-b"> <div class="col-sm-8">
<option value="">---请选择---</option> <select name="listClass" class="form-control m-b">
<option value="default">默认</option> <option value="">---请选择---</option>
<option value="primary">主要</option> <option value="default">默认</option>
<option value="success">成功</option> <option value="primary">主要</option>
<option value="info"> 信息</option> <option value="success">成功</option>
<option value="warning">警告</option> <option value="info"> 信息</option>
<option value="danger"> 危险</option> <option value="warning">警告</option>
</select> <option value="danger"> 危险</option>
<span class="help-block m-b-none"><i class="fa fa-info-circle"></i> table表格字典列显示样式属性</span> </select>
</div> <span class="help-block m-b-none"><i class="fa fa-info-circle"></i> table表格字典列显示样式属性</span>
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">系统默认:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">系统默认:</label>
<div class="radio-box" th:each="dict : ${@dict.getType('sys_yes_no')}"> <div class="col-sm-8">
<input type="radio" th:id="${dict.dictCode}" name="isDefault" th:value="${dict.dictValue}" th:checked="${dict.isDefault == 'Y' ? true : false}"> <div class="radio-box" th:each="dict : ${@dict.getType('sys_yes_no')}">
<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label> <input type="radio" th:id="${dict.dictCode}" name="isDefault" th:value="${dict.dictValue}"
</div> th:checked="${dict.isDefault == 'Y' ? true : false}">
</div> <label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">状态:</label> </div>
<div class="col-sm-8"> <div class="form-group">
<div class="radio-box" th:each="dict : ${@dict.getType('sys_normal_disable')}"> <label class="col-sm-3 control-label">状态:</label>
<input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}" th:checked="${dict.isDefault == 'Y' ? true : false}"> <div class="col-sm-8">
<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label> <div class="radio-box" th:each="dict : ${@dict.getType('sys_normal_disable')}">
</div> <input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}"
</div> th:checked="${dict.isDefault == 'Y' ? true : false}">
</div> <label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">备注:</label> </div>
<div class="col-sm-8"> </div>
<textarea id="remark" name="remark" class="form-control"></textarea> <div class="form-group">
</div> <label class="col-sm-3 control-label">备注:</label>
</div> <div class="col-sm-8">
</form> <textarea id="remark" name="remark" class="form-control"></textarea>
</div> </div>
<div th:include="include::footer"></div> </div>
<script type="text/javascript"> </form>
var prefix = ctx + "system/dict/data"; </div>
<div th:include="include::footer"></div>
$("#form-dict-add").validate({ <script type="text/javascript">
rules:{ var prefix = ctx + "system/dict/data";
dictLabel:{
required:true, $("#form-dict-add").validate({
}, rules: {
dictValue:{ dictLabel: {
required:true, required: true,
}, },
dictSort:{ dictValue: {
required:true, required: true,
digits:true },
}, dictSort: {
} required: true,
}); digits: true
},
function submitHandler() { }
if ($.validate.form()) { });
$.operate.save(prefix + "/add", $('#form-dict-add').serialize());
} function submitHandler() {
} if ($.validate.form()) {
</script> $.operate.save(prefix + "/add", $('#form-dict-add').serialize());
</body> }
</html> }
</script>
</body>
</html>

View File

@ -1,140 +1,147 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" <html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="gray-bg"> <body class="gray-bg">
<div class="container-div"> <div class="container-div">
<div class="row"> <div class="row">
<div class="col-sm-12 search-collapse"> <div class="col-sm-12 search-collapse">
<form id="data-form"> <form id="data-form">
<div class="select-list"> <div class="select-list">
<ul> <ul>
<li> <li>
字典名称:<select id="dictType" name="dictType"> 字典名称:<select id="dictType" name="dictType">
<option th:each="dict : ${dictList}" th:text="${dict['dictName']}" th:value="${dict['dictType']}" th:field="*{dict.dictType}"></option> <option th:each="dict : ${dictList}" th:text="${dict['dictName']}"
</select> th:value="${dict['dictType']}" th:field="*{dict.dictType}"></option>
</li> </select>
<li> </li>
字典标签:<input type="text" name="dictLabel"/> <li>
</li> 字典标签:<input type="text" name="dictLabel"/>
<li> </li>
数据状态:<select name="status" th:with="type=${@dict.getType('sys_normal_disable')}"> <li>
<option value="">所有</option> 数据状态:<select name="status" th:with="type=${@dict.getType('sys_normal_disable')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option> <option value="">所有</option>
</select> <option th:each="dict : ${type}" th:text="${dict.dictLabel}"
</li> th:value="${dict.dictValue}"></option>
<li> </select>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a> </li>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a> <li>
</li> <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
</ul> class="fa fa-search"></i>&nbsp;搜索</a>
</div> <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i
</form> class="fa fa-refresh"></i>&nbsp;重置</a>
</div> </li>
</ul>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group"> </div>
<a class="btn btn-success" th:onclick="'javascript:$.operate.add(\''+${dict.dictType}+'\')'" shiro:hasPermission="system:dict:add"> </form>
<i class="fa fa-plus"></i> 新增 </div>
</a>
<a class="btn btn-primary btn-edit disabled" onclick="$.operate.edit()" shiro:hasPermission="system:dict:edit"> <div class="btn-group-sm hidden-xs" id="toolbar" role="group">
<i class="fa fa-edit"></i> 修改 <a class="btn btn-success" th:onclick="'javascript:$.operate.add(\''+${dict.dictType}+'\')'"
</a> shiro:hasPermission="system:dict:add">
<a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()" shiro:hasPermission="system:dict:remove"> <i class="fa fa-plus"></i> 新增
<i class="fa fa-remove"></i> 删除 </a>
</a> <a class="btn btn-primary btn-edit disabled" onclick="$.operate.edit()"
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="system:dict:export"> shiro:hasPermission="system:dict:edit">
<i class="fa fa-download"></i> 导出 <i class="fa fa-edit"></i> 修改
</a> </a>
</div> <a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()"
shiro:hasPermission="system:dict:remove">
<div class="col-sm-12 select-table table-striped"> <i class="fa fa-remove"></i> 删除
<table id="bootstrap-table" data-mobile-responsive="true"></table> </a>
</div> <a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="system:dict:export">
</div> <i class="fa fa-download"></i> 导出
</div> </a>
<div th:include="include :: footer"></div> </div>
<script th:src="@{/ajax/libs/select/select2.js}"></script>
<script th:inline="javascript"> <div class="col-sm-12 select-table table-striped">
var editFlag = [[${@permission.hasPermi('system:dict:edit')}]]; <table id="bootstrap-table" data-mobile-responsive="true"></table>
var removeFlag = [[${@permission.hasPermi('system:dict:remove')}]]; </div>
var datas = [[${@dict.getType('sys_normal_disable')}]]; </div>
var prefix = ctx + "system/dict/data"; </div>
<div th:include="include :: footer"></div>
$(function() { <script th:src="@{/ajax/libs/select/select2.js}"></script>
var options = { <script th:inline="javascript">
url: prefix + "/list", var editFlag = [[${@permission.hasPermi('system:dict:edit')}]];
createUrl: prefix + "/add/{id}", var removeFlag = [[${@permission.hasPermi('system:dict:remove')}]];
updateUrl: prefix + "/edit/{id}", var datas = [[${@dict.getType('sys_normal_disable')}]];
removeUrl: prefix + "/remove", var prefix = ctx + "system/dict/data";
exportUrl: prefix + "/export",
queryParams: queryParams, $(function () {
sortName: "createTime", var options = {
sortOrder: "desc", url: prefix + "/list",
modalName: "数据", createUrl: prefix + "/add/{id}",
search: false, updateUrl: prefix + "/edit/{id}",
showExport: false, removeUrl: prefix + "/remove",
columns: [{ exportUrl: prefix + "/export",
checkbox: true queryParams: queryParams,
}, sortName: "createTime",
{ sortOrder: "desc",
field: 'dictCode', modalName: "数据",
title: '字典编码' search: false,
}, showExport: false,
{ columns: [{
field: 'dictLabel', checkbox: true
title: '字典标签' },
}, {
{ field: 'dictCode',
field: 'dictValue', title: '字典编码'
title: '字典键值' },
}, {
{ field: 'dictLabel',
field: 'dictSort', title: '字典标签'
title: '字典排序' },
}, {
{ field: 'dictValue',
field: 'status', title: '字典键值'
title: '状态', },
align: 'center', {
formatter: function(value, row, index) { field: 'dictSort',
return $.table.selectDictLabel(datas, value); title: '字典排序'
} },
}, {
{ field: 'status',
field: 'remark', title: '状态',
title: '备注' align: 'center',
}, formatter: function (value, row, index) {
{ return $.table.selectDictLabel(datas, value);
field: 'createTime', }
title: '创建时间', },
sortable: true {
}, field: 'remark',
{ title: '备注'
title: '操作', },
align: 'center', {
formatter: function(value, row, index) { field: 'createTime',
var actions = []; title: '创建时间',
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.dictCode + '\')"><i class="fa fa-edit"></i>编辑</a> '); sortable: true
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.dictCode + '\')"><i class="fa fa-remove"></i>删除</a>'); },
return actions.join(''); {
} title: '操作',
}] align: 'center',
}; formatter: function (value, row, index) {
$.table.init(options); var actions = [];
}); actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.dictCode + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.dictCode + '\')"><i class="fa fa-remove"></i>删除</a>');
function queryParams(params) { return actions.join('');
return { }
dictType: $("#dictType").val(), }]
pageSize: params.limit, };
pageNum: params.offset / params.limit + 1, $.table.init(options);
searchValue: params.search, });
orderByColumn: params.sort,
isAsc: params.order function queryParams(params) {
}; return {
} dictType: $("#dictType").val(),
</script> pageSize: params.limit,
</body> pageNum: params.offset / params.limit + 1,
searchValue: params.search,
orderByColumn: params.sort,
isAsc: params.order
};
}
</script>
</body>
</html> </html>

View File

@ -1,106 +1,108 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" > <html lang="zh" xmlns:th="http://www.thymeleaf.org">
<meta charset="utf-8"> <meta charset="utf-8">
<head th:include="include :: header"></head> <head th:include="include :: header"></head>
<body class="white-bg"> <body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> <div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-dict-edit" th:object="${dict}"> <form class="form-horizontal m" id="form-dict-edit" th:object="${dict}">
<input name="dictCode" type="hidden" th:field="*{dictCode}" /> <input name="dictCode" type="hidden" th:field="*{dictCode}"/>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label ">字典标签:</label> <label class="col-sm-3 control-label ">字典标签:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" name="dictLabel" id="dictLabel" th:field="*{dictLabel}"/> <input class="form-control" type="text" name="dictLabel" id="dictLabel" th:field="*{dictLabel}"/>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label ">字典键值:</label> <label class="col-sm-3 control-label ">字典键值:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" name="dictValue" id="dictValue" th:field="*{dictValue}"/> <input class="form-control" type="text" name="dictValue" id="dictValue" th:field="*{dictValue}"/>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">字典类型:</label> <label class="col-sm-3 control-label">字典类型:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" readonly="true" th:field="*{dictType}"> <input class="form-control" type="text" readonly="true" th:field="*{dictType}">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">样式属性:</label> <label class="col-sm-3 control-label">样式属性:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" id="cssClass" name="cssClass" th:field="*{cssClass}"> <input class="form-control" type="text" id="cssClass" name="cssClass" th:field="*{cssClass}">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">字典排序:</label> <label class="col-sm-3 control-label">字典排序:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" type="text" name="dictSort" th:field="*{dictSort}"> <input class="form-control" type="text" name="dictSort" th:field="*{dictSort}">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">回显样式:</label> <label class="col-sm-3 control-label">回显样式:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<select name="listClass" class="form-control m-b"> <select name="listClass" class="form-control m-b">
<option value="" th:field="*{listClass}">---请选择---</option> <option value="" th:field="*{listClass}">---请选择---</option>
<option value="default" th:field="*{listClass}">默认</option> <option value="default" th:field="*{listClass}">默认</option>
<option value="primary" th:field="*{listClass}">主要</option> <option value="primary" th:field="*{listClass}">主要</option>
<option value="success" th:field="*{listClass}">成功</option> <option value="success" th:field="*{listClass}">成功</option>
<option value="info" th:field="*{listClass}">信息</option> <option value="info" th:field="*{listClass}">信息</option>
<option value="warning" th:field="*{listClass}">警告</option> <option value="warning" th:field="*{listClass}">警告</option>
<option value="danger" th:field="*{listClass}">危险</option> <option value="danger" th:field="*{listClass}">危险</option>
</select> </select>
<span class="help-block m-b-none"><i class="fa fa-info-circle"></i> table表格字典列显示样式属性</span> <span class="help-block m-b-none"><i class="fa fa-info-circle"></i> table表格字典列显示样式属性</span>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">系统默认:</label> <label class="col-sm-3 control-label">系统默认:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="radio-box" th:each="dict : ${@dict.getType('sys_yes_no')}"> <div class="radio-box" th:each="dict : ${@dict.getType('sys_yes_no')}">
<input type="radio" th:id="${dict.dictCode}" name="isDefault" th:value="${dict.dictValue}" th:field="*{isDefault}"> <input type="radio" th:id="${dict.dictCode}" name="isDefault" th:value="${dict.dictValue}"
<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label> th:field="*{isDefault}">
</div> <label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div> </div>
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">状态:</label> <div class="form-group">
<div class="col-sm-8"> <label class="col-sm-3 control-label">状态:</label>
<div class="radio-box" th:each="dict : ${@dict.getType('sys_normal_disable')}"> <div class="col-sm-8">
<input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}" th:field="*{status}"> <div class="radio-box" th:each="dict : ${@dict.getType('sys_normal_disable')}">
<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label> <input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}"
</div> th:field="*{status}">
</div> <label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div> </div>
<div class="form-group"> </div>
<label class="col-sm-3 control-label">备注:</label> </div>
<div class="col-sm-8"> <div class="form-group">
<textarea id="remark" name="remark" class="form-control">[[*{remark}]]</textarea> <label class="col-sm-3 control-label">备注:</label>
</div> <div class="col-sm-8">
</div> <textarea id="remark" name="remark" class="form-control">[[*{remark}]]</textarea>
</form> </div>
</div> </div>
<div th:include="include::footer"></div> </form>
<script type="text/javascript"> </div>
var prefix = ctx + "system/dict/data"; <div th:include="include::footer"></div>
<script type="text/javascript">
$("#form-dict-edit").validate({ var prefix = ctx + "system/dict/data";
rules:{
dictLabel:{ $("#form-dict-edit").validate({
required:true, rules: {
}, dictLabel: {
dictValue:{ required: true,
required:true, },
}, dictValue: {
dictSort:{ required: true,
required:true, },
digits:true dictSort: {
}, required: true,
} digits: true
}); },
}
function submitHandler() { });
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-dict-edit').serialize()); function submitHandler() {
} if ($.validate.form()) {
} $.operate.save(prefix + "/edit", $('#form-dict-edit').serialize());
</script> }
</body> }
</html> </script>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More