diff --git a/web-api/src/main/java/com/jeesite/modules/biz/dao/BizDataReportDao.java b/web-api/src/main/java/com/jeesite/modules/biz/dao/BizDataReportDao.java new file mode 100644 index 00000000..826c7b87 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/dao/BizDataReportDao.java @@ -0,0 +1,15 @@ +package com.jeesite.modules.biz.dao; + +import com.jeesite.common.dao.CrudDao; +import com.jeesite.common.mybatis.annotation.MyBatisDao; +import com.jeesite.modules.biz.entity.BizDataReport; + +/** + * 数据指标DAO接口 + * @author gaoxq + * @version 2025-12-08 + */ +@MyBatisDao(dataSourceName="work") +public interface BizDataReportDao extends CrudDao { + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/entity/BizDataReport.java b/web-api/src/main/java/com/jeesite/modules/biz/entity/BizDataReport.java new file mode 100644 index 00000000..bf6ae50d --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/entity/BizDataReport.java @@ -0,0 +1,86 @@ +package com.jeesite.modules.biz.entity; + +import java.io.Serializable; +import java.util.Date; + +import com.jeesite.common.mybatis.annotation.JoinTable; +import com.jeesite.common.mybatis.annotation.JoinTable.Type; +import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.validation.constraints.Size; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; + +import com.jeesite.common.entity.DataEntity; +import com.jeesite.common.mybatis.annotation.Column; +import com.jeesite.common.mybatis.annotation.Table; +import com.jeesite.common.mybatis.mapper.query.QueryType; +import com.jeesite.common.utils.excel.annotation.ExcelField; +import com.jeesite.common.utils.excel.annotation.ExcelField.Align; +import com.jeesite.common.utils.excel.annotation.ExcelFields; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 数据指标Entity + * + * @author gaoxq + * @version 2025-12-08 + */ +@EqualsAndHashCode(callSuper = true) +@Table(name = "biz_data_report", alias = "a", label = "指标信息信息", columns = { + @Column(name = "create_time", attrName = "createTime", label = "记录时间", isUpdate = false, isUpdateForce = true), + @Column(name = "id", attrName = "id", label = "主键ID", isPK = true), + @Column(name = "route_path", attrName = "routePath", label = "路由地址"), + @Column(name = "name", attrName = "name", label = "看板名称", queryType = QueryType.LIKE), + @Column(name = "image", attrName = "image", label = "看板图标", isQuery = false), + @Column(name = "sorting", attrName = "sorting", label = "排序", isQuery = false), + @Column(name = "remark", attrName = "remark", label = "看板描述"), +}, orderBy = "a.id DESC" +) +@Data +public class BizDataReport extends DataEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + private Date createTime; // 记录时间 + private String routePath; // 路由地址 + private String name; // 看板名称 + private String image; // 看板图标 + private Long sorting; // 排序 + private String remark; // 看板描述 + + @ExcelFields({ + @ExcelField(title = "记录时间", attrName = "createTime", align = Align.CENTER, sort = 10, dataFormat = "yyyy-MM-dd hh:mm"), + @ExcelField(title = "主键ID", attrName = "id", align = Align.CENTER, sort = 20), + @ExcelField(title = "看板名称", attrName = "name", align = Align.CENTER, sort = 40), + @ExcelField(title = "看板图标", attrName = "image", align = Align.CENTER, sort = 50), + @ExcelField(title = "排序", attrName = "sorting", align = Align.CENTER, sort = 60), + @ExcelField(title = "看板描述", attrName = "remark", align = Align.CENTER, sort = 70), + }) + public BizDataReport() { + this(null); + } + + public BizDataReport(String id) { + super(id); + } + + public Date getCreateTime_gte() { + return sqlMap.getWhere().getValue("create_time", QueryType.GTE); + } + + public void setCreateTime_gte(Date createTime) { + sqlMap.getWhere().and("create_time", QueryType.GTE, createTime); + } + + public Date getCreateTime_lte() { + return sqlMap.getWhere().getValue("create_time", QueryType.LTE); + } + + public void setCreateTime_lte(Date createTime) { + sqlMap.getWhere().and("create_time", QueryType.LTE, createTime); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/service/BizDataReportService.java b/web-api/src/main/java/com/jeesite/modules/biz/service/BizDataReportService.java new file mode 100644 index 00000000..90bcbc57 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/service/BizDataReportService.java @@ -0,0 +1,134 @@ +package com.jeesite.modules.biz.service; + +import java.util.List; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.jeesite.common.entity.Page; +import com.jeesite.common.service.CrudService; +import com.jeesite.modules.biz.entity.BizDataReport; +import com.jeesite.modules.biz.dao.BizDataReportDao; +import com.jeesite.common.service.ServiceException; +import com.jeesite.common.config.Global; +import com.jeesite.common.validator.ValidatorUtils; +import com.jeesite.common.utils.excel.ExcelImport; +import org.springframework.web.multipart.MultipartFile; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; + +/** + * 数据指标Service + * @author gaoxq + * @version 2025-12-08 + */ +@Service +public class BizDataReportService extends CrudService { + + /** + * 获取单条数据 + * @param bizDataReport 主键 + */ + @Override + public BizDataReport get(BizDataReport bizDataReport) { + return super.get(bizDataReport); + } + + /** + * 查询分页数据 + * @param bizDataReport 查询条件 + * @param bizDataReport page 分页对象 + */ + @Override + public Page findPage(BizDataReport bizDataReport) { + return super.findPage(bizDataReport); + } + + /** + * 查询列表数据 + * @param bizDataReport 查询条件 + */ + @Override + public List findList(BizDataReport bizDataReport) { + return super.findList(bizDataReport); + } + + /** + * 保存数据(插入或更新) + * @param bizDataReport 数据对象 + */ + @Override + @Transactional + public void save(BizDataReport bizDataReport) { + super.save(bizDataReport); + } + + /** + * 导入数据 + * @param file 导入的数据文件 + */ + @Transactional + public String importData(MultipartFile file) { + if (file == null){ + throw new ServiceException(text("请选择导入的数据文件!")); + } + int successNum = 0; int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + try(ExcelImport ei = new ExcelImport(file, 2, 0)){ + List list = ei.getDataList(BizDataReport.class); + for (BizDataReport bizDataReport : list) { + try{ + ValidatorUtils.validateWithException(bizDataReport); + this.save(bizDataReport); + successNum++; + successMsg.append("
" + successNum + "、编号 " + bizDataReport.getId() + " 导入成功"); + } catch (Exception e) { + failureNum++; + String msg = "
" + failureNum + "、编号 " + bizDataReport.getId() + " 导入失败:"; + if (e instanceof ConstraintViolationException){ + ConstraintViolationException cve = (ConstraintViolationException)e; + for (ConstraintViolation violation : cve.getConstraintViolations()) { + msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")"; + } + }else{ + msg += e.getMessage(); + } + failureMsg.append(msg); + logger.error(msg, e); + } + } + } catch (Exception e) { + logger.error(e.getMessage(), e); + failureMsg.append(e.getMessage()); + return failureMsg.toString(); + } + if (failureNum > 0) { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ServiceException(failureMsg.toString()); + }else{ + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } + + /** + * 更新状态 + * @param bizDataReport 数据对象 + */ + @Override + @Transactional + public void updateStatus(BizDataReport bizDataReport) { + super.updateStatus(bizDataReport); + } + + /** + * 删除数据 + * @param bizDataReport 数据对象 + */ + @Override + @Transactional + public void delete(BizDataReport bizDataReport) { + super.delete(bizDataReport); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/web/BizDataReportController.java b/web-api/src/main/java/com/jeesite/modules/biz/web/BizDataReportController.java new file mode 100644 index 00000000..0e89cc10 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/web/BizDataReportController.java @@ -0,0 +1,154 @@ +package com.jeesite.modules.biz.web; + +import java.util.List; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.jeesite.common.config.Global; +import com.jeesite.common.collect.ListUtils; +import com.jeesite.common.entity.Page; +import com.jeesite.common.lang.DateUtils; +import com.jeesite.common.utils.excel.ExcelExport; +import com.jeesite.common.utils.excel.annotation.ExcelField.Type; +import org.springframework.web.multipart.MultipartFile; +import com.jeesite.common.web.BaseController; +import com.jeesite.modules.biz.entity.BizDataReport; +import com.jeesite.modules.biz.service.BizDataReportService; + +/** + * 数据指标Controller + * + * @author gaoxq + * @version 2025-12-08 + */ +@Controller +@RequestMapping(value = "${adminPath}/biz/dataReport") +public class BizDataReportController extends BaseController { + + private final BizDataReportService bizDataReportService; + + public BizDataReportController(BizDataReportService bizDataReportService) { + this.bizDataReportService = bizDataReportService; + } + + /** + * 获取数据 + */ + @ModelAttribute + public BizDataReport get(String id, boolean isNewRecord) { + return bizDataReportService.get(id, isNewRecord); + } + + /** + * 查询列表 + */ + @RequiresPermissions("biz:dataReport:view") + @RequestMapping(value = {"list", ""}) + public String list(BizDataReport bizDataReport, Model model) { + model.addAttribute("bizDataReport", bizDataReport); + return "modules/biz/bizDataReportList"; + } + + /** + * 查询列表数据 + */ + @RequiresPermissions("biz:dataReport:view") + @RequestMapping(value = "listData") + @ResponseBody + public Page listData(BizDataReport bizDataReport, HttpServletRequest request, HttpServletResponse response) { + bizDataReport.setPage(new Page<>(request, response)); + Page page = bizDataReportService.findPage(bizDataReport); + return page; + } + + /** + * 查看编辑表单 + */ + @RequiresPermissions("biz:dataReport:view") + @RequestMapping(value = "form") + public String form(BizDataReport bizDataReport, Model model) { + model.addAttribute("bizDataReport", bizDataReport); + return "modules/biz/bizDataReportForm"; + } + + /** + * 保存数据 + */ + @RequiresPermissions("biz:dataReport:edit") + @PostMapping(value = "save") + @ResponseBody + public String save(@Validated BizDataReport bizDataReport) { + bizDataReportService.save(bizDataReport); + return renderResult(Global.TRUE, text("保存指标信息成功!")); + } + + /** + * 导出数据 + */ + @RequiresPermissions("biz:dataReport:view") + @RequestMapping(value = "exportData") + public void exportData(BizDataReport bizDataReport, HttpServletResponse response) { + List list = bizDataReportService.findList(bizDataReport); + String fileName = "指标信息" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx"; + try (ExcelExport ee = new ExcelExport("指标信息", BizDataReport.class)) { + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 下载模板 + */ + @RequiresPermissions("biz:dataReport:view") + @RequestMapping(value = "importTemplate") + public void importTemplate(HttpServletResponse response) { + BizDataReport bizDataReport = new BizDataReport(); + List list = ListUtils.newArrayList(bizDataReport); + String fileName = "指标信息模板.xlsx"; + try (ExcelExport ee = new ExcelExport("指标信息", BizDataReport.class, Type.IMPORT)) { + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 导入数据 + */ + @ResponseBody + @RequiresPermissions("biz:dataReport:edit") + @PostMapping(value = "importData") + public String importData(MultipartFile file) { + try { + String message = bizDataReportService.importData(file); + return renderResult(Global.TRUE, "posfull:" + message); + } catch (Exception ex) { + return renderResult(Global.FALSE, "posfull:" + ex.getMessage()); + } + } + + /** + * 删除数据 + */ + @RequiresPermissions("biz:dataReport:edit") + @RequestMapping(value = "delete") + @ResponseBody + public String delete(BizDataReport bizDataReport) { + bizDataReportService.delete(bizDataReport); + return renderResult(Global.TRUE, text("删除指标信息成功!")); + } + + @RequestMapping(value = "listAll") + @ResponseBody + public List listAll(BizDataReport bizDataReport) { + return bizDataReportService.findList(bizDataReport); + } + +} \ No newline at end of file diff --git a/web-api/src/main/resources/mappings/modules/biz/BizDataReportDao.xml b/web-api/src/main/resources/mappings/modules/biz/BizDataReportDao.xml new file mode 100644 index 00000000..19896129 --- /dev/null +++ b/web-api/src/main/resources/mappings/modules/biz/BizDataReportDao.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/web-vue/package.json b/web-vue/package.json index 2ae24117..b8c261de 100644 --- a/web-vue/package.json +++ b/web-vue/package.json @@ -41,6 +41,7 @@ "ant-design-vue": "4.2.6", "axios": "1.12.2", "dayjs": "1.11.18", + "echarts": "5.4.3", "lodash-es": "4.17.21", "vue": "3.5.22", "vue-eslint-parser": "10.2.0", diff --git a/web-vue/packages/biz/api/biz/dataReport.ts b/web-vue/packages/biz/api/biz/dataReport.ts new file mode 100644 index 00000000..b810dedb --- /dev/null +++ b/web-vue/packages/biz/api/biz/dataReport.ts @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + * No deletion without permission, or be held responsible to law. + * @author gaoxq + */ +import { defHttp } from '@jeesite/core/utils/http/axios'; +import { useGlobSetting } from '@jeesite/core/hooks/setting'; +import { BasicModel, Page } from '@jeesite/core/api/model/baseModel'; +import { UploadApiResult } from '@jeesite/core/api/sys/upload'; +import { UploadFileParams } from '@jeesite/types/axios'; +import { AxiosProgressEvent } from 'axios'; + +const { ctxPath, adminPath } = useGlobSetting(); + +export interface BizDataReport extends BasicModel { + createTime?: string; // 记录时间 + routePath?: string; // 路由地址 + name: string; // 看板名称 + image: string; // 看板图标 + sorting: number; // 排序 + remark: string; // 看板描述 +} + +export const bizDataReportList = (params?: BizDataReport | any) => + defHttp.get({ url: adminPath + '/biz/dataReport/list', params }); + +export const bizDataReportListAll = (params?: BizDataReport | any) => + defHttp.get({ url: adminPath + '/biz/dataReport/listAll', params }); + +export const bizDataReportListData = (params?: BizDataReport | any) => + defHttp.post>({ url: adminPath + '/biz/dataReport/listData', params }); + +export const bizDataReportForm = (params?: BizDataReport | any) => + defHttp.get({ url: adminPath + '/biz/dataReport/form', params }); + +export const bizDataReportSave = (params?: any, data?: BizDataReport | any) => + defHttp.postJson({ url: adminPath + '/biz/dataReport/save', params, data }); + +export const bizDataReportImportData = ( + params: UploadFileParams, + onUploadProgress: (progressEvent: AxiosProgressEvent) => void, +) => + defHttp.uploadFile( + { + url: ctxPath + adminPath + '/biz/dataReport/importData', + onUploadProgress, + }, + params, + ); + +export const bizDataReportDelete = (params?: BizDataReport | any) => + defHttp.get({ url: adminPath + '/biz/dataReport/delete', params }); diff --git a/web-vue/packages/biz/views/biz/dataReport/form.vue b/web-vue/packages/biz/views/biz/dataReport/form.vue new file mode 100644 index 00000000..03b2fdfd --- /dev/null +++ b/web-vue/packages/biz/views/biz/dataReport/form.vue @@ -0,0 +1,130 @@ + + + diff --git a/web-vue/packages/biz/views/biz/dataReport/formImport.vue b/web-vue/packages/biz/views/biz/dataReport/formImport.vue new file mode 100644 index 00000000..4e7d7885 --- /dev/null +++ b/web-vue/packages/biz/views/biz/dataReport/formImport.vue @@ -0,0 +1,103 @@ + + + diff --git a/web-vue/packages/biz/views/biz/dataReport/index.vue b/web-vue/packages/biz/views/biz/dataReport/index.vue new file mode 100644 index 00000000..9509b139 --- /dev/null +++ b/web-vue/packages/biz/views/biz/dataReport/index.vue @@ -0,0 +1,124 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/biz/views/biz/dataReport/list.vue b/web-vue/packages/biz/views/biz/dataReport/list.vue new file mode 100644 index 00000000..003e229f --- /dev/null +++ b/web-vue/packages/biz/views/biz/dataReport/list.vue @@ -0,0 +1,220 @@ + + + diff --git a/web-vue/packages/core/layouts/views/desktop/analysis/components/WorkbenchHeader.vue b/web-vue/packages/core/layouts/views/desktop/analysis/components/WorkbenchHeader.vue index 77280506..a67b8d5f 100644 --- a/web-vue/packages/core/layouts/views/desktop/analysis/components/WorkbenchHeader.vue +++ b/web-vue/packages/core/layouts/views/desktop/analysis/components/WorkbenchHeader.vue @@ -2,7 +2,7 @@
-

您好, {{ userinfo.userName }}, 开始您一天的工作吧!

+

您好, {{ userinfo.userName }}, 开始您一天的工作吧!

今日晴,20℃ - 32℃!
@@ -25,9 +25,15 @@ diff --git a/web-vue/packages/core/layouts/views/desktop/workbench/components/MySchedule.vue b/web-vue/packages/core/layouts/views/desktop/workbench/components/MySchedule.vue new file mode 100644 index 00000000..3a74d9ea --- /dev/null +++ b/web-vue/packages/core/layouts/views/desktop/workbench/components/MySchedule.vue @@ -0,0 +1,349 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/desktop/workbench/index.vue b/web-vue/packages/core/layouts/views/desktop/workbench/index.vue index 02409e35..b2edfa6a 100644 --- a/web-vue/packages/core/layouts/views/desktop/workbench/index.vue +++ b/web-vue/packages/core/layouts/views/desktop/workbench/index.vue @@ -1,8 +1,19 @@ + - - \ No newline at end of file diff --git a/web-vue/pnpm-lock.yaml b/web-vue/pnpm-lock.yaml index 8850d7f1..6418cffa 100644 --- a/web-vue/pnpm-lock.yaml +++ b/web-vue/pnpm-lock.yaml @@ -59,6 +59,9 @@ importers: dayjs: specifier: 1.11.18 version: 1.11.18 + echarts: + specifier: 5.4.3 + version: 5.4.3 lodash-es: specifier: 4.17.21 version: 4.17.21 @@ -536,7 +539,7 @@ packages: '@ant-design/icons-vue@7.0.1': resolution: {integrity: sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==} peerDependencies: - vue: ^3.5.17 + vue: ^3.5.13 '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} @@ -3269,6 +3272,9 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + echarts@5.4.3: + resolution: {integrity: sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==} + echarts@6.0.0: resolution: {integrity: sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==} @@ -6081,6 +6087,9 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zrender@5.4.4: + resolution: {integrity: sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==} + zrender@6.0.0: resolution: {integrity: sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==} @@ -9143,6 +9152,11 @@ snapshots: eastasianwidth@0.2.0: {} + echarts@5.4.3: + dependencies: + tslib: 2.3.0 + zrender: 5.4.4 + echarts@6.0.0: dependencies: tslib: 2.3.0 @@ -12118,6 +12132,10 @@ snapshots: zod@3.25.76: {} + zrender@5.4.4: + dependencies: + tslib: 2.3.0 + zrender@6.0.0: dependencies: tslib: 2.3.0 diff --git a/web-vue/web/src/main.ts b/web-vue/web/src/main.ts index 0fb1faa1..d7ea01bc 100644 --- a/web-vue/web/src/main.ts +++ b/web-vue/web/src/main.ts @@ -9,7 +9,6 @@ import '@jeesite/core/design/index.less'; import App from './App.vue'; import { createApp } from 'vue'; -import { isDevMode } from '@jeesite/core/utils/env'; import { registerGlobComp } from '@jeesite/core/components/registerGlobComp'; import { initAppConfigStore } from '@jeesite/core/logics/initAppConfig'; import { setupErrorHandle } from '@jeesite/core/logics/error-handle'; @@ -20,6 +19,9 @@ import { setupRouterGuard } from '@jeesite/core/router/guard'; import { setupStore } from '@jeesite/core/store'; import { setupDForm } from '@jeesite/dfm'; +// 1. 引入 ECharts(全量引入,兼容Jeesite所有场景) +import * as echarts from 'echarts'; + async function bootstrap() { const app = createApp(App); @@ -53,18 +55,11 @@ async function bootstrap() { // Dynamic Form setupDForm(); + + app.config.globalProperties.$echarts = echarts; + if (window) window.echarts = echarts; app.mount('#app'); } -// 仅开发模式显示 -if (!isDevMode()) { - console.log( - '%c JeeSite %c快速开发平台 \n%c 用心去做我们的快速开发平台,用心去帮助我们的客户!让您用着省心的平台。\n 您的一个关注,就是对我们最大的支持: https://gitee.com/thinkgem/jeesite-vue (请点 star 收藏我们)\n 免费 QQ 技术交流群: 127515876、209330483、223507718、709534275、730390092、1373527、183903863(外包) \n 免费 微信 技术交流群: http://s.jeesite.com 如果加不上,可添加 微信 jeesitex 邀请您进群。%c\n ', - 'font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:39px;color:#0f87e8;-webkit-text-fill-color:#0f87e8;-webkit-text-stroke:1px #0f87e8;', - 'font-size:24px;color:#aaa;', - 'font-size:14px;color:#888;', - 'font-size:12px;', - ); -} -bootstrap().then(); +bootstrap().then(); \ No newline at end of file