feat: 发布1.4.1版本

This commit is contained in:
2025-10-23 18:01:46 +08:00
parent 13e8b3ab93
commit 1146959052
30 changed files with 664 additions and 1057 deletions
+4 -30
View File
@@ -8,7 +8,10 @@
#### 项目源码 #### 项目源码
https://github.com/odboy-tianjun/cutejava [https://github.com/odboy-tianjun/cutejava](https://github.com/odboy-tianjun/cutejava)
#### 项目文档
[https://cutejava-doc.odboy.cn/](https://cutejava-doc.odboy.cn/)
#### 编码规范 #### 编码规范
@@ -52,35 +55,6 @@ https://github.com/odboy-tianjun/cutejava
- 存储管理:本地存储、Minio存储 - 存储管理:本地存储、Minio存储
- 服务监控:监控服务器的负载情况 - 服务监控:监控服务器的负载情况
#### 前端基础组件
> 组件所在路径:cutejava-front/src/views/components/dev
- CuteSimpleTable 简单表格
- CuteDragTable 支持拖拽的表格
- CuteFormDialog 支持表单的对话框
- CuteFormDrawer 支持表单的抽屉
- CuteRichTextEditor 富文本编辑器
- CuteOneKeyCopy 一键复制
- CuteMarkdown Markdown编辑器
- CuteJavaEditor Java编辑器(已弃用)
- CuteYamlEditor Yaml编辑器(已弃用)
- CuteCodeEditor 多语言编辑器(支持yaml、java、go、swift、dockerfile、groovy、lua、perl、python、ruby、sql、xml、vue)
#### 前端业务组件
> 组件所在路径:cutejava-front/src/views/components/business
- CuteDeptTree 部门树
- CuteProductLineSelect 产品线选择框
- CuteProductLineSelectPro 产品线级联选择框
- CuteUserSelect 用户多选框
![CuteBusiness](./cutejava-front/docs/images/CuteBusiness.png)
- CuteFileUpload 上传文件到OSS, 必须结合Minio使用(上传完成后必须销毁组件)
![CuteFileUpload](./cutejava-front/docs/images/CuteFileUpload.png)
- CuteFileDragUpload 支持拖拽上传文件到OSS, 必须结合Minio使用(上传完成后必须销毁组件)
![CuteFileDragUpload](./cutejava-front/docs/images/CuteFileDragUpload.png)
#### 系统模块 #### 系统模块
- cutejava-framework:系统基础框架。提供核心功能,如:权限、数据权限、异常处理、缓存、工具类、接口限流、接口防重、接口幂等。 - cutejava-framework:系统基础框架。提供核心功能,如:权限、数据权限、异常处理、缓存、工具类、接口限流、接口防重、接口幂等。
-34
View File
@@ -1,34 +0,0 @@
#!/bin/bash
is_weekend() {
day=$(date +%u)
[ "$day" -eq 6 ] || [ "$day" -eq 7 ]
}
if is_weekend; then
# 如果是周末,使用当前时间
git add .
git commit -m "$1"
git push
else
# 如果不是周末,设置为最近的周末时间
day=$(date +%u)
if [ "$day" -le 5 ]; then
# 周一到周五,设置为即将到来的周六
days_until_saturday=$((6 - day))
weekend_date=$(date -d "$days_until_saturday days" "+%Y-%m-%d 12:00:00")
else
# 周日,使用昨天(周六)
weekend_date=$(date -d "yesterday" "+%Y-%m-%d 12:00:00")
fi
export GIT_AUTHOR_DATE="$weekend_date"
export GIT_COMMITTER_DATE="$weekend_date"
git add .
git commit -m "$1"
git push
unset GIT_AUTHOR_DATE
unset GIT_COMMITTER_DATE
fi
+191 -191
View File
@@ -1,191 +1,191 @@
Apache License Apache License
Version 2.0, January 2004 Version 2.0, January 2004
http://www.apache.org/licenses/ http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions. 1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and "License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document. distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright "Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License. owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities "Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity. that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity. outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising "You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License. permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including "Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration but not limited to software source code, documentation source, and configuration
files. files.
"Object" form shall mean any form resulting from mechanical transformation or "Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code, translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types. generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made "Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below). in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that "Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions, is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof. name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version "Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition, on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent "submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution." owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf "Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work. incorporated within the Work.
2. Grant of Copyright License. 2. Grant of Copyright License.
Subject to the terms and conditions of this License, each Contributor hereby Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of, irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form. Derivative Works in Source or Object form.
3. Grant of Patent License. 3. Grant of Patent License.
Subject to the terms and conditions of this License, each Contributor hereby Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed. for that Work shall terminate as of the date such litigation is filed.
4. Redistribution. 4. Redistribution.
You may reproduce and distribute copies of the Work or Derivative Works thereof You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form, in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions: provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of You must give any other recipients of the Work or Derivative Works a copy of
this License; and this License; and
You must cause any modified files to carry prominent notices stating that You You must cause any modified files to carry prominent notices stating that You
changed the files; and changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute, You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work, You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as provided that such additional attribution notices cannot be construed as
modifying the License. modifying the License.
You may add Your own copyright statement to Your modifications and may provide You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole, distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License. with the conditions stated in this License.
5. Submission of Contributions. 5. Submission of Contributions.
Unless You explicitly state otherwise, any Contribution intentionally submitted Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions. conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding any separate license agreement you may have executed with Licensor regarding
such Contributions. such Contributions.
6. Trademarks. 6. Trademarks.
This License does not grant permission to use the trade names, trademarks, This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file. reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. 7. Disclaimer of Warranty.
Unless required by applicable law or agreed to in writing, Licensor provides the Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE, including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of redistributing the Work and assume any risks associated with Your exercise of
permissions under this License. permissions under this License.
8. Limitation of Liability. 8. Limitation of Liability.
In no event and under no legal theory, whether in tort (including negligence), In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental, liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages. been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. 9. Accepting Warranty or Additional Liability.
While redistributing the Work or Derivative Works thereof, You may choose to While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However, other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability. accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work APPENDIX: How to apply the Apache License to your work
To apply the Apache License to your work, attach the following boilerplate To apply the Apache License to your work, attach the following boilerplate
notice, with the fields enclosed by brackets "{}" replaced with your own notice, with the fields enclosed by brackets "{}" replaced with your own
identifying information. (Don't include the brackets!) The text should be identifying information. (Don't include the brackets!) The text should be
enclosed in the appropriate comment syntax for the file format. We also enclosed in the appropriate comment syntax for the file format. We also
recommend that a file or class name and description of purpose be included on recommend that a file or class name and description of purpose be included on
the same "printed page" as the copyright notice for easier identification within the same "printed page" as the copyright notice for easier identification within
third-party archives. third-party archives.
Copyright 2022 Odboy Copyright 2019 Zheng Jie
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
You may obtain a copy of the License at You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "cutejava-front", "name": "cutejava-front",
"version": "1.4.0", "version": "1.4.1",
"description": "CuteJava 前端源码", "description": "CuteJava 前端源码",
"author": "Odboy", "author": "Odboy",
"license": "Apache-2.0", "license": "Apache-2.0",
@@ -10,6 +10,7 @@
:disabled="disabled" :disabled="disabled"
:options="deptOptions" :options="deptOptions"
style="width: 100%" style="width: 100%"
placeholder="请选择产品线"
@change="handleChange" @change="handleChange"
/> />
</template> </template>
@@ -1,81 +1,81 @@
<!-- <!--
* 单用户选择组件 * 单用户选择组件
* @author odboy * @author odboy
* @email tianjun@odboy.cn * @email tianjun@odboy.cn
* @created 2025-07-29 * @created 2025-07-29
--> -->
<template> <template>
<el-select <el-select
v-model="user" v-model="user"
style="width: 100%" style="width: 100%"
filterable filterable
remote remote
clearable clearable
reserve-keyword reserve-keyword
placeholder="支持用户姓名、手机号、邮箱、用户名查询" placeholder="支持用户姓名、手机号、邮箱、用户名查询"
:remote-method="remoteMethod" :remote-method="remoteMethod"
:loading="loading" :loading="loading"
@change="onChange" @change="onChange"
> >
<el-option <el-option
v-for="item in options" v-for="item in options"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</template> </template>
<script> <script>
import UserService from '@/api/system/user' import UserService from '@/api/system/user'
export default { export default {
name: 'CuteOneUserSelect', name: 'CuteSingleUserSelect',
props: { props: {
value: { value: {
type: String, type: String,
required: false, required: false,
default: null default: null
} }
}, },
data() { data() {
return { return {
user: this.value, user: this.value,
loading: false, loading: false,
options: [] options: []
} }
}, },
watch: { watch: {
value(newVal) { value(newVal) {
this.user = newVal this.user = newVal
} }
}, },
methods: { methods: {
remoteMethod(query) { remoteMethod(query) {
if (query !== '') { if (query !== '') {
this.loading = true this.loading = true
setTimeout(() => { setTimeout(() => {
this.loading = false this.loading = false
this.queryUserMetaPage(query) this.queryUserMetaPage(query)
}, 200) }, 200)
} else { } else {
this.options = [] this.options = []
} }
}, },
queryUserMetaPage(query, options) { queryUserMetaPage(query, options) {
const that = this const that = this
UserService.queryUserMetaPage(query).then(res => { UserService.queryUserMetaPage(query).then(res => {
that.options = res that.options = res
}) })
}, },
onChange(value) { onChange(value) {
// 绑定change事件 // 绑定change事件
this.$emit('change', value) this.$emit('change', value)
// 绑定form value // 绑定form value
this.$emit('input', value) this.$emit('input', value)
} }
} }
} }
</script> </script>
@@ -15,7 +15,7 @@ export default {
props: { props: {
desc: { desc: {
type: String, type: String,
required: true, required: false,
default: '暂无匹配数据' default: '暂无匹配数据'
} }
} }
@@ -17,7 +17,7 @@
截图并下载 截图并下载
</el-button> </el-button>
</div> </div>
<div id="elementIdSelector"> <div id="elementIdSelector" style="padding: 15px">
<slot /> <slot />
</div> </div>
</div> </div>
@@ -3,7 +3,7 @@
<!-- @change 编辑区发生变化的回调事件 --> <!-- @change 编辑区发生变化的回调事件 -->
<!-- @save ctrl + s 的回调事件(保存按键,同样触发该回调) --> <!-- @save ctrl + s 的回调事件(保存按键,同样触发该回调) -->
<cute-markdown <cute-markdown
:content="markdown.content" :content="content"
@change="onChange" @change="onChange"
@save="onSave" @save="onSave"
/> />
@@ -18,10 +18,7 @@ export default {
components: { CuteMarkdown }, components: { CuteMarkdown },
data() { data() {
return { return {
markdown: { content: '初始化内容'
height: '200px',
content: '初始化内容'
}
} }
}, },
methods: { methods: {
@@ -0,0 +1,91 @@
<template>
<div style="padding: 50px">
<el-divider>CuteSearchForm</el-divider>
<cute-search-form :model="searchFormModel" @submit="handleSearchFormSubmit" @reset="handleSearchFormReset">
<template v-slot:suffix>
<el-form-item label="模糊查询" prop="blurry">
<el-input v-model="searchFormModel.blurry" clearable />
</el-form-item>
</template>
<template v-slot:operation>
<el-button type="primary">查询后置按钮</el-button>
</template>
</cute-search-form>
<el-divider>CuteHorizontalScrollBar</el-divider>
<cute-horizontal-scroll-bar>
<div style="width: 3000px;min-width: 3000px">模拟超长内容</div>
</cute-horizontal-scroll-bar>
<el-divider>CuteVerticalScrollBar</el-divider>
<cute-vertical-scroll-bar>
<div style="height: 3000px;min-height: 3000px">模拟超高内容</div>
</cute-vertical-scroll-bar>
<el-divider>CuteLink</el-divider>
<cute-link title="百度一下" href="https://www.baidu.com" />
<el-divider>CuteNoData</el-divider>
<cute-no-data desc="自定义提示语" />
<el-divider>CutePreviewDrawer <el-button type="primary" @click="handleCutePreviewDrawerShow">显示</el-button></el-divider>
<cute-preview-drawer ref="cpd" title="预览抽屉">
<p>预览抽屉预览抽屉预览抽屉预览抽屉预览抽屉预览抽屉预览抽屉预览抽屉</p>
</cute-preview-drawer>
<el-divider>截屏:包裹要截屏的组件</el-divider>
<cute-screen-shot>
<cute-search-form :model="searchFormModel" @submit="handleSearchFormSubmit" @reset="handleSearchFormReset">
<template v-slot:suffix>
<el-form-item label="模糊查询" prop="blurry">
<el-input v-model="searchFormModel.blurry" clearable />
</el-form-item>
</template>
<template v-slot:operation>
<el-button type="primary">查询后置按钮</el-button>
</template>
</cute-search-form>
</cute-screen-shot>
<el-divider>CuteSectionTitle</el-divider>
<cute-section-title title="段落标题">
<el-button type="danger">操作按钮</el-button>
</cute-section-title>
</div>
</template>
<script>
import CuteSearchForm from '@/views/components/dev/CuteSearchForm.vue'
import CuteHorizontalScrollBar from '@/views/components/dev/CuteHorizontalScrollBar.vue'
import CuteVerticalScrollBar from '@/views/components/dev/CuteVerticalScrollBar.vue'
import CuteLink from '@/views/components/dev/CuteLink.vue'
import CuteNoData from '@/views/components/dev/CuteNoData.vue'
import CutePreviewDrawer from '@/views/components/dev/CutePreviewDrawer.vue'
import CuteScreenShot from '@/views/components/dev/CuteScreenShot.vue'
import CuteSectionTitle from '@/views/components/dev/CuteSectionTitle.vue'
export default {
name: 'CuteOtherDemo',
components: {
CuteSectionTitle,
CuteScreenShot,
CutePreviewDrawer,
CuteNoData,
CuteLink,
CuteVerticalScrollBar,
CuteHorizontalScrollBar,
CuteSearchForm
},
data() {
return {
searchFormModel: {}
}
},
methods: {
handleSearchFormSubmit(data) {
console.log('handleSearchFormSubmit', data)
},
handleSearchFormReset() {
console.log('handleSearchFormReset')
},
handleCutePreviewDrawerShow() {
this.$refs.cpd.show()
}
}
}
</script>
@@ -1,9 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<cute-rich-text-editor <cute-rich-text-editor :read-only="false" @change="onChange" />
:read-only="false"
@change="onChange"
/>
</div> </div>
</template> </template>
@@ -13,13 +10,6 @@ import CuteRichTextEditor from '@/views/components/dev/CuteRichTextEditor'
export default { export default {
name: 'CuteRichTextEditorDemo', name: 'CuteRichTextEditorDemo',
components: { CuteRichTextEditor }, components: { CuteRichTextEditor },
data() {
return {
html: {
height: '200px'
}
}
},
methods: { methods: {
onChange(html, text) { onChange(html, text) {
console.log('onChange:html', html) console.log('onChange:html', html)
@@ -312,6 +312,7 @@ export default {
}, },
created() { created() {
this.crud.msg.add = '新增成功,默认密码:123456' this.crud.msg.add = '新增成功,默认密码:123456'
console.log('======== this.dict', this.dict)
}, },
mounted: function() { mounted: function() {
const that = this const that = this
+191 -191
View File
@@ -1,191 +1,191 @@
Apache License Apache License
Version 2.0, January 2004 Version 2.0, January 2004
http://www.apache.org/licenses/ http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions. 1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and "License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document. distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright "Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License. owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities "Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity. that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity. outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising "You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License. permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including "Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration but not limited to software source code, documentation source, and configuration
files. files.
"Object" form shall mean any form resulting from mechanical transformation or "Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code, translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types. generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made "Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below). in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that "Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions, is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof. name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version "Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition, on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent "submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution." owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf "Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work. incorporated within the Work.
2. Grant of Copyright License. 2. Grant of Copyright License.
Subject to the terms and conditions of this License, each Contributor hereby Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of, irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form. Derivative Works in Source or Object form.
3. Grant of Patent License. 3. Grant of Patent License.
Subject to the terms and conditions of this License, each Contributor hereby Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed. for that Work shall terminate as of the date such litigation is filed.
4. Redistribution. 4. Redistribution.
You may reproduce and distribute copies of the Work or Derivative Works thereof You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form, in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions: provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of You must give any other recipients of the Work or Derivative Works a copy of
this License; and this License; and
You must cause any modified files to carry prominent notices stating that You You must cause any modified files to carry prominent notices stating that You
changed the files; and changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute, You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work, You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as provided that such additional attribution notices cannot be construed as
modifying the License. modifying the License.
You may add Your own copyright statement to Your modifications and may provide You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole, distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License. with the conditions stated in this License.
5. Submission of Contributions. 5. Submission of Contributions.
Unless You explicitly state otherwise, any Contribution intentionally submitted Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions. conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding any separate license agreement you may have executed with Licensor regarding
such Contributions. such Contributions.
6. Trademarks. 6. Trademarks.
This License does not grant permission to use the trade names, trademarks, This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file. reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. 7. Disclaimer of Warranty.
Unless required by applicable law or agreed to in writing, Licensor provides the Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE, including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of redistributing the Work and assume any risks associated with Your exercise of
permissions under this License. permissions under this License.
8. Limitation of Liability. 8. Limitation of Liability.
In no event and under no legal theory, whether in tort (including negligence), In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental, liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages. been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. 9. Accepting Warranty or Additional Liability.
While redistributing the Work or Derivative Works thereof, You may choose to While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However, other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability. accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work APPENDIX: How to apply the Apache License to your work
To apply the Apache License to your work, attach the following boilerplate To apply the Apache License to your work, attach the following boilerplate
notice, with the fields enclosed by brackets "{}" replaced with your own notice, with the fields enclosed by brackets "{}" replaced with your own
identifying information. (Don't include the brackets!) The text should be identifying information. (Don't include the brackets!) The text should be
enclosed in the appropriate comment syntax for the file format. We also enclosed in the appropriate comment syntax for the file format. We also
recommend that a file or class name and description of purpose be included on recommend that a file or class name and description of purpose be included on
the same "printed page" as the copyright notice for easier identification within the same "printed page" as the copyright notice for easier identification within
third-party archives. third-party archives.
Copyright 2022-2025 Odboy Copyright 2019 Zheng Jie
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
You may obtain a copy of the License at You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
@@ -1,50 +0,0 @@
// /*
// * Copyright 2021-2025 Odboy
// *
// * Licensed under the Apache License, Version 2.0 (the "License");
// * you may not use this file except in compliance with the License.
// * You may obtain a copy of the License at
// *
// * http://www.apache.org/licenses/LICENSE-2.0
// *
// * Unless required by applicable law or agreed to in writing, software
// * distributed under the License is distributed on an "AS IS" BASIS,
// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// * See the License for the specific language governing permissions and
// * limitations under the License.
// */
//
// package cn.odboy.framework.exception.thirdapi;
//
// import java.lang.annotation.Documented;
// import java.lang.annotation.ElementType;
// import java.lang.annotation.Inherited;
// import java.lang.annotation.Retention;
// import java.lang.annotation.RetentionPolicy;
// import java.lang.annotation.Target;
//
// /**
// * 用于捕捉三方异常
// *
// * @author odboy
// */
// @Inherited
// @Documented
// @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
// @Retention(RetentionPolicy.RUNTIME)
// public @interface ThirdApiExceptionCatch {
// /**
// * 模块名称
// */
// String modelName();
//
// /**
// * 接口描述
// */
// String description();
//
// /**
// * 是否抛出异常
// */
// boolean throwException() default true;
// }
@@ -1,148 +0,0 @@
// /*
// * Copyright 2021-2025 Odboy
// *
// * Licensed under the Apache License, Version 2.0 (the "License");
// * you may not use this file except in compliance with the License.
// * You may obtain a copy of the License at
// *
// * http://www.apache.org/licenses/LICENSE-2.0
// *
// * Unless required by applicable law or agreed to in writing, software
// * distributed under the License is distributed on an "AS IS" BASIS,
// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// * See the License for the specific language governing permissions and
// * limitations under the License.
// */
//
// package cn.odboy.framework.exception.thirdapi;
//
// import cn.hutool.core.date.TimeInterval;
// import cn.odboy.framework.exception.thirdapi.vo.KubernetesApiExceptionVo;
// import cn.odboy.framework.exception.web.BadRequestException;
// import cn.odboy.util.CsReturnValueHandleUtil;
// import cn.odboy.util.LogFmtUtil;
// import com.alibaba.fastjson2.JSON;
// import com.aliyun.tea.TeaException;
// import io.kubernetes.client.openapi.ApiException;
// import lombok.extern.slf4j.Slf4j;
// import org.aspectj.lang.ProceedingJoinPoint;
// import org.aspectj.lang.annotation.Around;
// import org.aspectj.lang.annotation.Aspect;
// import org.gitlab4j.api.GitLabApiException;
// import org.springframework.stereotype.Component;
//
// /**
// * DingtalkApi调用异常
// *
// * @author odboy
// * @date 2025-05-07
// */
// @Slf4j
// @Aspect
// @Component
// public class ThirdExceptionCatchAspect {
// @Around("@annotation(thirdApiExceptionCatch)")
// public Object aroundDingtalkApiExceptionCatch(ProceedingJoinPoint joinPoint, ThirdApiExceptionCatch thirdApiExceptionCatch) throws Throwable {
// return handleThirdApiException(joinPoint, thirdApiExceptionCatch);
// }
//
// /**
// * 三方服务调用异常处理
// */
// private Object handleThirdApiException(ProceedingJoinPoint joinPoint, ThirdApiExceptionCatch annotation) {
// if ("dingtalk".equals(annotation.modelName())) {
// return handleDingtalkApiException(joinPoint, annotation);
// }
// if ("gitlab".equals(annotation.modelName())) {
// return handleGitlabApiException(joinPoint, annotation);
// }
// if ("kubernetes".equals(annotation.modelName())) {
// return handleKubernetesApiException(joinPoint, annotation);
// }
// return null;
// }
//
// private Object handleDingtalkApiException(ProceedingJoinPoint joinPoint, ThirdApiExceptionCatch annotation) {
// TimeInterval timeInterval = new TimeInterval();
// try {
// Object result = joinPoint.proceed();
// log.info("接口 [{}] 执行耗时: {} ms", annotation.description(), timeInterval.intervalMs());
// return result;
// } catch (TeaException teaException) {
// if (!com.aliyun.teautil.Common.empty(teaException.code) && !com.aliyun.teautil.Common.empty(teaException.message)) {
// String exceptionMessage = annotation.description() + "失败, code={}, message={}";
// log.error(exceptionMessage, teaException.code, teaException.message, teaException);
// if (annotation.throwException()) {
// throw new BadRequestException(LogFmtUtil.format(exceptionMessage, teaException.code, teaException.message));
// }
// }
// String exceptionMessage = annotation.description() + "失败";
// log.error(exceptionMessage, teaException);
// if (annotation.throwException()) {
// throw new BadRequestException(exceptionMessage);
// }
// } catch (Throwable exception) {
// TeaException err = new TeaException(exception.getMessage(), exception);
// if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// String exceptionMessage = annotation.description() + "失败, code={}, message={}";
// log.error(exceptionMessage, err.code, err.message, err);
// if (annotation.throwException()) {
// throw new BadRequestException(LogFmtUtil.format(exceptionMessage, err.code, err.message));
// }
// }
// String exceptionMessage = annotation.description() + "失败";
// log.error(exceptionMessage, exception);
// if (annotation.throwException()) {
// throw new BadRequestException(exceptionMessage);
// }
// }
// return CsReturnValueHandleUtil.getDefaultValue(joinPoint);
// }
//
// private Object handleGitlabApiException(ProceedingJoinPoint joinPoint, ThirdApiExceptionCatch annotation) {
// TimeInterval timeInterval = new TimeInterval();
// try {
// Object result = joinPoint.proceed();
// log.info("接口 [{}] 执行耗时: {} ms", annotation.description(), timeInterval.intervalMs());
// return result;
// } catch (GitLabApiException gitLabApiException) {
// String exceptionMessage = annotation.description() + "失败,原因:" + gitLabApiException.getMessage();
// log.error(exceptionMessage, gitLabApiException);
// if (annotation.throwException()) {
// throw new BadRequestException(exceptionMessage);
// }
// } catch (Throwable exception) {
// String exceptionMessage = annotation.description() + "失败";
// log.error(exceptionMessage, exception);
// if (annotation.throwException()) {
// throw new BadRequestException(exceptionMessage);
// }
// }
// return CsReturnValueHandleUtil.getDefaultValue(joinPoint);
// }
//
// private Object handleKubernetesApiException(ProceedingJoinPoint joinPoint, ThirdApiExceptionCatch annotation) {
// TimeInterval timeInterval = new TimeInterval();
// try {
// Object result = joinPoint.proceed();
// log.info("接口 [{}] 执行耗时: {} ms", annotation.description(), timeInterval.intervalMs());
// return result;
// } catch (ApiException e) {
// String responseBody = e.getResponseBody();
// log.error("接口 [{}] 执行异常,耗时: {} ms,异常信息: {}", annotation.description(), timeInterval.intervalMs(), responseBody, e);
// if (annotation.throwException()) {
// KubernetesApiExceptionVo actionExceptionBody = JSON.parseObject(responseBody, KubernetesApiExceptionVo.class);
// if (actionExceptionBody != null) {
// throw new BadRequestException(annotation.description() + "失败, 原因:" + actionExceptionBody.getReason());
// }
// throw new BadRequestException(annotation.description() + "失败");
// }
// } catch (Throwable e) {
// log.error("接口 [{}] 执行异常,耗时: {} ms", annotation.description(), timeInterval.intervalMs(), e);
// if (annotation.throwException()) {
// throw new BadRequestException(annotation.description() + "失败");
// }
// }
// return CsReturnValueHandleUtil.getDefaultValue(joinPoint);
// }
// }
@@ -1,46 +0,0 @@
//
// /*
// * Copyright 2021-2025 Odboy
// *
// * Licensed under the Apache License, Version 2.0 (the "License");
// * you may not use this file except in compliance with the License.
// * You may obtain a copy of the License at
// *
// * http://www.apache.org/licenses/LICENSE-2.0
// *
// * Unless required by applicable law or agreed to in writing, software
// * distributed under the License is distributed on an "AS IS" BASIS,
// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// * See the License for the specific language governing permissions and
// * limitations under the License.
// */
//
// package cn.odboy.framework.exception.thirdapi.vo;
//
// import cn.odboy.base.CsObject;
// import lombok.Data;
// import lombok.EqualsAndHashCode;
//
// /**
// * Kubernetes异常信息
// *
// * @author odboy
// * @date 2025-08-03
// */
// @Data
// @EqualsAndHashCode(callSuper = false)
// public class KubernetesApiExceptionVo extends CsObject {
// private String kind;
// private String apiVersion;
// private String status;
// private String message;
// private String reason;
// private Details details;
// private int code;
//
// @Data
// public static class Details {
// private String name;
// private String kind;
// }
// }
@@ -36,5 +36,5 @@ public @interface ExecutionTimeStatisticsFace {
/** /**
* 是否展示异常日志 * 是否展示异常日志
*/ */
boolean errorLog() default false; boolean showErrLog() default true;
} }
@@ -24,7 +24,7 @@ import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
* DingtalkApi调用异常 * 执行时间统计
* *
* @author odboy * @author odboy
* @date 2025-05-07 * @date 2025-05-07
@@ -41,7 +41,7 @@ public class ExecutionTimeStatisticsFaceAspect {
log.info("[{}] 接口执行成功,耗时: {} ms", executionTimeStatisticsFace.description(), timeInterval.intervalMs()); log.info("[{}] 接口执行成功,耗时: {} ms", executionTimeStatisticsFace.description(), timeInterval.intervalMs());
return proceed; return proceed;
} catch (Exception e) { } catch (Exception e) {
if (executionTimeStatisticsFace.errorLog()) { if (executionTimeStatisticsFace.showErrLog()) {
log.info("[{}] 接口执行失败,耗时: {} ms", executionTimeStatisticsFace.description(), timeInterval.intervalMs()); log.info("[{}] 接口执行失败,耗时: {} ms", executionTimeStatisticsFace.description(), timeInterval.intervalMs());
} }
throw e; throw e;
@@ -39,36 +39,8 @@ public @interface CsMpQuery {
*/ */
CsMpQTypeEnum type() default CsMpQTypeEnum.EQUAL; CsMpQTypeEnum type() default CsMpQTypeEnum.EQUAL;
/**
* 连接查询的属性名, 如User类中的dept
*/
String joinName() default "";
/**
* 默认左连接
*/
Join join() default Join.LEFT;
/** /**
* 多字段模糊搜索, 仅支持String类型字段, 多个用逗号隔开, 如@MpQuery(blurry = "email,username") * 多字段模糊搜索, 仅支持String类型字段, 多个用逗号隔开, 如@MpQuery(blurry = "email,username")
*/ */
String blurry() default ""; String blurry() default "";
/**
* 适用于简单连接查询, 复杂的请自定义该注解, 或者使用sql查询
*/
enum Join {
/**
* 左连接
*/
LEFT,
/**
* 右连接
*/
RIGHT,
/**
* 内连接
*/
INNER
}
} }
@@ -1,74 +1,74 @@
/* /*
* Copyright 2021-2025 Odboy * Copyright 2021-2025 Odboy
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package cn.odboy.framework.mybatisplus.core.interfaces; package cn.odboy.framework.mybatisplus.core.interfaces;
import cn.odboy.base.CsPageResult; import cn.odboy.base.CsPageResult;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.io.Serializable; import java.io.Serializable;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
/** /**
* 公共抽象Mapper接口类 * 公共抽象Service接口类
* *
* @author odboy * @author odboy
* @date 2022-04-03 * @date 2022-04-03
*/ */
public interface CsMpEasyService<T> extends IService<T> { public interface CsMpService<T> extends IService<T> {
<G> int saveFeatureClazz(G resources); <G> int saveFeatureClazz(G resources);
<G> int saveFeatureClazzList(List<G> resources); <G> int saveFeatureClazzList(List<G> resources);
<G> int modifyFeatureClazzById(G resources); <G> int modifyFeatureClazzById(G resources);
<G> boolean modifyFeatureClazzListById(Collection<G> resources, int batchSize); <G> boolean modifyFeatureClazzListById(Collection<G> resources, int batchSize);
<G> G queryFeatureClazzById(Serializable id, Class<G> targetClazz); <G> G queryFeatureClazzById(Serializable id, Class<G> targetClazz);
T queryClazzByArgs(LambdaQueryWrapper<T> wrapper, SFunction<T, ?> orderColumn); T queryClazzByArgs(LambdaQueryWrapper<T> wrapper, SFunction<T, ?> orderColumn);
<G> G queryFeatureClazzByArgs(LambdaQueryWrapper<T> wrapper, SFunction<T, ?> orderColumn, Class<G> clazz); <G> G queryFeatureClazzByArgs(LambdaQueryWrapper<T> wrapper, SFunction<T, ?> orderColumn, Class<G> clazz);
<G> List<G> queryFeatureClazzListByIds(List<Serializable> ids, Class<G> targetClazz); <G> List<G> queryFeatureClazzListByIds(List<Serializable> ids, Class<G> targetClazz);
<Q> List<T> queryClazzListByArgs(Q criteria); <Q> List<T> queryClazzListByArgs(Q criteria);
List<T> queryClazzListByArgs(LambdaQueryWrapper<T> wrapper); List<T> queryClazzListByArgs(LambdaQueryWrapper<T> wrapper);
<G, Q> List<G> queryFeatureClazzListByArgs(Q criteria, Class<G> targetClazz); <G, Q> List<G> queryFeatureClazzListByArgs(Q criteria, Class<G> targetClazz);
<G> List<G> queryFeatureClazzListByArgs(LambdaQueryWrapper<T> wrapper, Class<G> targetClazz); <G> List<G> queryFeatureClazzListByArgs(LambdaQueryWrapper<T> wrapper, Class<G> targetClazz);
CsPageResult<T> queryClazzPageByArgs(LambdaQueryWrapper<T> wrapper, IPage<T> pageable); CsPageResult<T> queryClazzPageByArgs(LambdaQueryWrapper<T> wrapper, IPage<T> pageable);
<G> CsPageResult<G> queryFeatureClazzPageByArgs( <G> CsPageResult<G> queryFeatureClazzPageByArgs(
LambdaQueryWrapper<T> wrapper, LambdaQueryWrapper<T> wrapper,
IPage<T> pageable, IPage<T> pageable,
Class<G> targetClazz); Class<G> targetClazz);
<G, Q> CsPageResult<G> queryFeatureClazzPageByArgs(Q criteria, IPage<T> pageable, Class<G> targetClazz); <G, Q> CsPageResult<G> queryFeatureClazzPageByArgs(Q criteria, IPage<T> pageable, Class<G> targetClazz);
<Q> CsPageResult<T> queryClazzPageByArgs(Q criteria, IPage<T> pageable); <Q> CsPageResult<T> queryClazzPageByArgs(Q criteria, IPage<T> pageable);
int modifyClazzByArgs(LambdaQueryWrapper<T> wrapper, T entity); int modifyClazzByArgs(LambdaQueryWrapper<T> wrapper, T entity);
int removeClazzByArgs(LambdaQueryWrapper<T> wrapper); int removeClazzByArgs(LambdaQueryWrapper<T> wrapper);
} }
@@ -53,10 +53,7 @@ public class RedisConfiguration extends CachingConfigurerSupport {
/** /**
* 自动识别json对象白名单配置(仅允许解析的包名, 范围越小越安全)<br/> 未配置可能导致, 登录失败, 反复登录等问题 * 自动识别json对象白名单配置(仅允许解析的包名, 范围越小越安全)<br/> 未配置可能导致, 登录失败, 反复登录等问题
*/ */
private static final String[] WHITELIST_STR = private static final String[] WHITELIST_STR = {"org.springframework", "cn.odboy.system.dal.dataobject", "cn.odboy.system.dal.model", "cn.odboy.pipeline" + ".dal.dataobject", "cn.odboy.pipeline.dal.model", "cn.odboy.pipeline.framework.pipeline.model", "cn.odboy.framework.exception.thirdapi.vo"};
{"org.springframework", "cn.odboy.system.dal.dataobject", "cn.odboy.system.dal.model",
"cn.odboy.pipeline" + ".dal.dataobject", "cn.odboy.pipeline.dal.model",
"cn.odboy.pipeline.framework.pipeline.model", "cn.odboy.framework.exception.thirdapi.vo"};
/** /**
* 设置 redis 数据默认过期时间,默认2小时 设置@cacheable 序列化方式 * 设置 redis 数据默认过期时间,默认2小时 设置@cacheable 序列化方式
@@ -65,8 +62,7 @@ public class RedisConfiguration extends CachingConfigurerSupport {
public RedisCacheConfiguration redisCacheConfiguration() { public RedisCacheConfiguration redisCacheConfiguration() {
FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class); FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class);
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig(); RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig();
configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer( configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer)).entryTtl(Duration.ofHours(2));
fastJsonRedisSerializer)).entryTtl(Duration.ofHours(2));
return configuration; return configuration;
} }
@@ -1,97 +0,0 @@
///*
// * Copyright 2021-2025 Odboy
// *
// * Licensed under the Apache License, Version 2.0 (the "License");
// * you may not use this file except in compliance with the License.
// * You may obtain a copy of the License at
// *
// * http://www.apache.org/licenses/LICENSE-2.0
// *
// * Unless required by applicable law or agreed to in writing, software
// * distributed under the License is distributed on an "AS IS" BASIS,
// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// * See the License for the specific language governing permissions and
// * limitations under the License.
// */
//
//package cn.odboy.framework.redis;
//
//import cn.hutool.core.util.StrUtil;
//import cn.odboy.util.CsSystemUtil;
//import lombok.extern.slf4j.Slf4j;
//import org.redisson.Redisson;
//import org.redisson.api.RedissonClient;
//import org.redisson.client.codec.StringCodec;
//import org.redisson.config.Config;
//import org.redisson.config.EqualJitterDelay;
//import org.redisson.config.SingleServerConfig;
//import org.redisson.config.TransportMode;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.boot.autoconfigure.AutoConfigureBefore;
//import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import java.time.Duration;
//
//@Slf4j
//@Configuration
//@AutoConfigureBefore(RedisAutoConfiguration.class)
//public class RedissonConfiguration {
//
// @Value("${spring.redis.host}")
// private String redisHost;
//
// @Value("${spring.redis.port}")
// private int redisPort;
//
// @Value("${spring.redis.database}")
// private int redisDatabase;
//
// @Value("${spring.redis.password:}")
// private String redisPassword;
//
// @Value("${spring.redis.timeout:5000}")
// private int timeout;
//
// @Value("${spring.redis.lettuce.pool.max-active:64}")
// private int connectionPoolSize;
//
// @Value("${spring.redis.lettuce.pool.min-idle:16}")
// private int connectionMinimumIdleSize;
//
// @Bean
// public RedissonClient redissonClient() {
// Config config = new Config();
// config.setThreads(CsSystemUtil.getCpuCount());
// config.setNettyThreads(0);
// config.setCodec(new StringCodec());
// config.setTransportMode(TransportMode.NIO);
// SingleServerConfig singleServerConfig = config.useSingleServer();
// singleServerConfig.setAddress("redis://" + redisHost + ":" + redisPort);
// singleServerConfig.setDatabase(redisDatabase);
// singleServerConfig.setTimeout(timeout);
// singleServerConfig.setConnectionPoolSize(connectionPoolSize);
// singleServerConfig.setConnectionMinimumIdleSize(connectionMinimumIdleSize);
// if (StrUtil.isNotBlank(redisPassword)) {
// singleServerConfig.setPassword(redisPassword);
// }
// singleServerConfig.setIdleConnectionTimeout(10000);
// singleServerConfig.setConnectTimeout(10000);
// singleServerConfig.setTimeout(3000);
// singleServerConfig.setRetryAttempts(3);
// // singleServerConfig.setRetryInterval(1500);
// singleServerConfig.setRetryDelay(new EqualJitterDelay(Duration.ofSeconds(3), Duration.ofSeconds(5)));
// singleServerConfig.setSubscriptionsPerConnection(5);
// singleServerConfig.setSubscriptionConnectionMinimumIdleSize(1);
// singleServerConfig.setSubscriptionConnectionPoolSize(50);
// singleServerConfig.setConnectionMinimumIdleSize(32);
// singleServerConfig.setConnectionPoolSize(64);
// singleServerConfig.setDnsMonitoringInterval(5000);
// RedissonClient redissonClient = Redisson.create(config);
// log.info("Redisson客户端 初始化完毕");
// return redissonClient;
// }
//}
//
//
@@ -21,7 +21,7 @@ import cn.odboy.framework.exception.web.BadRequestException;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
/** /**
* 分布式id生成工具 * 分布式id生成工具(不建议用,仅供参考)
* *
* @author odboy * @author odboy
* @date 2025-04-05 * @date 2025-04-05
@@ -1,48 +0,0 @@
/*
* Copyright 2021-2025 Odboy
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.util;
/**
* 适配 logger 占位符
*
* @author odboy
* @date 2025-01-13
*/
public class LogFmtUtil {
/**
* 替换字符串中的占位符 {} 为传入的参数
*
* @param message 消息模板
* @param args 替换占位符的参数
* @return 替换后的消息
*/
public static String format(String message, Object... args) {
if (message == null || args == null || args.length == 0) {
return message;
}
// 使用 String.format 替换占位符
return String.format(message.replace("{}", "%s"), args);
}
public static void main(String[] args) {
// 示例用法
String messageTemplate = "获取dingtalk accessToken失败, code={}, message={}";
String formattedMessage = format(messageTemplate, 400, "Bad Request");
// 输出: 获取dingtalk accessToken失败, code=400, message=Bad Request
System.out.println(formattedMessage);
}
}
@@ -27,11 +27,17 @@ public class HealthCheckPointer implements CsHealthCheckPointService {
@Autowired @Autowired
private SystemDictService systemDictService; private SystemDictService systemDictService;
/**
* 系统准备就绪
*/
@Override @Override
public ResponseEntity<?> doReadiness() { public ResponseEntity<?> doReadiness() {
return ResponseEntity.ok(null); return ResponseEntity.ok(null);
} }
/**
* 系统是否正常
*/
@Override @Override
public ResponseEntity<?> doLiveness() { public ResponseEntity<?> doLiveness() {
return ResponseEntity.ok(systemDictService.getById(1)); return ResponseEntity.ok(systemDictService.getById(1));
@@ -193,8 +193,8 @@ app:
private-key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A== private-key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A==
# 鉴权 # 鉴权
jwt: jwt:
# 必须使用最少88位的Base64对该令牌进行编码 # 必须使用最少88位的Base64对该令牌进行编码 cn.odboy.util.CsBase64SecretUtil
base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI= base64-secret: YzE5ZWNjMjlkMGY4NDc4MDlmYzE0Y2I0MTk4YTQ4YjY5NTU0OGQxODNjNjQ0MmU1YjBmZTYwYjljYzI0M2M4MTJkZjk3Y2ZlYjg3ZTQxMjM4MjEwY2ZiYzE4YmFiYmZlZDVhM2M1YmI3M2FmNDFmNWJmM2MyMTM1ZDNhMmRmYzY=
# 令牌过期时间 此处单位/毫秒 ,默认4小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html # 令牌过期时间 此处单位/毫秒 ,默认4小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html
token-validity-in-seconds: 14400000 token-validity-in-seconds: 14400000
# token 续期检查时间范围(默认30分钟,单位毫秒),在token即将过期的一段时间内用户操作了,则给用户的token续期 # token 续期检查时间范围(默认30分钟,单位毫秒),在token即将过期的一段时间内用户操作了,则给用户的token续期
+10 -8
View File
@@ -24,7 +24,7 @@ CREATE TABLE `demo_time_table_copy1` (
`create_time` datetime NOT NULL COMMENT '创建时间', `create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '修改时间', `update_time` datetime NOT NULL COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
-- ---------------------------- -- ----------------------------
-- Records of demo_time_table_copy1 -- Records of demo_time_table_copy1
@@ -42,7 +42,7 @@ CREATE TABLE `demo_user_time_logic_table` (
`update_time` datetime NOT NULL COMMENT '修改时间', `update_time` datetime NOT NULL COMMENT '修改时间',
`available` tinyint(1) NOT NULL DEFAULT 1 COMMENT '数据有效性', `available` tinyint(1) NOT NULL DEFAULT 1 COMMENT '数据有效性',
PRIMARY KEY (`id`) USING BTREE PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
-- ---------------------------- -- ----------------------------
-- Records of demo_user_time_logic_table -- Records of demo_user_time_logic_table
@@ -59,7 +59,7 @@ CREATE TABLE `demo_user_time_table` (
`update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '修改人', `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '修改人',
`update_time` datetime NOT NULL COMMENT '修改时间', `update_time` datetime NOT NULL COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
-- ---------------------------- -- ----------------------------
-- Records of demo_user_time_table -- Records of demo_user_time_table
@@ -219,7 +219,7 @@ CREATE TABLE `qrtz_scheduler_state` (
-- Records of qrtz_scheduler_state -- Records of qrtz_scheduler_state
-- ---------------------------- -- ----------------------------
INSERT INTO `qrtz_scheduler_state` VALUES ('ClusteredScheduler', 'DESKTOP-FM44BLS1742558233429', 1742558255052, 20000); INSERT INTO `qrtz_scheduler_state` VALUES ('ClusteredScheduler', 'DESKTOP-FM44BLS1742558233429', 1742558255052, 20000);
INSERT INTO `qrtz_scheduler_state` VALUES ('cutejava', 'auto', 1760951912083, 10000); INSERT INTO `qrtz_scheduler_state` VALUES ('cutejava', 'auto', 1761211053605, 10000);
-- ---------------------------- -- ----------------------------
-- Table structure for qrtz_simple_triggers -- Table structure for qrtz_simple_triggers
@@ -509,7 +509,7 @@ CREATE TABLE `system_menu` (
UNIQUE INDEX `uniq_title`(`title` ASC) USING BTREE, UNIQUE INDEX `uniq_title`(`title` ASC) USING BTREE,
INDEX `idx_pid`(`pid` ASC) USING BTREE, INDEX `idx_pid`(`pid` ASC) USING BTREE,
INDEX `idx_sys_menu_menu_id`(`menu_id` ASC) USING BTREE INDEX `idx_sys_menu_menu_id`(`menu_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 150 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统菜单' ROW_FORMAT = DYNAMIC; ) ENGINE = InnoDB AUTO_INCREMENT = 151 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统菜单' ROW_FORMAT = DYNAMIC;
-- ---------------------------- -- ----------------------------
-- Records of system_menu -- Records of system_menu
@@ -520,7 +520,7 @@ INSERT INTO `system_menu` VALUES (3, 1, 3, 1, '角色管理', 'Role', 'system/ro
INSERT INTO `system_menu` VALUES (5, 1, 3, 1, '菜单管理', 'Menu', 'system/menu/index', 5, 'menu', 'menu', b'0', b'0', b'0', 'menu:list', 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (5, 1, 3, 1, '菜单管理', 'Menu', 'system/menu/index', 5, 'menu', 'menu', b'0', b'0', b'0', 'menu:list', 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13');
INSERT INTO `system_menu` VALUES (6, 1, 3, 0, '系统监控', NULL, NULL, 11, 'monitor', 'monitor', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (6, 1, 3, 0, '系统监控', NULL, NULL, 11, 'monitor', 'monitor', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13');
INSERT INTO `system_menu` VALUES (9, 6, 0, 1, 'SQL监控', 'DruidSqlConsole', 'system/druidSql/index', 18, 'sqlMonitor', 'druid-console', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (9, 6, 0, 1, 'SQL监控', 'DruidSqlConsole', 'system/druidSql/index', 18, 'sqlMonitor', 'druid-console', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13');
INSERT INTO `system_menu` VALUES (10, NULL, 15, 0, '组件管理', NULL, NULL, 999, 'zujian', 'components', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (10, NULL, 16, 0, '组件管理', NULL, NULL, 999, 'zujian', 'components', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13');
INSERT INTO `system_menu` VALUES (11, 10, 0, 1, '图标库', 'Icons', 'components/icons/index', 51, 'icon', 'icon', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (11, 10, 0, 1, '图标库', 'Icons', 'components/icons/index', 51, 'icon', 'icon', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13');
INSERT INTO `system_menu` VALUES (14, 36, 0, 1, '邮件工具', 'Email', 'system/email/index', 35, 'email', 'email', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (14, 36, 0, 1, '邮件工具', 'Email', 'system/email/index', 35, 'email', 'email', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13');
INSERT INTO `system_menu` VALUES (18, 36, 3, 1, '存储管理', 'Storage', 'system/storage/index', 34, 'qiniu', 'storage', b'0', b'0', b'0', 'storage:list', 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (18, 36, 3, 1, '存储管理', 'Storage', 'system/storage/index', 34, 'qiniu', 'storage', b'0', b'0', b'0', 'storage:list', 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13');
@@ -574,6 +574,7 @@ INSERT INTO `system_menu` VALUES (128, 10, 0, 1, '演示:Markdown编辑器', 'Cu
INSERT INTO `system_menu` VALUES (129, 10, 0, 1, '演示:富文本编辑器', 'CuteRichTextEditorDemo', 'componentsDemo/CuteRichTextEditorDemo', 999, 'menu', 'cuteRichTextEditorDemo', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (129, 10, 0, 1, '演示:富文本编辑器', 'CuteRichTextEditorDemo', 'componentsDemo/CuteRichTextEditorDemo', 999, 'menu', 'cuteRichTextEditorDemo', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13');
INSERT INTO `system_menu` VALUES (130, 10, 0, 1, '演示:文件上传', 'CuteFileUploadDemo', 'componentsDemo/CuteFileUploadDemo', 999, 'menu', 'cuteFileUploadDemo', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (130, 10, 0, 1, '演示:文件上传', 'CuteFileUploadDemo', 'componentsDemo/CuteFileUploadDemo', 999, 'menu', 'cuteFileUploadDemo', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13');
INSERT INTO `system_menu` VALUES (132, 10, 0, 1, '演示:文件拖拽上传', 'CuteFileDragUploadDemo', 'componentsDemo/CuteFileDragUploadDemo', 999, 'menu', 'cuteFileDragUploadDemo', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13'); INSERT INTO `system_menu` VALUES (132, 10, 0, 1, '演示:文件拖拽上传', 'CuteFileDragUploadDemo', 'componentsDemo/CuteFileDragUploadDemo', 999, 'menu', 'cuteFileDragUploadDemo', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13');
INSERT INTO `system_menu` VALUES (150, 10, 0, 1, '演示:其他基础组件', 'CuteOtherDemo', 'componentsDemo/CuteOtherDemo', 999, 'menu', 'cuteOtherDemo', b'0', b'0', b'0', NULL, 'admin', 'admin', '2021-03-20 22:04:13', '2021-03-20 22:04:13');
-- ---------------------------- -- ----------------------------
-- Table structure for system_operation_log -- Table structure for system_operation_log
@@ -592,7 +593,7 @@ CREATE TABLE `system_operation_log` (
`exception_detail` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL, `exception_detail` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL,
`create_time` datetime NOT NULL, `create_time` datetime NOT NULL,
PRIMARY KEY (`id`) USING BTREE PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '审计日志' ROW_FORMAT = DYNAMIC; ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '审计日志' ROW_FORMAT = DYNAMIC;
-- ---------------------------- -- ----------------------------
-- Records of system_operation_log -- Records of system_operation_log
@@ -675,7 +676,7 @@ CREATE TABLE `system_quartz_log` (
`exception_detail` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '异常详情', `exception_detail` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '异常详情',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '定时任务日志' ROW_FORMAT = DYNAMIC; ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '定时任务日志' ROW_FORMAT = DYNAMIC;
-- ---------------------------- -- ----------------------------
-- Records of system_quartz_log -- Records of system_quartz_log
@@ -827,6 +828,7 @@ INSERT INTO `system_roles_menus` VALUES (130, 1);
INSERT INTO `system_roles_menus` VALUES (130, 2); INSERT INTO `system_roles_menus` VALUES (130, 2);
INSERT INTO `system_roles_menus` VALUES (132, 1); INSERT INTO `system_roles_menus` VALUES (132, 1);
INSERT INTO `system_roles_menus` VALUES (132, 2); INSERT INTO `system_roles_menus` VALUES (132, 2);
INSERT INTO `system_roles_menus` VALUES (150, 1);
-- ---------------------------- -- ----------------------------
-- Table structure for system_user -- Table structure for system_user