初始化项目

This commit is contained in:
2026-03-23 22:28:20 +08:00
parent 4ff69624cd
commit 8c66e12320
84 changed files with 989 additions and 60 deletions

View File

@@ -0,0 +1,15 @@
package com.jeesite.modules.biz.dao;
import com.jeesite.common.dao.CrudDao;
import com.jeesite.common.mybatis.annotation.MyBatisDao;
import com.jeesite.modules.biz.entity.MyPageIndex;
/**
* 指标数据表 DAO 接口
* @author gaoxq
* @version 2026-03-23
*/
@MyBatisDao(dataSourceName="work")
public interface MyPageIndexDao extends CrudDao<MyPageIndex> {
}

View File

@@ -0,0 +1,100 @@
package com.jeesite.modules.biz.entity;
import java.io.Serializable;
import java.util.Date;
import com.jeesite.common.mybatis.annotation.JoinTable;
import com.jeesite.common.mybatis.annotation.JoinTable.Type;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import jakarta.validation.constraints.NotNull;
import com.jeesite.common.entity.DataEntity;
import com.jeesite.common.mybatis.annotation.Column;
import com.jeesite.common.mybatis.annotation.Table;
import com.jeesite.common.mybatis.mapper.query.QueryType;
import com.jeesite.common.utils.excel.annotation.ExcelField;
import com.jeesite.common.utils.excel.annotation.ExcelField.Align;
import com.jeesite.common.utils.excel.annotation.ExcelFields;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 指标数据表 Entity
*
* @author gaoxq
* @version 2026-03-23
*/
@EqualsAndHashCode(callSuper = true)
@Table(name = "my_page_index", alias = "a", label = "指标信息", columns = {
@Column(name = "create_time", attrName = "createTime", label = "记录时间", isUpdate = false, isUpdateForce = true),
@Column(name = "index_id", attrName = "indexId", label = "唯一标识", isPK = true),
@Column(name = "module", attrName = "module", label = "模块名称"),
@Column(name = "module_code", attrName = "moduleCode", label = "模块编码"),
@Column(name = "title", attrName = "title", label = "说明描述", queryType = QueryType.LIKE),
@Column(name = "value", attrName = "value", label = "数值", isQuery = false, isUpdateForce = true),
@Column(name = "label", attrName = "label", label = "名称"),
@Column(name = "icon_img", attrName = "iconImg", label = "图片路径", isQuery = false),
@Column(name = "icon_filter", attrName = "iconFilter", label = "图标颜色", isQuery = false),
@Column(name = "sort", attrName = "sort", label = "序号", isQuery = false),
@Column(name = "index_code", attrName = "indexCode", label = "指标编号"),
}, orderBy = "a.create_time DESC,index_code,sort "
)
@Data
public class MyPageIndex extends DataEntity<MyPageIndex> implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private Date createTime; // 记录时间
private String indexId; // 唯一标识
private String module; // 模块名称
private String moduleCode; // 模块编码
private String title; // 说明描述
private Double value; // 数值
private String label; // 名称
private String iconImg; // 图片路径
private String iconFilter; // 图标颜色
private Integer sort; // 序号
private String indexCode; // 指标编号
@ExcelFields({
@ExcelField(title = "记录时间", attrName = "createTime", align = Align.CENTER, sort = 10, dataFormat = "yyyy-MM-dd hh:mm"),
@ExcelField(title = "唯一标识", attrName = "indexId", align = Align.CENTER, sort = 20),
@ExcelField(title = "模块名称", attrName = "module", align = Align.CENTER, sort = 30),
@ExcelField(title = "模块编码", attrName = "moduleCode", align = Align.CENTER, sort = 40),
@ExcelField(title = "说明描述", attrName = "title", align = Align.CENTER, sort = 50),
@ExcelField(title = "数值", attrName = "value", align = Align.CENTER, sort = 60),
@ExcelField(title = "名称", attrName = "label", align = Align.CENTER, sort = 70),
@ExcelField(title = "图片路径", attrName = "iconImg", align = Align.CENTER, sort = 80),
@ExcelField(title = "图标颜色", attrName = "iconFilter", align = Align.CENTER, sort = 90),
@ExcelField(title = "序号", attrName = "sort", align = Align.CENTER, sort = 100),
@ExcelField(title = "指标编号", attrName = "indexCode", align = Align.CENTER, sort = 110),
})
public MyPageIndex() {
this(null);
}
public MyPageIndex(String id) {
super(id);
}
public Date getCreateTime_gte() {
return sqlMap.getWhere().getValue("create_time", QueryType.GTE);
}
public void setCreateTime_gte(Date createTime) {
sqlMap.getWhere().and("create_time", QueryType.GTE, createTime);
}
public Date getCreateTime_lte() {
return sqlMap.getWhere().getValue("create_time", QueryType.LTE);
}
public void setCreateTime_lte(Date createTime) {
sqlMap.getWhere().and("create_time", QueryType.LTE, createTime);
}
}

View File

