Skip to content

Commit 755d5e4

Browse files
committed
Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/ruoyi-vue-pro
2 parents d5e2f1d + 1f98c1f commit 755d5e4

34 files changed

Lines changed: 746 additions & 150 deletions

File tree

README.md

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -232,18 +232,19 @@
232232

233233
### 微信公众号
234234

235-
| | 功能 | 描述 |
236-
|-----|--------|-------------------------------|
237-
| 🚀 | 账号管理 | 配置接入的微信公众号,可支持多个公众号 |
238-
| 🚀 | 数据统计 | 统计公众号的用户增减、累计用户、消息概况、接口分析等数据 |
239-
| 🚀 | 粉丝管理 | 查看已关注、取关的粉丝列表,可对粉丝进行同步、打标签等操作 |
240-
| 🚀 | 消息管理 | 查看粉丝发送的消息列表,可主动回复粉丝消息 |
241-
| 🚀 | 自动回复 | 自动回复粉丝发送的消息,支持关注回复、消息回复、关键字回复 |
242-
| 🚀 | 标签管理 | 对公众号的标签进行创建、查询、修改、删除等操作 |
243-
| 🚀 | 菜单管理 | 自定义公众号的菜单,也可以从公众号同步菜单 |
244-
| 🚀 | 素材管理 | 管理公众号的图片、语音、视频等素材,支持在线播放语音、视频 |
245-
| 🚀 | 图文草稿箱 | 新增常用的图文素材到草稿箱,可发布到公众号 |
246-
| 🚀 | 图文发表记录 | 查看已发布成功的图文素材,支持删除操作 |
235+
| | 功能 | 描述 |
236+
|----|--------|-------------------------------|
237+
| 🚀 | 账号管理 | 配置接入的微信公众号,可支持多个公众号 |
238+
| 🚀 | 数据统计 | 统计公众号的用户增减、累计用户、消息概况、接口分析等数据 |
239+
| 🚀 | 粉丝管理 | 查看已关注、取关的粉丝列表,可对粉丝进行同步、打标签等操作 |
240+
| 🚀 | 消息管理 | 查看粉丝发送的消息列表,可主动回复粉丝消息 |
241+
| 🚀 | 模版消息 | 配置和发送模版消息,用于向粉丝推送通知类消息 |
242+
| 🚀 | 自动回复 | 自动回复粉丝发送的消息,支持关注回复、消息回复、关键字回复 |
243+
| 🚀 | 标签管理 | 对公众号的标签进行创建、查询、修改、删除等操作 |
244+
| 🚀 | 菜单管理 | 自定义公众号的菜单,也可以从公众号同步菜单 |
245+
| 🚀 | 素材管理 | 管理公众号的图片、语音、视频等素材,支持在线播放语音、视频 |
246+
| 🚀 | 图文草稿箱 | 新增常用的图文素材到草稿箱,可发布到公众号 |
247+
| 🚀 | 图文发表记录 | 查看已发布成功的图文素材,支持删除操作 |
247248

248249
### 商城系统
249250

yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/MyBatisUtils.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public static <T> Page<T> buildPage(PageParam pageParam) {
3838
public static <T> Page<T> buildPage(PageParam pageParam, Collection<SortingField> sortingFields) {
3939
// 页码 + 数量
4040
Page<T> page = new Page<>(pageParam.getPageNo(), pageParam.getPageSize());
41+
page.setOptimizeJoinOfCountSql(false); // 关联 issue:https://gitee.com/zhijiantianya/yudao-cloud/issues/ID2QLL
4142
// 排序字段
4243
if (CollUtil.isNotEmpty(sortingFields)) {
4344
for (SortingField sortingField : sortingFields) {

yudao-module-ai/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
</description>
2121
<properties>
2222
<spring-ai.version>1.1.0</spring-ai.version>
23-
<alibaba-ai.version>1.0.0.4</alibaba-ai.version>
23+
<alibaba-ai.version>1.1.0.0-M5</alibaba-ai.version>
2424
<tinyflow.version>1.2.6</tinyflow.version>
2525
</properties>
2626

yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -949,11 +949,13 @@ public void returnTask(Long userId, BpmnModel bpmnModel, Task currentTask, FlowE
949949
Set<String> needSimulateTaskDefinitionKeys = getNeedSimulateTaskDefinitionKeys(bpmnModel, currentTask, targetElement);
950950

951951
// 4. 执行驳回
952-
// 使用 moveExecutionsToSingleActivityId 替换 moveActivityIdsToSingleActivityId 原因:
953-
// 当多实例任务回退的时候有问题。相关 issue: https://github.com/flowable/flowable-engine/issues/3944
952+
// ① 使用 moveExecutionsToSingleActivityId 替换 moveActivityIdsToSingleActivityId。原因:当多实例任务回退的时候有问题。
953+
// 相关 issue: https://github.com/flowable/flowable-engine/issues/3944
954+
// ② flowable 7.2.0 版本后,继续使用 moveActivityIdsToSingleActivityId 方法。原因:flowable 7.2.0 版本修复了该问题。
955+
// 相关 issue:https://github.com/YunaiV/ruoyi-vue-pro/issues/1018
954956
runtimeService.createChangeActivityStateBuilder()
955957
.processInstanceId(currentTask.getProcessInstanceId())
956-
.moveExecutionsToSingleActivityId(runExecutionIds, reqVO.getTargetTaskDefinitionKey())
958+
.moveActivityIdsToSingleActivityId(runExecutionIds, reqVO.getTargetTaskDefinitionKey())
957959
// 设置需要预测的任务 ids 的流程变量,用于辅助预测
958960
.processVariable(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_TASK_IDS, needSimulateTaskDefinitionKeys)
959961
// 设置流程变量(local)节点退回标记, 用于退回到节点,不执行 BpmUserTaskAssignStartUserHandlerTypeEnum 策略,导致自动通过

yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/utils/FileTypeUtils.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,8 @@ public static void writeAttachment(HttpServletResponse response, String filename
9191
}
9292
// 针对 video 的特殊处理,解决视频地址在移动端播放的兼容性问题
9393
if (StrUtil.containsIgnoreCase(mineType, "video")) {
94-
response.setHeader("Content-Length", String.valueOf(content.length));
95-
response.setHeader("Content-Range", "bytes 0-" + (content.length - 1) + "/" + content.length);
9694
response.setHeader("Accept-Ranges", "bytes");
95+
response.setHeader("Content-Length", String.valueOf(content.length));
9796
}
9897
// 输出附件
9998
IoUtil.write(response.getOutputStream(), false, content);

yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/general/views/form.vue.vm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script lang="ts" setup>
22
import type { Rule } from 'ant-design-vue/es/form';
3-
import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}';
3+
import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
44

55
import { computed, ref } from 'vue';
66

@@ -11,7 +11,7 @@ import { Tinymce as RichTextarea } from '#/components/tinymce';
1111
import { ImageUpload, FileUpload } from "#/components/upload";
1212
import { message, Tabs, Form, Input, Textarea, Select, RadioGroup, Radio, CheckboxGroup, Checkbox, DatePicker, TreeSelect } from 'ant-design-vue';
1313
#if($table.templateType == 2)## 树表需要导入这些
14-
import { get${simpleClassName}List } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}';
14+
import { get${simpleClassName}List } from '#/api/${table.moduleName}/${table.businessName}';
1515
import { handleTree } from '@vben/utils'
1616
#end
1717
## 特殊:主子表专属逻辑
@@ -24,7 +24,7 @@ import { handleTree } from '@vben/utils'
2424
#end
2525

2626
import { $t } from '#/locales';
27-
import { get${simpleClassName}, create${simpleClassName}, update${simpleClassName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}';
27+
import { get${simpleClassName}, create${simpleClassName}, update${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}';
2828

2929
const emit = defineEmits(['success']);
3030

yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/general/views/index.vue.vm

Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
<script lang="ts" setup>
2-
import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}';
2+
import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
33

44
import { ref, h, reactive, onMounted, nextTick } from 'vue';
55

66
import { Page, useVbenModal } from '@vben/common-ui';
77
import { DICT_TYPE } from '@vben/constants';
88
import { getDictOptions } from '@vben/hooks';
99
import { useTableToolbar, VbenVxeTableToolbar } from '@vben/plugins/vxe-table';
10-
import { cloneDeep, downloadFileFromBlobPart, formatDateTime } from '@vben/utils';
11-
import { Button, message,Tabs,Pagination,Form,RangePicker,DatePicker,Select,Input } from 'ant-design-vue';
10+
import { cloneDeep, downloadFileFromBlobPart, formatDateTime, isEmpty } from '@vben/utils';
11+
import { Button, Card, message, Tabs, Pagination, Form, RangePicker, DatePicker, Select, Input } from 'ant-design-vue';
1212
import ${simpleClassName}Form from './modules/form.vue';
1313
import { Download, Plus, RefreshCw, Search, Trash2 } from '@vben/icons';
14-
import { ContentWrap } from '#/components/content-wrap';
14+
import { DictTag } from '#/components/dict-tag';
1515
import { VxeColumn, VxeTable } from '#/adapter/vxe-table';
16+
import { getRangePickerDefaultProps } from '#/utils/rangePickerProps';
1617

1718
## 特殊:主子表专属逻辑
1819
#if ( $table.templateType == 11 || $table.templateType == 12 )
@@ -25,13 +26,11 @@ import { VxeColumn, VxeTable } from '#/adapter/vxe-table';
2526

2627
import { $t } from '#/locales';
2728
#if (${table.templateType} == 2)## 树表接口
28-
import { handleTree,isEmpty } from '@vben/utils'
29-
import { get${simpleClassName}List, delete${simpleClassName}, export${simpleClassName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}';
29+
import { handleTree } from '@vben/utils'
30+
import { get${simpleClassName}List, delete${simpleClassName}, export${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}';
3031
#else## 标准表接口
31-
import { isEmpty } from '@vben/utils';
32-
import { get${simpleClassName}Page, delete${simpleClassName},#if ($deleteBatchEnable) delete${simpleClassName}List,#end export${simpleClassName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}';
32+
import { get${simpleClassName}Page, delete${simpleClassName},#if ($deleteBatchEnable) delete${simpleClassName}List,#end export${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}';
3333
#end
34-
import { downloadFileFromBlobPart } from '@vben/utils';
3534

3635
#if ($table.templateType == 12 || $table.templateType == 11) ## 内嵌和erp情况
3736
/** 子表的列表 */
@@ -211,7 +210,7 @@ onMounted(() => {
211210
<Page auto-content-height>
212211
<FormModal @success="getList" />
213212

214-
<ContentWrap v-if="!hiddenSearchBar">
213+
<Card v-if="!hiddenSearchBar" class="mb-4">
215214
<!-- 搜索工作栏 -->
216215
<Form
217216
:model="queryParams"
@@ -292,10 +291,10 @@ onMounted(() => {
292291
</Button>
293292
</Form.Item>
294293
</Form>
295-
</ContentWrap>
294+
</Card>
296295

297296
<!-- 列表 -->
298-
<ContentWrap title="${table.classComment}">
297+
<Card title="${table.classComment}">
299298
<template #extra>
300299
<VbenVxeTableToolbar
301300
ref="tableToolbarRef"
@@ -338,9 +337,9 @@ onMounted(() => {
338337
批量删除
339338
</Button>
340339
#end
341-
</TableToolbar>
340+
</VbenVxeTableToolbar>
342341
</template>
343-
<vxe-table
342+
<VxeTable
344343
ref="tableRef"
345344
:data="list"
346345
#if ( $table.templateType == 2 )
@@ -368,12 +367,12 @@ onMounted(() => {
368367
#end
369368
>
370369
#if ($table.templateType != 2 && $deleteBatchEnable)
371-
<vxe-column type="checkbox" width="40"></vxe-column>
370+
<VxeColumn type="checkbox" width="40" />
372371
#end
373372
## 特殊:主子表专属逻辑
374373
#if ( $table.templateType == 12 && $subTables && $subTables.size() > 0 )
375374
<!-- 子表的列表 -->
376-
<vxe-column type="expand" width="60">
375+
<VxeColumn type="expand" width="60">
377376
<template #content="{ row }">
378377
<!-- 子表的表单 -->
379378
<Tabs v-model:active-key="subTabsName" class="mx-8">
@@ -388,7 +387,7 @@ onMounted(() => {
388387
#end
389388
</Tabs>
390389
</template>
391-
</vxe-column>
390+
</VxeColumn>
392391
#end
393392
#foreach($column in $columns)
394393
#if ($column.listOperationResult)
@@ -397,31 +396,31 @@ onMounted(() => {
397396
#set ($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
398397
#set ($comment=$column.columnComment)
399398
#if ($column.javaType == "LocalDateTime")## 时间类型
400-
<vxe-column field="${javaField}" title="${comment}" align="center">
399+
<VxeColumn field="${javaField}" title="${comment}" align="center">
401400
<template #default="{row}">
402401
{{formatDateTime(row.${javaField})}}
403402
</template>
404-
</vxe-column>
403+
</VxeColumn>
405404
#elseif($column.dictType && "" != $column.dictType)## 数据字典
406-
<vxe-column field="${javaField}" title="${comment}" align="center">
405+
<VxeColumn field="${javaField}" title="${comment}" align="center">
407406
<template #default="{row}">
408407
<dict-tag :type="DICT_TYPE.$dictType.toUpperCase()" :value="row.${javaField}" />
409408
</template>
410-
</vxe-column>
409+
</VxeColumn>
411410
#elseif ($table.templateType == 2 && $javaField == $treeNameColumn.javaField)
412-
<vxe-column field="${javaField}" title="${comment}" align="center" tree-node/>
411+
<VxeColumn field="${javaField}" title="${comment}" align="center" tree-node/>
413412
#else
414-
<vxe-column field="${javaField}" title="${comment}" align="center" />
413+
<VxeColumn field="${javaField}" title="${comment}" align="center" />
415414
#end
416415
#end
417416
#end
418-
<vxe-column field="operation" title="操作" align="center">
417+
<VxeColumn field="operation" title="操作" align="center">
419418
<template #default="{row}">
420419
#if ( $table.templateType == 2 )
421420
<Button
422421
size="small"
423422
type="link"
424-
@click="handleAppend(row as any)"
423+
@click="handleAppend(row)"
425424
v-access:code="['${permissionPrefix}:create']"
426425
>
427426
新增下级
@@ -430,7 +429,7 @@ onMounted(() => {
430429
<Button
431430
size="small"
432431
type="link"
433-
@click="handleEdit(row as any)"
432+
@click="handleEdit(row)"
434433
v-access:code="['${permissionPrefix}:update']"
435434
>
436435
{{ $t('ui.actionTitle.edit') }}
@@ -443,14 +442,14 @@ onMounted(() => {
443442
#if ( $table.templateType == 2 )
444443
:disabled="!isEmpty(row?.children)"
445444
#end
446-
@click="handleDelete(row as any)"
445+
@click="handleDelete(row)"
447446
v-access:code="['${permissionPrefix}:delete']"
448447
>
449448
{{ $t('ui.actionTitle.delete') }}
450449
</Button>
451450
</template>
452-
</vxe-column>
453-
</vxe-table>
451+
</VxeColumn>
452+
</VxeTable>
454453
#if ( $table.templateType != 2 )
455454
<!-- 分页 -->
456455
<div class="mt-2 flex justify-end">
@@ -463,9 +462,9 @@ onMounted(() => {
463462
/>
464463
</div>
465464
#end
466-
</ContentWrap>
465+
</Card>
467466
#if ($table.templateType == 11) ## erp情况
468-
<ContentWrap>
467+
<Card>
469468
<!-- 子表的表单 -->
470469
<Tabs v-model:active-key="subTabsName">
471470
#foreach ($subTable in $subTables)
@@ -478,7 +477,7 @@ onMounted(() => {
478477
</Tabs.TabPane>
479478
#end
480479
</Tabs>
481-
</ContentWrap>
480+
</Card>
482481
#end
483482
</Page>
484483
</template>

yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/general/views/modules/form_sub_erp.vue.vm

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,20 @@
44
#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex))
55
<script lang="ts" setup>
66
import type { Rule } from 'ant-design-vue/es/form';
7-
import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}';
7+
import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${table.businessName}';
88

99
import { computed, ref } from 'vue';
1010

1111
import { useVbenModal } from '@vben/common-ui';
1212
import { DICT_TYPE } from '@vben/constants';
1313
import { getDictOptions } from '@vben/hooks';
14-
import { cloneDeep, formatDateTime } from '@vben/utils';
1514
import { Tinymce as RichTextarea } from '#/components/tinymce';
1615
import { ImageUpload, FileUpload } from "#/components/upload";
1716
import { message, Tabs, Form, Input, Textarea, Select, RadioGroup, Radio, CheckboxGroup, Checkbox, DatePicker, TreeSelect } from 'ant-design-vue';
1817

1918
import { $t } from '#/locales';
2019

21-
import { get${subSimpleClassName}, create${subSimpleClassName}, update${subSimpleClassName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}';
20+
import { get${subSimpleClassName}, create${subSimpleClassName}, update${subSimpleClassName} } from '#/api/${table.moduleName}/${table.businessName}';
2221

2322
const emit = defineEmits(['success']);
2423
const getTitle = computed(() => {

0 commit comments

Comments
 (0)