daily;
20 | }
21 |
--------------------------------------------------------------------------------
/blossom-backend/backend/src/main/resources/banner.txt:
--------------------------------------------------------------------------------
1 | ${AnsiColor.MAGENTA}
2 | ██████╗ ██╗ ██████╗ ███████╗ ███████╗ ██████╗ ███╗ ███╗
3 | ██╔══██╗ ██║ ██╔═══██╗ ██╔════╝ ██╔════╝ ██╔═══██╗ ████╗ ████║
4 | ██████╔╝ ██║ ██║ ██║ ███████╗ ███████╗ ██║ ██║ ██╔████╔██║
5 | ██╔══██╗ ██║ ██║ ██║ ╚════██║ ╚════██║ ██║ ██║ ██║╚██╔╝██║
6 | ██████╔╝ ███████╗ ╚██████╔╝ ███████║ ███████║ ╚██████╔╝ ██║ ╚═╝ ██║
7 | ╚═════╝ ╚══════╝ ╚═════╝ ╚══════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝
8 |
--------------------------------------------------------------------------------
/blossom-backend/backend/src/main/resources/mapper/ArticleLogMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 |
12 |
13 | delete from blossom_article_log
14 | where article_id in #{item}
15 |
16 |
--------------------------------------------------------------------------------
/blossom-backend/backend/src/main/resources/mapper/ArticleViewMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
11 |
12 |
13 | delete from blossom_article_view
14 | where article_id in #{item}
15 |
16 |
--------------------------------------------------------------------------------
/blossom-backend/backend/src/main/resources/mapper/DocMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
13 |
--------------------------------------------------------------------------------
/blossom-backend/backend/src/main/resources/mapper/NoteMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | update blossom_note
8 |
9 | set top = 0,
10 | top_time = null
11 |
12 |
13 | set top = 1,
14 | top_time = now()
15 |
16 | where id = #{id}
17 |
18 |
19 |
20 | update blossom_note
21 | set content = #{content}
22 | where id = #{id}
23 | and user_id = #{userId}
24 |
25 |
26 |
27 | delete from blossom_note where user_id = #{userId}
28 |
29 |
30 |
--------------------------------------------------------------------------------
/blossom-backend/backend/src/main/resources/mapper/ParamMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | update base_sys_param
7 | set param_value = #{paramValue}
8 | where param_name = #{paramName}
9 |
10 |
11 |
--------------------------------------------------------------------------------
/blossom-backend/backend/src/main/resources/mapper/StatMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | delete from blossom_stat where user_id = #{userId}
7 |
8 |
9 |
--------------------------------------------------------------------------------
/blossom-backend/backend/src/main/resources/mapper/WebMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | delete from blossom_web where user_id = #{userId}
7 |
8 |
9 |
--------------------------------------------------------------------------------
/blossom-backend/backend/src/main/resources/sentinel.properties:
--------------------------------------------------------------------------------
1 | project.name=blossom-backend
2 |
3 |
4 | csp.sentinel.log.dir=logs/csp
5 |
6 | csp.sentinel.metric.file.single.size=20971520
7 | csp.sentinel.metric.file.total.count=30
8 |
--------------------------------------------------------------------------------
/blossom-backend/backend/src/main/resources/static/blog/README.md:
--------------------------------------------------------------------------------
1 | 博客静态文件放置位置,若在 blossom-web 项目中打包,需使用:
2 |
3 | ```bash
4 | npm run build:spring
5 | ```
6 |
7 | 会自动将打包产物打包至该位置。
--------------------------------------------------------------------------------
/blossom-backend/backend/src/main/resources/static/editor/README.md:
--------------------------------------------------------------------------------
1 | 客户端静态文件放置位置。
2 |
3 | 在 blossom-editor 工程下执行如下语句, 打包成网页后复制到后台 static/editor 资源目录下
4 |
5 | ```
6 | npm run build
7 | ```
--------------------------------------------------------------------------------
/blossom-backend/backend/src/main/resources/static/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-backend/backend/src/main/resources/static/favicon.png
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/BaseConfig.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base;
2 |
3 | import org.springframework.context.annotation.Configuration;
4 |
5 | /**
6 | * core 模块公共配置
7 | *
8 | * @author xzzz
9 | */
10 | @Configuration
11 | public class BaseConfig {
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/enums/ExFormat.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.enums;
2 |
3 | import com.blossom.common.base.exception.AbstractExceptionAdvice;
4 |
5 | /**
6 | * {@link AbstractExceptionAdvice} 中是否将异常信息进行格式化打印;
7 | * 如果是 line, 则异常堆栈信息按照一行记录在日志中;
8 | *
如果是 format, 则异常堆栈信息按照格式化方式记录在日志中
9 | *
10 | * @author xzzz
11 | */
12 | public enum ExFormat {
13 | /**
14 | * 则异常堆栈信息按照一行记录在日志中, 通常可以方便进行日志收集, 例如有结构化的数据, 可以避免使用某分隔符进行分割, 以提升效率
15 | */
16 | line,
17 | /**
18 | * 异常堆栈信息按照格式化方式记录在日志中
19 | */
20 | format
21 | }
22 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/enums/ExStackTrace.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.enums;
2 |
3 | import com.blossom.common.base.exception.AbstractExceptionAdvice;
4 | import com.blossom.common.base.util.ExceptionUtil;
5 |
6 | /**
7 | * {@link AbstractExceptionAdvice} 中记录异常堆栈信息的内容;
8 | *
如果是 all ,则记录全部堆栈信息;
9 | *
如果是 project, 堆栈信息只包含项目包下的类;
10 | *
11 | * @author xzzz
12 | */
13 | public enum ExStackTrace {
14 |
15 | /**
16 | * 打印全部堆栈异常
17 | */
18 | all,
19 |
20 | /**
21 | * 只显式指定包下的堆栈信息, {@link ExceptionUtil#FILTER_PACKAGE}
22 | */
23 | project
24 | }
25 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/exception/XzAbstractException.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.exception;
2 |
3 | import com.blossom.common.base.pojo.IRCode;
4 |
5 | /**
6 | * 异常抽象类
7 | *
8 | * @author xzzz
9 | */
10 | public abstract class XzAbstractException extends RuntimeException {
11 |
12 | /**
13 | * 响应码
14 | */
15 | private final String code;
16 |
17 | /**
18 | * 自定义响应码和响应信息
19 | *
20 | * @param code 响应码
21 | * @param msg 响应信息
22 | */
23 | public XzAbstractException(String code, String msg) {
24 | super(msg);
25 | this.code = code;
26 | }
27 |
28 | /**
29 | * 直接返回响应码枚举
30 | */
31 | public XzAbstractException(IRCode irCode) {
32 | super(irCode.getMsg());
33 | this.code = irCode.getCode();
34 | }
35 |
36 | public String getCode() {
37 | return code;
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/exception/XzException.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.exception;
2 |
3 | import cn.hutool.core.util.StrUtil;
4 | import com.blossom.common.base.pojo.IRCode;
5 |
6 | /**
7 | * 异常, 通常不使用该异常
8 | *
9 | * @author xzzz
10 | */
11 | public class XzException extends XzAbstractException {
12 |
13 | public XzException(IRCode code) {
14 | super(code.getCode(), code.getMsg());
15 | }
16 |
17 | public XzException(String code, String msg) {
18 | super(code, msg);
19 | }
20 |
21 | public static void throwBy(boolean expression, String code, String msg) {
22 | if (expression) {
23 | if (StrUtil.isBlank(msg)) {
24 | msg = "";
25 | }
26 | throw new XzException(code, msg);
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/exception/XzException400.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.exception;
2 |
3 | import cn.hutool.core.util.StrUtil;
4 | import com.blossom.common.base.pojo.RCode;
5 |
6 | /**
7 | * @author xzzz
8 | */
9 | public class XzException400 extends XzAbstractException {
10 |
11 | public XzException400(String message) {
12 | super(RCode.BAD_REQUEST.getCode(), message);
13 | }
14 |
15 | public XzException400(String message, String... args) {
16 | super(RCode.BAD_REQUEST.getCode(), String.format(message, args));
17 | }
18 |
19 | public static void throwBy(boolean expression, String msg) {
20 | if (expression) {
21 | if (StrUtil.isBlank(msg)) {
22 | msg = RCode.BAD_REQUEST.getMsg();
23 | }
24 | throw new XzException400(msg);
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/exception/XzException400HTTP.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.exception;
2 |
3 | import cn.hutool.core.util.StrUtil;
4 | import com.blossom.common.base.pojo.RCode;
5 |
6 | /**
7 | * 抛出异常, 如果是 Rest 接口, 则 Http 响应码为 404
8 | *
9 | * @author xzzz
10 | */
11 | public class XzException400HTTP extends XzAbstractException {
12 |
13 | public XzException400HTTP(String message) {
14 | super(RCode.BAD_REQUEST.getCode(), message);
15 | }
16 |
17 | public static void throwBy(boolean expression, String msg) {
18 | if (expression) {
19 | if (StrUtil.isBlank(msg)) {
20 | msg = RCode.BAD_REQUEST.getMsg();
21 | }
22 | throw new XzException400HTTP(msg);
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/exception/XzException404.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.exception;
2 |
3 | import cn.hutool.core.util.StrUtil;
4 | import com.blossom.common.base.pojo.RCode;
5 |
6 | /**
7 | * @author xzzz
8 | */
9 | public class XzException404 extends XzAbstractException {
10 |
11 | public XzException404(String message) {
12 | super(RCode.NOT_FOUND.getCode(), message);
13 | }
14 |
15 | public static void throwBy(boolean expression, String msg) {
16 | if (expression) {
17 | if (StrUtil.isBlank(msg)) {
18 | msg = RCode.NOT_FOUND.getMsg();
19 | }
20 | throw new XzException404(msg);
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/exception/XzException500.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.exception;
2 |
3 | import cn.hutool.core.util.StrUtil;
4 | import com.blossom.common.base.pojo.RCode;
5 |
6 | /**
7 | * @author xzzz
8 | */
9 | public class XzException500 extends XzAbstractException {
10 |
11 | public XzException500(String message) {
12 | super(RCode.INTERNAL_SERVER_ERROR.getCode(), message);
13 | }
14 |
15 | public static void throwBy(boolean expression, String msg) {
16 | if (expression) {
17 | if (StrUtil.isBlank(msg)) {
18 | msg = RCode.INTERNAL_SERVER_ERROR.getMsg();
19 | }
20 | throw new XzException404(msg);
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/log/DynamicLogRepository.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.log;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * 动态日志级别的存储方式
7 | *
8 | * @author xzzz
9 | */
10 | public interface DynamicLogRepository {
11 |
12 | /**
13 | * 保存日志级别
14 | *
15 | * @param levelWrapper 日志封装
16 | */
17 | void save(LevelWrapper levelWrapper);
18 |
19 |
20 | @Data
21 | class LevelWrapper {
22 | /**
23 | * 日志路径
24 | */
25 | private String path;
26 | /**
27 | * 过期时间
28 | */
29 | private Long expire;
30 | /**
31 | * 该路径所要执行的日志级别
32 | */
33 | private String level;
34 |
35 | public LevelWrapper() {
36 | }
37 |
38 | public LevelWrapper(String path, String level, Long expire) {
39 | this.path = path;
40 | this.expire = expire;
41 | this.level = level;
42 | }
43 |
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/log/HostNameConfig.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.log;
2 |
3 | import ch.qos.logback.core.PropertyDefinerBase;
4 | import com.blossom.common.base.util.SystemUtil;
5 |
6 | /**
7 | * 使用在 logback-spring.xml 中, 作为日志收集时的机器名
8 | *
9 | * @author xzzz
10 | */
11 | public class HostNameConfig extends PropertyDefinerBase {
12 |
13 | private static final String HOST_NAME;
14 |
15 | static {
16 | HOST_NAME = SystemUtil.getHostName();
17 | }
18 |
19 | @Override
20 | public String getPropertyValue() {
21 | return HOST_NAME;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/log/LogIpConfig.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.log;
2 |
3 | import ch.qos.logback.core.PropertyDefinerBase;
4 | import com.blossom.common.base.util.SystemUtil;
5 |
6 | /**
7 | * 使用在 logback-spring.xml 中, 作为日志收集时的机器IP
8 | *
9 | * @author xzzz
10 | */
11 | public class LogIpConfig extends PropertyDefinerBase {
12 |
13 | private static final String IP;
14 |
15 | static {
16 | IP = SystemUtil.getIp();
17 | }
18 |
19 | @Override
20 | public String getPropertyValue() {
21 | return IP;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/log/pojo/DynamicLog.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.log.pojo;
2 |
3 | import lombok.Data;
4 |
5 | import javax.validation.constraints.NotEmpty;
6 |
7 | /**
8 | * 动态日志级别
9 | *
10 | * @author xzzz
11 | */
12 | @Data
13 | public class DynamicLog {
14 |
15 | /**
16 | * 日志路径
17 | */
18 | @NotEmpty(message = "日志路径为必填项")
19 | private String path;
20 |
21 | /**
22 | * 日志级别
23 | */
24 | @NotEmpty(message = "日志级别为必填项")
25 | private String level;
26 | }
27 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/pojo/AbstractEntity.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.pojo;
2 |
3 | import lombok.Data;
4 |
5 | import java.util.Date;
6 |
7 | /**
8 | * 抽象 entity
9 | *
10 | * @author xzzz
11 | */
12 | @Data
13 | public class AbstractEntity extends AbstractPOJO {
14 | /**
15 | * 创建名称,创建人ID
16 | */
17 | private String creBy;
18 | /**
19 | * 创建时间
20 | */
21 | private Date creTime;
22 | /**
23 | * 修改人名称,修改人ID
24 | */
25 | private String updBy;
26 | /**
27 | * 修改时间
28 | */
29 | private Date updTime;
30 | /**
31 | * 删除人名称,删除人ID
32 | */
33 | private String delBy;
34 | /**
35 | * 删除时间,0 为未删除,非 0 为已删除
36 | */
37 | private Long delTime;
38 | }
39 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/pojo/AbstractPOJO.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.pojo;
2 |
3 | import com.blossom.common.base.util.BeanUtil;
4 |
5 | /**
6 | * @author xzzz
7 | */
8 | public class AbstractPOJO {
9 |
10 | public T to(Class clazz) {
11 | return BeanUtil.toObj(this, clazz);
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/pojo/DelReq.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.pojo;
2 |
3 | import lombok.Data;
4 | import lombok.EqualsAndHashCode;
5 |
6 | import javax.validation.constraints.Min;
7 | import javax.validation.constraints.NotNull;
8 |
9 | /**
10 | * 删除参数
11 | *
12 | * @author xzzz
13 | */
14 | @Data
15 | @EqualsAndHashCode(callSuper = true)
16 | public class DelReq extends AbstractPOJO {
17 |
18 | /**
19 | * ID
20 | */
21 | @NotNull(message = "ID为必填项")
22 | @Min(value = 0, message = "ID不能小于0")
23 | private Long id;
24 | }
25 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/pojo/IRCode.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.pojo;
2 |
3 | /**
4 | * 响应码
5 | *
6 | * @author xzzz
7 | */
8 | public interface IRCode {
9 |
10 | /**
11 | * 响应码
12 | *
13 | * @return 响应码
14 | */
15 | String getCode();
16 |
17 | /**
18 | * 响应码信息
19 | *
20 | * @return 响应码信息
21 | */
22 | String getMsg();
23 | }
24 |
25 |
26 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/pojo/PageRes.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.pojo;
2 |
3 | import com.fasterxml.jackson.annotation.JsonInclude;
4 | import lombok.Getter;
5 | import lombok.Setter;
6 |
7 | import java.util.List;
8 |
9 | /**
10 | * 共用分页对象
11 | *
12 | * @author xzzz
13 | */
14 | @Getter
15 | @Setter
16 | public class PageRes {
17 |
18 | /**
19 | * 页码,0或1均表示第一页
20 | */
21 | private int pageNum;
22 | /**
23 | * 每页结果数
24 | */
25 | private int pageSize;
26 | /**
27 | * 总页数
28 | */
29 | private int totalPage;
30 | /**
31 | * 总行数
32 | */
33 | private long total;
34 | /**
35 | * 是否有下一页
36 | */
37 | private Boolean hasNextPage;
38 | /**
39 | * 分页数据
40 | */
41 | @JsonInclude(JsonInclude.Include.NON_NULL)
42 | private List datas;
43 |
44 |
45 | public PageRes() {
46 | }
47 |
48 | public PageRes(List datas) {
49 | this.datas = datas;
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/util/ProxyUtils.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.util;
2 |
3 | import org.aopalliance.intercept.MethodInterceptor;
4 | import org.springframework.aop.framework.ProxyFactory;
5 |
6 | /**
7 | * 代理辅助方法
8 | *
9 | * @author xzzz
10 | */
11 | public final class ProxyUtils {
12 |
13 | /**
14 | * 创建指定对象的代理类
15 | *
16 | * @param obj 对象
17 | * @param interceptor 代理方法
18 | * @return 代理类
19 | */
20 | public static Object getProxy(Object obj, MethodInterceptor interceptor) {
21 | ProxyFactory proxy = new ProxyFactory(obj);
22 | proxy.setProxyTargetClass(true);
23 | proxy.addAdvice(interceptor);
24 | return proxy.getProxy();
25 | }
26 | }
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/util/TimeUtil.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.util;
2 |
3 | import java.util.concurrent.TimeUnit;
4 |
5 | /**
6 | * Provides millisecond-level time of OS.
7 | *
8 | * @author xzzz
9 | */
10 | public final class TimeUtil {
11 |
12 | private static volatile long currentTimeMillis;
13 |
14 | static {
15 | currentTimeMillis = System.currentTimeMillis();
16 | Thread daemon = new Thread(() -> {
17 | while (true) {
18 | currentTimeMillis = System.currentTimeMillis();
19 | try {
20 | TimeUnit.MILLISECONDS.sleep(1);
21 | } catch (Throwable ignored) {
22 |
23 | }
24 | }
25 | });
26 | daemon.setDaemon(true);
27 | daemon.setName("blossom-time-tick-thread");
28 | daemon.start();
29 | }
30 |
31 | public static long currentTimeMillis() {
32 | return currentTimeMillis;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/util/okhttp/OkHttpInterceptor.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.util.okhttp;
2 |
3 | import okhttp3.Interceptor;
4 |
5 | /**
6 | * OKHTTP 拦截器, 由于 OKHTTP 为工具类, 拦截器不好拓展, 所以使用 SPI 方式由引用方实现
7 | *
8 | * @author xzzz
9 | */
10 | public interface OkHttpInterceptor extends Interceptor {
11 |
12 | /**
13 | * 说明该拦截器实现的作用
14 | */
15 | void instructions();
16 | }
17 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/util/security/Base64Util.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.util.security;
2 |
3 | import cn.hutool.core.util.StrUtil;
4 |
5 | import java.util.Base64;
6 |
7 | /**
8 | * 消息编码算法
9 | *
10 | * @author xzzz
11 | * @since 0.0.1
12 | */
13 | public class Base64Util {
14 |
15 | public static String encrypt(byte[] data) {
16 | return Base64.getEncoder().encodeToString(data);
17 | }
18 |
19 | public static String decrypt(String data) {
20 | return new String(Base64.getDecoder().decode(data));
21 | }
22 |
23 | /**
24 | * 是否 base64 图片, 只校验格式, 不判断内容是否为正确的图片
25 | * 例如: 传入 data:image/png;base64,a, 将会返回 true
26 | */
27 | public static boolean isBase64Img(String image) {
28 | if (StrUtil.isBlank(image)) {
29 | return false;
30 | }
31 | String prefix = image.substring(0, Math.max(image.indexOf(','), 0));
32 | return prefix.startsWith("data:image") && prefix.endsWith("base64");
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/util/security/SaltUtil.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.util.security;
2 |
3 | import java.security.SecureRandom;
4 |
5 | /**
6 | * 获取随机盐值
7 | *
8 | * @author xzzz
9 | * @since 0.0.1
10 | */
11 | public class SaltUtil {
12 |
13 | /**
14 | * 安全随机类
15 | */
16 | private static final SecureRandom RANDOM = new SecureRandom();
17 |
18 | /**
19 | * 获取随机盐值
20 | * @return 加盐
21 | */
22 | public static String randomSalt() {
23 | byte[] bytes = new byte[15];
24 | RANDOM.nextBytes(bytes);
25 | return Base64Util.encrypt(bytes);
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/util/spi/ServiceLoaderUtil.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.util.spi;
2 |
3 | import java.util.ServiceLoader;
4 |
5 | /**
6 | * 根据接口或抽象类获取该类的全部实现类
7 | *
8 | * @author xzzz
9 | */
10 | public final class ServiceLoaderUtil {
11 |
12 | private static final String CLASSLOADER_DEFAULT = "default";
13 | private static final String CLASSLOADER_CONTEXT = "context";
14 | private static final String CLASSLOADER_PATH = "";
15 |
16 | public static ServiceLoader getServiceLoader(Class clazz) {
17 | return ServiceLoader.load(clazz, clazz.getClassLoader());
18 | }
19 |
20 | private ServiceLoaderUtil() {}
21 | }
22 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/java/com/blossom/common/base/util/spring/AntPathMatcherUtil.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.base.util.spring;
2 |
3 | import org.springframework.util.AntPathMatcher;
4 |
5 | /**
6 | * 路径匹配工具类,依赖 Spring 的工具类
7 | *
8 | * @author xzzz
9 | * @since 0.0.1
10 | */
11 | public class AntPathMatcherUtil {
12 |
13 | private static AntPathMatcher antPathMatcher = new AntPathMatcher();
14 |
15 | public static AntPathMatcher getAntPathMatcher() {
16 | return antPathMatcher;
17 | }
18 |
19 | /**
20 | * 匹配请求路径是否在模板中
21 | * @param pattern 模板路径
22 | * @param path 路径
23 | * @return true:在模板中, false:不在模板中
24 | */
25 | public static boolean match (String pattern,String path) {
26 | return antPathMatcher.match(pattern,path);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-base/src/main/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2 | com.blossom.common.base.config.JacksonConfig,\
3 | com.blossom.common.base.BaseProperties,\
4 | com.blossom.common.base.BaseConfig,\
5 | com.blossom.common.base.config.WebMvcConfig,\
6 | com.blossom.common.base.exception.ExceptionAdviceByGlobal,\
7 | com.blossom.common.base.exception.ExceptionAdviceByXz,\
8 | com.blossom.common.base.util.spring.SpringUtil,\
9 | com.blossom.common.base.log.DynamicLogRepositoryCaffeine
10 |
11 |
12 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-cache/src/main/java/com/blossom/common/cache/caffeine/DynamicExpiry.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.cache.caffeine;
2 |
3 | import com.github.benmanes.caffeine.cache.Expiry;
4 | import org.checkerframework.checker.index.qual.NonNegative;
5 | import org.checkerframework.checker.nullness.qual.NonNull;
6 |
7 | /**
8 | * key 使用不同的过期时间
9 | *
10 | * @since 1.13.0
11 | */
12 | public class DynamicExpiry implements Expiry {
13 |
14 | @Override
15 | public long expireAfterCreate(@NonNull String key, @NonNull Object value, long currentTime) {
16 | return 0;
17 | }
18 |
19 | @Override
20 | public long expireAfterUpdate(@NonNull String key, @NonNull Object value, long currentTime, @NonNegative long currentDuration) {
21 | return currentDuration;
22 | }
23 |
24 | @Override
25 | public long expireAfterRead(@NonNull String key, @NonNull Object value, long currentTime, @NonNegative long currentDuration) {
26 | return currentDuration;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-cache/src/main/java/com/blossom/common/cache/redis/RedisConstant.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.cache.redis;
2 |
3 | import com.blossom.common.base.BaseConstants;
4 |
5 | /**
6 | * @author xzzz
7 | * @since 0.0.1
8 | */
9 | public final class RedisConstant {
10 |
11 | /**
12 | * cache 前后缀
13 | */
14 | public static final String CACHE_PREFIX_WITH = BaseConstants.PROJECT_NAME + ":";
15 |
16 | public static final String CACHE_SUFFIX_WITH = ":";
17 | }
18 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-cache/src/main/java/com/blossom/common/cache/redis/RedisProperties.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.cache.redis;
2 |
3 | import org.springframework.boot.context.properties.ConfigurationProperties;
4 | import org.springframework.context.annotation.Configuration;
5 |
6 | /**
7 | * redis 配置
8 | *
9 | * @author xzzz
10 | */
11 | @Configuration
12 | @ConfigurationProperties(prefix = "project.redis")
13 | public class RedisProperties {
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-cache/src/main/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2 | com.blossom.common.cache.CommonCacheProperties,\
3 | com.blossom.common.cache.caffeine.CaffeineCacheConfig,\
4 | com.blossom.common.cache.redis.RedisProperties,\
5 | com.blossom.common.cache.redis.RedisCacheConfig,\
6 | com.blossom.common.cache.redis.RedisConfiguration,\
7 | com.blossom.common.cache.redis.DynamicLogRepositoryRedis
8 |
9 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-db/src/main/java/com/blossom/common/db/DBProperties.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.db;
2 |
3 | import lombok.Data;
4 | import org.springframework.boot.context.properties.ConfigurationProperties;
5 | import org.springframework.context.annotation.Configuration;
6 |
7 | /**
8 | * 数据库配置
9 | *
10 | * @author xzzz
11 | */
12 | @Data
13 | @Configuration
14 | @ConfigurationProperties(prefix = "project.db")
15 | public class DBProperties {
16 |
17 | /**
18 | * 慢SQL指标, 单位毫秒
19 | */
20 | private long slowInterval = 2000L;
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-db/src/main/java/com/blossom/common/db/aspect/Pages.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.db.aspect;
2 |
3 | import java.lang.annotation.*;
4 |
5 | /**
6 | * 分页注解, 仅对被注解方法的第一条sql语句生效, 多条语句分页时需显示调用
7 | *
8 | * @author xzzz
9 | */
10 | @Target(ElementType.METHOD)
11 | @Retention(RetentionPolicy.RUNTIME)
12 | @Documented
13 | public @interface Pages {
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-db/src/main/java/com/blossom/common/db/pojo/PageReq.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.db.pojo;
2 |
3 | import com.baomidou.mybatisplus.annotation.TableField;
4 | import com.blossom.common.base.pojo.AbstractPOJO;
5 | import lombok.Data;
6 | import lombok.EqualsAndHashCode;
7 |
8 | /**
9 | * 分页参数
10 | *
11 | * @author xzzz
12 | */
13 | @Data
14 | @EqualsAndHashCode(callSuper = true)
15 | public class PageReq extends AbstractPOJO {
16 |
17 | /**
18 | * [分页参数] 页码, 0与1都表示第一页, 超过最大页时只显示最后一页
19 | */
20 | @TableField(exist = false)
21 | private int pageNum;
22 | /**
23 | * [分页参数] 每页结果数, 不传则为10, 最大为200, 超过200会自动替换为200
24 | */
25 | @TableField(exist = false)
26 | private int pageSize;
27 | /**
28 | * [分页参数] 排序字段, 需将驼峰类型字段改为下换线分隔字段,如 [userId > user_id]
29 | */
30 | @TableField(exist = false)
31 | private String sortField;
32 | /**
33 | * [分页参数] 排序方式 asc(升序) 或 desc(降序)
34 | */
35 | @TableField(exist = false)
36 | private String order;
37 | }
38 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-db/src/main/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2 | com.blossom.common.db.DBProperties,\
3 | com.blossom.common.db.exception.ExceptionAdviceByDB,\
4 | com.blossom.common.db.interceptor.SlowSQLInterceptor,\
5 | com.blossom.common.db.aspect.PageAspect
6 |
7 |
8 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-iaas/src/main/java/com/blossom/common/iaas/IaasEnum.java:
--------------------------------------------------------------------------------
1 | package com.blossom.common.iaas;
2 |
3 | import lombok.Getter;
4 |
5 | @Getter
6 | @SuppressWarnings("all")
7 | public enum IaasEnum {
8 |
9 | ALIBABA("alibaba"),
10 | HUAWEI("huawei"),
11 | TENCENT("tencent"),
12 | QINIU("qiniu"),
13 | BLOSSOM("blossom");
14 |
15 | private String type;
16 |
17 | IaasEnum(String type) {
18 | this.type = type;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/blossom-backend/common/common-iaas/src/main/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2 | com.blossom.common.iaas.IaasProperties,\
3 | com.blossom.common.iaas.IaasConfiguration
4 |
5 |
--------------------------------------------------------------------------------
/blossom-backend/common/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | com.blossom
7 | blossom-backend
8 | 1.16.0-SNAPSHOT
9 |
10 | 4.0.0
11 | pom
12 |
13 | common
14 | 公共模块
15 |
16 |
17 | common-base
18 | common-cache
19 | common-db
20 | common-iaas
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/blossom-backend/expand-sentinel/expand-sentinel-metric/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | com.blossom
7 | expand-sentinel
8 | 1.16.0-SNAPSHOT
9 |
10 | 4.0.0
11 |
12 | expand-sentinel-metric
13 |
14 |
15 |
--------------------------------------------------------------------------------
/blossom-backend/expand-sentinel/expand-sentinel-metric/src/main/java/com/blossom/expand/sentinel/metric/config/SentinelMetricConfiguration.java:
--------------------------------------------------------------------------------
1 | package com.blossom.expand.sentinel.metric.config;
2 |
3 | import com.blossom.expand.sentinel.metric.controller.SentinelMetricController;
4 | import lombok.extern.slf4j.Slf4j;
5 | import org.springframework.context.annotation.Bean;
6 | import org.springframework.context.annotation.Configuration;
7 |
8 | import javax.annotation.PostConstruct;
9 |
10 | /**
11 | * @author xzzz
12 | */
13 | @Slf4j
14 | @Configuration
15 | public class SentinelMetricConfiguration {
16 |
17 | @Bean
18 | public SentinelMetricController sentinelMetricController() {
19 | return new SentinelMetricController();
20 | }
21 |
22 | @PostConstruct
23 | public void init() {
24 | log.debug("[SENTINEL] 指标接口初始化完成");
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/blossom-backend/expand-sentinel/expand-sentinel-metric/src/main/java/com/blossom/expand/sentinel/metric/pojo/OneLineMetric.java:
--------------------------------------------------------------------------------
1 | package com.blossom.expand.sentinel.metric.pojo;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * Sentinel 原生日志字段
7 | * 详细信息见: https://www.yuque.com/xiaozeizeizi/learning/vdxicg
8 | *
9 | * @author xzzz
10 | */
11 | @Data
12 | public class OneLineMetric {
13 | private Long timestamp;
14 | private String datetime;
15 | private String resource;
16 | private Integer p;
17 | private Integer b;
18 | private Integer s;
19 | private Integer e;
20 | private Integer rt;
21 | private Integer o;
22 | private Integer c;
23 | private Integer cf;
24 | }
25 |
--------------------------------------------------------------------------------
/blossom-backend/expand-sentinel/expand-sentinel-metric/src/main/java/com/blossom/expand/sentinel/metric/pojo/ResourcesRes.java:
--------------------------------------------------------------------------------
1 | package com.blossom.expand.sentinel.metric.pojo;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * 资源信息
7 | *
8 | * @author xzzz
9 | */
10 | @Data
11 | public class ResourcesRes {
12 | /**
13 | * 资源名
14 | */
15 | private String resource;
16 | /**
17 | * 统计该资源所用的文档数,相当于多少秒的指标信息
18 | */
19 | private Long docCount;
20 | /**
21 | * 最小响应时间 毫秒
22 | */
23 | private Integer minRt;
24 | /**
25 | * 最大响应时间 毫秒
26 | */
27 | private Integer maxRt;
28 | /**
29 | * 平均响应时间 毫秒
30 | */
31 | private Double avgRt;
32 | /**
33 | * 请求成功数
34 | */
35 | private Integer success;
36 | }
37 |
--------------------------------------------------------------------------------
/blossom-backend/expand-sentinel/expand-sentinel-metric/src/main/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2 | com.blossom.expand.sentinel.metric.config.SentinelMetricConfiguration
3 |
4 |
--------------------------------------------------------------------------------
/blossom-backend/expand-sentinel/expand-sentinel-springmvc/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | com.blossom
7 | expand-sentinel
8 | 1.16.0-SNAPSHOT
9 |
10 | 4.0.0
11 |
12 | expand-sentinel-springmvc
13 |
14 |
15 |
--------------------------------------------------------------------------------
/blossom-backend/expand-sentinel/expand-sentinel-springmvc/src/main/java/com/blossom/expand/sentinel/mvc/SpringInterceptorUtil.java:
--------------------------------------------------------------------------------
1 | package com.blossom.expand.sentinel.mvc;
2 |
3 | import javax.servlet.http.HttpServletRequest;
4 |
5 | public class SpringInterceptorUtil {
6 |
7 | private static final String REQUEST_ATTRIBUTE_SENTINEL_EXCEPTION = "request_attribute_sentinel_exception";
8 |
9 | public static void fillException(HttpServletRequest request, Exception ex) {
10 | request.setAttribute(REQUEST_ATTRIBUTE_SENTINEL_EXCEPTION, ex);
11 | }
12 |
13 | public static Exception getException(HttpServletRequest request) {
14 | Object ex = request.getAttribute(REQUEST_ATTRIBUTE_SENTINEL_EXCEPTION);
15 | if (ex != null) {
16 | return (Exception) ex;
17 | }
18 | return null;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/blossom-backend/expand-sentinel/expand-sentinel-springmvc/src/main/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2 | com.blossom.expand.sentinel.mvc.config.SentinelInterceptorConfig
3 |
4 |
--------------------------------------------------------------------------------
/blossom-backend/expand-tracker/expand-tracker-core/src/main/java/com/blossom/expand/tracker/core/adapter/aspect/TrackerStart.java:
--------------------------------------------------------------------------------
1 | package com.blossom.expand.tracker.core.adapter.aspect;
2 |
3 |
4 | import com.blossom.expand.tracker.core.common.TrackerConstants;
5 |
6 | import java.lang.annotation.*;
7 |
8 | /**
9 | *
10 | * @author xzzz
11 | */
12 | @Documented
13 | @Target(ElementType.METHOD)
14 | @Retention(RetentionPolicy.RUNTIME)
15 | public @interface TrackerStart {
16 |
17 | /**
18 | * 是否创建新的Trace
19 | *
20 | * false: 如果当前存在跟踪链路, 则以当前为准
21 | * true : 忽略当前已存在的路径, 会替换后续全部链路
22 | *
23 | * @return 默认false
24 | */
25 | String spanName() default "";
26 |
27 | String spanType() default TrackerConstants.SPAN_TYPE_ANNOTATION;
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/blossom-backend/expand-tracker/expand-tracker-core/src/main/java/com/blossom/expand/tracker/core/adapter/mysql/TrackerMysqlConfiguration.java:
--------------------------------------------------------------------------------
1 | package com.blossom.expand.tracker.core.adapter.mysql;
2 |
3 | import org.apache.ibatis.session.SqlSession;
4 | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
5 | import org.springframework.context.annotation.Bean;
6 | import org.springframework.context.annotation.Configuration;
7 |
8 | /**
9 | * 链路追踪 mysql 配置
10 | *
11 | * @author xzzz
12 | */
13 | @Configuration
14 | @ConditionalOnClass(value = SqlSession.class)
15 | public class TrackerMysqlConfiguration {
16 |
17 | @Bean
18 | public TrackerMysqlInterceptor trackerMysqlInterceptor() {
19 | return new TrackerMysqlInterceptor();
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/blossom-backend/expand-tracker/expand-tracker-core/src/main/java/com/blossom/expand/tracker/core/adapter/redis/TrackerRedisProperties.java:
--------------------------------------------------------------------------------
1 | package com.blossom.expand.tracker.core.adapter.redis;
2 |
3 | import lombok.Data;
4 | import org.springframework.boot.context.properties.ConfigurationProperties;
5 | import org.springframework.context.annotation.Configuration;
6 |
7 | /**
8 | * Redis 链路追踪配置
9 | *
10 | * @author xzzz
11 | */
12 | @Data
13 | @Configuration
14 | @ConfigurationProperties(prefix = "tracker.redis")
15 | public class TrackerRedisProperties {
16 |
17 | /**
18 | * 开启 redis 追踪
19 | */
20 | private Boolean enabled = true;
21 |
22 | /**
23 | * redis 请求详情保存至 Tracker.Record 中
24 | */
25 | private Boolean detailToRecord = false;
26 | }
27 |
--------------------------------------------------------------------------------
/blossom-backend/expand-tracker/expand-tracker-core/src/main/java/com/blossom/expand/tracker/core/adapter/spring/TrackerSpringConfiguration.java:
--------------------------------------------------------------------------------
1 | package com.blossom.expand.tracker.core.adapter.spring;
2 |
3 | import lombok.extern.slf4j.Slf4j;
4 | import org.springframework.context.annotation.Bean;
5 | import org.springframework.context.annotation.Configuration;
6 |
7 | /**
8 | * @author xzzz
9 | * @since 1.2.0
10 | */
11 | @Slf4j
12 | @Configuration
13 | public class TrackerSpringConfiguration {
14 |
15 | @Bean
16 | public TrackerFilter trackerFilter() {
17 | return new TrackerFilter();
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/blossom-backend/expand-tracker/expand-tracker-core/src/main/java/com/blossom/expand/tracker/core/collector/TrackerCollector.java:
--------------------------------------------------------------------------------
1 | package com.blossom.expand.tracker.core.collector;
2 |
3 | import com.blossom.expand.tracker.core.SpanNode;
4 |
5 | import java.util.List;
6 |
7 | /**
8 | * 追踪收集器
9 | *
10 | * @author xzzz
11 | */
12 | public interface TrackerCollector {
13 |
14 | /**
15 | * 收集 span 信息
16 | *
17 | * @param spanNode span 信息
18 | */
19 | void collect(SpanNode spanNode);
20 |
21 | /**
22 | * 获取 span 列表
23 | *
24 | * @return span 列表
25 | */
26 | List get();
27 | }
28 |
--------------------------------------------------------------------------------
/blossom-backend/expand-tracker/expand-tracker-core/src/main/java/com/blossom/expand/tracker/core/id/TraceIdGenerator.java:
--------------------------------------------------------------------------------
1 | package com.blossom.expand.tracker.core.id;
2 |
3 | /**
4 | * ID生成接口
5 | *
6 | * @author xzzz
7 | * @since 1.2.0
8 | */
9 | public interface TraceIdGenerator {
10 |
11 |
12 | /**
13 | * 生成 traceId
14 | * @return traceId
15 | */
16 | String traceId();
17 |
18 |
19 | /**
20 | * 生成 spanId
21 | * @return spanId
22 | */
23 | String spanId();
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/blossom-backend/expand-tracker/expand-tracker-core/src/main/java/com/blossom/expand/tracker/core/id/TraceIdGeneratorUUID.java:
--------------------------------------------------------------------------------
1 | package com.blossom.expand.tracker.core.id;
2 |
3 |
4 | import cn.hutool.core.lang.UUID;
5 |
6 | /**
7 | * trace 生成类
8 | *
9 | * @author xzzz
10 | * @since 1.2.0
11 | */
12 | public class TraceIdGeneratorUUID implements TraceIdGenerator {
13 |
14 | /**
15 | * 生成 traceId
16 | * @return traceId
17 | */
18 | @Override
19 | public String traceId () {
20 | return generator();
21 | }
22 |
23 | /**
24 | * 生成 spanId
25 | * @return spanId
26 | */
27 | @Override
28 | public String spanId () {
29 | return generator();
30 | }
31 |
32 | /**
33 | * 生成ID
34 | * @return ID
35 | */
36 | private String generator() {
37 | return UUID.fastUUID().toString(true).toUpperCase();
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/blossom-backend/expand-tracker/expand-tracker-core/src/main/java/com/blossom/expand/tracker/core/id/TraceIdGeneratorUtil.java:
--------------------------------------------------------------------------------
1 | package com.blossom.expand.tracker.core.id;
2 |
3 | /**
4 | * 追踪ID生成
5 | *
6 | * @author xzzz
7 | */
8 | public class TraceIdGeneratorUtil {
9 | /**
10 | * TraceGenerator traceId 生成器
11 | */
12 | private static final TraceIdGenerator traceGenerator = new TraceIdGeneratorUUID();
13 |
14 | public static String traceId() {
15 | return traceGenerator.traceId();
16 | }
17 |
18 | public static String spanId() {
19 | return traceGenerator.spanId();
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/blossom-backend/expand-tracker/expand-tracker-core/src/main/java/com/blossom/expand/tracker/core/repository/TrackerRepository.java:
--------------------------------------------------------------------------------
1 | package com.blossom.expand.tracker.core.repository;
2 |
3 | import com.blossom.expand.tracker.core.SpanNode;
4 |
5 | import java.util.List;
6 |
7 | /**
8 | * tracker span 信息持久化接口
9 | * tracker 客户端和服务端的实现不同
10 | *
客户端的实现目前有
11 | *
12 | * - disk: 保存在本地日志中
13 | *
14 | *
15 | * 服务端接收到应用自身,或其他应用的 span 信息,通过如下方式保存
16 | * 本项目是 xz.irda.tracker 框架的简单版本, 不提供服务方
17 | *
18 | * @author xzzz
19 | */
20 | public interface TrackerRepository {
21 |
22 | /**
23 | * 保存 span 集合,
24 | *
25 | * @param spanNodes span 集合
26 | * @return true: 保存成功; false:保存失败
27 | */
28 | boolean save(List spanNodes);
29 |
30 | /**
31 | * span 信息到期
32 | *
33 | * @return 删除的条数
34 | */
35 | default long expire() {
36 | return 0;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/blossom-backend/expand-tracker/expand-tracker-core/src/main/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2 | com.blossom.expand.tracker.core.TrackerProperties,\
3 | com.blossom.expand.tracker.core.TrackerConfiguration,\
4 | com.blossom.expand.tracker.core.adapter.spring.TrackerSpringConfiguration,\
5 | com.blossom.expand.tracker.core.adapter.redis.TrackerRedisConfiguration,\
6 | com.blossom.expand.tracker.core.adapter.mysql.TrackerMysqlConfiguration
7 |
8 |
--------------------------------------------------------------------------------
/blossom-backend/expand-tracker/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | blossom-backend
7 | com.blossom
8 | 1.16.0-SNAPSHOT
9 |
10 | 4.0.0
11 |
12 | expand-tracker
13 | pom
14 |
15 |
16 | expand-tracker-core
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/blossom-backend/script/restart-springboot.sh:
--------------------------------------------------------------------------------
1 | #!/dash
2 | # 重启 blossom
3 | pid=`ps aux | grep backend-blossom.jar | grep -v grep | awk '{print $2}'`
4 | echo "进程ID : " $pid
5 | kill -9 $pid
6 | echo "进程" $pid "已被杀死"
7 | echo "开始重启 backend-blossom 服务器"
8 | nohup java -Xms1024m -Xmx1024m -jar /usr/local/jasmine/blossom/backend/backend-blossom.jar --spring.profiles.active=prod &
9 | echo "backend-blossom 正在启动,请查看日志 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓"
10 |
--------------------------------------------------------------------------------
/blossom-editor/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
--------------------------------------------------------------------------------
/blossom-editor/.eslintignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | out
4 | .gitignore
5 |
--------------------------------------------------------------------------------
/blossom-editor/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | out
4 | *.log*
5 | stats.html
6 | auto-imports.d.ts
7 | components.d.ts
--------------------------------------------------------------------------------
/blossom-editor/.npmrc:
--------------------------------------------------------------------------------
1 | ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/
2 |
--------------------------------------------------------------------------------
/blossom-editor/.prettierignore:
--------------------------------------------------------------------------------
1 | out
2 | dist
3 | pnpm-lock.yaml
4 | LICENSE.md
5 | tsconfig.json
6 | tsconfig.*.json
7 |
--------------------------------------------------------------------------------
/blossom-editor/.prettierrc.yaml:
--------------------------------------------------------------------------------
1 | singleQuote: true
2 | semi: false
3 | printWidth: 150
4 | trailingComma: none
5 | bracketSameLine: true
--------------------------------------------------------------------------------
/blossom-editor/build/entitlements.mac.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.cs.allow-jit
6 |
7 | com.apple.security.cs.allow-unsigned-executable-memory
8 |
9 | com.apple.security.cs.allow-dyld-environment-variables
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/blossom-editor/build/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/build/icon.icns
--------------------------------------------------------------------------------
/blossom-editor/build/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/build/icon.ico
--------------------------------------------------------------------------------
/blossom-editor/build/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/build/icon.png
--------------------------------------------------------------------------------
/blossom-editor/dev-app-update.yml:
--------------------------------------------------------------------------------
1 | provider: generic
2 | url: https://example.com/auto-updates
3 | updaterCacheDirName: blossom-updater
4 |
--------------------------------------------------------------------------------
/blossom-editor/resources/imgs/guardcat_logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/resources/imgs/guardcat_logo.jpg
--------------------------------------------------------------------------------
/blossom-editor/resources/imgs/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/resources/imgs/icon.ico
--------------------------------------------------------------------------------
/blossom-editor/resources/imgs/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/resources/imgs/icon.png
--------------------------------------------------------------------------------
/blossom-editor/resources/imgs/iconBigSur.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/resources/imgs/iconBigSur.png
--------------------------------------------------------------------------------
/blossom-editor/resources/screenshot/PrScrn.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/resources/screenshot/PrScrn.dll
--------------------------------------------------------------------------------
/blossom-editor/resources/screenshot/PrintScr.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/resources/screenshot/PrintScr.exe
--------------------------------------------------------------------------------
/blossom-editor/resources/screenshot/README.md:
--------------------------------------------------------------------------------
1 | ## 前言
2 | 聊天软件需要截图功能。我们找到了一个方法,QQ dll,包装一下生成 exe 文件,我用 Node.js 去调用完成截图。
3 |
4 | 1. 第一步先用 Node 执行微信封装的 exe,然后会把截图复制到剪切板
5 | 2. 然后调用浏览把剪切板的内容复制出来
6 | ```
7 | var screen_window = execFile(__dirname + '/screen/PrintScr.exe')
8 | screen_window.on('exit', function (code) {
9 | // 执行成功返回 1,返回 0 没有截图
10 | if (code) mainWindow.webContents.paste()
11 | })
12 | ```
13 |
--------------------------------------------------------------------------------
/blossom-editor/src/env/.env:
--------------------------------------------------------------------------------
1 | RENDERER_VITE_MODE=ALL
--------------------------------------------------------------------------------
/blossom-editor/src/env/.env.tryuse:
--------------------------------------------------------------------------------
1 | # 试用环境
2 | RENDERER_VITE_MODE=tryuse
--------------------------------------------------------------------------------
/blossom-editor/src/main/printScreen.ts:
--------------------------------------------------------------------------------
1 | import { BrowserWindow, Notification } from 'electron'
2 | import { platform } from '@electron-toolkit/utils'
3 | import cp from "child_process"
4 | import { join } from 'path'
5 |
6 | /**
7 | * 截图功能
8 | * @param win 窗口
9 | * @returns
10 | */
11 | export const printScreen = (win: BrowserWindow) => {
12 | // 非 window 平台不支持截图
13 | if (!platform.isWindows) {
14 | if (Notification.isSupported()) {
15 | new Notification({
16 | title: '抱歉, 当前平台暂不支持截图功能'
17 | }).show()
18 | }
19 | return
20 | }
21 | let filePath = join(__dirname, '../../resources/screenshot/PrintScr.exe')
22 | // 截屏时将页面隐藏
23 | win.hide()
24 | const screen_window = cp.execFile(filePath)
25 | let psCode = 0
26 | screen_window.on('exit', (code) => {
27 | // 截图结果: 1:截图成功; 0:没有截图;
28 | if (code) {
29 | psCode = code
30 | win.webContents.send('printScreenAfter', psCode)
31 | }
32 | win.show()
33 | win.moveTop()
34 | })
35 | }
36 |
37 | export default printScreen
--------------------------------------------------------------------------------
/blossom-editor/src/main/shortcut.ts:
--------------------------------------------------------------------------------
1 | import { globalShortcut, BrowserWindow } from 'electron'
2 | import { printScreen } from './printScreen'
3 | import { platform } from '@electron-toolkit/utils'
4 |
5 | /**
6 | * 全局快捷键注册器
7 | */
8 | class ShortcutRegistrant {
9 | win: BrowserWindow
10 |
11 | constructor(win: BrowserWindow) {
12 | console.log('5. 注册快捷键')
13 | this.win = win
14 | }
15 |
16 | /**
17 | * 注册截屏快捷键, 目前只有 windows 支持截图
18 | * CommandOrControl+Alt+Q
19 | * @returns
20 | */
21 | printScreen(): ShortcutRegistrant {
22 | if (!platform.isWindows) {
23 | return this
24 | }
25 | console.log(' 5.1 注册全局截图快捷键 [CommandOrControl+Alt+Q]')
26 | globalShortcut.register('CommandOrControl+Alt+Q', () => {
27 | console.log('调用快捷键', 'CommandOrControl+Alt+Q')
28 | printScreen(this.win)
29 | })
30 | return this
31 | }
32 | }
33 |
34 | export default ShortcutRegistrant
35 |
--------------------------------------------------------------------------------
/blossom-editor/src/preload/index.d.ts:
--------------------------------------------------------------------------------
1 | import { ElectronAPI } from '@electron-toolkit/preload'
2 |
3 | declare global {
4 | interface Window {
5 | electron: ElectronAPI
6 | electronAPI: ElectronAPI,
7 | api: {}
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/public/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/public/favicon.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
15 |
16 |
26 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/api/note.ts:
--------------------------------------------------------------------------------
1 | import { defaultRequest as rq } from "./request";
2 | import type { R } from "./request";
3 |
4 | export const noteAllApi = (params?: object): Promise> => {
5 | return rq.get>("/note/list", { params });
6 | }
7 |
8 | export const noteAddApi = (data?: object): Promise> => {
9 | return rq.post>("/note/add", data);
10 | }
11 |
12 | export const noteUpdApi = (data?: object): Promise> => {
13 | return rq.post>('/note/upd', data)
14 | }
15 |
16 | export const noteDelApi = (data?: object): Promise> => {
17 | return rq.post>("/note/del", data);
18 | }
19 |
20 | export const noteTopApi = (data?: object): Promise> => {
21 | return rq.post>("/note/top", data);
22 | }
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/api/plan.ts:
--------------------------------------------------------------------------------
1 | import { defaultRequest as rq } from './request'
2 | import type { R } from './request'
3 |
4 | export const planListDayApi = (params?: object): Promise> => {
5 | return rq.get>('/plan/list/day', { params })
6 | }
7 |
8 | export const planListDailyApi = (params?: object): Promise> => {
9 | return rq.get>('/plan/list/daily', { params })
10 | }
11 |
12 | export const planAddDailyApi = (data?: object): Promise> => {
13 | return rq.post>('/plan/add/daily', data)
14 | }
15 |
16 | export const planAddDayApi = (data?: object): Promise> => {
17 | return rq.post>('/plan/add/day', data)
18 | }
19 |
20 | export const planDelApi = (data?: object): Promise> => {
21 | return rq.post>('/plan/del', data)
22 | }
23 |
24 | export const planUpdDayApi = (data?: object): Promise> => {
25 | return rq.post>('/plan/upd/day', data)
26 | }
27 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/api/sentinel.ts:
--------------------------------------------------------------------------------
1 | import { defaultRequest as rq } from "./request";
2 | import type { R } from "./request";
3 |
4 | /**
5 | * 流量直方图
6 | */
7 | export const metricLineApi = (params?: object): Promise> => {
8 | return rq.get>("/sentinel/metric/line", { params });
9 | };
10 |
11 | /**
12 | * 资源列表
13 | */
14 | export const resourcesApi = (params?: object): Promise> => {
15 | return rq.get>("/sentinel/resources", { params });
16 | };
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/api/weather.ts:
--------------------------------------------------------------------------------
1 | import { defaultRequest as rq } from './request'
2 | import type { R } from './request'
3 |
4 | export const getAll = (params?: object): Promise> => {
5 | return rq.get>('/weather', { params })
6 | }
7 |
8 | /**
9 | * 刷新天气缓存, 重新获取最新信息, 注意不要频繁调用该接口
10 | * @param params
11 | * @returns
12 | */
13 | export const refreshApi = (): Promise> => {
14 | return rq.post>('/thirdparty/scheduled/weather')
15 | }
16 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/api/web.ts:
--------------------------------------------------------------------------------
1 | import { defaultRequest as rq } from "./request";
2 | import type { R } from "./request";
3 |
4 | export const webAllApi = (params?: object): Promise> => {
5 | return rq.get>("/web/list", { params });
6 | }
7 |
8 | export const webSaveApi = (data?: object): Promise> => {
9 | return rq.post>("/web/save", data);
10 | }
11 |
12 | export const webDelApi = (data?: object): Promise> => {
13 | return rq.post>("/web/del", data);
14 | }
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/constants/keymaps.ts:
--------------------------------------------------------------------------------
1 | export const BlKeymaps = {
2 |
3 | }
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/constants/system.ts:
--------------------------------------------------------------------------------
1 | const blossom = {
2 | /**
3 | * 基础配置
4 | */
5 | SYS: {
6 | NAME: 'Blossom',
7 | FULL_NAME: 'BLOSSOM-EDITOR',
8 | VERSION: 'v1.16.0',
9 |
10 | //
11 | DOC: 'https://www.wangyunf.com/blossom-doc/index',
12 | CONTACT: 'https://www.wangyunf.com/blossom-doc/guide/about/contact.html',
13 | SPONSOR: 'https://www.wangyunf.com/blossom-doc/guide/about/sponsor.html',
14 | GITHUB_REPO: 'https://github.com/blossom-editor/blossom',
15 | GITHUB_RELEASE: 'https://github.com/blossom-editor/blossom/releases',
16 | GITEE_REPO: 'https://gitee.com/blossom-editor/blossom'
17 | },
18 |
19 | // 试用地址和账号
20 | TRY_USE: {
21 | serverUrl: 'https://www.wangyunf.com/bl',
22 | username: 'blos',
23 | password: 'blos'
24 | }
25 | }
26 |
27 | export default blossom
28 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/fonts/JetBrainsMono-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/fonts/JetBrainsMono-Bold.woff2
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/fonts/JetBrainsMono-ExtraLight.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/fonts/JetBrainsMono-ExtraLight.woff2
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/fonts/JetBrainsMono-Light.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/fonts/JetBrainsMono-Light.woff2
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/fonts/JetBrainsMono-Medium.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/fonts/JetBrainsMono-Medium.woff2
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/fonts/JetBrainsMono-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/fonts/JetBrainsMono-Regular.woff2
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/fonts/JetBrainsMono-SemiBold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/fonts/JetBrainsMono-SemiBold.woff2
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/fonts/JetBrainsMono-Thin.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/fonts/JetBrainsMono-Thin.woff2
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/iconfont/blossom/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/iconfont/blossom/iconfont.ttf
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/iconfont/blossom/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/iconfont/blossom/iconfont.woff
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/iconfont/blossom/iconfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/iconfont/blossom/iconfont.woff2
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/iconfont/weather/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/iconfont/weather/iconfont.ttf
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/iconfont/weather/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/iconfont/weather/iconfont.woff
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/iconfont/weather/iconfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/iconfont/weather/iconfont.woff2
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/iconfont/weblogo/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/iconfont/weblogo/iconfont.ttf
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/iconfont/weblogo/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/iconfont/weblogo/iconfont.woff
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/iconfont/weblogo/iconfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/iconfont/weblogo/iconfont.woff2
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/blossom_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/blossom_logo.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/blossom_logo_dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/blossom_logo_dark.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/default_user_avatar.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/default_user_avatar.jpg
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/docs/tryuse.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/docs/tryuse.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/img_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/img_error.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/note/cd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/note/cd.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/note/dustbin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/note/dustbin.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/note/note.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/note/note.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/note/pin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/note/pin.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/note/plane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/note/plane.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/pe/headset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/pe/headset.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/pe/phone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/pe/phone.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/pe/sound.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/pe/sound.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/pe/watch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/pe/watch.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/plan/base-awesome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/plan/base-awesome.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/plan/base-celebrate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/plan/base-celebrate.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/plan/base-cool.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/plan/base-cool.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/plan/base-learning.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/plan/base-learning.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/plan/beer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/plan/beer.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/plan/cat-kiss.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/plan/cat-kiss.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/plan/cat-nice.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/plan/cat-nice.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/plan/cat-smile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/plan/cat-smile.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/plan/cat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/plan/cat.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/plan/coffee.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/plan/coffee.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/plan/juice.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/plan/juice.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/plant/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/plant/02.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/plant/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/plant/08.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/plant/cactus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/plant/cactus.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/transparent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/transparent.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/weather/feng-s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/weather/feng-s.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/weather/feng.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/weather/feng.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/weather/qing-moon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/weather/qing-moon.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/weather/qing-s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/weather/qing-s.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/weather/qing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/weather/qing.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/weather/wu-s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/weather/wu-s.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/weather/wu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/weather/wu.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/weather/xue-s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/weather/xue-s.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/weather/xue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/weather/xue.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/weather/yin-s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/weather/yin-s.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/weather/yin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/weather/yin.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/weather/yu-s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/weather/yu-s.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/weather/yu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/weather/yu.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/weather/zhongyu-s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/weather/zhongyu-s.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/imgs/weather/zhongyu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-editor/src/renderer/src/assets/imgs/weather/zhongyu.png
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/styles/bl-checkbox.scss:
--------------------------------------------------------------------------------
1 | .el-checkbox {
2 |
3 | .el-checkbox__input {
4 | .el-checkbox__inner {
5 | transition: none;
6 |
7 | &::after {
8 | transition: none;
9 | }
10 | }
11 | }
12 | }
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/styles/bl-dropdown.scss:
--------------------------------------------------------------------------------
1 | .el-dropdown {
2 | .el-tooltip__trigger {
3 | &:focus-visible {
4 | outline: none;
5 | }
6 | }
7 | }
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/styles/bl-image.scss:
--------------------------------------------------------------------------------
1 | .el-image {
2 | .el-image__inner {
3 | pointer-events: all;
4 | }
5 | }
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/styles/bl-loading-spinner.scss:
--------------------------------------------------------------------------------
1 | .bl-loading-spinner {
2 | @include flex(column, flex-end);
3 | height: 100px;
4 | top: calc(50% - 50px);
5 |
6 | &::before {
7 | // background-image: url('@renderer/assets/imgs/blossom_logo_grey.png');
8 | background-position: center;
9 | background-repeat: no-repeat;
10 | background-size: 50px 50px;
11 | height: 100%;
12 | width: 100%;
13 | content: '';
14 | position: absolute;
15 | top: 0;
16 | left: 0;
17 | filter: blur(5px);
18 | }
19 |
20 | .circular {
21 | display: none;
22 | }
23 |
24 | .el-loading-text {
25 | @include font(15px, 300);
26 | }
27 | }
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/styles/bl-message.scss:
--------------------------------------------------------------------------------
1 | .el-message {
2 | @include themeShadow(3px 3px 10px 1px rgb(191, 191, 191), 3px 3px 10px 1px #000);
3 | @include themeColor(#a4a8b0, #64666b);
4 | padding: 10px 10px !important;
5 | border: 3px;
6 | }
7 |
8 | .el-message--success {
9 | @include themeBg(#f7f7f7, #1e1e1e);
10 | --el-message-bg-color: var(--bl-html-color) !important;
11 | border: 0 !important;
12 | // border: 1px solid rgb(51, 217, 0) !important;
13 | }
14 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/styles/bl-notification.scss:
--------------------------------------------------------------------------------
1 | .el-notification {
2 | word-wrap: break-word;
3 | word-break: break-all;
4 | border: 2px solid var(--el-color-primary-light-5) !important;
5 | }
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/styles/bl-resize-divider.scss:
--------------------------------------------------------------------------------
1 | .resize-divider-vertical {
2 | width: 1px;
3 | height: 100%;
4 | background-color: var(--el-border-color);
5 | position: relative;
6 | z-index: 1001;
7 | cursor: ew-resize;
8 |
9 | &::before {
10 | content: '';
11 | width: 3px;
12 | height: 100%;
13 | background-color: transparent;
14 | display: block;
15 | transition: 0.3s;
16 | position: absolute;
17 | left: -1px;
18 | z-index: 1002;
19 | cursor: ew-resize;
20 | }
21 |
22 | &:hover {
23 | &::before {
24 | background-color: var(--el-color-primary);
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/styles/bl-tree.scss:
--------------------------------------------------------------------------------
1 | .el-tree {
2 | .el-tree-node {
3 | .el-tree-node__content {
4 | height: 20px;
5 | }
6 | }
7 | }
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/styles/config.scss:
--------------------------------------------------------------------------------
1 | @import './utils.scss';
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/styles/index.scss:
--------------------------------------------------------------------------------
1 | @import '../fonts/config.scss';
2 |
3 | @import './bl-common.scss';
4 |
5 | // bl 样式
6 | @import './bl-checkbox.scss';
7 | @import './bl-dialog.scss';
8 | @import './bl-dropdown.scss';
9 | @import './bl-image.scss';
10 | @import './bl-message.scss';
11 | @import './bl-notification.scss';
12 | @import './bl-popper.scss';
13 | @import './bl-tip.scss';
14 | @import './bl-tree.scss';
15 | @import '../../views/doc/doc-tree-right-menu.scss';
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/assets/utils/test.ts:
--------------------------------------------------------------------------------
1 | export const uuid = (): string => {
2 | return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
3 | var r = (Math.random() * 16) | 0,
4 | v = c == 'x' ? r : (r & 0x3) | 0x8
5 | return v.toString(16)
6 | })
7 | }
8 |
9 | console.log(uuid())
10 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/components/BLCol.vue:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
13 |
14 |
39 |
45 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/components/BLRow.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
37 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/components/DateLine.vue:
--------------------------------------------------------------------------------
1 |
2 | {{ dateNow }} {{ timeNow }}
3 |
4 |
5 |
25 |
26 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/components/Template.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/components/Versions.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | - Electron v{{ versions.electron }}
4 | - Chromium v{{ versions.chrome }}
5 | - Node v{{ versions.node }}
6 | - V8 v{{ versions.v8 }}
7 |
8 |
9 |
17 |
18 |
27 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/declaration.d.ts:
--------------------------------------------------------------------------------
1 | // 正常工作。
2 | export {}
3 |
4 | declare module '@renderer/assets/iconfont/iconfont.js'
5 | declare module 'highlight.js'
6 | declare module 'katex'
7 |
8 | declare module 'vue' {
9 | interface ComponentCustomProperties {
10 | $t: (key: string) => string
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | interface ImportMetaEnv {
4 | /**
5 | * 基础URL
6 | */
7 | readonly VITE_BLOSSOM_BASE_URI: string
8 | }
9 |
10 | interface ImportMeta {
11 | readonly env: ImportMetaEnv
12 | }
13 |
14 | declare module '*.vue' {
15 | import type { DefineComponent } from 'vue'
16 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
17 | const component: DefineComponent<{}, {}, any>
18 |
19 | export default component
20 | }
21 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/i18n/en.ts:
--------------------------------------------------------------------------------
1 | import type { Temp } from './types'
2 |
3 | export const en: Temp = {
4 | editor: {
5 | treeDoc: {
6 | loading: 'loading....'
7 | }
8 | },
9 | picture: {
10 | treeDoc: {
11 | loading: ''
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/i18n/plugin.ts:
--------------------------------------------------------------------------------
1 | import { App } from 'vue'
2 | import { useI18n } from './useI18n'
3 |
4 | const i18n = useI18n()
5 |
6 | export default {
7 | install: (app: App) => {
8 | app.config.globalProperties.$t = (key: string) => {
9 | return i18n.getValue(key)
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/i18n/types.ts:
--------------------------------------------------------------------------------
1 | const template = {
2 | editor: {
3 | treeDoc: {
4 | loading: ''
5 | }
6 | },
7 | picture: {
8 | treeDoc: {
9 | loading: ''
10 | }
11 | }
12 | }
13 | export type Temp = typeof template
14 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/i18n/useI18n.ts:
--------------------------------------------------------------------------------
1 | import { ref } from 'vue'
2 | import { zhCn } from './zh-cn'
3 | import { en } from './en'
4 | import { Temp } from './types'
5 |
6 | const locale = ref('zhCn')
7 |
8 | export const useI18n = () => {
9 | const getValue = (key: string): string => {
10 | let k: any = key.split('.').reduce((o, i) => {
11 | if (o) {
12 | return o[i]
13 | }
14 | }, getLocale())
15 | return k as string
16 | }
17 | const getLocale = (): Temp => {
18 | let l = locale.value
19 | if (l === 'zh-cn') {
20 | return zhCn
21 | }
22 | if (l === 'en') {
23 | return en
24 | }
25 | return zhCn
26 | }
27 |
28 | return {
29 | locale,
30 | getValue,
31 | getLocale
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/i18n/zh-cn.ts:
--------------------------------------------------------------------------------
1 | import type { Temp } from './types'
2 |
3 | export const zhCn: Temp = {
4 | editor: {
5 | treeDoc: {
6 | loading: '加载中'
7 | }
8 | },
9 | picture: {
10 | treeDoc: {
11 | loading: ''
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/router/index.ts:
--------------------------------------------------------------------------------
1 | import { createRouter, createWebHashHistory } from 'vue-router'
2 |
3 | const router = createRouter({
4 | history: createWebHashHistory(import.meta.env.BASE_URL),
5 | routes: []
6 | })
7 |
8 | export const toRoute = (path: string) => {
9 | router.push(path)
10 | }
11 |
12 | export const toLogin = () => {
13 | router.push('/settingIndex')
14 | }
15 |
16 | /**
17 | * 前往设置页面, 指定激活的 tab
18 | * @param tabName
19 | */
20 | export const toSetting = (tabName: 'setting' | 'about') => {
21 | router.push('/settingIndex?activeTab=' + tabName)
22 | }
23 |
24 | export default router
25 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/scripts/env.ts:
--------------------------------------------------------------------------------
1 | const tryuse = import.meta.env.MODE === 'tryuse'
2 |
3 | /**
4 | * 是否试用
5 | * @returns
6 | */
7 | export const isTryuse = () => {
8 | return tryuse
9 | }
10 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/scripts/lifecycle.ts:
--------------------------------------------------------------------------------
1 | import { onActivated, onMounted } from 'vue'
2 |
3 | /**
4 | * 初始化时生命周期封装, 主要控制 mounted 和 activated 只执行一次
5 | * @param mounted
6 | * @param activated
7 | */
8 | export const useLifecycle = (mounted: Function, activated: Function) => {
9 | let isMounted = false
10 |
11 | onMounted(() => {
12 | if (!isMounted) {
13 | mounted()
14 | }
15 | })
16 |
17 | onActivated(() => {
18 | if (isMounted) {
19 | activated()
20 | }
21 | isMounted = true
22 | })
23 | }
24 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/stores/server.ts:
--------------------------------------------------------------------------------
1 | import { defineStore } from 'pinia'
2 | import { Local } from '@renderer/assets/utils/storage'
3 | import SYSTEM from '@renderer/assets/constants/system'
4 |
5 | const isDemo = import.meta.env.MODE === 'tryuse'
6 |
7 | export const storeKey = 'serverUrl'
8 | export const usernameKey = 'username'
9 |
10 | const initServerUrl = (): string => {
11 | const defaultUrl = isDemo ? SYSTEM.TRY_USE.serverUrl : ''
12 | Local.set(storeKey, defaultUrl)
13 | return defaultUrl
14 | }
15 |
16 | export const useServerStore = defineStore('serverStore', {
17 | state: () => ({
18 | serverUrl: (Local.get(storeKey) as string) || initServerUrl(),
19 | serverUsername: Local.get(usernameKey) || ''
20 | }),
21 | actions: {
22 | async setServerUrl(url: string) {
23 | this.serverUrl = url
24 | Local.set(storeKey, url)
25 | },
26 | setServerUsername(username: string) {
27 | this.serverUsername = username
28 | Local.set(usernameKey, username)
29 | }
30 | }
31 | })
32 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/stores/store-config.ts:
--------------------------------------------------------------------------------
1 | import { createPinia } from 'pinia'
2 | const pinia = createPinia()
3 | export default pinia
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/stores/theme.ts:
--------------------------------------------------------------------------------
1 | import { defineStore } from 'pinia'
2 |
3 | export const useThemeStore = defineStore('themeStore', {
4 | state: () => ({
5 | isShow: false
6 | }),
7 | actions: {
8 | show() {
9 | this.isShow = true
10 | },
11 | close() {
12 | this.isShow = false
13 | }
14 | }
15 | })
16 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/views/article/styles/article-backtop.scss:
--------------------------------------------------------------------------------
1 | .el-backtop {
2 | @include box(37px, 37px);
3 | box-shadow: none;
4 | background-color: transparent;
5 | }
6 |
7 | .backtop {
8 | @include box(100%, 100%);
9 | @include themeShadow(0 0 3px 1px #0000001e, 0 0 3px 1px #000000);
10 | color: var(--bl-text-color-light);
11 | background-color: var(--bl-html-color);
12 | text-align: center;
13 | line-height: 38px;
14 | border-radius: 8px;
15 | font-size: 20px;
16 | transition: color 0.2s;
17 |
18 | &:hover {
19 | color: var(--el-color-primary);
20 | }
21 | }
22 |
23 | .backbottom {
24 | @extend .backtop;
25 | }
26 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/views/picture/PictureTreeWorkbench.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
9 |
10 |
13 |
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/views/plan/PlanColor.scss:
--------------------------------------------------------------------------------
1 | .gray {
2 | background-color: #858585;
3 | }
4 |
5 | .gray.hl {
6 | background-color: #646464;
7 | }
8 |
9 | .red {
10 | background-color: #fb0036;
11 | }
12 |
13 | .red.hl {
14 | background-color: #c9002c;
15 | }
16 |
17 | .yellow {
18 | background-color: #d8a600;
19 | }
20 |
21 | .yellow.hl {
22 | background-color: #ffc400;
23 | }
24 |
25 | .blue {
26 | background-color: #00a3cb;
27 | }
28 |
29 | .blue.hl {
30 | background-color: #00657e;
31 | }
32 |
33 | .green {
34 | background-color: #339a00;
35 | }
36 |
37 | .green.hl {
38 | background-color: #2d8700;
39 | }
40 |
41 | .purple {
42 | background-color: #ad8cf2;
43 | }
44 |
45 | .purple.hl {
46 | background-color: #9665ff;
47 | }
--------------------------------------------------------------------------------
/blossom-editor/src/renderer/src/views/tool/IndexTool.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | tool
4 |
5 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/blossom-editor/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [{ "path": "./tsconfig.node.json" }, { "path": "./tsconfig.web.json" }]
4 | }
5 |
--------------------------------------------------------------------------------
/blossom-editor/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@electron-toolkit/tsconfig/tsconfig.node.json",
3 | "include": ["electron.vite.config.*", "src/main/*", "src/preload/*"],
4 | "compilerOptions": {
5 | "composite": true,
6 | "types": ["electron-vite/node"]
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/blossom-editor/tsconfig.web.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@electron-toolkit/tsconfig/tsconfig.web.json",
3 | "include": [
4 | "src/renderer/src/declaration.d.ts",
5 | "src/renderer/src/env.d.ts",
6 | "src/renderer/src/**/*",
7 | "src/renderer/src/**/*.vue",
8 | "src/renderer/src/**/*.d.ts",
9 | "src/renderer/src/assets/iconfont/**/*.json",
10 | "src/preload/*.d.ts",
11 | "src/main/*.d.ts",
12 | ],
13 | "compilerOptions": {
14 | "composite": true,
15 | "baseUrl": ".",
16 | "paths": {
17 | "@renderer/*": [
18 | "src/renderer/src/*"
19 | ]
20 | }
21 | }
22 | }
--------------------------------------------------------------------------------
/blossom-web/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 | stats.html
10 |
11 | node_modules
12 | target
13 | .DS_Store
14 | dist
15 | dist-ssr
16 | coverage
17 | *.local
18 |
19 | /cypress/videos/
20 | /cypress/screenshots/
21 | auto-imports.d.ts
22 | components.d.ts
23 |
24 | # Editor directories and files
25 | .vscode/*
26 | !.vscode/extensions.json
27 | .idea
28 | *.suo
29 | *.ntvs*
30 | *.njsproj
31 | *.sln
32 | *.sw?
33 |
--------------------------------------------------------------------------------
/blossom-web/.prettierrc.yaml:
--------------------------------------------------------------------------------
1 | singleQuote: true
2 | semi: false
3 | printWidth: 150
4 | trailingComma: none
5 | bracketSameLine: true
--------------------------------------------------------------------------------
/blossom-web/README.md:
--------------------------------------------------------------------------------
1 | # Blossom-doc
2 |
3 | Blossom 笔记软件的博客工程
4 |
5 | [博客页面的使用文档](https://www.wangyunf.com/blossom-doc/guide/deploy/blog.html)
6 |
7 | 
8 |
9 |
10 |
11 |
12 |
13 | 博客移动端
14 |
15 |
16 | ```
17 | # 下载依赖
18 | npm install
19 |
20 | # 构建
21 | npm run build
22 | ```
--------------------------------------------------------------------------------
/blossom-web/declaration.d.ts:
--------------------------------------------------------------------------------
1 | declare module 'element-plus/dist/locale/zh-cn.mjs'
2 |
--------------------------------------------------------------------------------
/blossom-web/doc/imgs/blog_home.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-web/doc/imgs/blog_home.jpg
--------------------------------------------------------------------------------
/blossom-web/env/.env.spring:
--------------------------------------------------------------------------------
1 | VITE_BL_API_BASE_URI=../
--------------------------------------------------------------------------------
/blossom-web/env/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | interface ImportMetaEnv {
4 | /**
5 | * API 的基础 URL
6 | */
7 | readonly VITE_BL_API_BASE_URI: string
8 | }
9 |
10 | interface ImportMeta {
11 | readonly env: ImportMetaEnv
12 | }
13 |
14 | declare module '*.vue' {
15 | import type { DefineComponent } from 'vue'
16 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
17 | const component: DefineComponent<{}, {}, any>
18 |
19 | export default component
20 | }
--------------------------------------------------------------------------------
/blossom-web/global.d.ts:
--------------------------------------------------------------------------------
1 | export {}
2 |
3 | declare global {
4 | interface Window {
5 | blconfig: {
6 | SYS: {
7 | NAME: string
8 | LOGO: string
9 | GONG_WANG_AN_BEI: string
10 | ICP_BEI_AN_HAO: string
11 | EMAIL: string
12 | }
13 | THEME: {
14 | LOGO_STYLE: {
15 | 'border-radius': string
16 | }
17 | SUBJECT_TITLE: string
18 | }
19 | DOMAIN: {
20 | PRD: string
21 | USER_ID: string
22 | }
23 | LINKS: [
24 | {
25 | NAME: string
26 | URL: string
27 | LOGO: string
28 | }
29 | ]
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/blossom-web/public/blog-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-web/public/blog-logo.png
--------------------------------------------------------------------------------
/blossom-web/public/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-web/public/favicon.png
--------------------------------------------------------------------------------
/blossom-web/src/api/auth.ts:
--------------------------------------------------------------------------------
1 | import { defaultRequest as rq } from './request'
2 | import type { R } from './request'
3 |
4 | /**
5 | * 登录
6 | * @param params
7 | * @returns
8 | */
9 | export const loginApi = (data?: object): Promise> => {
10 | return rq.post>('/login', data)
11 | }
12 |
13 | export const logoutApi = (): Promise> => {
14 | return rq.post>('/logout')
15 | }
16 |
17 | export const checkApi = (): Promise> => {
18 | return rq.get>('/check', {})
19 | }
20 |
21 | export const userinfoApi = (params?: object): Promise> => {
22 | return rq.get>('/user/info', { params })
23 | }
24 |
25 | export const userUpdApi = (data?: object): Promise> => {
26 | return rq.post('/user/upd', data)
27 | }
28 |
29 | export const userUpdPwdApi = (data?: object): Promise> => {
30 | return rq.post('/user/upd/pwd', data)
31 | }
32 |
33 | export const userAddApi = (data?: object): Promise> => {
34 | return rq.post('/user/add', data)
35 | }
36 |
--------------------------------------------------------------------------------
/blossom-web/src/api/note.ts:
--------------------------------------------------------------------------------
1 | import { defaultRequest as rq } from './request'
2 | import type { R } from './request'
3 |
4 | export const noteAllApi = (params?: object): Promise> => {
5 | return rq.get>('/note/list', { params })
6 | }
7 |
8 | export const noteAddApi = (data?: object): Promise> => {
9 | return rq.post>('/note/add', data)
10 | }
11 |
12 | export const noteUpdApi = (data?: object): Promise> => {
13 | return rq.post>('/note/upd', data)
14 | }
15 |
16 | export const noteDelApi = (data?: object): Promise> => {
17 | return rq.post>('/note/del', data)
18 | }
19 |
20 | export const noteTopApi = (data?: object): Promise> => {
21 | return rq.post>('/note/top', data)
22 | }
23 |
--------------------------------------------------------------------------------
/blossom-web/src/api/plan.ts:
--------------------------------------------------------------------------------
1 | import { defaultRequest as rq } from './request'
2 | import type { R } from './request'
3 |
4 | export const planListDayApi = (params?: object): Promise> => {
5 | return rq.get>('/plan/list/day', { params })
6 | }
7 |
8 | export const planListDailyApi = (params?: object): Promise> => {
9 | return rq.get>('/plan/list/daily', { params })
10 | }
11 |
12 | export const planAddDailyApi = (data?: object): Promise> => {
13 | return rq.post>('/plan/add/daily', data)
14 | }
15 |
16 | export const planAddDayApi = (data?: object): Promise> => {
17 | return rq.post>('/plan/add/day', data)
18 | }
19 |
20 | export const planDelApi = (data?: object): Promise> => {
21 | return rq.post>('/plan/del', data)
22 | }
23 |
24 | export const planUpdDayApi = (data?: object): Promise> => {
25 | return rq.post>('/plan/upd/day', data)
26 | }
27 |
--------------------------------------------------------------------------------
/blossom-web/src/assets/constants/blossom.ts:
--------------------------------------------------------------------------------
1 | const blossom = {
2 | SYS: { VERSION: 'v1.16.0' }
3 | }
4 |
5 | export default blossom
6 |
--------------------------------------------------------------------------------
/blossom-web/src/assets/fonts/JetBrainsMono-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-web/src/assets/fonts/JetBrainsMono-Regular.woff2
--------------------------------------------------------------------------------
/blossom-web/src/assets/fonts/config.scss:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Jetbrains Mono';
3 | src: url('@/assets/fonts/JetBrainsMono-Regular.woff2');
4 | font-weight: 400;
5 | font-style: normal;
6 | }
7 |
--------------------------------------------------------------------------------
/blossom-web/src/assets/imgs/common/gong_wang_an_bei_img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-web/src/assets/imgs/common/gong_wang_an_bei_img.png
--------------------------------------------------------------------------------
/blossom-web/src/assets/imgs/note/dustbin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-web/src/assets/imgs/note/dustbin.png
--------------------------------------------------------------------------------
/blossom-web/src/assets/imgs/note/pin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-web/src/assets/imgs/note/pin.png
--------------------------------------------------------------------------------
/blossom-web/src/assets/styles/common.scss:
--------------------------------------------------------------------------------
1 | .module-workbench {
2 | @include box(35px, 35px);
3 | @include flex(row, center, center);
4 | background-color: var(--bl-html-color);
5 | box-shadow: -1px 0px 3px #bababa;
6 | border-top-left-radius: 10px;
7 | border-bottom-left-radius: 10px;
8 | position: absolute;
9 | right: 0;
10 | bottom: 20px;
11 | transition: background-color 0.4s;
12 | cursor: pointer;
13 |
14 | .iconbl {
15 | color: #7b7b7ba9;
16 | font-size: 16px;
17 | transition: color 1s;
18 | }
19 |
20 | i {
21 | transition: color 1s;
22 | }
23 |
24 | &:hover {
25 | background-color: #606060;
26 |
27 | .iconbl {
28 | color: var(--bl-html-color);
29 | }
30 |
31 | i {
32 | --color: var(--bl-html-color) !important;
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/blossom-web/src/assets/styles/config.scss:
--------------------------------------------------------------------------------
1 | @import '../fonts/config.scss';
2 |
3 | @import './element/dialog';
4 | @import './element/drawer';
5 | @import './element/popper';
6 | @import './element/menu';
7 | @import './element/message';
8 | @import './mixin-fuc';
9 | @import './iconfont';
10 | @import './common';
11 |
--------------------------------------------------------------------------------
/blossom-web/src/assets/styles/css/main.css:
--------------------------------------------------------------------------------
1 | /* * {
2 | font-family: 'ubuntu mono', 'Consolas', 'Monaco', 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', '微软雅黑', Arial, sans-serif;
3 | box-sizing: border-box;
4 | } */
5 |
6 | html,
7 | body {
8 | width: 100%;
9 | height: 100%;
10 | box-sizing: border-box;
11 | background-color: var(--bl-html-color);
12 | -webkit-tap-highlight-color: transparent;
13 | }
14 |
15 | body {
16 | margin: 0;
17 | }
18 |
19 | #app {
20 | width: 100%;
21 | height: 100%;
22 | }
23 |
24 | /** ================================== 滚动条 ================================== */
25 | /* 定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸 */
26 | ::-webkit-scrollbar {
27 | width: 5px;
28 | height: 5px;
29 | }
30 | /* 定义滑块 内阴影+圆角 */
31 | ::-webkit-scrollbar-thumb {
32 | background-color: #c7c7c7;
33 | }
34 |
35 | /* 滚动条右下角出现白色方块 */
36 | ::-webkit-scrollbar-corner {
37 | background: transparent;
38 | }
39 |
--------------------------------------------------------------------------------
/blossom-web/src/assets/styles/element/dialog.scss:
--------------------------------------------------------------------------------
1 | .el-dialog {
2 | --el-dialog-border-radius: 10px !important;
3 | --el-dialog-padding-primary: 10px !important;
4 | --el-dialog-box-shadow: var(--bl-dialog-box-shadow) !important;
5 |
6 | .el-dialog__headerbtn {
7 | top: -5px;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/blossom-web/src/assets/styles/element/menu.scss:
--------------------------------------------------------------------------------
1 | .el-menu {
2 | }
3 |
4 | :deep(.el-sub-menu__title) {
5 | transition: background-color 0s;
6 | }
7 |
8 | :deep(.el-menu-item:hover) {
9 | background-color: var(--el-color-primary-light-9);
10 | }
--------------------------------------------------------------------------------
/blossom-web/src/assets/styles/element/message.scss:
--------------------------------------------------------------------------------
1 | .el-message {
2 | --el-message-padding: 9px 20px;
3 | --el-message-text-color: #dfdfdf;
4 | background-color: #00000097;
5 | border-color: #000;
6 | }
7 |
--------------------------------------------------------------------------------
/blossom-web/src/assets/styles/iconfont/blossom/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-web/src/assets/styles/iconfont/blossom/iconfont.ttf
--------------------------------------------------------------------------------
/blossom-web/src/assets/styles/iconfont/blossom/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-web/src/assets/styles/iconfont/blossom/iconfont.woff
--------------------------------------------------------------------------------
/blossom-web/src/assets/styles/iconfont/blossom/iconfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/blossom-web/src/assets/styles/iconfont/blossom/iconfont.woff2
--------------------------------------------------------------------------------
/blossom-web/src/components/BLCol.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
37 |
--------------------------------------------------------------------------------
/blossom-web/src/components/BLRow.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
37 |
--------------------------------------------------------------------------------
/blossom-web/src/components/Template.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
11 |
12 |
--------------------------------------------------------------------------------
/blossom-web/src/main.ts:
--------------------------------------------------------------------------------
1 | import '@/assets/styles/css/main.css'
2 | import '@/assets/styles/iconfont/blossom/iconfont.css'
3 | import '@/assets/styles/iconfont/weblogo/iconfont.js'
4 |
5 | import { createApp } from 'vue'
6 | import App from './App.vue'
7 |
8 | import pinia from '@/stores/store-config'
9 | import router from '@/router/index'
10 | import '@/router/route-init'
11 |
12 | import 'element-plus/theme-chalk/dark/css-vars.css'
13 | import '@/assets/styles/css/theme.css'
14 |
15 | import BLRow from '@/components/BLRow.vue'
16 | import BLCol from '@/components/BLCol.vue'
17 | import BLTag from '@/components/BLTag.vue'
18 |
19 | const app = createApp(App)
20 | app.use(pinia)
21 | app.use(router)
22 | app.component('bl-row', BLRow).component('bl-col', BLCol).component('bl-tag', BLTag)
23 | app.mount('#app')
24 |
--------------------------------------------------------------------------------
/blossom-web/src/router/index.ts:
--------------------------------------------------------------------------------
1 | import { createRouter, createWebHashHistory } from 'vue-router';
2 |
3 | const router = createRouter({
4 | history: createWebHashHistory(import.meta.env.BASE_URL),
5 | routes: []
6 | })
7 |
8 | export const toRoute = (path: string): void => {
9 | router.push(path)
10 | }
11 |
12 | export default router
13 |
--------------------------------------------------------------------------------
/blossom-web/src/scripts/lifecycle.ts:
--------------------------------------------------------------------------------
1 | import { onActivated, onMounted } from 'vue'
2 |
3 | /**
4 | * 初始化时生命周期封装, 主要控制 mounted 和 activated 只执行一次
5 | * @param mounted
6 | * @param activated
7 | */
8 | export const useLifecycle = (mounted: Function, activated: Function) => {
9 | let isMounted = false
10 |
11 | onMounted(() => {
12 | if (!isMounted) {
13 | mounted()
14 | }
15 | })
16 |
17 | onActivated(() => {
18 | if (isMounted) {
19 | activated()
20 | }
21 | isMounted = true
22 | })
23 | }
24 |
--------------------------------------------------------------------------------
/blossom-web/src/stores/store-config.ts:
--------------------------------------------------------------------------------
1 | import { createPinia } from 'pinia'
2 | const pinia = createPinia()
3 | export default pinia
4 |
--------------------------------------------------------------------------------
/blossom-web/src/views/article/ArticleSetting.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 文章字体大小:
5 | {{ getFontSizeValue().toFixed(1) }}
6 |
7 |
8 |
9 |
10 |
11 |
12 |
16 |
17 |
32 |
--------------------------------------------------------------------------------
/blossom-web/src/views/article/scripts/article-setting.ts:
--------------------------------------------------------------------------------
1 | import { ref } from 'vue'
2 | import { Local } from '@/assets/utils/storage'
3 |
4 | const FONT_SIZE_KEY = 'BLOSSOM-ARTICLE-FONT-SZIE'
5 |
6 | const fontSize = ref(Local.get(FONT_SIZE_KEY) || 0.9)
7 |
8 | const increase = () => {
9 | fontSize.value += 0.1
10 | Local.set(FONT_SIZE_KEY, fontSize.value)
11 | }
12 |
13 | const decrease = () => {
14 | fontSize.value -= 0.1
15 | Local.set(FONT_SIZE_KEY, fontSize.value)
16 | }
17 |
18 | const getFontSizeValue = () => {
19 | return fontSize.value
20 | }
21 |
22 | const getFontSize = () => {
23 | return fontSize.value + 'rem'
24 | }
25 | export { increase, decrease, getFontSizeValue, getFontSize }
26 |
--------------------------------------------------------------------------------
/blossom-web/src/views/plan/PlanColor.scss:
--------------------------------------------------------------------------------
1 | .gray {
2 | background-color: #858585;
3 | }
4 |
5 | .gray.hl {
6 | background-color: #646464;
7 | }
8 |
9 | .red {
10 | background-color: #fb0036;
11 | }
12 |
13 | .red.hl {
14 | background-color: #c9002c;
15 | }
16 |
17 | .yellow {
18 | background-color: #d8a600;
19 | }
20 |
21 | .yellow.hl {
22 | background-color: #ffc400;
23 | }
24 |
25 | .blue {
26 | background-color: #00a3cb;
27 | }
28 |
29 | .blue.hl {
30 | background-color: #00657e;
31 | }
32 |
33 | .green {
34 | background-color: #339a00;
35 | }
36 |
37 | .green.hl {
38 | background-color: #2d8700;
39 | }
40 |
41 | .purple {
42 | background-color: #ad8cf2;
43 | }
44 |
45 | .purple.hl {
46 | background-color: #9665ff;
47 | }
--------------------------------------------------------------------------------
/blossom-web/tsconfig.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "include": [
3 | "vite.config.*",
4 | "vitest.config.*",
5 | "cypress.config.*",
6 | "playwright.config.*"
7 | ],
8 | "compilerOptions": {
9 | "composite": true,
10 | "types": [
11 | "node"
12 | ],
13 | "lib": [
14 |
15 | ]
16 | }
17 | }
--------------------------------------------------------------------------------
/blossom-web/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@vue/tsconfig/tsconfig.dom.json",
3 | "include": [
4 | "env/env.d.ts",
5 | "src/**/*",
6 | "src/**/*.vue",
7 | "src/**/*.d.ts",
8 | "declaration.d.ts",
9 | "global.d.ts"
10 | ],
11 | "compilerOptions": {
12 | "baseUrl": "./",
13 | "types": [
14 | "node"
15 | ],
16 | "paths": {
17 | "@/*": [
18 | "./src/*"
19 | ]
20 | }
21 | },
22 | "references": [
23 | {
24 | "path": "./tsconfig.config.json"
25 | }
26 | ]
27 | }
--------------------------------------------------------------------------------
/doc/backend-api/xt256.min.css:
--------------------------------------------------------------------------------
1 | .hljs{display:block;overflow-x:auto;color:#eaeaea;background:#000;padding:.5em}.hljs-subst{color:#eaeaea}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-builtin-name,.hljs-type{color:#eaeaea}.hljs-params{color:#da0000}.hljs-literal,.hljs-name,.hljs-number{color:red;font-weight:bolder}.hljs-comment{color:#969896}.hljs-quote,.hljs-selector-id{color:#0ff}.hljs-template-variable,.hljs-title,.hljs-variable{color:#0ff;font-weight:700}.hljs-keyword,.hljs-selector-class,.hljs-symbol{color:#fff000}.hljs-bullet,.hljs-string{color:#0f0}.hljs-section,.hljs-tag{color:#000fff}.hljs-selector-tag{color:#000fff;font-weight:700}.hljs-attribute,.hljs-built_in,.hljs-link,.hljs-regexp{color:#f0f}.hljs-meta{color:#fff;font-weight:bolder}
--------------------------------------------------------------------------------
/doc/imgs/article.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/article.png
--------------------------------------------------------------------------------
/doc/imgs/article_reference.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/article_reference.png
--------------------------------------------------------------------------------
/doc/imgs/blog_article.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/blog_article.png
--------------------------------------------------------------------------------
/doc/imgs/blog_home_m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/blog_home_m.png
--------------------------------------------------------------------------------
/doc/imgs/blog_home_pc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/blog_home_pc.png
--------------------------------------------------------------------------------
/doc/imgs/blossom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/blossom.png
--------------------------------------------------------------------------------
/doc/imgs/blossom_name.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/blossom_name.png
--------------------------------------------------------------------------------
/doc/imgs/device.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/device.png
--------------------------------------------------------------------------------
/doc/imgs/note.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/note.png
--------------------------------------------------------------------------------
/doc/imgs/picture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/picture.png
--------------------------------------------------------------------------------
/doc/imgs/plan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/plan.png
--------------------------------------------------------------------------------
/doc/imgs/qq1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/qq1.png
--------------------------------------------------------------------------------
/doc/imgs/qq2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/qq2.png
--------------------------------------------------------------------------------
/doc/imgs/qq3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/qq3.png
--------------------------------------------------------------------------------
/doc/imgs/sponsors/aifadian.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/sponsors/aifadian.png
--------------------------------------------------------------------------------
/doc/imgs/sponsors/ali.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/sponsors/ali.png
--------------------------------------------------------------------------------
/doc/imgs/sponsors/wechat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/sponsors/wechat.png
--------------------------------------------------------------------------------
/doc/imgs/todo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blossom-editor/blossom/57d7aa533571addbc5f75ff2f8b5410a120dfba5/doc/imgs/todo.png
--------------------------------------------------------------------------------