@@ -0,0 +1,134 @@
package com.jeesite.modules.biz.service;
import java.util.List;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.jeesite.common.entity.Page;
import com.jeesite.common.service.CrudService;
import com.jeesite.modules.biz.entity.MyPageIndex;
import com.jeesite.modules.biz.dao.MyPageIndexDao;
import com.jeesite.common.service.ServiceException;
import com.jeesite.common.config.Global;
import com.jeesite.common.validator.ValidatorUtils;
import com.jeesite.common.utils.excel.ExcelImport;
import org.springframework.web.multipart.MultipartFile;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.ConstraintViolationException;
/**
* 指标数据表 Service
* @author gaoxq
* @version 2026-03-23
*/
@Service
public class MyPageIndexService extends CrudService<MyPageIndexDao, MyPageIndex> {
/**
* 获取单条数据
* @param myPageIndex 主键
*/
@Override
public MyPageIndex get(MyPageIndex myPageIndex) {
return super.get(myPageIndex);
}
/**
* 查询分页数据
* @param myPageIndex 查询条件
* @param myPageIndex page 分页对象
*/
@Override
public Page<MyPageIndex> findPage(MyPageIndex myPageIndex) {
return super.findPage(myPageIndex);
}
/**
* 查询列表数据
* @param myPageIndex 查询条件
*/
@Override
public List<MyPageIndex> findList(MyPageIndex myPageIndex) {
return super.findList(myPageIndex);
}
/**
* 保存数据(插入或更新)
* @param myPageIndex 数据对象
*/
@Override
@Transactional
public void save(MyPageIndex myPageIndex) {
super.save(myPageIndex);
}
/**
* 导入数据
* @param file 导入的数据文件
*/
@Transactional
public String importData(MultipartFile file) {
if (file == null){
throw new ServiceException(text("请选择导入的数据文件!"));
}
int successNum = 0; int failureNum = 0;
StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder();
try(ExcelImport ei = new ExcelImport(file, 2, 0)){
List<MyPageIndex> list = ei.getDataList(MyPageIndex.class);
for (MyPageIndex myPageIndex : list) {
try{
ValidatorUtils.validateWithException(myPageIndex);
this.save(myPageIndex);
successNum++;
successMsg.append("<br/>" + successNum + "、编号 " + myPageIndex.getId() + " 导入成功");
} catch (Exception e) {
failureNum++;
String msg = "<br/>" + failureNum + "、编号 " + myPageIndex.getId() + " 导入失败:";
if (e instanceof ConstraintViolationException){
ConstraintViolationException cve = (ConstraintViolationException)e;
for (ConstraintViolation<?> violation : cve.getConstraintViolations()) {
msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")";
}
}else{
msg += e.getMessage();
}
failureMsg.append(msg);
logger.error(msg, e);
}
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
failureMsg.append(e.getMessage());
return failureMsg.toString();
}
if (failureNum > 0) {
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
}else{
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
}
return successMsg.toString();
}
/**
* 更新状态
* @param myPageIndex 数据对象
*/
@Override
@Transactional
public void updateStatus(MyPageIndex myPageIndex) {
super.updateStatus(myPageIndex);
}
/**
* 删除数据
* @param myPageIndex 数据对象
*/
@Override
@Transactional
public void delete(MyPageIndex myPageIndex) {
super.delete(myPageIndex);
}
}

View File

@@ -0,0 +1,157 @@
package com.jeesite.modules.biz.web;
import java.util.List;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.jeesite.common.config.Global;
import com.jeesite.common.collect.ListUtils;
import com.jeesite.common.entity.Page;
import com.jeesite.common.lang.DateUtils;
import com.jeesite.common.utils.excel.ExcelExport;
import com.jeesite.common.utils.excel.annotation.ExcelField.Type;
import org.springframework.web.multipart.MultipartFile;
import com.jeesite.common.web.BaseController;
import com.jeesite.modules.biz.entity.MyPageIndex;
import com.jeesite.modules.biz.service.MyPageIndexService;
/**
* 指标数据表 Controller
*
* @author gaoxq
* @version 2026-03-23
*/
@Controller
@RequestMapping(value = "${adminPath}/biz/myPageIndex")
public class MyPageIndexController extends BaseController {
private final MyPageIndexService myPageIndexService;
public MyPageIndexController(MyPageIndexService myPageIndexService) {
this.myPageIndexService = myPageIndexService;
}
/**
* 获取数据
*/
@ModelAttribute
public MyPageIndex get(String indexId, boolean isNewRecord) {
return myPageIndexService.get(indexId, isNewRecord);
}
/**
* 查询列表
*/
@RequiresPermissions("biz:myPageIndex:view")
@RequestMapping(value = {"list", ""})
public String list(MyPageIndex myPageIndex, Model model) {
model.addAttribute("myPageIndex", myPageIndex);
return "modules/biz/myPageIndexList";
}
/**
* 查询列表数据
*/
@RequiresPermissions("biz:myPageIndex:view")
@RequestMapping(value = "listData")
@ResponseBody
public Page<MyPageIndex> listData(MyPageIndex myPageIndex, HttpServletRequest request, HttpServletResponse response) {
myPageIndex.setPage(new Page<>(request, response));
Page<MyPageIndex> page = myPageIndexService.findPage(myPageIndex);
return page;
}
/**
* 查看编辑表单
*/
@RequiresPermissions("biz:myPageIndex:view")
@RequestMapping(value = "form")
public String form(MyPageIndex myPageIndex, Model model) {
model.addAttribute("myPageIndex", myPageIndex);
return "modules/biz/myPageIndexForm";
}
/**
* 保存数据
*/
@RequiresPermissions("biz:myPageIndex:edit")
@PostMapping(value = "save")
@ResponseBody
public String save(@Validated MyPageIndex myPageIndex) {
myPageIndexService.save(myPageIndex);
return renderResult(Global.TRUE, text("保存指标成功!"));
}
/**
* 导出数据
*/
@RequiresPermissions("biz:myPageIndex:view")
@RequestMapping(value = "exportData")
public void exportData(MyPageIndex myPageIndex, HttpServletResponse response) {
List<MyPageIndex> list = myPageIndexService.findList(myPageIndex);
String fileName = "指标" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
try (ExcelExport ee = new ExcelExport("指标", MyPageIndex.class)) {
ee.setDataList(list).write(response, fileName);
}
}
/**
* 下载模板
*/
@RequiresPermissions("biz:myPageIndex:view")
@RequestMapping(value = "importTemplate")
public void importTemplate(HttpServletResponse response) {
MyPageIndex myPageIndex = new MyPageIndex();
List<MyPageIndex> list = ListUtils.newArrayList(myPageIndex);
String fileName = "指标模板.xlsx";
try (ExcelExport ee = new ExcelExport("指标", MyPageIndex.class, Type.IMPORT)) {
ee.setDataList(list).write(response, fileName);
}
}
/**
* 导入数据
*/
@ResponseBody
@RequiresPermissions("biz:myPageIndex:edit")
@PostMapping(value = "importData")
public String importData(MultipartFile file) {
try {
String message = myPageIndexService.importData(file);
return renderResult(Global.TRUE, "posfull:" + message);
} catch (Exception ex) {
return renderResult(Global.FALSE, "posfull:" + ex.getMessage());
}
}
/**
* 删除数据
*/
@RequiresPermissions("biz:myPageIndex:edit")
@RequestMapping(value = "delete")
@ResponseBody
public String delete(MyPageIndex myPageIndex) {
myPageIndexService.delete(myPageIndex);
return renderResult(Global.TRUE, text("删除指标成功!"));
}
/**
* 列表数据
*/
@RequestMapping(value = "listAll")
@ResponseBody
public List<MyPageIndex> listAll(MyPageIndex myPageIndex) {
return myPageIndexService.findList(myPageIndex);
}
}

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jeesite.modules.biz.dao.MyPageIndexDao">
<!-- 查询数据
<select id="findList" resultType="MyPageIndex">
SELECT ${sqlMap.column.toSql()}
FROM ${sqlMap.table.toSql()}
<where>
${sqlMap.where.toSql()}
</where>
ORDER BY ${sqlMap.order.toSql()}
</select> -->
</mapper>

View File

@@ -0,0 +1 @@
<?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"><svg t="1771407056700" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11634" width="128" height="128" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M512 512m-512 0a512 512 0 1 0 1024 0 512 512 0 1 0-1024 0Z" fill="#FAAD14" p-id="11635"></path><path d="M564.098612 667.021061h0.543347a16.509388 16.509388 0 0 1 0 33.039674h-41.252571v37.156571a20.58449 20.58449 0 1 1-41.148082 0v-37.156571h-41.795918a16.509388 16.509388 0 0 1 0-32.997878h41.795918v-24.764081h-41.795918a16.509388 16.509388 0 0 1 0-32.997878h20.082939l-17.303511-53.331592-0.229877-0.731428a16.48849 16.48849 0 0 1 31.346939-10.177307l0.167183 0.501551v0.376164l20.48 63.320816h15.318204l20.500898-63.237224v-0.41796l0.397061-0.480653a16.48849 16.48849 0 0 1 31.346939 10.114613l-0.229877 0.689632-17.30351 53.331592h19.623183a16.509388 16.509388 0 0 1 0 33.039674h-41.252571v24.722285h40.709224z" fill="#FAAD14" p-id="11636"></path><path d="M623.929469 302.247184l-116.610612 116.610612-116.610612-116.610612a32.997878 32.997878 0 0 0-46.665143 46.665143l105.158531 105.200326h-55.985633a33.018776 33.018776 0 0 0 0 66.016653h82.254367V572.604082h-82.902204a35.651918 35.651918 0 0 0 0 71.282938h82.902204v71.471021a33.018776 33.018776 0 0 0 66.016653 0v-71.471021h82.12898a35.651918 35.651918 0 1 0 0-71.282938h-82.12898v-52.474776h82.776817a33.018776 33.018776 0 1 0 0-66.016653h-58.827755l105.15853-105.200326a32.997878 32.997878 0 0 0-46.665143-46.665143z" fill="#FFFFFF" p-id="11637"></path></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -0,0 +1 @@
<?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"><svg t="1771407178032" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13001" width="128" height="128" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M64 512a448 448 0 1 0 896 0 448 448 0 1 0-896 0z" fill="#FFBD27" p-id="13002"></path><path d="M413.776 279.52l32.256 41.92h112.864l32.256-41.92 3.232-6.448v-3.232c0-6.448-3.232-9.664-9.68-12.896 0 0-45.152-9.664-83.84-9.664-38.72 0-83.856 9.664-83.856 9.664-16.128 6.448-3.232 22.576-3.232 22.576z m154.8 70.96H452.48C362.176 382.72 288 482.704 288 576.24c0 116.08 64.496 170.912 222.528 170.912 158.032 0 222.528-54.832 222.528-170.928 0-93.52-74.176-193.504-164.48-225.76z m22.576 238.64c6.448 0 12.896 6.448 12.896 12.912 0 6.448-6.448 12.896-12.896 12.896h-64.496v45.152c0 6.448-6.448 12.896-12.896 12.896-6.464 0-12.912-6.448-12.912-12.896v-41.92h-64.496c-6.448 0-12.896-6.464-12.896-12.912s6.448-12.896 12.896-12.896h64.496V556.88h-64.496c-6.448 0-12.896-6.448-12.896-12.912 0-6.448 6.448-12.896 12.896-12.896h67.728v-3.216s-3.232 0-3.232-3.232l-51.6-61.28c-6.448-3.216-6.448-12.896 0-19.344s16.128-3.232 19.36 3.232l45.152 51.6 45.136-51.6c6.464-6.464 12.912-6.464 19.36-3.232 6.448 6.448 6.448 12.896 3.216 19.36l-51.6 61.28c0 3.2-3.216 3.2-6.448 3.2h67.728c6.448 0 12.896 6.464 12.896 12.912s-6.448 12.896-12.896 12.896h-64.496v35.472h64.496z" fill="#FFFFFF" p-id="13003"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1 @@
<?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"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M366.157576 633.018182c17.066667-44.993939 29.478788-89.987879 63.612121-124.121212C209.454545 501.139394 35.684848 439.078788 35.684848 341.333333v107.054546c0 85.333333 147.393939 161.357576 330.472728 184.630303z" fill="#2E9CFE" /><path d="M380.121212 817.648485c-7.757576-27.927273-13.963636-55.854545-13.963636-85.333333 0-13.963636 3.10303-26.375758 4.654545-40.339394C195.490909 671.806061 37.236364 614.4 37.236364 530.618182v107.054545C34.133333 732.315152 162.909091 791.272727 380.121212 817.648485zM480.969697 448.387879c9.309091 0 18.618182-1.551515 27.927273-1.551515 65.163636-38.787879 145.842424-62.060606 231.175757-62.060606 20.169697 0 40.339394 3.10303 60.509091 4.654545 77.575758-34.133333 125.672727-80.678788 125.672727-131.878788v-63.612121C926.254545 88.436364 727.660606 4.654545 480.969697 4.654545 235.830303 4.654545 35.684848 89.987879 35.684848 193.939394v63.612121c0 105.50303 200.145455 190.836364 445.284849 190.836364z" fill="#2E9CFE" /><path d="M398.739394 878.157576C203.248485 862.642424 35.684848 809.890909 35.684848 721.454545v107.054546c0 105.50303 198.593939 189.284848 445.284849 189.284848 7.757576 0 17.066667-1.551515 24.824242-1.551515-55.854545-32.581818-77.575758-85.333333-107.054545-138.084848zM712.145455 423.563636c-155.151515 0-279.272727 133.430303-279.272728 297.890909s125.672727 297.890909 279.272728 297.89091c155.151515 0 279.272727-133.430303 279.272727-297.89091s-125.672727-297.890909-279.272727-297.890909z m94.642424 350.642425H505.793939v-89.987879H926.254545v89.987879h-119.466666z" fill="#2E9CFE" /></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1 @@
<?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"><svg class="icon" width="200px" height="192.84px" viewBox="0 0 1062 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M735.744 701.44m-311.296 0a311.296 311.296 0 1 0 622.592 0 311.296 311.296 0 1 0-622.592 0Z" fill="#FFCAD8" /><path d="M804.864 659.456c5.12 1.024 10.24 1.536 14.336 2.048h47.104c4.608-0.512 8.704 1.024 11.776 5.12 3.072 3.584 4.096 11.264 4.096 11.264v33.792s-3.584 10.24-13.312 11.264h-81.92c-3.584-1.536-6.656-0.512-10.752 1.536-3.072 1.536-4.608 4.608-4.608 8.704 0 4.096 0 8.192 0.512 12.288 0.512 4.096 0.512 8.192 0.512 10.752 0 5.632 4.608 7.68 13.824 8.704h80.896c9.216-2.56 18.944 10.24 18.944 10.24v31.232s-12.288 13.824-25.088 10.24h-17.92c-7.68 3.584-14.848 4.096-23.04 4.608-8.192 0.512-14.848 1.024-21.504 0.512h-12.8c-8.192 0.512-12.8 14.336-12.8 14.336v55.808c0 4.608-3.584 6.656-10.752 6.656h-41.984c-11.264 0-16.896-4.608-16.896-14.336 0-3.584 0.512-11.264 0.512-23.04 0.512-11.776 0-19.456-0.512-24.064 0-4.096-0.512-7.68-1.536-8.704-0.512-1.024-3.072-2.048-8.192-2.048h-87.552c-12.288 0-18.432-6.144-18.432-18.944 0-2.56-0.512-6.144-1.536-11.264-1.024-4.096-1.024-8.704 0-13.824 1.024-4.608 2.56-9.216 4.096-13.312 2.048-3.584 5.632-5.12 11.264-4.096h96.256c2.048 0 2.56-2.048 2.56-7.68v-26.624c0-4.608-5.632-6.656-16.896-6.656h-81.92c-3.584 0-6.656 0-10.24-0.512-3.072-0.512-4.096-3.072-4.096-8.192v-18.432s-1.536-13.312-2.048-16.896c-2.048-5.632-0.512-10.752 4.096-13.824 4.608-4.096 10.752-5.632 17.92-5.632 7.68 1.024 15.36 1.024 24.576 0.512 8.704-0.512 15.36-0.512 19.968-3.584h16.384c5.632 3.072 7.68 1.024 5.632-2.048-1.536-2.048-7.68-9.216-16.384-20.992-9.728-12.8-18.944-25.088-29.184-38.4-12.288-15.872-26.112-33.28-41.984-52.736-6.144-10.752-5.12-18.944 4.096-25.6 4.608-3.072 9.728-6.144 14.336-10.752 5.12-4.096 11.264-8.192 17.408-11.776 9.216-5.632 17.92-0.512 26.624 15.36 3.072 4.096 8.192 10.752 15.872 20.48 8.192 10.24 15.872 19.968 24.576 31.744 8.192 11.776 15.872 21.504 24.064 30.208 7.68 9.216 11.776 14.848 12.8 16.384 1.536 3.584 5.12 6.144 10.24 6.656 5.12 1.024 9.216-0.512 10.752-4.096 1.024-2.048 4.608-8.192 11.776-17.92 6.656-9.728 14.336-20.48 23.04-32.768s15.872-24.064 23.552-34.816c7.68-10.752 12.288-17.408 13.824-19.968 4.608-6.656 8.704-10.752 11.776-12.8 3.072-2.048 8.704-1.536 15.872 1.536 4.608 2.048 9.728 4.608 14.848 8.704 5.632 3.584 9.728 6.656 11.264 8.704 10.24 10.752 13.312 18.944 8.704 27.136-1.536 3.072-6.656 10.24-14.848 20.992-8.704 11.264-17.408 23.552-27.136 35.84-10.24 12.8-18.432 24.576-26.624 35.84s-12.288 17.92-13.312 19.456c-0.512 3.584 0.512 6.656 5.12 7.68z" fill="#FFFFFF" /><path d="M26.624 189.952a382.976 189.952 0 1 0 765.952 0 382.976 189.952 0 1 0-765.952 0Z" fill="#FB7895" /><path d="M530.944 428.544C492.544 435.2 452.096 438.272 409.6 438.272c-182.272 0-334.848-62.976-373.76-147.968-6.144 13.824-9.728 27.648-9.728 42.496 0 104.96 171.52 189.952 382.976 189.952 10.24 0 19.968-0.512 30.208-1.024 24.576-36.352 55.296-67.584 91.648-93.184zM782.848 376.832c6.656-13.824 10.752-28.672 10.752-43.52 0-14.336-3.584-28.672-9.728-42.496-13.824 30.208-42.496 57.344-80.896 79.872 5.12-0.512 10.752-1.024 16.384-1.024 20.992 0.512 42.496 2.56 63.488 7.168z" fill="#FB7895" /><path d="M409.6 564.224c-182.272 0-334.848-62.976-373.76-147.968-6.144 13.824-9.728 27.648-9.728 42.496 0 101.888 161.792 185.344 365.568 189.952 4.608-29.696 13.312-57.856 25.6-84.48H409.6z" fill="#FB7895" /><path d="M388.096 688.64c-172.544-4.608-314.88-66.56-351.744-147.456-6.144 13.824-9.728 27.648-9.728 42.496 0 102.4 163.84 186.368 368.64 189.952-5.12-23.552-8.192-47.104-8.192-71.68 0.512-4.608 1.024-9.216 1.024-13.312z" fill="#FB7895" /><path d="M36.352 666.624c-6.144 13.824-9.728 27.648-9.728 42.496 0 104.96 171.52 189.952 382.976 189.952 14.336 0 28.16-0.512 41.984-1.024-18.432-25.6-33.28-53.248-44.032-83.456-181.248-1.024-332.8-64.512-371.2-147.968z" fill="#FB7895" /><path d="M484.864 935.424c-24.576 2.56-49.152 3.584-75.264 3.584-182.272 0-334.848-62.976-373.76-147.968-6.144 13.824-9.728 27.648-9.728 42.496 0 104.96 171.52 189.952 382.976 189.952 62.464 0 120.832-7.68 173.056-20.48-35.84-16.896-69.12-39.424-97.28-67.584z" fill="#FB7895" /></svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -0,0 +1 @@
<?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"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M119.467 494.933c-5.12 0-8.534-1.706-11.947-5.12-6.827-6.826-6.827-17.066 0-23.893l238.933-238.933c6.827-6.827 17.067-6.827 23.894 0L512 368.64l226.987-226.987c6.826-6.826 17.066-6.826 23.893 0s6.827 17.067 0 23.894L523.947 404.48c-6.827 6.827-17.067 6.827-23.894 0L358.4 262.827 131.413 489.813c-3.413 3.414-6.826 5.12-11.946 5.12zM682.667 409.6h153.6v477.867h-153.6V409.6z" fill="#CDCDCD" /><path d="M836.267 904.533h-153.6c-10.24 0-17.067-6.826-17.067-17.066V409.6c0-10.24 6.827-17.067 17.067-17.067h153.6c10.24 0 17.066 6.827 17.066 17.067v477.867c0 10.24-6.826 17.066-17.066 17.066zM699.733 870.4H819.2V426.667H699.733V870.4zM426.667 563.2h153.6v324.267h-153.6V563.2z" fill="#CDCDCD" /><path d="M580.267 904.533h-153.6c-10.24 0-17.067-6.826-17.067-17.066V563.2c0-10.24 6.827-17.067 17.067-17.067h153.6c10.24 0 17.066 6.827 17.066 17.067v324.267c0 10.24-6.826 17.066-17.066 17.066zM443.733 870.4H563.2V580.267H443.733V870.4z m-119.466 34.133H187.733c-10.24 0-17.066-6.826-17.066-17.066V648.533c0-10.24 6.826-17.066 17.066-17.066h136.534c10.24 0 17.066 6.826 17.066 17.066v238.934c0 10.24-6.826 17.066-17.066 17.066zM204.8 870.4h102.4V665.6H204.8v204.8zM119.467 431.787c25.6 0 46.08 20.48 46.08 46.08 0 25.6-20.48 46.08-46.08 46.08s-46.08-20.48-46.08-46.08c0-25.6 20.48-46.08 46.08-46.08z" fill="#CDCDCD" /><path d="M119.467 541.013c-34.134 0-63.147-27.306-63.147-63.146s29.013-63.147 63.147-63.147 63.146 27.307 63.146 63.147-29.013 63.146-63.146 63.146z m0-92.16c-15.36 0-29.014 11.947-29.014 29.014s11.947 29.013 29.014 29.013 29.013-11.947 29.013-29.013-13.653-29.014-29.013-29.014zM358.4 192.853c25.6 0 46.08 20.48 46.08 46.08 0 25.6-20.48 46.08-46.08 46.08-25.6 0-46.08-20.48-46.08-46.08 0-25.6 20.48-46.08 46.08-46.08z" fill="#CDCDCD" /><path d="M358.4 302.08c-34.133 0-63.147-27.307-63.147-63.147s27.307-63.146 63.147-63.146 63.147 27.306 63.147 63.146-29.014 63.147-63.147 63.147z m0-92.16c-15.36 0-29.013 11.947-29.013 29.013s11.946 29.014 29.013 29.014 29.013-11.947 29.013-29.014S373.76 209.92 358.4 209.92zM512 346.453c25.6 0 46.08 20.48 46.08 46.08 0 25.6-20.48 46.08-46.08 46.08s-46.08-20.48-46.08-46.08c0-25.6 20.48-46.08 46.08-46.08z" fill="#CDCDCD" /><path d="M512 455.68c-34.133 0-63.147-27.307-63.147-63.147S476.16 329.387 512 329.387c34.133 0 63.147 27.306 63.147 63.146S546.133 455.68 512 455.68z m0-92.16c-15.36 0-29.013 11.947-29.013 29.013s11.946 29.014 29.013 29.014 29.013-11.947 29.013-29.014S527.36 363.52 512 363.52zM768 90.453c25.6 0 46.08 20.48 46.08 46.08s-20.48 46.08-46.08 46.08-46.08-20.48-46.08-46.08 20.48-46.08 46.08-46.08z" fill="#CDCDCD" /><path d="M768 199.68c-34.133 0-63.147-27.307-63.147-63.147S733.867 73.387 768 73.387s63.147 29.013 63.147 63.146S802.133 199.68 768 199.68z m0-92.16c-15.36 0-29.013 11.947-29.013 29.013s11.946 29.014 29.013 29.014 29.013-11.947 29.013-29.014S783.36 107.52 768 107.52z" fill="#CDCDCD" /></svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -0,0 +1 @@
<?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"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M820.30848 447.99744 820.30848 311.91168c0-44.14848-36.28544-80.06528-80.88576-80.06528l-1.85728 0-40.46464-82.05056c-9.53344-19.32672-30.96576-32.31232-53.3312-32.31232-5.1392 0-10.19904 0.68608-15.04 2.03776L250.20032 225.3824c-4.21504 1.17888-7.98592 3.39712-11.01824 6.464l-3.2896 0c-44.60032 0-80.88576 35.9168-80.88576 80.06528l0 515.26656c0 44.14848 36.28544 80.06656 80.88576 80.06656l503.53152 0c44.60032 0 80.88576-35.91808 80.88576-80.06656L820.30976 691.0912c62.944-6.6496 111.65824-59.26656 111.65824-121.54624C931.96672 507.26272 883.25376 454.64576 820.30848 447.99744zM411.04 231.8464l231.22688-64.6656c0.42624-0.11904 0.91904-0.1792 1.46688-0.1792 3.53408 0 7.4816 2.44736 8.51968 4.5504l29.7344 60.29312L411.04 231.84512zM204.93184 311.91168c0-16.84608 13.88928-30.55104 30.96064-30.55104l503.53152 0c17.07136 0 30.96064 13.70496 30.96064 30.55104l0 135.3664-103.47136 0c-69.0304 0-125.1904 54.848-125.1904 122.2656 0 67.4176 56.16 122.2656 125.1904 122.2656l103.47136 0 0 135.36896c0 16.84608-13.88928 30.55232-30.96064 30.55232L235.89248 857.73056c-17.07136 0-30.96064-13.70624-30.96064-30.55232L204.93184 311.91168zM882.04288 569.54368c0 40.1152-33.76384 72.75136-75.26528 72.75136L666.91328 642.29504c-41.50144 0-75.26528-32.63616-75.26528-72.75136 0-40.1152 33.76384-72.75136 75.26528-72.75136l139.86432 0C848.27904 496.79232 882.04288 529.42848 882.04288 569.54368zM678.5792 513.09056c-31.7568 0-57.5936 25.57696-57.5936 57.01632 0 31.43808 25.8368 57.01504 57.5936 57.01504s57.5936-25.57696 57.5936-57.01504C736.1728 538.66752 710.336 513.09056 678.5792 513.09056zM686.24768 570.10688c0 3.9168-3.44064 7.10272-7.66848 7.10272s-7.66848-3.18592-7.66848-7.10272c0-3.9168 3.44064-7.104 7.66848-7.104S686.24768 566.19008 686.24768 570.10688z" fill="#272636" /></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1 @@
<?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"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M835.98 932.97H185.92c-40.42 0-73.31-32.88-73.31-73.31V457.22c0-40.42 32.88-73.31 73.31-73.31h650.05c40.42 0 73.31 32.88 73.31 73.31v402.43c0.01 40.43-32.88 73.32-73.3 73.32zM185.92 432.79c-13.48 0-24.44 10.96-24.44 24.44v402.43c0 13.48 10.96 24.44 24.44 24.44h650.05c13.47 0 24.44-10.96 24.44-24.44V457.22c0-13.48-10.97-24.44-24.44-24.44H185.92zM276.19 528.58h469.52v48.87H276.19zM276.19 648.06h469.52v48.87H276.19zM282.09 435.64l-42.32-24.43 146.47-253.69 392.85 226.82-26.55 46.01-42.33-24.44 2.13-3.68-308.22-177.95zM761.7 429.11L570.36 157.62l-102.19 72.02-28.16-39.95L582.15 89.51l219.5 311.45z" /></svg>

After

Width:  |  Height:  |  Size: 877 B

View File

@@ -0,0 +1 @@
<?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"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M880.514012 124.087882c10.998926 0 19.998047 8.999121 19.998047 19.998047v735.928132c0 10.998926-8.999121 19.998047-19.998047 19.998047h-735.928132c-10.998926 0-19.998047-8.999121-19.998047-19.998047v-735.928132c0-10.998926 8.999121-19.998047 19.998047-19.998047h735.928132m0-59.994141h-735.928132c-44.195684 0-79.992188 35.796504-79.992188 79.992188v735.928132c0 44.195684 35.796504 79.992188 79.992188 79.992188h735.928132c44.195684 0 79.992188-35.796504 79.992189-79.992188v-735.928132c0-44.195684-35.796504-79.992188-79.992189-79.992188z" fill="#FF6600" opacity=".502" /><path d="M64.593692 244.076164h119.988282v59.994142h-119.988282z" fill="#FF6600" /><path d="M64.593692 720.029685h119.988282v59.994141h-119.988282z" fill="#FF6600" /><path d="M688.53276 276.17303h-48.795234L512.949907 503.150864l-126.687628-226.977834h-48.795235l139.186408 241.576409H370.463822v26.997363h121.388146v69.293233H370.463822v27.097354h121.388146v106.18963h42.295869V641.137389h121.388146v-27.097354H534.147837v-69.293233h121.388146v-26.997363H549.246363z" fill="#FF6600" /></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,57 @@
/**
* Copyright (c) 2013-Now https://jeesite.com All rights reserved.
* No deletion without permission, or be held responsible to law.
* @author gaoxq
*/
import { defHttp } from '@jeesite/core/utils/http/axios';
import { useGlobSetting } from '@jeesite/core/hooks/setting';
import { BasicModel, Page } from '@jeesite/core/api/model/baseModel';
import { UploadApiResult } from '@jeesite/core/api/sys/upload';
import { UploadFileParams } from '@jeesite/types/axios';
import { AxiosProgressEvent } from 'axios';
const { ctxPath, adminPath } = useGlobSetting();
export interface MyPageIndex extends BasicModel<MyPageIndex> {
createTime?: string; // 记录时间
indexId?: string; // 唯一标识
module: string; // 模块名称
moduleCode: string; // 模块编码
title: string; // 说明描述
value?: number; // 数值
label?: string; // 名称
iconImg: string; // 图片路径
iconFilter?: string; // 图标颜色
sort: number; // 序号
indexCode: string; // 指标编号
}
export const myPageIndexList = (params?: MyPageIndex | any) =>
defHttp.get<MyPageIndex>({ url: adminPath + '/biz/myPageIndex/list', params });
export const myPageIndexListAll = (params?: MyPageIndex | any) =>
defHttp.get<MyPageIndex[]>({ url: adminPath + '/biz/myPageIndex/listAll', params });
export const myPageIndexListData = (params?: MyPageIndex | any) =>
defHttp.post<Page<MyPageIndex>>({ url: adminPath + '/biz/myPageIndex/listData', params });
export const myPageIndexForm = (params?: MyPageIndex | any) =>
defHttp.get<MyPageIndex>({ url: adminPath + '/biz/myPageIndex/form', params });
export const myPageIndexSave = (params?: any, data?: MyPageIndex | any) =>
defHttp.postJson<MyPageIndex>({ url: adminPath + '/biz/myPageIndex/save', params, data });
export const myPageIndexImportData = (
params: UploadFileParams,
onUploadProgress: (progressEvent: AxiosProgressEvent) => void,
) =>
defHttp.uploadFile<UploadApiResult>(
{
url: ctxPath + adminPath + '/biz/myPageIndex/importData',
onUploadProgress,
},
params,
);
export const myPageIndexDelete = (params?: MyPageIndex | any) =>
defHttp.get<MyPageIndex>({ url: adminPath + '/biz/myPageIndex/delete', params });

View File

@@ -0,0 +1,167 @@
<!--
* Copyright (c) 2013-Now https://jeesite.com All rights reserved.
* No deletion without permission, or be held responsible to law.
* @author gaoxq
-->
<template>
<BasicModal
v-bind="$attrs"
:showFooter="true"
:okAuth="'biz:myPageIndex:edit'"
@register="registerModal"
@ok="handleSubmit"
width="60%"
>
<template #title>
<Icon :icon="getTitle.icon" class="m-1 pr-1" />
<span> {{ getTitle.value }} </span>
</template>
<BasicForm @register="registerForm" />
</BasicModal>
</template>
<script lang="ts" setup name="ViewsBizMyPageIndexForm">
import { ref, unref, computed } from 'vue';
import { useI18n } from '@jeesite/core/hooks/web/useI18n';
import { useMessage } from '@jeesite/core/hooks/web/useMessage';
import { router } from '@jeesite/core/router';
import { Icon } from '@jeesite/core/components/Icon';
import { BasicForm, FormSchema, useForm } from '@jeesite/core/components/Form';
import { BasicModal, useModalInner } from '@jeesite/core/components/Modal';
import { MyPageIndex, myPageIndexSave, myPageIndexForm } from '@jeesite/biz/api/biz/myPageIndex';
const emit = defineEmits(['success', 'register']);
const { t } = useI18n('biz.myPageIndex');
const { showMessage } = useMessage();
const { meta } = unref(router.currentRoute);
const record = ref<MyPageIndex>({} as MyPageIndex);
const getTitle = computed(() => ({
icon: meta.icon || 'i-ant-design:book-outlined',
value: record.value.isNewRecord ? t('新增指标') : t('编辑指标'),
}));
const inputFormSchemas: FormSchema<MyPageIndex>[] = [
{
label: t('基本信息'),
field: 'basicInfo',
component: 'FormGroup',
colProps: { md: 24, lg: 24 },
},
{
label: t('指标名称'),
field: 'module',
component: 'Input',
componentProps: {
maxlength: 52,
},
required: true,
},
{
label: t('指标编码'),
field: 'moduleCode',
component: 'Input',
componentProps: {
maxlength: 32,
},
required: true,
},
{
label: t('指标描述'),
field: 'title',
component: 'Input',
componentProps: {
maxlength: 32,
},
required: true,
colProps: { md: 24, lg: 24 },
},
{
label: t('指标数值'),
field: 'value',
component: 'InputNumber',
componentProps: {
maxlength: 18,
},
},
{
label: t('指标单位'),
field: 'label',
component: 'Input',
componentProps: {
maxlength: 32,
},
},
{
label: t('图片路径'),
field: 'iconImg',
component: 'Input',
componentProps: {
maxlength: 125,
},
required: true,
},
{
label: t('图标颜色'),
field: 'iconFilter',
component: 'Input',
componentProps: {
maxlength: 32,
},
},
{
label: t('指标序号'),
field: 'sort',
component: 'InputNumber',
required: true,
},
{
label: t('指标编号'),
field: 'indexCode',
component: 'Input',
componentProps: {
maxlength: 24,
},
required: true,
},
];
const [registerForm, { resetFields, setFieldsValue, validate }] = useForm<MyPageIndex>({
labelWidth: 120,
schemas: inputFormSchemas,
baseColProps: { md: 24, lg: 12 },
});
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
setModalProps({ loading: true });
await resetFields();
const res = await myPageIndexForm(data);
record.value = (res.myPageIndex || {}) as MyPageIndex;
record.value.__t = new Date().getTime();
await setFieldsValue(record.value);
setModalProps({ loading: false });
});
async function handleSubmit() {
try {
const data = await validate();
setModalProps({ confirmLoading: true });
const params: any = {
isNewRecord: record.value.isNewRecord,
indexId: record.value.indexId || data.indexId,
};
// console.log('submit', params, data, record);
const res = await myPageIndexSave(params, data);
showMessage(res.message);
setTimeout(closeModal);
emit('success', data);
} catch (error: any) {
if (error && error.errorFields) {
showMessage(error.message || t('common.validateError'));
}
console.log('error', error);
} finally {
setModalProps({ confirmLoading: false });
}
}
</script>

