51 Commits

Author SHA1 Message Date
zhangdaiscott
166f7e1888 解决: token过期退出重新登录,online菜单还是提示token过期 2022-10-27 23:24:39 +08:00
zhangdaiscott
22e656daf3 解决: token过期退出重新登录,online菜单还是提示token过期 2022-10-27 16:02:23 +08:00
zhangdaiscott
cbe7ea4bb5 关闭Gitee的issue通道,使用中遇到问题或者BUG可以在 Github上提Issues,https://github.com/jeecgboot/jeecgboot-vue3/issues/new 2022-10-27 10:20:58 +08:00
zhangdaiscott
ae55451395 同步lock的依赖版本 2022-10-26 13:53:41 +08:00
zhangdaiscott
ecfe531b3d 非常重要——修复严重bug(访问online菜单报401 token失效)
https://gitee.com/jeecg/jeecgboot-vue3/issues/I5XQ33
https://github.com/jeecgboot/jeecg-boot/issues/4132
2022-10-26 12:39:30 +08:00
zhangdaiscott
6dfcfbcf2a 严重问题,临时方案:暂时还原到上个online lib版本,解决低代码开发下的菜单报401 token失效问题 2022-10-26 11:45:30 +08:00
zhangdaiscott
61d2ff490d 解决 标签页样式更多下拉显示样式错乱问题 2022-10-25 22:15:31 +08:00
zhangdaiscott
300387d380 修改注释 2022-10-25 22:04:11 +08:00
zhangdaiscott
bc9bb7304e 同步vben代码,在本地开发中引入的,以提高浏览器响应速度【目测没啥效果】 2022-10-25 22:04:01 +08:00
zhangdaiscott
6882eef000 1 固定vxe-table-plugin-antd版本,暂时不支持升级
2 更新lock版本号
2022-10-25 12:22:57 +08:00
zhangdaiscott
147055fba2 升级online-lib依赖版本,解决几个重大问题
1、支持关联记录和他表字段控件
2、支持三级联动控件
3、online报表查询支持字典下拉搜索控件
4、online报表查询,字符串类型默认支持模糊查询,不需要输入*
5、online代码生成,支持选择那种前端代码生成(vue3\vue2\vue3原生)
2022-10-25 11:57:31 +08:00
zhangdaiscott
8472f42126 补充注释 2022-10-25 11:12:36 +08:00
zhangdaiscott
335c82e08a 【重要性能问题】解决点击online功能测试,重新加载首页问题 issues/I5XBZF
src\settings\registerThirdComp.ts
src\components\jeecg\comment\useComment.ts
src\components\jeecg\comment\MyComment.vue
src\components\jeecg\comment\DataLogList.vue
src\components\jeecg\comment\CommentList.vue
2022-10-24 18:39:36 +08:00
zhangdaiscott
6bf259427c 解决RangePicker日期选择器异常 issues/I5X0J0 2022-10-21 18:12:23 +08:00
zhangdaiscott
f19a3025e1 解决 issues/I5VXTW 带参数的路由菜单点击右上角刷新报错 2022-10-20 20:49:50 +08:00
zhangdaiscott
fea9146b1a 用户添加按钮不做v-auth控制 2022-10-20 17:49:46 +08:00
zhangdaiscott
1dff1f0d93 博客地址更新 2022-10-19 15:01:13 +08:00
zhangdaiscott
1ae94cf036 技术支持 2022-10-19 14:13:55 +08:00
zhangdaiscott
c112e703b6 高级查询未实现,去掉按钮 2022-10-18 16:57:37 +08:00
zhangdaiscott
455b6672d2 更新文档 2022-10-18 14:38:03 +08:00
zhangdaiscott
616b4c01fb 【新版严重bug】修复Online表单开发自己录入的属性保存不了 issues/I5W9BW 2022-10-18 14:25:37 +08:00
zhangdaiscott
48499d1af7 【新版严重bug】修复Online表单开发自己录入的属性保存不了 issues/I5W9BW 2022-10-18 14:18:42 +08:00
zhangdaiscott
78230e1d0e 【新版严重bug】修复Online表单开发自己录入的属性保存不了 issues/I5W9BW 2022-10-18 14:14:30 +08:00
zhangdaiscott
1213e7e2c8 更新文档 2022-10-17 17:09:02 +08:00
zhangdaiscott
a91c7d39f7 3.4.3 版本发布,低代码功能专项升级 2022-10-17 14:07:16 +08:00
zhangdaiscott
30bfbfc308 gateway情况下,必须有斜杠结尾 2022-10-17 13:53:24 +08:00
zhangdaiscott
c669bee385 文档调整 2022-10-17 13:10:59 +08:00
zhangdaiscott
e7371ddb43 升级vxe-table和lock 2022-10-17 13:04:27 +08:00
zhangdaiscott
2e84090b7d 文档调整 2022-10-16 11:20:03 +08:00
zhangdaiscott
83791978ed 3.4.3 版本发布,低代码功能专项升级 2022-10-14 17:47:32 +08:00
zhangdaiscott
6adeb05d07 3.4.3 版本发布,低代码功能专项升级 2022-10-14 17:20:18 +08:00
zhangdaiscott
908cae7235 3.4.3 版本发布,低代码功能专项升级 2022-10-14 17:12:01 +08:00
zhangdaiscott
c6e48c1c43 表单评论区域功能问题修复 2022-10-14 13:47:24 +08:00
zhangdaiscott
052e63d875 pnpm install 问题解决 2022-10-13 14:34:34 +08:00
zhangdaiscott
6686287991 pnpm install 时出现 ERR_PNPM_INVALID_OVERRIDE_SELECTOR  Cannot parse the "//" selector in the overrides 2022-10-13 14:30:56 +08:00
zhangdaiscott
433a4bfab9 引入依赖错误 2022-10-13 14:28:26 +08:00
zhangdaiscott
23c3ec8294 引入依赖错误 2022-10-13 14:25:56 +08:00
zhangdaiscott
ae5787d1df 项目说明 2022-10-13 10:45:57 +08:00
zhangdaiscott
75029d0a2c 打包提示内存不足 2022-10-13 10:45:42 +08:00
zhangdaiscott
af1fd634f3 项目介绍调整 2022-10-13 09:29:02 +08:00
zhangdaiscott
2db96af605 解决 头部“密码修改”菜单,因代码中接口url少了一个斜杠导致请求错误 2022-10-12 17:54:13 +08:00
zhangdaiscott
d92041fa37 解决routerHelper.ts报错packageViews is not defined #165 2022-10-12 15:36:56 +08:00
zhangdaiscott
91bb10a861 单表示例,加入字段排序和默认排序例子 2022-10-10 11:23:54 +08:00
zhangdaiscott
5b806bc70d 修复【jeecg-boot/issues/I5N2PN】左侧动态菜单怎么做国际化 2022-10-09 17:16:24 +08:00
zhangdaiscott
e036565709 修复[jeecgboot-vue3/issues/I5UMML] chatRef无此引用 2022-10-09 15:17:08 +08:00
zhangdaiscott
d6130b685d online报表动态参数,不生效, 2022-09-29 17:11:27 +08:00
zhangdaiscott
013f6c2e81 Merge branch 'master' of https://github.com/jeecgboot/jeecgboot-vue3 2022-09-29 15:19:37 +08:00
JEECG
3ac00df8e5 Merge pull request #155 from WalkingMoonWell/master
修复上传附件(JUpload)在returnUrl为false多文件上传时附件数错误的问题
2022-09-29 15:19:01 +08:00
zhangdaiscott
c968aac7ed JVxeTypes.selectDictSearch sync问题 2022-09-29 15:11:45 +08:00
zhangdaiscott
8e33da231e vertical 布局时页面布局显示错乱问题解决 2022-09-29 15:06:50 +08:00
heqin
43db6d8b2e 修复上传附件(JUpload)在returnUrl为false多文件上传时附件数错误的问题 2022-09-21 19:38:52 +08:00
33 changed files with 11481 additions and 9422 deletions

View File

@@ -4,8 +4,8 @@ VOLUME /tmp
ENV LANG en_US.UTF-8
RUN echo "server { \
listen 80; \
location /jeecgboot { \
proxy_pass http://jeecg-boot-system:8080/jeecg-boot; \
location /jeecgboot/ { \
proxy_pass http://jeecg-boot-system:8080/jeecg-boot/; \
proxy_redirect off; \
proxy_set_header Host jeecg-boot-system; \
proxy_set_header X-Real-IP \$remote_addr; \
@@ -27,4 +27,4 @@ RUN echo "server { \
ADD dist/ /var/www/html/
EXPOSE 80
EXPOSE 443
EXPOSE 443

View File

@@ -1,13 +1,11 @@
JEECG BOOT 低代码开发平台Vue3前端
===============
当前最新版本: 3.4.2发布时间20220922
> 变更大版本号与后台同步 3.3.X后续单独发布版本会更新小版本号。
当前最新版本: 3.4.3发布时间2022-10-18
[![AUR](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://github.com/zhangdaiscott/jeecg-boot/blob/master/LICENSE)
[![](https://img.shields.io/badge/Author-北京国炬软件-orange.svg)](http://www.jeecg.com)
[![](https://img.shields.io/badge/Blog-官方博客-blue.svg)](https://my.oschina.net/jeecg)
[![](https://img.shields.io/badge/version-3.4.2-brightgreen.svg)](https://github.com/zhangdaiscott/jeecg-boot)
[![](https://img.shields.io/badge/Blog-官方博客-blue.svg)](https://jeecg.blog.csdn.net)
[![](https://img.shields.io/badge/version-3.4.3-brightgreen.svg)](https://github.com/zhangdaiscott/jeecg-boot)
[![GitHub stars](https://img.shields.io/github/stars/zhangdaiscott/jeecg-boot.svg?style=social&label=Stars)](https://github.com/zhangdaiscott/jeecg-boot)
[![GitHub forks](https://img.shields.io/github/forks/zhangdaiscott/jeecg-boot.svg?style=social&label=Fork)](https://github.com/zhangdaiscott/jeecg-boot)
@@ -19,12 +17,18 @@ JeecgBoot-Vue3采用 Vue3.0、Vite、 Ant-Design-Vue、TypeScript 等新技术
> 强大的代码生成器让前后端代码一键生成! JeecgBoot引领低代码开发模式(OnlineCoding-> 代码生成-> 手工MERGE) 帮助解决Java项目70%的重复工作,让开发更多关注业务。既能快速提高效率,节省成本,同时又不失灵活性
## 技术支持
关闭Gitee的issue通道使用中遇到问题或者BUG可以在 [Github上提Issues](https://github.com/jeecgboot/jeecgboot-vue3/issues/new)
官方支持: http://jeecg.com/doc/help
## 项目源码
| 仓库 |端源码Vue3版 | 前端源码Vue2版 | 后端源码 |
| 仓库 |端源码 |前端 Vue3版 | 前端 Vue2版 |
|-|-|-|-|
| Github | [jeecgboot-vue3](https://github.com/jeecgboot/jeecgboot-vue3) | [ant-design-vue-jeecg](https://github.com/jeecgboot/ant-design-vue-jeecg) | [jeecg-boot](https://github.com/jeecgboot/jeecg-boot) |
| 码云 | [jeecgboot-vue3](https://gitee.com/jeecg/jeecgboot-vue3) | [ant-design-vue-jeecg](https://gitee.com/jeecg/ant-design-vue-jeecg) | [jeecg-boot](https://gitee.com/jeecg/jeecg-boot) |
| Github | [jeecg-boot](https://github.com/jeecgboot/jeecg-boot) | [jeecgboot-vue3](https://github.com/jeecgboot/jeecgboot-vue3) | [ant-design-vue-jeecg](https://github.com/jeecgboot/ant-design-vue-jeecg) |
| 码云 | [jeecg-boot](https://gitee.com/jeecg/jeecg-boot) | [jeecgboot-vue3](https://gitee.com/jeecg/jeecgboot-vue3) | [ant-design-vue-jeecg](https://gitee.com/jeecg/ant-design-vue-jeecg) |
##### 项目说明
@@ -33,19 +37,14 @@ JeecgBoot-Vue3采用 Vue3.0、Vite、 Ant-Design-Vue、TypeScript 等新技术
|--------------------|------------------------|
| `jeecgboot-vue3` | Vue3版前端代码 |
| `jeecg-boot` | JAVA后台支持微服务 |
| `ant-design-vue-jeecg` |Vue2版前端代码 |
> 入门必看>>[切换Vue3路由](http://vue3.jeecg.com/2671576)
## 技术文档
- 开发文档:[http://vue3.jeecg.com](http://vue3.jeecg.com)
- 官方文档:[http://vue3.jeecg.com](http://vue3.jeecg.com)
- 官方网站: [http://www.jeecg.com](http://www.jeecg.com)
- 在线演示:[http://boot3.jeecg.com](http://boot3.jeecg.com)
- 快速入门:[入门视频](https://www.bilibili.com/video/BV1V34y187Y9 "入门视频") | [ 代码生成](http://vue3.jeecg.com/2677352)
- 快速入门:[常见问题](http://vue3.jeecg.com/2426559) | [入门视频](https://www.bilibili.com/video/BV1V34y187Y9 "入门视频") | [ 代码生成](http://vue3.jeecg.com/2677352)
- QQ交流群683903138
## 安装与使用
@@ -70,8 +69,15 @@ yarn install
```
- 配置后台接口地址
>[info] 说明:把`http://localhost:8080/jeecg-boot` 替换成自己地址即可,其他不用改。
配置文件:.env.development
```bash
.env.development
VITE_GLOB_API_URL=/jeecgboot
VITE_PROXY = [["/jeecgboot","http://localhost:8080/jeecg-boot"],["/upload",
"http://localhost:3300/upload"]]
VITE_GLOB_DOMAIN_URL=http://localhost:8080/jeecg-boot
```
- run
@@ -92,11 +98,13 @@ yarn build
- host设置
>注意: 需要把`127.0.0.1`替换成真实IP 比如`192.`开头,不然后端不通。
```bash
127.0.0.1 jeecg-boot-system
127.0.0.1 jeecg-boot-gateway
```
>注意: 需要把`127.0.0.1`替换成真实IP 比如`192.`开头,不然后端不通。
- 下载项目
@@ -104,8 +112,8 @@ yarn build
git clone https://github.com/jeecgboot/jeecgboot-vue3.git
cd jeecgboot-vue3
```
- 修改后台域名
.env.production

View File

@@ -5,9 +5,9 @@
import { createStyleImportPlugin } from 'vite-plugin-style-import';
export function configStyleImportPlugin(_isBuild: boolean) {
// if (!isBuild) {
// return [];
// }
if (!_isBuild) {
return [];
}
const styleImportPlugin = createStyleImportPlugin({
libs: [
{

3288
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,25 +1,25 @@
{
"name": "jeecgboot-vue3",
"version": "3.4.2",
"version": "3.4.3",
"author": {
"name": "jeecg",
"email": "jeecgos@163.com",
"url": "https://github.com/jeecgboot/jeecgboot-vue3"
},
"scripts": {
"bootstrap": "yarn install",
"bootstrap": "yarn install --registry https://registry.npm.taobao.org || npm install --ignore-scripts --registry https://registry.npm.taobao.org",
"serve": "npm run dev",
"dev": "vite",
"clean:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite",
"clean:lib": "rimraf node_modules",
"build": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=8192 vite build && esno ./build/script/postBuild.ts",
"build:test": "cross-env vite build --mode test && esno ./build/script/postBuild.ts",
"build:test": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode test && esno ./build/script/postBuild.ts",
"build:no-cache": "yarn clean:cache && npm run build",
"report": "cross-env REPORT=true npm run build",
"type:check": "vue-tsc --noEmit --skipLibCheck",
"preview": "npm run build && vite preview",
"preview:dist": "vite preview",
"log": "conventional-changelog -p angular -i CHANGELOG.md -s",
"clean:lib": "rimraf node_modules",
"lint:eslint": "eslint --cache --max-warnings 0 \"{src,mock}/**/*.{vue,ts,tsx}\" --fix",
"lint:prettier": "prettier --write \"src/**/*.{js,json,tsx,css,less,scss,vue,html,md}\"",
"lint:stylelint": "stylelint --cache --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
@@ -34,7 +34,7 @@
"gen:icon": "esno ./build/generate/icon/index.ts"
},
"dependencies": {
"@jeecg/online": "1.0.1",
"@jeecg/online": "3.4.3-GA",
"@iconify/iconify": "^2.2.1",
"@ant-design/colors": "^6.0.0",
"@ant-design/icons-vue": "^6.1.0",
@@ -87,7 +87,7 @@
"vue-types": "^4.1.1",
"vuedraggable": "^4.1.0",
"vxe-table": "4.1.0",
"vxe-table-plugin-antd": "^3.0.5",
"vxe-table-plugin-antd": "3.0.5",
"xe-utils": "^3.3.1",
"vue-json-pretty": "^2.0.6",
"xss": "^1.0.13"
@@ -178,9 +178,8 @@
"vue-tsc": "^0.33.9"
},
"resolutions": {
"//": "Used to install imagemin dependencies, because imagemin may not be installed in China. If it is abroad, you can delete it",
"bin-wrapper": "npm:bin-wrapper-china",
"rollup": "^2.56.3"
"rollup": "^2.72.0"
},
"repository": {
"type": "git",

View File

@@ -6,6 +6,9 @@ import { ref, onUnmounted, unref, nextTick, watch } from 'vue';
import { isProdMode } from '/@/utils/env';
import { error } from '/@/utils/log';
import { getDynamicProps, getValueType } from '/@/utils';
import { add } from "/@/components/Form/src/componentMap";
//集成online专用控件
import { OnlineSelectCascade, LinkTableCard, LinkTableSelect } from '@jeecg/online';
export declare type ValidateFields = (nameList?: NamePath[]) => Promise<Recordable>;
@@ -15,6 +18,11 @@ export function useForm(props?: Props): UseFormReturnType {
const formRef = ref<Nullable<FormActionType>>(null);
const loadedRef = ref<Nullable<boolean>>(false);
//集成online专用控件
add("OnlineSelectCascade", OnlineSelectCascade)
add("LinkTableCard", LinkTableCard)
add("LinkTableSelect", LinkTableSelect)
async function getForm() {
const form = unref(formRef);
if (!form) {

View File

@@ -10,7 +10,7 @@ export function useItemLabelWidth(schemaItemRef: Ref<FormSchema>, propsRef: Ref<
const { labelCol = {}, wrapperCol = {} } = schemaItem.itemProps || {};
const { labelWidth, disabledLabelWidth } = schemaItem;
const { labelWidth: globalLabelWidth, labelCol: globalLabelCol, wrapperCol: globWrapperCol } = unref(propsRef);
const { labelWidth: globalLabelWidth, labelCol: globalLabelCol, wrapperCol: globWrapperCol,layout } = unref(propsRef);
// update-begin--author:sunjianlei---date:20211104---for: 禁用全局 labelWidth不自动设置 textAlign --------
if (disabledLabelWidth) {
@@ -34,8 +34,11 @@ export function useItemLabelWidth(schemaItemRef: Ref<FormSchema>, propsRef: Ref<
}
return {
labelCol: { style: { width }, ...col },
wrapperCol: { style: { width: `calc(100% - ${width})` }, ...wrapCol },
labelCol: { style: { width: width ? width : '100%' }, ...col },
wrapperCol: {
style: { width: layout === 'vertical' ? '100%' : `calc(100% - ${width})` },
...wrapCol,
},
};
});
}

View File

@@ -197,6 +197,15 @@
});
const getBindValue = Object.assign({}, unref(props), unref(attrs));
//update-begin-author:taoyan date:2022-10-18 for: VUEN-2480【严重bug】online vue3测试的问题 8、online js增强样式问题
function refresh(){
if(coder){
coder.refresh();
}
}
//update-end-author:taoyan date:2022-10-18 for: VUEN-2480【严重bug】online vue3测试的问题 8、online js增强样式问题
return {
state,
textarea,
@@ -206,6 +215,7 @@
isFullScreen,
fullScreenIcon,
onToggleFullScreen,
refresh
};
},
});
@@ -279,5 +289,10 @@
height: 100%;
}
}
/** VUEN-2344【vue3】这个样式有问题是不是加个边框 */
.CodeMirror{
border: 1px solid #ddd;
}
}
</style>

View File

@@ -291,6 +291,8 @@
fileSize: item.size,
};
newFileList.push(fileJson);
} else {
return;
}
}
emitValue(newFileList);

View File

@@ -42,7 +42,8 @@ export const DictSearchInputCell = defineComponent({
// 筛选函数
const filterOption = computed(() => {
if (isAsync.value) {
return null;
//【jeecgboot-vue3/issues/I5QRT8】JVxeTypes.selectDictSearch sync问题
return ()=>true;
}
return (input, option) => option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0;
});

View File

@@ -17,7 +17,7 @@
</template>
<!-- update-begin-author:taoyan date:2022-7-18 for: modal弹窗 支持评论 slot -->
<a-row v-if="getProps.enableComment" class="jeecg-modal-wrapper">
<a-row class="jeecg-modal-wrapper">
<a-col :span="24-commentSpan" class="jeecg-modal-content">
<ModalWrapper
:useWrapper="getProps.useWrapper"
@@ -36,31 +36,14 @@
<slot></slot>
</ModalWrapper>
</a-col>
<a-col :span="commentSpan" class="jeecg-comment-outer">
<slot name="comment"></slot>
</a-col>
</a-row>
<ModalWrapper
v-else
:useWrapper="getProps.useWrapper"
:footerOffset="wrapperFooterOffset"
:fullScreen="fullScreenRef"
ref="modalWrapperRef"
:loading="getProps.loading"
:loading-tip="getProps.loadingTip"
:minHeight="getProps.minHeight"
:height="getWrapperHeight"
:visible="visibleRef"
:modalFooterHeight="footer !== undefined && !footer ? 0 : undefined"
v-bind="omit(getProps.wrapperProps, 'visible', 'height', 'modalFooterHeight')"
@ext-height="handleExtHeight"
@height-change="handleHeightChange">
<slot></slot>
</ModalWrapper>
<!-- update-end-author:taoyan date:2022-7-18 for: modal弹窗 支持评论 slot -->
<template #[item]="data" v-for="item in Object.keys(omit($slots, 'default'))">
<slot :name="item" v-bind="data || {}"></slot>
</template>
@@ -282,4 +265,4 @@
.jeecg-modal-content {
height: 100%;
}
</style>
</style>

View File

@@ -44,7 +44,7 @@
</template>
<template v-else>
<a-date-picker
placeholder="1选择开始时间"
placeholder="选择开始时间"
:show-time="true"
valueFormat="YYYY-MM-DD HH:mm:ss"
v-model:value="queryParam[item.field + '_begin']"
@@ -52,7 +52,7 @@
></a-date-picker>
<span class="group-query-strig" style="width: auto; padding: 0 4px">~</span>
<a-date-picker
placeholder="2选择结束时间"
placeholder="选择结束时间"
:show-time="true"
valueFormat="YYYY-MM-DD HH:mm:ss"
v-model:value="queryParam[item.field + '_end']"
@@ -131,16 +131,8 @@
<template #label>
<span :title="item.label" class="label-text">{{ item.label }}</span>
</template>
<JDictSelectTag v-if="item.config === '1'" v-model:value="queryParam[item.field]" :placeholder="'请选择' + item.label" :dict="getDictCode(item)">
</JDictSelectTag>
<!--TODO 新需要的组件-->
<!-- <j-online-search-select
v-else
:ref="item.field+'_search'"
v-model="queryParam[item.field]"
:placeholder=" '请选择'+item.label "
:sql="getSqlByDictCode(item)">
</j-online-search-select>-->
<JOnlineSearchSelect v-model:value="queryParam[item.field]" :placeholder="'请选择' + item.label" :sql="item.sql">
</JOnlineSearchSelect>
</a-form-item>
<a-form-item v-else-if="item.view === CompTypeEnum.SelUser" :labelCol="labelCol" :class="'jeecg-online-search'">
@@ -202,7 +194,10 @@
<template #label>
<span :title="item.label" class="label-text">{{ item.label }}</span>
</template>
<template v-if="single_mode === item.mode">
<template v-if="single_mode === item.mode && 'string'== item.view">
<j-input :placeholder="'请输入' + item.label" v-model:value="queryParam[item.field]"></j-input>
</template>
<template v-else-if="single_mode === item.mode">
<a-input :placeholder="'请输入' + item.label" v-model:value="queryParam[item.field]"></a-input>
</template>
<template v-else>
@@ -218,7 +213,7 @@
import { defineComponent, ref } from 'vue';
import { DateTypeEnum } from '/@/enums/DateTypeEnum.ts';
import { CompTypeEnum } from '/@/enums/CompTypeEnum.ts';
import { JDictSelectTag, JTreeSelect, JCategorySelect, JSelectUserByDept, JSelectDept, JPopup, JAreaLinkage } from '/@/components/Form';
import { JDictSelectTag, JTreeSelect, JCategorySelect, JSelectUserByDept, JSelectDept, JPopup, JAreaLinkage,JInput,JSearchSelect } from '/@/components/Form';
export default defineComponent({
name: 'JPopupOnlReport',
components: {
@@ -230,6 +225,7 @@
JSelectDept,
JPopup,
JAreaLinkage,
JInput,
},
props: {
formElRef: {

View File

@@ -512,6 +512,8 @@ export function usePopBiz(props, tableRef?) {
//查询条件加载后再请求数据
if (data) {
setDataSource(data);
//传递路由参数和动态参数,不生效,
loadData(1);
} else {
//没有传递data时查询数据
loadData(1);
@@ -531,6 +533,7 @@ export function usePopBiz(props, tableRef?) {
pagination.current = 1;
}
let params = getQueryParams(); //查询条件
console.log('params', params);
loading.value = true;
let url = `${configUrl.getData}${unref(cgRpConfigId)}`;
//缓存key
@@ -597,6 +600,11 @@ export function usePopBiz(props, tableRef?) {
}
queryParam.value = { ...queryTemp };
}
// 合并路由参数
if (props.routeQuery) {
queryParam.value = Object.assign(queryParam.value, props.routeQuery);
}
let dynamicTemp = {};
if (props.param) {
Object.keys(props.param).map((key) => {

View File

@@ -75,15 +75,15 @@
/**
* 评论列表
*/
import { defineComponent, ref, onMounted, watch, watchEffect } from 'vue';
import { defineComponent, ref, onMounted, watch, watchEffect ,inject } from 'vue';
import { propTypes } from '/@/utils/propTypes';
import dayjs from 'dayjs';
import 'dayjs/locale/zh.js';
import relativeTime from 'dayjs/plugin/relativeTime';
import customParseFormat from 'dayjs/plugin/customParseFormat';
dayjs.locale('zh');
dayjs.extend(relativeTime);
dayjs.extend(customParseFormat);
// import dayjs from 'dayjs';
// import relativeTime from 'dayjs/plugin/relativeTime';
// import customParseFormat from 'dayjs/plugin/customParseFormat';
// dayjs.locale('zh');
// dayjs.extend(relativeTime);
// dayjs.extend(customParseFormat);
import { MessageOutlined } from '@ant-design/icons-vue';
import { Comment, Tooltip } from 'ant-design-vue';
import { useUserStore } from '/@/store/modules/user';
@@ -113,6 +113,8 @@
const { createMessage } = useMessage();
const dataList = ref([]);
const { userInfo } = useUserStore();
const dayjs = inject('$dayjs')
/**
* 获取当前用户名称
*/
@@ -245,7 +247,8 @@
}
});
const { getHtml } = useEmojiHtml();
const storageEmojiIndex = inject('$globalEmojiIndex')
const { getHtml } = useEmojiHtml(storageEmojiIndex);
const bottomCommentRef = ref()
function handleClickItem(){
bottomCommentRef.value.changeActive()

View File

@@ -28,16 +28,15 @@
<script>
import { PlusOutlined, EditOutlined } from '@ant-design/icons-vue';
import { getModalHeight, getLogList } from './useComment'
import {ref, watchEffect} from 'vue'
import {inject, ref, watchEffect} from 'vue'
import { propTypes } from '/@/utils/propTypes';
import { Tooltip } from 'ant-design-vue';
import dayjs from 'dayjs';
import 'dayjs/locale/zh.js';
import relativeTime from 'dayjs/plugin/relativeTime';
import customParseFormat from 'dayjs/plugin/customParseFormat';
dayjs.locale('zh');
dayjs.extend(relativeTime);
dayjs.extend(customParseFormat);
// import dayjs from 'dayjs';
// import relativeTime from 'dayjs/plugin/relativeTime';
// import customParseFormat from 'dayjs/plugin/customParseFormat';
// dayjs.locale('zh');
// dayjs.extend(relativeTime);
// dayjs.extend(customParseFormat);
export default {
name: "DataLogList",
@@ -52,6 +51,7 @@
datetime: propTypes.number.def(1),
},
setup(props){
const dayjs = inject('$dayjs')
const winHeight = getModalHeight();
const height = ref(300);
height.value = winHeight - 46 - 57 -53 - 30;
@@ -174,4 +174,4 @@
}
}
</style>
</style>

View File

@@ -45,14 +45,13 @@
</template>
<script lang="ts">
import { ref, watch, computed } from 'vue';
import {ref, watch, computed, inject} from 'vue';
import { propTypes } from '/@/utils/propTypes';
import { UserAddOutlined, PaperClipOutlined, SmileOutlined } from '@ant-design/icons-vue';
import { Tooltip } from 'ant-design-vue';
import UserSelectModal from '/@/components/Form/src/jeecg/components/modal/UserSelectModal.vue';
import { useModal } from '/@/components/Modal';
import UploadChunk from './UploadChunk.vue';
import { Picker } from 'emoji-mart-vue-fast/src';
import 'emoji-mart-vue-fast/css/emoji-mart.css';
import { useEmojiHtml } from './useComment';
@@ -79,7 +78,6 @@
PaperClipOutlined,
UploadChunk,
SmileOutlined,
Picker,
},
props: {
inner: propTypes.bool.def(false),
@@ -221,8 +219,9 @@
e.stopPropagation();
visibleEmoji.value = !visibleEmoji.value;
}
const { emojiIndex, getHtml } = useEmojiHtml();
const emojiIndex = inject('$globalEmojiIndex')
const { getHtml } = useEmojiHtml(emojiIndex);
const commentHtml = computed(() => {
let temp = myComment.value;

View File

@@ -13,8 +13,6 @@ import txt from '/@/assets/svg/fileType/txt.svg';
import word from '/@/assets/svg/fileType/word.svg';
import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
import { createImgPreview } from '/@/components/Preview';
import {EmojiIndex} from "emoji-mart-vue-fast/src";
import data from "emoji-mart-vue-fast/data/apple.json";
enum Api {
list = '/sys/comment/listByForm',
@@ -365,16 +363,9 @@ export function useFileList() {
/**
* 用于emoji渲染
*/
export function useEmojiHtml(){
export function useEmojiHtml(globalEmojiIndex){
const COLONS_REGEX = new RegExp('([^:]+)?(:[a-zA-Z0-9-_+]+:(:skin-tone-[2-6]:)?)','g');
let emojisToShowFilter = function() {
return true;
}
let emojiIndex = new EmojiIndex(data, {
emojisToShowFilter,
exclude:['recent','people','nature','foods','activity','places','objects','symbols','flags']
});
function getHtml(text) {
if(!text){
return ''
@@ -384,7 +375,7 @@ export function useEmojiHtml(){
if (endsWith(before, 'alt="') || endsWith(before, 'data-text="')) {
return match
}
let emoji = emojiIndex.findEmoji(p2)
let emoji = globalEmojiIndex.findEmoji(p2)
if (!emoji) {
return match
}
@@ -403,7 +394,7 @@ export function useEmojiHtml(){
}
return {
emojiIndex,
globalEmojiIndex,
getHtml
}
}

View File

@@ -17,7 +17,7 @@ export enum CompTypeEnum {
//分类字典树
CatTree = 'cat_tree',
//下拉搜索
SelSearch = 'sel_search',
SelSearch = 'search',
//用户现在框
SelUser = 'sel_user',
//复选框

View File

@@ -47,8 +47,15 @@ export const useRedo = (_router?: Router) => {
return;
}
if (name && Object.keys(params).length > 0) {
params['_redirect_type'] = 'name';
params['path'] = String(name);
//update-begin-author:taoyan date:2022-10-19 for: VUEN-2356 【vue3】online表单、表单设计器 功能测试 右键刷新时 404
if(isDynamicRoute(params, name)){
params['_redirect_type'] = 'path';
params['path'] = fullPath;
}else{
params['_redirect_type'] = 'name';
params['path'] = String(name);
}
//update-end-author:taoyan date:2022-10-19 for: VUEN-2356 【vue3】online表单、表单设计器 功能测试 右键刷新时 404
} else {
params['_redirect_type'] = 'path';
params['path'] = fullPath;
@@ -58,3 +65,21 @@ export const useRedo = (_router?: Router) => {
}
return redo;
};
/**
* 判断是不是动态路由的跳转
* @param params
* @param name
*/
function isDynamicRoute(params, name){
let arr = Object.keys(params);
let flag = false;
for(let i=0;i<arr.length;i++){
let key = '@'+arr[i];
if((name as string).indexOf(key)>0){
flag = true;
break;
}
}
return flag;
}

View File

@@ -57,7 +57,6 @@
}
return count;
});
const chatRef = ref();
const [registerMessageModal, { openModal: openMessageModal }] = useModal();
function clickBadge(){
@@ -96,7 +95,6 @@
//update-begin-author:taoyan date:2022-8-30 for: 消息数量改变触发chat组件事件
let msgCount = anntMsgTotal+sysMsgTotal;
//update-begin-author:wangshuai date:2022-09-02 for: 消息未读数为0也需要传递因为聊天需要计算总数
chatRef.value.updateMessageCount(msgCount);
messageCount.value = msgCount
//update-end-author:wangshuai date:2022-09-02 for: 消息未读数为0也需要传递因为聊天需要计算总数
//update-end-author:taoyan date:2022-8-30 for: 消息数量改变触发chat组件事件
@@ -164,12 +162,6 @@
}
}
/**
* 获取消息未读数
*/
function getSystemUnreadNum() {
chatRef.value.updateMessageCount(messageCount.value);
}
return {
prefixCls,
@@ -184,8 +176,6 @@
popoverVisible,
registerDetail,
dynamicNoticeProps,
chatRef,
getSystemUnreadNum
};
},
});

View File

@@ -57,7 +57,7 @@
setModalProps({ confirmLoading: true });
//提交表单
let params = Object.assign({ username: unref(username) }, values);
defHttp.put({ url: 'sys/user/updatePassword', params }, { isTransformResponse: false }).then((res) => {
defHttp.put({ url: '/sys/user/updatePassword', params }, { isTransformResponse: false }).then((res) => {
if (res.success) {
$message.createMessage.success(res.message);
//关闭弹窗

View File

@@ -201,3 +201,28 @@ html[data-theme='light'] {
}
}
}
.ant-tabs-dropdown-menu {
&-title-content {
display: flex;
align-items: center;
.@{prefix-cls} {
&-content__info {
width: auto;
margin-left: 0;
line-height: 28px;
}
}
}
&-item-remove {
margin-left: auto;
}
}
.multiple-tabs__dropdown {
.ant-dropdown-content {
width: 172px;
}
}

View File

@@ -8,6 +8,7 @@ import { createRouter, createWebHashHistory } from 'vue-router';
import { getTenantId, getToken } from '/@/utils/auth';
import { URL_HASH_TAB } from '/@/utils';
import { packageViews } from '/@/utils/monorepo/dynamicRouter';
import {useI18n} from "/@/hooks/web/useI18n";
export type LayoutMapKey = 'LAYOUT';
const IFRAME = () => import('/@/views/sys/iframe/FrameBlank.vue');
@@ -31,6 +32,17 @@ function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) {
}
if (!routes) return;
routes.forEach((item) => {
//【jeecg-boot/issues/I5N2PN】左侧动态菜单怎么做国际化处理 2022-10-09
//菜单支持国际化翻译
if (item?.meta?.title) {
const { t } = useI18n();
if(item.meta.title.includes('t(\'') && t){
item.meta.title = eval(item.meta.title);
//console.log('译后: ',item.meta.title)
}
}
// update-begin--author:sunjianlei---date:20210918---for:适配旧版路由选项 --------
// @ts-ignore 适配隐藏路由
if (item?.hidden) {

View File

@@ -2,9 +2,38 @@ import type { App } from 'vue';
import { registerJVxeTable } from '/@/components/jeecg/JVxeTable';
import { registerJVxeCustom } from '/@/components/JVxeCustom';
// 注册全局聊天表情包
import { Picker } from 'emoji-mart-vue-fast/src';
import { EmojiIndex } from "emoji-mart-vue-fast/src";
import data from "emoji-mart-vue-fast/data/apple.json";
// 注册全局dayjs
import dayjs from 'dayjs';
import relativeTime from 'dayjs/plugin/relativeTime';
import customParseFormat from 'dayjs/plugin/customParseFormat';
export async function registerThirdComp(app: App) {
// 注册 JVxeTable 组件
registerJVxeTable(app);
// 注册 JVxeTable 自定义组件
await registerJVxeCustom();
//---------------------------------------------------------------------
// 注册全局聊天表情包
app.component('Picker', Picker);
let myEmojiIndex = new EmojiIndex(data, {
function() {
return true;
},
exclude:['recent','people','nature','foods','activity','places','objects','symbols','flags']
});
app.config.globalProperties.$globalEmojiIndex = myEmojiIndex
app.provide('$globalEmojiIndex', myEmojiIndex)
//---------------------------------------------------------------------
// 注册全局dayjs
dayjs.locale('zh');
dayjs.extend(relativeTime);
dayjs.extend(customParseFormat);
app.config.globalProperties.$dayjs = dayjs
app.provide('$dayjs', dayjs)
//---------------------------------------------------------------------
}

View File

@@ -56,6 +56,12 @@ function initPersistentMemory() {
export class Persistent {
static getLocal<T>(key: LocalKeys) {
//update-begin---author:scott ---date:2022-10-27 fortoken过期退出重新登录online菜单还是提示token过期----------
const globalCache = ls.get(APP_LOCAL_CACHE_KEY);
if(globalCache){
localMemory.setCache(globalCache);
}
//update-end---author:scott ---date::2022-10-27 fortoken过期退出重新登录online菜单还是提示token过期----------
return localMemory.get(key)?.value as Nullable<T>;
}

View File

@@ -92,6 +92,9 @@
field: 'fieldTime',
component: 'RangePicker',
label: '时间字段',
componentProps: {
valueType: 'Date',
},
colProps: {
span: 8,
},

View File

@@ -33,6 +33,8 @@
baseColProps: {
span: 6,
},
labelWidth: 200,
layout: 'vertical',
schemas: schemas,
showActionButtonGroup: false,
});
@@ -41,6 +43,8 @@
baseColProps: {
span: 6,
},
labelWidth: 200,
layout: 'vertical',
schemas: taskSchemas,
showActionButtonGroup: false,
});

View File

@@ -1,6 +1,6 @@
import { BasicColumn } from '/@/components/Table';
import dayjs from 'dayjs';
import lodash from 'lodash';
import _get from 'lodash.get';
import { h } from 'vue';
import { Tag } from 'ant-design-vue';
@@ -18,7 +18,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'request.method',
width: 20,
customRender({ record, column }) {
let value = lodash.get(record, column.dataIndex!);
let value = _get(record, column.dataIndex!);
let color = '';
if (value === 'GET') {
color = '#87d068';
@@ -40,7 +40,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'request.uri',
width: 200,
customRender({ record, column }) {
return lodash.get(record, column.dataIndex!);
return _get(record, column.dataIndex!);
},
},
{
@@ -48,7 +48,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'response.status',
width: 50,
customRender({ record, column }) {
let value = lodash.get(record, column.dataIndex!);
let value = _get(record, column.dataIndex!);
let color = '';
if (value < 200) {
color = 'pink';
@@ -69,7 +69,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'timeTaken',
width: 50,
customRender({ record, column }) {
let value = lodash.get(record, column.dataIndex!);
let value = _get(record, column.dataIndex!);
let color = 'red';
if (value < 500) {
color = 'green';

View File

@@ -8,6 +8,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'name',
width: 70,
align: 'left',
sorter: true
},
{
title: '关键词',
@@ -23,6 +24,7 @@ export const columns: BasicColumn[] = [
title: '工资',
dataIndex: 'salaryMoney',
width: 40,
sorter: true
},
{
title: '奖金',
@@ -32,6 +34,7 @@ export const columns: BasicColumn[] = [
{
title: '性别',
dataIndex: 'sex',
sorter: true,
customRender: ({ record }) => {
return render.renderDict(record.sex, 'sex');
// let v = record.sex ? (record.sex == '1' ? '男' : '女') : '';

View File

@@ -53,7 +53,6 @@
<a-button preIcon="ant-design:import-outlined" type="primary">导入</a-button>
</a-upload>
<a-button preIcon="ant-design:export-outlined" type="primary" @click="handleExportXls('单表示例', getExportUrl,exportParams)">导出</a-button>
<a-button preIcon="ant-design:filter" type="primary" @click="">高级查询?</a-button>
<a-button preIcon="ant-design:plus-outlined" type="primary" @click="openTab">打开Tab页</a-button>
<a-button preIcon="ant-design:retweet-outlined" type="primary" @click="customSearch = !customSearch">{{
customSearch ? '表单配置查询' : '自定义查询'
@@ -119,6 +118,11 @@
style: { textAlign: 'left' },
},
},
//自定义默认排序
defSort: {
column: 'sex,salaryMoney',
order: 'desc',
},
striped: true,
useSearchForm: true,
showTableSetting: true,

View File

@@ -4,13 +4,12 @@
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" preIcon="ant-design:plus-outlined" v-auth="'system:user:add'" @click="handleCreate"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleCreate"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-button type="primary" @click="handleSyncUser" preIcon="ant-design:sync-outlined"> 同步流程</a-button>
<a-button type="primary" @click="openModal(true, {})" preIcon="ant-design:hdd-outlined"> 回收站</a-button>
<JThirdAppButton biz-type="user" :selected-row-keys="selectedRowKeys" syncToApp syncToLocal @sync-finally="onSyncFinally" />
<a-button type="primary" preIcon="ant-design:filter-outlined"> 高级查询?</a-button>
<a-dropdown v-if="selectedRowKeys.length > 0">
<template #overlay>
<a-menu>

View File

@@ -107,7 +107,6 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
'ant-design-vue/es/locale/zh_CN',
'ant-design-vue/es/locale/en_US',
],
exclude: ['vue-demi'],
},
};
};

17238
yarn.lock

File diff suppressed because it is too large Load Diff