Compare commits
51 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
166f7e1888 | ||
![]() |
22e656daf3 | ||
![]() |
cbe7ea4bb5 | ||
![]() |
ae55451395 | ||
![]() |
ecfe531b3d | ||
![]() |
6dfcfbcf2a | ||
![]() |
61d2ff490d | ||
![]() |
300387d380 | ||
![]() |
bc9bb7304e | ||
![]() |
6882eef000 | ||
![]() |
147055fba2 | ||
![]() |
8472f42126 | ||
![]() |
335c82e08a | ||
![]() |
6bf259427c | ||
![]() |
f19a3025e1 | ||
![]() |
fea9146b1a | ||
![]() |
1dff1f0d93 | ||
![]() |
1ae94cf036 | ||
![]() |
c112e703b6 | ||
![]() |
455b6672d2 | ||
![]() |
616b4c01fb | ||
![]() |
48499d1af7 | ||
![]() |
78230e1d0e | ||
![]() |
1213e7e2c8 | ||
![]() |
a91c7d39f7 | ||
![]() |
30bfbfc308 | ||
![]() |
c669bee385 | ||
![]() |
e7371ddb43 | ||
![]() |
2e84090b7d | ||
![]() |
83791978ed | ||
![]() |
6adeb05d07 | ||
![]() |
908cae7235 | ||
![]() |
c6e48c1c43 | ||
![]() |
052e63d875 | ||
![]() |
6686287991 | ||
![]() |
433a4bfab9 | ||
![]() |
23c3ec8294 | ||
![]() |
ae5787d1df | ||
![]() |
75029d0a2c | ||
![]() |
af1fd634f3 | ||
![]() |
2db96af605 | ||
![]() |
d92041fa37 | ||
![]() |
91bb10a861 | ||
![]() |
5b806bc70d | ||
![]() |
e036565709 | ||
![]() |
d6130b685d | ||
![]() |
013f6c2e81 | ||
![]() |
3ac00df8e5 | ||
![]() |
c968aac7ed | ||
![]() |
8e33da231e | ||
![]() |
43db6d8b2e |
@@ -4,8 +4,8 @@ VOLUME /tmp
|
|||||||
ENV LANG en_US.UTF-8
|
ENV LANG en_US.UTF-8
|
||||||
RUN echo "server { \
|
RUN echo "server { \
|
||||||
listen 80; \
|
listen 80; \
|
||||||
location /jeecgboot { \
|
location /jeecgboot/ { \
|
||||||
proxy_pass http://jeecg-boot-system:8080/jeecg-boot; \
|
proxy_pass http://jeecg-boot-system:8080/jeecg-boot/; \
|
||||||
proxy_redirect off; \
|
proxy_redirect off; \
|
||||||
proxy_set_header Host jeecg-boot-system; \
|
proxy_set_header Host jeecg-boot-system; \
|
||||||
proxy_set_header X-Real-IP \$remote_addr; \
|
proxy_set_header X-Real-IP \$remote_addr; \
|
||||||
|
44
README.md
44
README.md
@@ -1,13 +1,11 @@
|
|||||||
JEECG BOOT 低代码开发平台(Vue3前端)
|
JEECG BOOT 低代码开发平台(Vue3前端)
|
||||||
===============
|
===============
|
||||||
当前最新版本: 3.4.2(发布时间:20220922)
|
当前最新版本: 3.4.3(发布时间:2022-10-18)
|
||||||
> 变更大版本号与后台同步 3.3.X,后续单独发布版本会更新小版本号。
|
|
||||||
|
|
||||||
|
|
||||||
[](https://github.com/zhangdaiscott/jeecg-boot/blob/master/LICENSE)
|
[](https://github.com/zhangdaiscott/jeecg-boot/blob/master/LICENSE)
|
||||||
[](http://www.jeecg.com)
|
[](http://www.jeecg.com)
|
||||||
[](https://my.oschina.net/jeecg)
|
[](https://jeecg.blog.csdn.net)
|
||||||
[](https://github.com/zhangdaiscott/jeecg-boot)
|
[](https://github.com/zhangdaiscott/jeecg-boot)
|
||||||
[](https://github.com/zhangdaiscott/jeecg-boot)
|
[](https://github.com/zhangdaiscott/jeecg-boot)
|
||||||
[](https://github.com/zhangdaiscott/jeecg-boot)
|
[](https://github.com/zhangdaiscott/jeecg-boot)
|
||||||
|
|
||||||
@@ -19,12 +17,18 @@ JeecgBoot-Vue3采用 Vue3.0、Vite、 Ant-Design-Vue、TypeScript 等新技术
|
|||||||
|
|
||||||
> 强大的代码生成器让前后端代码一键生成! JeecgBoot引领低代码开发模式(OnlineCoding-> 代码生成-> 手工MERGE), 帮助解决Java项目70%的重复工作,让开发更多关注业务。既能快速提高效率,节省成本,同时又不失灵活性
|
> 强大的代码生成器让前后端代码一键生成! 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) |
|
| 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) |
|
||||||
| 码云 | [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) |
|
| 码云 | [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版前端代码 |
|
| `jeecgboot-vue3` | Vue3版前端代码 |
|
||||||
| `jeecg-boot` | JAVA后台(支持微服务) |
|
| `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://www.jeecg.com](http://www.jeecg.com)
|
||||||
- 在线演示:[http://boot3.jeecg.com](http://boot3.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
|
- QQ交流群:683903138
|
||||||
|
|
||||||
## 安装与使用
|
## 安装与使用
|
||||||
@@ -70,8 +69,15 @@ yarn install
|
|||||||
```
|
```
|
||||||
|
|
||||||
- 配置后台接口地址
|
- 配置后台接口地址
|
||||||
|
>[info] 说明:把`http://localhost:8080/jeecg-boot` 替换成自己地址即可,其他不用改。
|
||||||
|
|
||||||
|
配置文件:.env.development
|
||||||
|
|
||||||
```bash
|
```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
|
- run
|
||||||
@@ -92,11 +98,13 @@ yarn build
|
|||||||
|
|
||||||
- host设置
|
- host设置
|
||||||
|
|
||||||
|
>注意: 需要把`127.0.0.1`替换成真实IP 比如`192.`开头,不然后端不通。
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
127.0.0.1 jeecg-boot-system
|
127.0.0.1 jeecg-boot-system
|
||||||
127.0.0.1 jeecg-boot-gateway
|
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
|
git clone https://github.com/jeecgboot/jeecgboot-vue3.git
|
||||||
|
|
||||||
cd jeecgboot-vue3
|
cd jeecgboot-vue3
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
- 修改后台域名
|
- 修改后台域名
|
||||||
.env.production
|
.env.production
|
||||||
|
|
||||||
|
@@ -5,9 +5,9 @@
|
|||||||
import { createStyleImportPlugin } from 'vite-plugin-style-import';
|
import { createStyleImportPlugin } from 'vite-plugin-style-import';
|
||||||
|
|
||||||
export function configStyleImportPlugin(_isBuild: boolean) {
|
export function configStyleImportPlugin(_isBuild: boolean) {
|
||||||
// if (!isBuild) {
|
if (!_isBuild) {
|
||||||
// return [];
|
return [];
|
||||||
// }
|
}
|
||||||
const styleImportPlugin = createStyleImportPlugin({
|
const styleImportPlugin = createStyleImportPlugin({
|
||||||
libs: [
|
libs: [
|
||||||
{
|
{
|
||||||
|
3288
package-lock.json
generated
3288
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
15
package.json
15
package.json
@@ -1,25 +1,25 @@
|
|||||||
{
|
{
|
||||||
"name": "jeecgboot-vue3",
|
"name": "jeecgboot-vue3",
|
||||||
"version": "3.4.2",
|
"version": "3.4.3",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "jeecg",
|
"name": "jeecg",
|
||||||
"email": "jeecgos@163.com",
|
"email": "jeecgos@163.com",
|
||||||
"url": "https://github.com/jeecgboot/jeecgboot-vue3"
|
"url": "https://github.com/jeecgboot/jeecgboot-vue3"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"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",
|
"serve": "npm run dev",
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"clean:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.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": "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",
|
"build:no-cache": "yarn clean:cache && npm run build",
|
||||||
"report": "cross-env REPORT=true npm run build",
|
"report": "cross-env REPORT=true npm run build",
|
||||||
"type:check": "vue-tsc --noEmit --skipLibCheck",
|
"type:check": "vue-tsc --noEmit --skipLibCheck",
|
||||||
"preview": "npm run build && vite preview",
|
"preview": "npm run build && vite preview",
|
||||||
"preview:dist": "vite preview",
|
"preview:dist": "vite preview",
|
||||||
"log": "conventional-changelog -p angular -i CHANGELOG.md -s",
|
"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: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: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/",
|
"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"
|
"gen:icon": "esno ./build/generate/icon/index.ts"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jeecg/online": "1.0.1",
|
"@jeecg/online": "3.4.3-GA",
|
||||||
"@iconify/iconify": "^2.2.1",
|
"@iconify/iconify": "^2.2.1",
|
||||||
"@ant-design/colors": "^6.0.0",
|
"@ant-design/colors": "^6.0.0",
|
||||||
"@ant-design/icons-vue": "^6.1.0",
|
"@ant-design/icons-vue": "^6.1.0",
|
||||||
@@ -87,7 +87,7 @@
|
|||||||
"vue-types": "^4.1.1",
|
"vue-types": "^4.1.1",
|
||||||
"vuedraggable": "^4.1.0",
|
"vuedraggable": "^4.1.0",
|
||||||
"vxe-table": "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",
|
"xe-utils": "^3.3.1",
|
||||||
"vue-json-pretty": "^2.0.6",
|
"vue-json-pretty": "^2.0.6",
|
||||||
"xss": "^1.0.13"
|
"xss": "^1.0.13"
|
||||||
@@ -178,9 +178,8 @@
|
|||||||
"vue-tsc": "^0.33.9"
|
"vue-tsc": "^0.33.9"
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"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",
|
"bin-wrapper": "npm:bin-wrapper-china",
|
||||||
"rollup": "^2.56.3"
|
"rollup": "^2.72.0"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@@ -6,6 +6,9 @@ import { ref, onUnmounted, unref, nextTick, watch } from 'vue';
|
|||||||
import { isProdMode } from '/@/utils/env';
|
import { isProdMode } from '/@/utils/env';
|
||||||
import { error } from '/@/utils/log';
|
import { error } from '/@/utils/log';
|
||||||
import { getDynamicProps, getValueType } from '/@/utils';
|
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>;
|
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 formRef = ref<Nullable<FormActionType>>(null);
|
||||||
const loadedRef = ref<Nullable<boolean>>(false);
|
const loadedRef = ref<Nullable<boolean>>(false);
|
||||||
|
|
||||||
|
//集成online专用控件
|
||||||
|
add("OnlineSelectCascade", OnlineSelectCascade)
|
||||||
|
add("LinkTableCard", LinkTableCard)
|
||||||
|
add("LinkTableSelect", LinkTableSelect)
|
||||||
|
|
||||||
async function getForm() {
|
async function getForm() {
|
||||||
const form = unref(formRef);
|
const form = unref(formRef);
|
||||||
if (!form) {
|
if (!form) {
|
||||||
|
@@ -10,7 +10,7 @@ export function useItemLabelWidth(schemaItemRef: Ref<FormSchema>, propsRef: Ref<
|
|||||||
const { labelCol = {}, wrapperCol = {} } = schemaItem.itemProps || {};
|
const { labelCol = {}, wrapperCol = {} } = schemaItem.itemProps || {};
|
||||||
const { labelWidth, disabledLabelWidth } = schemaItem;
|
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 --------
|
// update-begin--author:sunjianlei---date:20211104---for: 禁用全局 labelWidth,不自动设置 textAlign --------
|
||||||
if (disabledLabelWidth) {
|
if (disabledLabelWidth) {
|
||||||
@@ -34,8 +34,11 @@ export function useItemLabelWidth(schemaItemRef: Ref<FormSchema>, propsRef: Ref<
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
labelCol: { style: { width }, ...col },
|
labelCol: { style: { width: width ? width : '100%' }, ...col },
|
||||||
wrapperCol: { style: { width: `calc(100% - ${width})` }, ...wrapCol },
|
wrapperCol: {
|
||||||
|
style: { width: layout === 'vertical' ? '100%' : `calc(100% - ${width})` },
|
||||||
|
...wrapCol,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -197,6 +197,15 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
const getBindValue = Object.assign({}, unref(props), unref(attrs));
|
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 {
|
return {
|
||||||
state,
|
state,
|
||||||
textarea,
|
textarea,
|
||||||
@@ -206,6 +215,7 @@
|
|||||||
isFullScreen,
|
isFullScreen,
|
||||||
fullScreenIcon,
|
fullScreenIcon,
|
||||||
onToggleFullScreen,
|
onToggleFullScreen,
|
||||||
|
refresh
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@@ -279,5 +289,10 @@
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** VUEN-2344【vue3】这个样式有问题,是不是加个边框 */
|
||||||
|
.CodeMirror{
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@@ -291,6 +291,8 @@
|
|||||||
fileSize: item.size,
|
fileSize: item.size,
|
||||||
};
|
};
|
||||||
newFileList.push(fileJson);
|
newFileList.push(fileJson);
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
emitValue(newFileList);
|
emitValue(newFileList);
|
||||||
|
@@ -42,7 +42,8 @@ export const DictSearchInputCell = defineComponent({
|
|||||||
// 筛选函数
|
// 筛选函数
|
||||||
const filterOption = computed(() => {
|
const filterOption = computed(() => {
|
||||||
if (isAsync.value) {
|
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;
|
return (input, option) => option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0;
|
||||||
});
|
});
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<!-- update-begin-author:taoyan date:2022-7-18 for: modal弹窗 支持评论 slot -->
|
<!-- 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">
|
<a-col :span="24-commentSpan" class="jeecg-modal-content">
|
||||||
<ModalWrapper
|
<ModalWrapper
|
||||||
:useWrapper="getProps.useWrapper"
|
:useWrapper="getProps.useWrapper"
|
||||||
@@ -42,23 +42,6 @@
|
|||||||
</a-col>
|
</a-col>
|
||||||
|
|
||||||
</a-row>
|
</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 -->
|
<!-- update-end-author:taoyan date:2022-7-18 for: modal弹窗 支持评论 slot -->
|
||||||
|
|
||||||
<template #[item]="data" v-for="item in Object.keys(omit($slots, 'default'))">
|
<template #[item]="data" v-for="item in Object.keys(omit($slots, 'default'))">
|
||||||
|
@@ -44,7 +44,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<a-date-picker
|
<a-date-picker
|
||||||
placeholder="1选择开始时间"
|
placeholder="选择开始时间"
|
||||||
:show-time="true"
|
:show-time="true"
|
||||||
valueFormat="YYYY-MM-DD HH:mm:ss"
|
valueFormat="YYYY-MM-DD HH:mm:ss"
|
||||||
v-model:value="queryParam[item.field + '_begin']"
|
v-model:value="queryParam[item.field + '_begin']"
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
></a-date-picker>
|
></a-date-picker>
|
||||||
<span class="group-query-strig" style="width: auto; padding: 0 4px">~</span>
|
<span class="group-query-strig" style="width: auto; padding: 0 4px">~</span>
|
||||||
<a-date-picker
|
<a-date-picker
|
||||||
placeholder="2选择结束时间"
|
placeholder="选择结束时间"
|
||||||
:show-time="true"
|
:show-time="true"
|
||||||
valueFormat="YYYY-MM-DD HH:mm:ss"
|
valueFormat="YYYY-MM-DD HH:mm:ss"
|
||||||
v-model:value="queryParam[item.field + '_end']"
|
v-model:value="queryParam[item.field + '_end']"
|
||||||
@@ -131,16 +131,8 @@
|
|||||||
<template #label>
|
<template #label>
|
||||||
<span :title="item.label" class="label-text">{{ item.label }}</span>
|
<span :title="item.label" class="label-text">{{ item.label }}</span>
|
||||||
</template>
|
</template>
|
||||||
<JDictSelectTag v-if="item.config === '1'" v-model:value="queryParam[item.field]" :placeholder="'请选择' + item.label" :dict="getDictCode(item)">
|
<JOnlineSearchSelect v-model:value="queryParam[item.field]" :placeholder="'请选择' + item.label" :sql="item.sql">
|
||||||
</JDictSelectTag>
|
</JOnlineSearchSelect>
|
||||||
<!--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>-->
|
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
||||||
<a-form-item v-else-if="item.view === CompTypeEnum.SelUser" :labelCol="labelCol" :class="'jeecg-online-search'">
|
<a-form-item v-else-if="item.view === CompTypeEnum.SelUser" :labelCol="labelCol" :class="'jeecg-online-search'">
|
||||||
@@ -202,7 +194,10 @@
|
|||||||
<template #label>
|
<template #label>
|
||||||
<span :title="item.label" class="label-text">{{ item.label }}</span>
|
<span :title="item.label" class="label-text">{{ item.label }}</span>
|
||||||
</template>
|
</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>
|
<a-input :placeholder="'请输入' + item.label" v-model:value="queryParam[item.field]"></a-input>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
@@ -218,7 +213,7 @@
|
|||||||
import { defineComponent, ref } from 'vue';
|
import { defineComponent, ref } from 'vue';
|
||||||
import { DateTypeEnum } from '/@/enums/DateTypeEnum.ts';
|
import { DateTypeEnum } from '/@/enums/DateTypeEnum.ts';
|
||||||
import { CompTypeEnum } from '/@/enums/CompTypeEnum.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({
|
export default defineComponent({
|
||||||
name: 'JPopupOnlReport',
|
name: 'JPopupOnlReport',
|
||||||
components: {
|
components: {
|
||||||
@@ -230,6 +225,7 @@
|
|||||||
JSelectDept,
|
JSelectDept,
|
||||||
JPopup,
|
JPopup,
|
||||||
JAreaLinkage,
|
JAreaLinkage,
|
||||||
|
JInput,
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
formElRef: {
|
formElRef: {
|
||||||
|
@@ -512,6 +512,8 @@ export function usePopBiz(props, tableRef?) {
|
|||||||
//查询条件加载后再请求数据
|
//查询条件加载后再请求数据
|
||||||
if (data) {
|
if (data) {
|
||||||
setDataSource(data);
|
setDataSource(data);
|
||||||
|
//传递路由参数和动态参数,不生效,
|
||||||
|
loadData(1);
|
||||||
} else {
|
} else {
|
||||||
//没有传递data时查询数据
|
//没有传递data时查询数据
|
||||||
loadData(1);
|
loadData(1);
|
||||||
@@ -531,6 +533,7 @@ export function usePopBiz(props, tableRef?) {
|
|||||||
pagination.current = 1;
|
pagination.current = 1;
|
||||||
}
|
}
|
||||||
let params = getQueryParams(); //查询条件
|
let params = getQueryParams(); //查询条件
|
||||||
|
console.log('params', params);
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
let url = `${configUrl.getData}${unref(cgRpConfigId)}`;
|
let url = `${configUrl.getData}${unref(cgRpConfigId)}`;
|
||||||
//缓存key
|
//缓存key
|
||||||
@@ -597,6 +600,11 @@ export function usePopBiz(props, tableRef?) {
|
|||||||
}
|
}
|
||||||
queryParam.value = { ...queryTemp };
|
queryParam.value = { ...queryTemp };
|
||||||
}
|
}
|
||||||
|
// 合并路由参数
|
||||||
|
if (props.routeQuery) {
|
||||||
|
queryParam.value = Object.assign(queryParam.value, props.routeQuery);
|
||||||
|
}
|
||||||
|
|
||||||
let dynamicTemp = {};
|
let dynamicTemp = {};
|
||||||
if (props.param) {
|
if (props.param) {
|
||||||
Object.keys(props.param).map((key) => {
|
Object.keys(props.param).map((key) => {
|
||||||
|
@@ -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 { propTypes } from '/@/utils/propTypes';
|
||||||
import dayjs from 'dayjs';
|
// import dayjs from 'dayjs';
|
||||||
import 'dayjs/locale/zh.js';
|
// import relativeTime from 'dayjs/plugin/relativeTime';
|
||||||
import relativeTime from 'dayjs/plugin/relativeTime';
|
// import customParseFormat from 'dayjs/plugin/customParseFormat';
|
||||||
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
// dayjs.locale('zh');
|
||||||
dayjs.locale('zh');
|
// dayjs.extend(relativeTime);
|
||||||
dayjs.extend(relativeTime);
|
// dayjs.extend(customParseFormat);
|
||||||
dayjs.extend(customParseFormat);
|
|
||||||
import { MessageOutlined } from '@ant-design/icons-vue';
|
import { MessageOutlined } from '@ant-design/icons-vue';
|
||||||
import { Comment, Tooltip } from 'ant-design-vue';
|
import { Comment, Tooltip } from 'ant-design-vue';
|
||||||
import { useUserStore } from '/@/store/modules/user';
|
import { useUserStore } from '/@/store/modules/user';
|
||||||
@@ -113,6 +113,8 @@
|
|||||||
const { createMessage } = useMessage();
|
const { createMessage } = useMessage();
|
||||||
const dataList = ref([]);
|
const dataList = ref([]);
|
||||||
const { userInfo } = useUserStore();
|
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()
|
const bottomCommentRef = ref()
|
||||||
function handleClickItem(){
|
function handleClickItem(){
|
||||||
bottomCommentRef.value.changeActive()
|
bottomCommentRef.value.changeActive()
|
||||||
|
@@ -28,16 +28,15 @@
|
|||||||
<script>
|
<script>
|
||||||
import { PlusOutlined, EditOutlined } from '@ant-design/icons-vue';
|
import { PlusOutlined, EditOutlined } from '@ant-design/icons-vue';
|
||||||
import { getModalHeight, getLogList } from './useComment'
|
import { getModalHeight, getLogList } from './useComment'
|
||||||
import {ref, watchEffect} from 'vue'
|
import {inject, ref, watchEffect} from 'vue'
|
||||||
import { propTypes } from '/@/utils/propTypes';
|
import { propTypes } from '/@/utils/propTypes';
|
||||||
import { Tooltip } from 'ant-design-vue';
|
import { Tooltip } from 'ant-design-vue';
|
||||||
import dayjs from 'dayjs';
|
// import dayjs from 'dayjs';
|
||||||
import 'dayjs/locale/zh.js';
|
// import relativeTime from 'dayjs/plugin/relativeTime';
|
||||||
import relativeTime from 'dayjs/plugin/relativeTime';
|
// import customParseFormat from 'dayjs/plugin/customParseFormat';
|
||||||
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
// dayjs.locale('zh');
|
||||||
dayjs.locale('zh');
|
// dayjs.extend(relativeTime);
|
||||||
dayjs.extend(relativeTime);
|
// dayjs.extend(customParseFormat);
|
||||||
dayjs.extend(customParseFormat);
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "DataLogList",
|
name: "DataLogList",
|
||||||
@@ -52,6 +51,7 @@
|
|||||||
datetime: propTypes.number.def(1),
|
datetime: propTypes.number.def(1),
|
||||||
},
|
},
|
||||||
setup(props){
|
setup(props){
|
||||||
|
const dayjs = inject('$dayjs')
|
||||||
const winHeight = getModalHeight();
|
const winHeight = getModalHeight();
|
||||||
const height = ref(300);
|
const height = ref(300);
|
||||||
height.value = winHeight - 46 - 57 -53 - 30;
|
height.value = winHeight - 46 - 57 -53 - 30;
|
||||||
|
@@ -45,14 +45,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { ref, watch, computed } from 'vue';
|
import {ref, watch, computed, inject} from 'vue';
|
||||||
import { propTypes } from '/@/utils/propTypes';
|
import { propTypes } from '/@/utils/propTypes';
|
||||||
import { UserAddOutlined, PaperClipOutlined, SmileOutlined } from '@ant-design/icons-vue';
|
import { UserAddOutlined, PaperClipOutlined, SmileOutlined } from '@ant-design/icons-vue';
|
||||||
import { Tooltip } from 'ant-design-vue';
|
import { Tooltip } from 'ant-design-vue';
|
||||||
import UserSelectModal from '/@/components/Form/src/jeecg/components/modal/UserSelectModal.vue';
|
import UserSelectModal from '/@/components/Form/src/jeecg/components/modal/UserSelectModal.vue';
|
||||||
import { useModal } from '/@/components/Modal';
|
import { useModal } from '/@/components/Modal';
|
||||||
import UploadChunk from './UploadChunk.vue';
|
import UploadChunk from './UploadChunk.vue';
|
||||||
import { Picker } from 'emoji-mart-vue-fast/src';
|
|
||||||
import 'emoji-mart-vue-fast/css/emoji-mart.css';
|
import 'emoji-mart-vue-fast/css/emoji-mart.css';
|
||||||
import { useEmojiHtml } from './useComment';
|
import { useEmojiHtml } from './useComment';
|
||||||
|
|
||||||
@@ -79,7 +78,6 @@
|
|||||||
PaperClipOutlined,
|
PaperClipOutlined,
|
||||||
UploadChunk,
|
UploadChunk,
|
||||||
SmileOutlined,
|
SmileOutlined,
|
||||||
Picker,
|
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
inner: propTypes.bool.def(false),
|
inner: propTypes.bool.def(false),
|
||||||
@@ -222,7 +220,8 @@
|
|||||||
visibleEmoji.value = !visibleEmoji.value;
|
visibleEmoji.value = !visibleEmoji.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { emojiIndex, getHtml } = useEmojiHtml();
|
const emojiIndex = inject('$globalEmojiIndex')
|
||||||
|
const { getHtml } = useEmojiHtml(emojiIndex);
|
||||||
|
|
||||||
const commentHtml = computed(() => {
|
const commentHtml = computed(() => {
|
||||||
let temp = myComment.value;
|
let temp = myComment.value;
|
||||||
|
@@ -13,8 +13,6 @@ import txt from '/@/assets/svg/fileType/txt.svg';
|
|||||||
import word from '/@/assets/svg/fileType/word.svg';
|
import word from '/@/assets/svg/fileType/word.svg';
|
||||||
import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
|
import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
|
||||||
import { createImgPreview } from '/@/components/Preview';
|
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 {
|
enum Api {
|
||||||
list = '/sys/comment/listByForm',
|
list = '/sys/comment/listByForm',
|
||||||
@@ -365,15 +363,8 @@ export function useFileList() {
|
|||||||
/**
|
/**
|
||||||
* 用于emoji渲染
|
* 用于emoji渲染
|
||||||
*/
|
*/
|
||||||
export function useEmojiHtml(){
|
export function useEmojiHtml(globalEmojiIndex){
|
||||||
const COLONS_REGEX = new RegExp('([^:]+)?(:[a-zA-Z0-9-_+]+:(:skin-tone-[2-6]:)?)','g');
|
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) {
|
function getHtml(text) {
|
||||||
if(!text){
|
if(!text){
|
||||||
@@ -384,7 +375,7 @@ export function useEmojiHtml(){
|
|||||||
if (endsWith(before, 'alt="') || endsWith(before, 'data-text="')) {
|
if (endsWith(before, 'alt="') || endsWith(before, 'data-text="')) {
|
||||||
return match
|
return match
|
||||||
}
|
}
|
||||||
let emoji = emojiIndex.findEmoji(p2)
|
let emoji = globalEmojiIndex.findEmoji(p2)
|
||||||
if (!emoji) {
|
if (!emoji) {
|
||||||
return match
|
return match
|
||||||
}
|
}
|
||||||
@@ -403,7 +394,7 @@ export function useEmojiHtml(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
emojiIndex,
|
globalEmojiIndex,
|
||||||
getHtml
|
getHtml
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -17,7 +17,7 @@ export enum CompTypeEnum {
|
|||||||
//分类字典树
|
//分类字典树
|
||||||
CatTree = 'cat_tree',
|
CatTree = 'cat_tree',
|
||||||
//下拉搜索
|
//下拉搜索
|
||||||
SelSearch = 'sel_search',
|
SelSearch = 'search',
|
||||||
//用户现在框
|
//用户现在框
|
||||||
SelUser = 'sel_user',
|
SelUser = 'sel_user',
|
||||||
//复选框
|
//复选框
|
||||||
|
@@ -47,8 +47,15 @@ export const useRedo = (_router?: Router) => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (name && Object.keys(params).length > 0) {
|
if (name && Object.keys(params).length > 0) {
|
||||||
|
//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['_redirect_type'] = 'name';
|
||||||
params['path'] = String(name);
|
params['path'] = String(name);
|
||||||
|
}
|
||||||
|
//update-end-author:taoyan date:2022-10-19 for: VUEN-2356 【vue3】online表单、表单设计器 功能测试 右键刷新时 404
|
||||||
} else {
|
} else {
|
||||||
params['_redirect_type'] = 'path';
|
params['_redirect_type'] = 'path';
|
||||||
params['path'] = fullPath;
|
params['path'] = fullPath;
|
||||||
@@ -58,3 +65,21 @@ export const useRedo = (_router?: Router) => {
|
|||||||
}
|
}
|
||||||
return redo;
|
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;
|
||||||
|
}
|
||||||
|
@@ -57,7 +57,6 @@
|
|||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
});
|
});
|
||||||
const chatRef = ref();
|
|
||||||
|
|
||||||
const [registerMessageModal, { openModal: openMessageModal }] = useModal();
|
const [registerMessageModal, { openModal: openMessageModal }] = useModal();
|
||||||
function clickBadge(){
|
function clickBadge(){
|
||||||
@@ -96,7 +95,6 @@
|
|||||||
//update-begin-author:taoyan date:2022-8-30 for: 消息数量改变触发chat组件事件
|
//update-begin-author:taoyan date:2022-8-30 for: 消息数量改变触发chat组件事件
|
||||||
let msgCount = anntMsgTotal+sysMsgTotal;
|
let msgCount = anntMsgTotal+sysMsgTotal;
|
||||||
//update-begin-author:wangshuai date:2022-09-02 for: 消息未读数为0也需要传递,因为聊天需要计算总数
|
//update-begin-author:wangshuai date:2022-09-02 for: 消息未读数为0也需要传递,因为聊天需要计算总数
|
||||||
chatRef.value.updateMessageCount(msgCount);
|
|
||||||
messageCount.value = msgCount
|
messageCount.value = msgCount
|
||||||
//update-end-author:wangshuai date:2022-09-02 for: 消息未读数为0也需要传递,因为聊天需要计算总数
|
//update-end-author:wangshuai date:2022-09-02 for: 消息未读数为0也需要传递,因为聊天需要计算总数
|
||||||
//update-end-author:taoyan date:2022-8-30 for: 消息数量改变触发chat组件事件
|
//update-end-author:taoyan date:2022-8-30 for: 消息数量改变触发chat组件事件
|
||||||
@@ -164,12 +162,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取消息未读数
|
|
||||||
*/
|
|
||||||
function getSystemUnreadNum() {
|
|
||||||
chatRef.value.updateMessageCount(messageCount.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
prefixCls,
|
prefixCls,
|
||||||
@@ -184,8 +176,6 @@
|
|||||||
popoverVisible,
|
popoverVisible,
|
||||||
registerDetail,
|
registerDetail,
|
||||||
dynamicNoticeProps,
|
dynamicNoticeProps,
|
||||||
chatRef,
|
|
||||||
getSystemUnreadNum
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@@ -57,7 +57,7 @@
|
|||||||
setModalProps({ confirmLoading: true });
|
setModalProps({ confirmLoading: true });
|
||||||
//提交表单
|
//提交表单
|
||||||
let params = Object.assign({ username: unref(username) }, values);
|
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) {
|
if (res.success) {
|
||||||
$message.createMessage.success(res.message);
|
$message.createMessage.success(res.message);
|
||||||
//关闭弹窗
|
//关闭弹窗
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -8,6 +8,7 @@ import { createRouter, createWebHashHistory } from 'vue-router';
|
|||||||
import { getTenantId, getToken } from '/@/utils/auth';
|
import { getTenantId, getToken } from '/@/utils/auth';
|
||||||
import { URL_HASH_TAB } from '/@/utils';
|
import { URL_HASH_TAB } from '/@/utils';
|
||||||
import { packageViews } from '/@/utils/monorepo/dynamicRouter';
|
import { packageViews } from '/@/utils/monorepo/dynamicRouter';
|
||||||
|
import {useI18n} from "/@/hooks/web/useI18n";
|
||||||
|
|
||||||
export type LayoutMapKey = 'LAYOUT';
|
export type LayoutMapKey = 'LAYOUT';
|
||||||
const IFRAME = () => import('/@/views/sys/iframe/FrameBlank.vue');
|
const IFRAME = () => import('/@/views/sys/iframe/FrameBlank.vue');
|
||||||
@@ -31,6 +32,17 @@ function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) {
|
|||||||
}
|
}
|
||||||
if (!routes) return;
|
if (!routes) return;
|
||||||
routes.forEach((item) => {
|
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:适配旧版路由选项 --------
|
// update-begin--author:sunjianlei---date:20210918---for:适配旧版路由选项 --------
|
||||||
// @ts-ignore 适配隐藏路由
|
// @ts-ignore 适配隐藏路由
|
||||||
if (item?.hidden) {
|
if (item?.hidden) {
|
||||||
|
@@ -2,9 +2,38 @@ import type { App } from 'vue';
|
|||||||
import { registerJVxeTable } from '/@/components/jeecg/JVxeTable';
|
import { registerJVxeTable } from '/@/components/jeecg/JVxeTable';
|
||||||
import { registerJVxeCustom } from '/@/components/JVxeCustom';
|
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) {
|
export async function registerThirdComp(app: App) {
|
||||||
// 注册 JVxeTable 组件
|
// 注册 JVxeTable 组件
|
||||||
registerJVxeTable(app);
|
registerJVxeTable(app);
|
||||||
// 注册 JVxeTable 自定义组件
|
// 注册 JVxeTable 自定义组件
|
||||||
await registerJVxeCustom();
|
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)
|
||||||
|
//---------------------------------------------------------------------
|
||||||
}
|
}
|
||||||
|
6
src/utils/cache/persistent.ts
vendored
6
src/utils/cache/persistent.ts
vendored
@@ -56,6 +56,12 @@ function initPersistentMemory() {
|
|||||||
|
|
||||||
export class Persistent {
|
export class Persistent {
|
||||||
static getLocal<T>(key: LocalKeys) {
|
static getLocal<T>(key: LocalKeys) {
|
||||||
|
//update-begin---author:scott ---date:2022-10-27 for:token过期退出重新登录,online菜单还是提示token过期----------
|
||||||
|
const globalCache = ls.get(APP_LOCAL_CACHE_KEY);
|
||||||
|
if(globalCache){
|
||||||
|
localMemory.setCache(globalCache);
|
||||||
|
}
|
||||||
|
//update-end---author:scott ---date::2022-10-27 for:token过期退出重新登录,online菜单还是提示token过期----------
|
||||||
return localMemory.get(key)?.value as Nullable<T>;
|
return localMemory.get(key)?.value as Nullable<T>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -92,6 +92,9 @@
|
|||||||
field: 'fieldTime',
|
field: 'fieldTime',
|
||||||
component: 'RangePicker',
|
component: 'RangePicker',
|
||||||
label: '时间字段',
|
label: '时间字段',
|
||||||
|
componentProps: {
|
||||||
|
valueType: 'Date',
|
||||||
|
},
|
||||||
colProps: {
|
colProps: {
|
||||||
span: 8,
|
span: 8,
|
||||||
},
|
},
|
||||||
|
@@ -33,6 +33,8 @@
|
|||||||
baseColProps: {
|
baseColProps: {
|
||||||
span: 6,
|
span: 6,
|
||||||
},
|
},
|
||||||
|
labelWidth: 200,
|
||||||
|
layout: 'vertical',
|
||||||
schemas: schemas,
|
schemas: schemas,
|
||||||
showActionButtonGroup: false,
|
showActionButtonGroup: false,
|
||||||
});
|
});
|
||||||
@@ -41,6 +43,8 @@
|
|||||||
baseColProps: {
|
baseColProps: {
|
||||||
span: 6,
|
span: 6,
|
||||||
},
|
},
|
||||||
|
labelWidth: 200,
|
||||||
|
layout: 'vertical',
|
||||||
schemas: taskSchemas,
|
schemas: taskSchemas,
|
||||||
showActionButtonGroup: false,
|
showActionButtonGroup: false,
|
||||||
});
|
});
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
import { BasicColumn } from '/@/components/Table';
|
import { BasicColumn } from '/@/components/Table';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import lodash from 'lodash';
|
import _get from 'lodash.get';
|
||||||
import { h } from 'vue';
|
import { h } from 'vue';
|
||||||
import { Tag } from 'ant-design-vue';
|
import { Tag } from 'ant-design-vue';
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ export const columns: BasicColumn[] = [
|
|||||||
dataIndex: 'request.method',
|
dataIndex: 'request.method',
|
||||||
width: 20,
|
width: 20,
|
||||||
customRender({ record, column }) {
|
customRender({ record, column }) {
|
||||||
let value = lodash.get(record, column.dataIndex!);
|
let value = _get(record, column.dataIndex!);
|
||||||
let color = '';
|
let color = '';
|
||||||
if (value === 'GET') {
|
if (value === 'GET') {
|
||||||
color = '#87d068';
|
color = '#87d068';
|
||||||
@@ -40,7 +40,7 @@ export const columns: BasicColumn[] = [
|
|||||||
dataIndex: 'request.uri',
|
dataIndex: 'request.uri',
|
||||||
width: 200,
|
width: 200,
|
||||||
customRender({ record, column }) {
|
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',
|
dataIndex: 'response.status',
|
||||||
width: 50,
|
width: 50,
|
||||||
customRender({ record, column }) {
|
customRender({ record, column }) {
|
||||||
let value = lodash.get(record, column.dataIndex!);
|
let value = _get(record, column.dataIndex!);
|
||||||
let color = '';
|
let color = '';
|
||||||
if (value < 200) {
|
if (value < 200) {
|
||||||
color = 'pink';
|
color = 'pink';
|
||||||
@@ -69,7 +69,7 @@ export const columns: BasicColumn[] = [
|
|||||||
dataIndex: 'timeTaken',
|
dataIndex: 'timeTaken',
|
||||||
width: 50,
|
width: 50,
|
||||||
customRender({ record, column }) {
|
customRender({ record, column }) {
|
||||||
let value = lodash.get(record, column.dataIndex!);
|
let value = _get(record, column.dataIndex!);
|
||||||
let color = 'red';
|
let color = 'red';
|
||||||
if (value < 500) {
|
if (value < 500) {
|
||||||
color = 'green';
|
color = 'green';
|
||||||
|
@@ -8,6 +8,7 @@ export const columns: BasicColumn[] = [
|
|||||||
dataIndex: 'name',
|
dataIndex: 'name',
|
||||||
width: 70,
|
width: 70,
|
||||||
align: 'left',
|
align: 'left',
|
||||||
|
sorter: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '关键词',
|
title: '关键词',
|
||||||
@@ -23,6 +24,7 @@ export const columns: BasicColumn[] = [
|
|||||||
title: '工资',
|
title: '工资',
|
||||||
dataIndex: 'salaryMoney',
|
dataIndex: 'salaryMoney',
|
||||||
width: 40,
|
width: 40,
|
||||||
|
sorter: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '奖金',
|
title: '奖金',
|
||||||
@@ -32,6 +34,7 @@ export const columns: BasicColumn[] = [
|
|||||||
{
|
{
|
||||||
title: '性别',
|
title: '性别',
|
||||||
dataIndex: 'sex',
|
dataIndex: 'sex',
|
||||||
|
sorter: true,
|
||||||
customRender: ({ record }) => {
|
customRender: ({ record }) => {
|
||||||
return render.renderDict(record.sex, 'sex');
|
return render.renderDict(record.sex, 'sex');
|
||||||
// let v = record.sex ? (record.sex == '1' ? '男' : '女') : '';
|
// let v = record.sex ? (record.sex == '1' ? '男' : '女') : '';
|
||||||
|
@@ -53,7 +53,6 @@
|
|||||||
<a-button preIcon="ant-design:import-outlined" type="primary">导入</a-button>
|
<a-button preIcon="ant-design:import-outlined" type="primary">导入</a-button>
|
||||||
</a-upload>
|
</a-upload>
|
||||||
<a-button preIcon="ant-design:export-outlined" type="primary" @click="handleExportXls('单表示例', getExportUrl,exportParams)">导出</a-button>
|
<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:plus-outlined" type="primary" @click="openTab">打开Tab页</a-button>
|
||||||
<a-button preIcon="ant-design:retweet-outlined" type="primary" @click="customSearch = !customSearch">{{
|
<a-button preIcon="ant-design:retweet-outlined" type="primary" @click="customSearch = !customSearch">{{
|
||||||
customSearch ? '表单配置查询' : '自定义查询'
|
customSearch ? '表单配置查询' : '自定义查询'
|
||||||
@@ -119,6 +118,11 @@
|
|||||||
style: { textAlign: 'left' },
|
style: { textAlign: 'left' },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
//自定义默认排序
|
||||||
|
defSort: {
|
||||||
|
column: 'sex,salaryMoney',
|
||||||
|
order: 'desc',
|
||||||
|
},
|
||||||
striped: true,
|
striped: true,
|
||||||
useSearchForm: true,
|
useSearchForm: true,
|
||||||
showTableSetting: true,
|
showTableSetting: true,
|
||||||
|
@@ -4,13 +4,12 @@
|
|||||||
<BasicTable @register="registerTable" :rowSelection="rowSelection">
|
<BasicTable @register="registerTable" :rowSelection="rowSelection">
|
||||||
<!--插槽:table标题-->
|
<!--插槽:table标题-->
|
||||||
<template #tableTitle>
|
<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>
|
<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>
|
<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="handleSyncUser" preIcon="ant-design:sync-outlined"> 同步流程</a-button>
|
||||||
<a-button type="primary" @click="openModal(true, {})" preIcon="ant-design:hdd-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" />
|
<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">
|
<a-dropdown v-if="selectedRowKeys.length > 0">
|
||||||
<template #overlay>
|
<template #overlay>
|
||||||
<a-menu>
|
<a-menu>
|
||||||
|
@@ -107,7 +107,6 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
|
|||||||
'ant-design-vue/es/locale/zh_CN',
|
'ant-design-vue/es/locale/zh_CN',
|
||||||
'ant-design-vue/es/locale/en_US',
|
'ant-design-vue/es/locale/en_US',
|
||||||
],
|
],
|
||||||
exclude: ['vue-demi'],
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user