View File

@@ -0,0 +1,259 @@
<!--
* Copyright (c) 2013-Now https://jeesite.com All rights reserved.
* No deletion without permission, or be held responsible to law.
* @author gaoxq
-->
<template>
<div>
<BasicTable @register="registerTable">
<template #tableTitle>
<Icon :icon="getTitle.icon" class="m-1 pr-1" />
<span> {{ getTitle.value }} </span>
</template>
<template #toolbar>
<a-button type="default" :loading="loading" @click="handleExport()">
<Icon icon="i-ant-design:download-outlined" /> {{ t('导出') }}
</a-button>
<a-button type="primary" @click="handleForm({})" v-auth="'biz:myPageIndex:edit'">
<Icon icon="i-fluent:add-12-filled" /> {{ t('新增') }}
</a-button>
</template>
<template #firstColumn="{ record, text, value }">
<a @click="handleForm({ indexId: record.indexId })" :title="value">
{{ text }}
</a>
</template>
</BasicTable>
<InputForm @register="registerModal" @success="handleSuccess" />
</div>
</template>
<script lang="ts" setup name="ViewsBizMyPageIndexList">
import { onMounted, ref, unref } from 'vue';
import { useI18n } from '@jeesite/core/hooks/web/useI18n';
import { useMessage } from '@jeesite/core/hooks/web/useMessage';
import { useGlobSetting } from '@jeesite/core/hooks/setting';
import { downloadByUrl } from '@jeesite/core/utils/file/download';
import { router } from '@jeesite/core/router';
import { Icon } from '@jeesite/core/components/Icon';
import { BasicTable, BasicColumn, useTable } from '@jeesite/core/components/Table';
import { MyPageIndex, myPageIndexList } from '@jeesite/biz/api/biz/myPageIndex';
import { myPageIndexDelete, myPageIndexListData } from '@jeesite/biz/api/biz/myPageIndex';
import { useModal } from '@jeesite/core/components/Modal';
import { FormProps } from '@jeesite/core/components/Form';
import InputForm from './form.vue';
const { t } = useI18n('biz.myPageIndex');
const { showMessage } = useMessage();
const { meta } = unref(router.currentRoute);
const record = ref<MyPageIndex>({} as MyPageIndex);
const getTitle = {
icon: meta.icon || 'i-ant-design:book-outlined',
value: meta.title || t('指标管理'),
};
const loading = ref(false);
const searchForm: FormProps<MyPageIndex> = {
baseColProps: { md: 8, lg: 6 },
labelWidth: 90,
schemas: [
{
label: t('记录时间起'),
field: 'createTime_gte',
component: 'DatePicker',
componentProps: {
format: 'YYYY-MM-DD HH:mm',
showTime: { format: 'HH:mm' },
},
},
{
label: t('记录时间止'),
field: 'createTime_lte',
component: 'DatePicker',
componentProps: {
format: 'YYYY-MM-DD HH:mm',
showTime: { format: 'HH:mm' },
},
},
{
label: t('指标名称'),
field: 'module',
component: 'Input',
},
{
label: t('指标编码'),
field: 'moduleCode',
component: 'Input',
},
{
label: t('指标描述'),
field: 'title',
component: 'Input',
},
{
label: t('单位名称'),
field: 'label',
component: 'Input',
},
{
label: t('指标编号'),
field: 'indexCode',
component: 'Input',
},
],
};
const tableColumns: BasicColumn<MyPageIndex>[] = [
{
title: t('记录时间'),
dataIndex: 'createTime',
key: 'a.create_time',
sorter: true,
width: 150,
align: 'center',
fixed: 'left',
},
{
title: t('指标名称'),
dataIndex: 'module',
key: 'a.module',
sorter: true,
width: 130,
align: 'left',
},
{
title: t('指标编码'),
dataIndex: 'moduleCode',
key: 'a.module_code',
sorter: true,
width: 130,
align: 'left',
},
{
title: t('指标描述'),
dataIndex: 'title',
key: 'a.title',
sorter: true,
width: 130,
align: 'left',
slot: 'bizScopeKey',
},
{
title: t('指标数值'),
dataIndex: 'value',
key: 'a.value',
sorter: true,
width: 130,
align: 'right',
},
{
title: t('单位名称'),
dataIndex: 'label',
key: 'a.label',
sorter: true,
width: 130,
align: 'left',
},
{
title: t('图片路径'),
dataIndex: 'iconImg',
key: 'a.icon_img',
sorter: true,
width: 130,
align: 'left',
},
{
title: t('图标颜色'),
dataIndex: 'iconFilter',
key: 'a.icon_filter',
sorter: true,
width: 130,
align: 'left',
},
{
title: t('指标序号'),
dataIndex: 'sort',
key: 'a.sort',
sorter: true,
width: 130,
align: 'center',
},
{
title: t('指标编号'),
dataIndex: 'indexCode',
key: 'a.index_code',
sorter: true,
width: 130,
align: 'left',
},
];
const actionColumn: BasicColumn<MyPageIndex> = {
width: 160,
align: 'center',
actions: (record: MyPageIndex) => [
{
icon: 'i-clarity:note-edit-line',
title: t('编辑'),
onClick: handleForm.bind(this, { indexId: record.indexId }),
auth: 'biz:myPageIndex:edit',
},
{
icon: 'i-ant-design:delete-outlined',
color: 'error',
title: t('删除'),
popConfirm: {
title: t('是否确认删除指标?'),
confirm: handleDelete.bind(this, record),
},
auth: 'biz:myPageIndex:edit',
},
],
};
const [registerTable, { reload, getForm }] = useTable<MyPageIndex>({
api: myPageIndexListData,
beforeFetch: (params) => {
return params;
},
columns: tableColumns,
actionColumn: actionColumn,
formConfig: searchForm,
showTableSetting: true,
useSearchForm: true,
canResize: true,
});
onMounted(async () => {
const res = await myPageIndexList();
record.value = (res.myPageIndex || {}) as MyPageIndex;
await getForm().setFieldsValue(record.value);
});
const [registerModal, { openModal }] = useModal();
function handleForm(record: Recordable) {
openModal(true, record);
}
async function handleExport() {
loading.value = true;
const { ctxAdminPath } = useGlobSetting();
await downloadByUrl({
url: ctxAdminPath + '/biz/myPageIndex/exportData',
params: getForm().getFieldsValue(),
});
loading.value = false;
}
async function handleDelete(record: Recordable) {
const params = { indexId: record.indexId };
const res = await myPageIndexDelete(params);
showMessage(res.message);
await handleSuccess(record);
}
async function handleSuccess(record: Recordable) {
await reload({ record });
}
</script>

View File

@@ -0,0 +1,8 @@
<template>
</template>
<script>
</script>
<style>
</style>

View File

@@ -3,11 +3,11 @@
<div class="card-item" v-for="(item, index) in cardList" :key="index">
<div class="card-left">
<div class="icon-box">
<img
:src="item.iconImg"
<Icon
:icon="item.iconImg"
class="icon-img"
:style="{ filter: item.iconFilter }"
>
/>
</div>
<div class="card-text">
<div class="module-name">{{ item.module }}</div>
@@ -22,17 +22,19 @@
</div>
</template>
<script setup>
<script lang="ts" setup>
import { ref, onMounted, watch } from 'vue'
// import { getIndexInfoList } from '@/api/bizApi'
const cardList = ref()
import { Icon } from '@jeesite/core/components/Icon';
import { MyPageIndex, myPageIndexListAll } from '@jeesite/biz/api/biz/myPageIndex';
const cardList = ref<MyPageIndex[]>()
async function getList() {
try {
const reqParams = {
indexCode: "werpIndex"
}
const res = await getIndexInfoList(reqParams)
const res = await myPageIndexListAll(reqParams)
cardList.value = res || []
} catch (error) {
console.error('获取数据失败:', error)
@@ -40,14 +42,6 @@ async function getList() {
}
}
const resizeHandler = () => {
const container = document.querySelector('.chart-top-container')
if (container) {
const height = container.parentElement.clientHeight
container.style.height = `${height}px`
}
}
onMounted(() => {
getList()
})
@@ -79,7 +73,7 @@ watch(
flex: 1;
min-width: 160px;
height: 85%;
background: rgba(0, 0, 0, 0.1) url("@/assets/chart/item/03.png") no-repeat;
background: rgba(0, 0, 0, 0.1) url("@jeesite/assets/chart/item/03.png") no-repeat;
background-size: 100% 100%;
border: 1px solid rgba(26, 80, 139, 0.3);
border-radius: 8px;

View File

@@ -2,7 +2,7 @@
<div class="erp-layout-container">
<div class="erp-section erp-top-header">
<div class="erp-card full-card">
<!-- <ChartTop /> -->
<ChartTop />
</div>
</div>

View File

@@ -8,6 +8,7 @@ import { PageEnum } from '@jeesite/core/enums/pageEnum';
import { t } from '@jeesite/core/hooks/web/useI18n';
const modules = import.meta.glob('./modules/**/*.ts', { eager: true });
const bigScreenModules = import.meta.glob('../../layouts/screen/welcome/**/index.vue');
const routeModuleList: AppRouteModule[] = [];
@@ -47,60 +48,56 @@ const ModPwdRoute: AppRouteModule = {
},
};
function toPascalCase(value: string) {
return value
.split(/[-_/]+/)
.filter(Boolean)
.map((item) => item.charAt(0).toUpperCase() + item.slice(1))
.join('');
}
function createBigScreenChildren(): AppRouteRecordRaw[] {
return Object.entries(bigScreenModules)
.map(([filePath, component]) => {
const matched = filePath.match(/screen\/welcome(?:\/([^/]+))?\/index\.vue$/);
if (!matched) return null;
const segment = matched[1]?.toLowerCase() || 'welcome';
return {
path: segment,
name: `Screen${toPascalCase(segment)}`,
component,
meta: {
title: t('routes.screen.bigScreen'),
},
} as AppRouteRecordRaw;
})
.filter((route): route is AppRouteRecordRaw => !!route)
.sort((a, b) => {
if (a.path === 'welcome') return -1;
if (b.path === 'welcome') return 1;
return a.path.localeCompare(b.path);
});
}
const bigScreenChildren = createBigScreenChildren();
const BigScreenRoute: AppRouteRecordRaw = {
path: '/bigScreen',
name: 'BigScreen',
component: SCREEN_LAYOUT,
redirect: '/bigScreen/welcome',
redirect: `/bigScreen/${bigScreenChildren[0]?.path || 'welcome'}`,
meta: {
title: t('routes.screen.bigScreen'),
ignoreAuth: false,
},
children: [
{
path: 'welcome',
name: 'ScreenWelcome',
component: () => import('@jeesite/core/layouts/views/screen/welcome/index.vue'),
meta: {
title: t('routes.screen.bigScreen'),
},
},
{
path: 'home',
name: 'ScreenHome',
component: () => import('@jeesite/core/layouts/views/screen/welcome/Home/index.vue'),
meta: {
title: t('routes.screen.bigScreen'),
},
},
{
path: 'work',
name: 'ScreenWork',
component: () => import('@jeesite/core/layouts/views/screen/welcome/Work/index.vue'),
meta: {
title: t('routes.screen.bigScreen'),
},
},
{
path: 'erp',
name: 'ScreenErp',
component: () => import('@jeesite/core/layouts/views/screen/welcome/Erp/index.vue'),
meta: {
title: t('routes.screen.bigScreen'),
},
},
{
path: 'sys',
name: 'ScreenSys',
component: () => import('@jeesite/core/layouts/views/screen/welcome/Sys/index.vue'),
meta: {
title: t('routes.screen.bigScreen'),
},
},
...bigScreenChildren,
{
path: 'setting',
name: 'ScreenSetting',
component: () => import('@jeesite/core/layouts/views/screen/setting/index.vue'),
component: () => import('@jeesite/core/layouts/screen/setting/index.vue'),
meta: {
title: t('routes.screen.bigSetting'),
},
@@ -109,4 +106,12 @@ const BigScreenRoute: AppRouteRecordRaw = {
};
// Basic routing without permission
export const basicRoutes = [LoginRoute, ModPwdRoute, RootRoute, BigScreenRoute, ...mainOutRoutes, REDIRECT_ROUTE, PAGE_NOT_FOUND_ROUTE];
export const basicRoutes = [
LoginRoute,
ModPwdRoute,
RootRoute,
BigScreenRoute,
...mainOutRoutes,
REDIRECT_ROUTE,
PAGE_NOT_FOUND_ROUTE,
];

View File

@@ -0,0 +1 @@
<?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"><svg t="1771407056700" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11634" width="128" height="128" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M512 512m-512 0a512 512 0 1 0 1024 0 512 512 0 1 0-1024 0Z" fill="#FAAD14" p-id="11635"></path><path d="M564.098612 667.021061h0.543347a16.509388 16.509388 0 0 1 0 33.039674h-41.252571v37.156571a20.58449 20.58449 0 1 1-41.148082 0v-37.156571h-41.795918a16.509388 16.509388 0 0 1 0-32.997878h41.795918v-24.764081h-41.795918a16.509388 16.509388 0 0 1 0-32.997878h20.082939l-17.303511-53.331592-0.229877-0.731428a16.48849 16.48849 0 0 1 31.346939-10.177307l0.167183 0.501551v0.376164l20.48 63.320816h15.318204l20.500898-63.237224v-0.41796l0.397061-0.480653a16.48849 16.48849 0 0 1 31.346939 10.114613l-0.229877 0.689632-17.30351 53.331592h19.623183a16.509388 16.509388 0 0 1 0 33.039674h-41.252571v24.722285h40.709224z" fill="#FAAD14" p-id="11636"></path><path d="M623.929469 302.247184l-116.610612 116.610612-116.610612-116.610612a32.997878 32.997878 0 0 0-46.665143 46.665143l105.158531 105.200326h-55.985633a33.018776 33.018776 0 0 0 0 66.016653h82.254367V572.604082h-82.902204a35.651918 35.651918 0 0 0 0 71.282938h82.902204v71.471021a33.018776 33.018776 0 0 0 66.016653 0v-71.471021h82.12898a35.651918 35.651918 0 1 0 0-71.282938h-82.12898v-52.474776h82.776817a33.018776 33.018776 0 1 0 0-66.016653h-58.827755l105.15853-105.200326a32.997878 32.997878 0 0 0-46.665143-46.665143z" fill="#FFFFFF" p-id="11637"></path></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -0,0 +1 @@
<?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"><svg t="1771407178032" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13001" width="128" height="128" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M64 512a448 448 0 1 0 896 0 448 448 0 1 0-896 0z" fill="#FFBD27" p-id="13002"></path><path d="M413.776 279.52l32.256 41.92h112.864l32.256-41.92 3.232-6.448v-3.232c0-6.448-3.232-9.664-9.68-12.896 0 0-45.152-9.664-83.84-9.664-38.72 0-83.856 9.664-83.856 9.664-16.128 6.448-3.232 22.576-3.232 22.576z m154.8 70.96H452.48C362.176 382.72 288 482.704 288 576.24c0 116.08 64.496 170.912 222.528 170.912 158.032 0 222.528-54.832 222.528-170.928 0-93.52-74.176-193.504-164.48-225.76z m22.576 238.64c6.448 0 12.896 6.448 12.896 12.912 0 6.448-6.448 12.896-12.896 12.896h-64.496v45.152c0 6.448-6.448 12.896-12.896 12.896-6.464 0-12.912-6.448-12.912-12.896v-41.92h-64.496c-6.448 0-12.896-6.464-12.896-12.912s6.448-12.896 12.896-12.896h64.496V556.88h-64.496c-6.448 0-12.896-6.448-12.896-12.912 0-6.448 6.448-12.896 12.896-12.896h67.728v-3.216s-3.232 0-3.232-3.232l-51.6-61.28c-6.448-3.216-6.448-12.896 0-19.344s16.128-3.232 19.36 3.232l45.152 51.6 45.136-51.6c6.464-6.464 12.912-6.464 19.36-3.232 6.448 6.448 6.448 12.896 3.216 19.36l-51.6 61.28c0 3.2-3.216 3.2-6.448 3.2h67.728c6.448 0 12.896 6.464 12.896 12.912s-6.448 12.896-12.896 12.896h-64.496v35.472h64.496z" fill="#FFFFFF" p-id="13003"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1 @@
<?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"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M366.157576 633.018182c17.066667-44.993939 29.478788-89.987879 63.612121-124.121212C209.454545 501.139394 35.684848 439.078788 35.684848 341.333333v107.054546c0 85.333333 147.393939 161.357576 330.472728 184.630303z" fill="#2E9CFE" /><path d="M380.121212 817.648485c-7.757576-27.927273-13.963636-55.854545-13.963636-85.333333 0-13.963636 3.10303-26.375758 4.654545-40.339394C195.490909 671.806061 37.236364 614.4 37.236364 530.618182v107.054545C34.133333 732.315152 162.909091 791.272727 380.121212 817.648485zM480.969697 448.387879c9.309091 0 18.618182-1.551515 27.927273-1.551515 65.163636-38.787879 145.842424-62.060606 231.175757-62.060606 20.169697 0 40.339394 3.10303 60.509091 4.654545 77.575758-34.133333 125.672727-80.678788 125.672727-131.878788v-63.612121C926.254545 88.436364 727.660606 4.654545 480.969697 4.654545 235.830303 4.654545 35.684848 89.987879 35.684848 193.939394v63.612121c0 105.50303 200.145455 190.836364 445.284849 190.836364z" fill="#2E9CFE" /><path d="M398.739394 878.157576C203.248485 862.642424 35.684848 809.890909 35.684848 721.454545v107.054546c0 105.50303 198.593939 189.284848 445.284849 189.284848 7.757576 0 17.066667-1.551515 24.824242-1.551515-55.854545-32.581818-77.575758-85.333333-107.054545-138.084848zM712.145455 423.563636c-155.151515 0-279.272727 133.430303-279.272728 297.890909s125.672727 297.890909 279.272728 297.89091c155.151515 0 279.272727-133.430303 279.272727-297.89091s-125.672727-297.890909-279.272727-297.890909z m94.642424 350.642425H505.793939v-89.987879H926.254545v89.987879h-119.466666z" fill="#2E9CFE" /></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1 @@
<?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"><svg class="icon" width="200px" height="192.84px" viewBox="0 0 1062 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M735.744 701.44m-311.296 0a311.296 311.296 0 1 0 622.592 0 311.296 311.296 0 1 0-622.592 0Z" fill="#FFCAD8" /><path d="M804.864 659.456c5.12 1.024 10.24 1.536 14.336 2.048h47.104c4.608-0.512 8.704 1.024 11.776 5.12 3.072 3.584 4.096 11.264 4.096 11.264v33.792s-3.584 10.24-13.312 11.264h-81.92c-3.584-1.536-6.656-0.512-10.752 1.536-3.072 1.536-4.608 4.608-4.608 8.704 0 4.096 0 8.192 0.512 12.288 0.512 4.096 0.512 8.192 0.512 10.752 0 5.632 4.608 7.68 13.824 8.704h80.896c9.216-2.56 18.944 10.24 18.944 10.24v31.232s-12.288 13.824-25.088 10.24h-17.92c-7.68 3.584-14.848 4.096-23.04 4.608-8.192 0.512-14.848 1.024-21.504 0.512h-12.8c-8.192 0.512-12.8 14.336-12.8 14.336v55.808c0 4.608-3.584 6.656-10.752 6.656h-41.984c-11.264 0-16.896-4.608-16.896-14.336 0-3.584 0.512-11.264 0.512-23.04 0.512-11.776 0-19.456-0.512-24.064 0-4.096-0.512-7.68-1.536-8.704-0.512-1.024-3.072-2.048-8.192-2.048h-87.552c-12.288 0-18.432-6.144-18.432-18.944 0-2.56-0.512-6.144-1.536-11.264-1.024-4.096-1.024-8.704 0-13.824 1.024-4.608 2.56-9.216 4.096-13.312 2.048-3.584 5.632-5.12 11.264-4.096h96.256c2.048 0 2.56-2.048 2.56-7.68v-26.624c0-4.608-5.632-6.656-16.896-6.656h-81.92c-3.584 0-6.656 0-10.24-0.512-3.072-0.512-4.096-3.072-4.096-8.192v-18.432s-1.536-13.312-2.048-16.896c-2.048-5.632-0.512-10.752 4.096-13.824 4.608-4.096 10.752-5.632 17.92-5.632 7.68 1.024 15.36 1.024 24.576 0.512 8.704-0.512 15.36-0.512 19.968-3.584h16.384c5.632 3.072 7.68 1.024 5.632-2.048-1.536-2.048-7.68-9.216-16.384-20.992-9.728-12.8-18.944-25.088-29.184-38.4-12.288-15.872-26.112-33.28-41.984-52.736-6.144-10.752-5.12-18.944 4.096-25.6 4.608-3.072 9.728-6.144 14.336-10.752 5.12-4.096 11.264-8.192 17.408-11.776 9.216-5.632 17.92-0.512 26.624 15.36 3.072 4.096 8.192 10.752 15.872 20.48 8.192 10.24 15.872 19.968 24.576 31.744 8.192 11.776 15.872 21.504 24.064 30.208 7.68 9.216 11.776 14.848 12.8 16.384 1.536 3.584 5.12 6.144 10.24 6.656 5.12 1.024 9.216-0.512 10.752-4.096 1.024-2.048 4.608-8.192 11.776-17.92 6.656-9.728 14.336-20.48 23.04-32.768s15.872-24.064 23.552-34.816c7.68-10.752 12.288-17.408 13.824-19.968 4.608-6.656 8.704-10.752 11.776-12.8 3.072-2.048 8.704-1.536 15.872 1.536 4.608 2.048 9.728 4.608 14.848 8.704 5.632 3.584 9.728 6.656 11.264 8.704 10.24 10.752 13.312 18.944 8.704 27.136-1.536 3.072-6.656 10.24-14.848 20.992-8.704 11.264-17.408 23.552-27.136 35.84-10.24 12.8-18.432 24.576-26.624 35.84s-12.288 17.92-13.312 19.456c-0.512 3.584 0.512 6.656 5.12 7.68z" fill="#FFFFFF" /><path d="M26.624 189.952a382.976 189.952 0 1 0 765.952 0 382.976 189.952 0 1 0-765.952 0Z" fill="#FB7895" /><path d="M530.944 428.544C492.544 435.2 452.096 438.272 409.6 438.272c-182.272 0-334.848-62.976-373.76-147.968-6.144 13.824-9.728 27.648-9.728 42.496 0 104.96 171.52 189.952 382.976 189.952 10.24 0 19.968-0.512 30.208-1.024 24.576-36.352 55.296-67.584 91.648-93.184zM782.848 376.832c6.656-13.824 10.752-28.672 10.752-43.52 0-14.336-3.584-28.672-9.728-42.496-13.824 30.208-42.496 57.344-80.896 79.872 5.12-0.512 10.752-1.024 16.384-1.024 20.992 0.512 42.496 2.56 63.488 7.168z" fill="#FB7895" /><path d="M409.6 564.224c-182.272 0-334.848-62.976-373.76-147.968-6.144 13.824-9.728 27.648-9.728 42.496 0 101.888 161.792 185.344 365.568 189.952 4.608-29.696 13.312-57.856 25.6-84.48H409.6z" fill="#FB7895" /><path d="M388.096 688.64c-172.544-4.608-314.88-66.56-351.744-147.456-6.144 13.824-9.728 27.648-9.728 42.496 0 102.4 163.84 186.368 368.64 189.952-5.12-23.552-8.192-47.104-8.192-71.68 0.512-4.608 1.024-9.216 1.024-13.312z" fill="#FB7895" /><path d="M36.352 666.624c-6.144 13.824-9.728 27.648-9.728 42.496 0 104.96 171.52 189.952 382.976 189.952 14.336 0 28.16-0.512 41.984-1.024-18.432-25.6-33.28-53.248-44.032-83.456-181.248-1.024-332.8-64.512-371.2-147.968z" fill="#FB7895" /><path d="M484.864 935.424c-24.576 2.56-49.152 3.584-75.264 3.584-182.272 0-334.848-62.976-373.76-147.968-6.144 13.824-9.728 27.648-9.728 42.496 0 104.96 171.52 189.952 382.976 189.952 62.464 0 120.832-7.68 173.056-20.48-35.84-16.896-69.12-39.424-97.28-67.584z" fill="#FB7895" /></svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -0,0 +1 @@
<?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"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M119.467 494.933c-5.12 0-8.534-1.706-11.947-5.12-6.827-6.826-6.827-17.066 0-23.893l238.933-238.933c6.827-6.827 17.067-6.827 23.894 0L512 368.64l226.987-226.987c6.826-6.826 17.066-6.826 23.893 0s6.827 17.067 0 23.894L523.947 404.48c-6.827 6.827-17.067 6.827-23.894 0L358.4 262.827 131.413 489.813c-3.413 3.414-6.826 5.12-11.946 5.12zM682.667 409.6h153.6v477.867h-153.6V409.6z" fill="#CDCDCD" /><path d="M836.267 904.533h-153.6c-10.24 0-17.067-6.826-17.067-17.066V409.6c0-10.24 6.827-17.067 17.067-17.067h153.6c10.24 0 17.066 6.827 17.066 17.067v477.867c0 10.24-6.826 17.066-17.066 17.066zM699.733 870.4H819.2V426.667H699.733V870.4zM426.667 563.2h153.6v324.267h-153.6V563.2z" fill="#CDCDCD" /><path d="M580.267 904.533h-153.6c-10.24 0-17.067-6.826-17.067-17.066V563.2c0-10.24 6.827-17.067 17.067-17.067h153.6c10.24 0 17.066 6.827 17.066 17.067v324.267c0 10.24-6.826 17.066-17.066 17.066zM443.733 870.4H563.2V580.267H443.733V870.4z m-119.466 34.133H187.733c-10.24 0-17.066-6.826-17.066-17.066V648.533c0-10.24 6.826-17.066 17.066-17.066h136.534c10.24 0 17.066 6.826 17.066 17.066v238.934c0 10.24-6.826 17.066-17.066 17.066zM204.8 870.4h102.4V665.6H204.8v204.8zM119.467 431.787c25.6 0 46.08 20.48 46.08 46.08 0 25.6-20.48 46.08-46.08 46.08s-46.08-20.48-46.08-46.08c0-25.6 20.48-46.08 46.08-46.08z" fill="#CDCDCD" /><path d="M119.467 541.013c-34.134 0-63.147-27.306-63.147-63.146s29.013-63.147 63.147-63.147 63.146 27.307 63.146 63.147-29.013 63.146-63.146 63.146z m0-92.16c-15.36 0-29.014 11.947-29.014 29.014s11.947 29.013 29.014 29.013 29.013-11.947 29.013-29.013-13.653-29.014-29.013-29.014zM358.4 192.853c25.6 0 46.08 20.48 46.08 46.08 0 25.6-20.48 46.08-46.08 46.08-25.6 0-46.08-20.48-46.08-46.08 0-25.6 20.48-46.08 46.08-46.08z" fill="#CDCDCD" /><path d="M358.4 302.08c-34.133 0-63.147-27.307-63.147-63.147s27.307-63.146 63.147-63.146 63.147 27.306 63.147 63.146-29.014 63.147-63.147 63.147z m0-92.16c-15.36 0-29.013 11.947-29.013 29.013s11.946 29.014 29.013 29.014 29.013-11.947 29.013-29.014S373.76 209.92 358.4 209.92zM512 346.453c25.6 0 46.08 20.48 46.08 46.08 0 25.6-20.48 46.08-46.08 46.08s-46.08-20.48-46.08-46.08c0-25.6 20.48-46.08 46.08-46.08z" fill="#CDCDCD" /><path d="M512 455.68c-34.133 0-63.147-27.307-63.147-63.147S476.16 329.387 512 329.387c34.133 0 63.147 27.306 63.147 63.146S546.133 455.68 512 455.68z m0-92.16c-15.36 0-29.013 11.947-29.013 29.013s11.946 29.014 29.013 29.014 29.013-11.947 29.013-29.014S527.36 363.52 512 363.52zM768 90.453c25.6 0 46.08 20.48 46.08 46.08s-20.48 46.08-46.08 46.08-46.08-20.48-46.08-46.08 20.48-46.08 46.08-46.08z" fill="#CDCDCD" /><path d="M768 199.68c-34.133 0-63.147-27.307-63.147-63.147S733.867 73.387 768 73.387s63.147 29.013 63.147 63.146S802.133 199.68 768 199.68z m0-92.16c-15.36 0-29.013 11.947-29.013 29.013s11.946 29.014 29.013 29.014 29.013-11.947 29.013-29.014S783.36 107.52 768 107.52z" fill="#CDCDCD" /></svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -0,0 +1 @@
<?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"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M820.30848 447.99744 820.30848 311.91168c0-44.14848-36.28544-80.06528-80.88576-80.06528l-1.85728 0-40.46464-82.05056c-9.53344-19.32672-30.96576-32.31232-53.3312-32.31232-5.1392 0-10.19904 0.68608-15.04 2.03776L250.20032 225.3824c-4.21504 1.17888-7.98592 3.39712-11.01824 6.464l-3.2896 0c-44.60032 0-80.88576 35.9168-80.88576 80.06528l0 515.26656c0 44.14848 36.28544 80.06656 80.88576 80.06656l503.53152 0c44.60032 0 80.88576-35.91808 80.88576-80.06656L820.30976 691.0912c62.944-6.6496 111.65824-59.26656 111.65824-121.54624C931.96672 507.26272 883.25376 454.64576 820.30848 447.99744zM411.04 231.8464l231.22688-64.6656c0.42624-0.11904 0.91904-0.1792 1.46688-0.1792 3.53408 0 7.4816 2.44736 8.51968 4.5504l29.7344 60.29312L411.04 231.84512zM204.93184 311.91168c0-16.84608 13.88928-30.55104 30.96064-30.55104l503.53152 0c17.07136 0 30.96064 13.70496 30.96064 30.55104l0 135.3664-103.47136 0c-69.0304 0-125.1904 54.848-125.1904 122.2656 0 67.4176 56.16 122.2656 125.1904 122.2656l103.47136 0 0 135.36896c0 16.84608-13.88928 30.55232-30.96064 30.55232L235.89248 857.73056c-17.07136 0-30.96064-13.70624-30.96064-30.55232L204.93184 311.91168zM882.04288 569.54368c0 40.1152-33.76384 72.75136-75.26528 72.75136L666.91328 642.29504c-41.50144 0-75.26528-32.63616-75.26528-72.75136 0-40.1152 33.76384-72.75136 75.26528-72.75136l139.86432 0C848.27904 496.79232 882.04288 529.42848 882.04288 569.54368zM678.5792 513.09056c-31.7568 0-57.5936 25.57696-57.5936 57.01632 0 31.43808 25.8368 57.01504 57.5936 57.01504s57.5936-25.57696 57.5936-57.01504C736.1728 538.66752 710.336 513.09056 678.5792 513.09056zM686.24768 570.10688c0 3.9168-3.44064 7.10272-7.66848 7.10272s-7.66848-3.18592-7.66848-7.10272c0-3.9168 3.44064-7.104 7.66848-7.104S686.24768 566.19008 686.24768 570.10688z" fill="#272636" /></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1 @@
<?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"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M835.98 932.97H185.92c-40.42 0-73.31-32.88-73.31-73.31V457.22c0-40.42 32.88-73.31 73.31-73.31h650.05c40.42 0 73.31 32.88 73.31 73.31v402.43c0.01 40.43-32.88 73.32-73.3 73.32zM185.92 432.79c-13.48 0-24.44 10.96-24.44 24.44v402.43c0 13.48 10.96 24.44 24.44 24.44h650.05c13.47 0 24.44-10.96 24.44-24.44V457.22c0-13.48-10.97-24.44-24.44-24.44H185.92zM276.19 528.58h469.52v48.87H276.19zM276.19 648.06h469.52v48.87H276.19zM282.09 435.64l-42.32-24.43 146.47-253.69 392.85 226.82-26.55 46.01-42.33-24.44 2.13-3.68-308.22-177.95zM761.7 429.11L570.36 157.62l-102.19 72.02-28.16-39.95L582.15 89.51l219.5 311.45z" /></svg>

After

Width:  |  Height:  |  Size: 877 B

View File

@@ -0,0 +1 @@
<?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"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M880.514012 124.087882c10.998926 0 19.998047 8.999121 19.998047 19.998047v735.928132c0 10.998926-8.999121 19.998047-19.998047 19.998047h-735.928132c-10.998926 0-19.998047-8.999121-19.998047-19.998047v-735.928132c0-10.998926 8.999121-19.998047 19.998047-19.998047h735.928132m0-59.994141h-735.928132c-44.195684 0-79.992188 35.796504-79.992188 79.992188v735.928132c0 44.195684 35.796504 79.992188 79.992188 79.992188h735.928132c44.195684 0 79.992188-35.796504 79.992189-79.992188v-735.928132c0-44.195684-35.796504-79.992188-79.992189-79.992188z" fill="#FF6600" opacity=".502" /><path d="M64.593692 244.076164h119.988282v59.994142h-119.988282z" fill="#FF6600" /><path d="M64.593692 720.029685h119.988282v59.994141h-119.988282z" fill="#FF6600" /><path d="M688.53276 276.17303h-48.795234L512.949907 503.150864l-126.687628-226.977834h-48.795235l139.186408 241.576409H370.463822v26.997363h121.388146v69.293233H370.463822v27.097354h121.388146v106.18963h42.295869V641.137389h121.388146v-27.097354H534.147837v-69.293233h121.388146v-26.997363H549.246363z" fill="#FF6600" /></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB