Merge branch 'master' of https://github.com/YunaiV/ruoyi-vue-pro into feature/1.6.2

This commit is contained in:
YunaiV 2022-05-23 20:17:28 +08:00
commit ed847ac2ee
92 changed files with 2169 additions and 13137 deletions

View File

@ -0,0 +1,26 @@
### 基本信息
- ruoyi-vue-pro 版本:
- 操作系统:
- 数据库:
### 复现步骤
第一步,
第二步,
第三步,
### 报错信息
[截图]
[截图]
---
建议:项目不是很难,碰到问题时,建议先花 2-4 小时的时间进行自查。
Issue 中如果带上自己的分析,可以被更快更高效的解决。

34
.github/ISSUE_TEMPLATE/question.md vendored Normal file
View File

@ -0,0 +1,34 @@
---
name: 问题反馈
about: 请详细描述,以便更高快的获得到解决
title: ''
labels: ''
assignees: ''
---
### 基本信息
- ruoyi-vue-pro 版本:
- 操作系统:
- 数据库:
### 复现步骤
第一步,
第二步,
第三步,
### 报错信息
[截图]
[截图]
---
建议:项目不是很难,碰到问题时,建议先花 2-4 小时的时间进行自查。
Issue 中如果带上自己的分析,可以被更快更高效的解决。

View File

@ -1797,7 +1797,7 @@ CREATE TABLE `system_oauth2_client` (
-- Records of system_oauth2_client
-- ----------------------------
BEGIN;
INSERT INTO `system_oauth2_client` (`id`, `client_id`, `secret`, `name`, `logo`, `description`, `status`, `access_token_validity_seconds`, `refresh_token_validity_seconds`, `redirect_uris`, `auto_approve`, `authorized_grant_types`, `scopes`, `authorities`, `resource_ids`, `additional_information`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1, 'default', 'admin123', '芋道源码', 'http://test.yudao.iocoder.cn/a5e2e244368878a366b516805a4aabf1.png', '我是描述', 0, 180, 8640, '[\"https://www.iocoder.cn\",\"https://doc.iocoder.cn\"]', b'1', '[\"password\",\"authorization_code\",\"implicit\",\"refresh_token\"]', '[\"user_info\"]', '[\"system:user:query\"]', '[]', '{}', '1', '2022-05-11 21:47:12', '1', '2022-05-12 01:00:20', b'0');
INSERT INTO `system_oauth2_client` (`id`, `client_id`, `secret`, `name`, `logo`, `description`, `status`, `access_token_validity_seconds`, `refresh_token_validity_seconds`, `redirect_uris`, `auto_approve`, `authorized_grant_types`, `scopes`, `authorities`, `resource_ids`, `additional_information`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1, 'default', 'admin123', '芋道源码', 'http://test.yudao.iocoder.cn/a5e2e244368878a366b516805a4aabf1.png', '我是描述', 0, 999999999, 8640, '[\"https://www.iocoder.cn\",\"https://doc.iocoder.cn\"]', b'1', '[\"password\",\"authorization_code\",\"implicit\",\"refresh_token\"]', '[\"user_info\"]', '[\"system:user:query\"]', '[]', '{}', '1', '2022-05-11 21:47:12', '1', '2022-05-12 01:00:20', b'0');
INSERT INTO `system_oauth2_client` (`id`, `client_id`, `secret`, `name`, `logo`, `description`, `status`, `access_token_validity_seconds`, `refresh_token_validity_seconds`, `redirect_uris`, `auto_approve`, `authorized_grant_types`, `scopes`, `authorities`, `resource_ids`, `additional_information`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (40, 'test', 'test2', 'biubiu', 'http://test.yudao.iocoder.cn/277a899d573723f1fcdfb57340f00379.png', NULL, 0, 1800, 43200, '[\"https://www.iocoder.cn\"]', b'1', '[\"password\",\"authorization_code\",\"implicit\"]', '[]', '[]', '[]', '{}', '1', '2022-05-12 00:28:20', '1', '2022-05-12 00:59:53', b'0');
COMMIT;

View File

@ -38,8 +38,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -96,8 +96,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -159,8 +159,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -224,8 +224,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -284,8 +284,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -342,8 +342,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -400,8 +400,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -463,8 +463,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -543,8 +543,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -645,8 +645,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -718,8 +718,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -780,8 +780,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -839,8 +839,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -891,8 +891,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -943,8 +943,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -997,8 +997,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1051,8 +1051,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1111,8 +1111,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1167,8 +1167,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1224,8 +1224,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1282,8 +1282,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1339,8 +1339,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1396,8 +1396,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1449,8 +1449,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1508,8 +1508,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1587,8 +1587,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1663,8 +1663,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1740,8 +1740,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1805,8 +1805,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1838,8 +1838,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1873,8 +1873,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1917,8 +1917,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1957,8 +1957,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -1990,8 +1990,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -2024,8 +2024,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -2058,8 +2058,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -2095,8 +2095,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -2139,8 +2139,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -2185,8 +2185,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -2230,8 +2230,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -2301,8 +2301,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -2491,8 +2491,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -2582,8 +2582,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -2641,8 +2641,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -2705,8 +2705,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -2994,8 +2994,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -3049,8 +3049,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -3114,8 +3114,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -3153,7 +3153,7 @@ COMMENT ON TABLE "SYSTEM_OAUTH2_CLIENT" IS 'OAuth2 客户端表';
-- Records of SYSTEM_OAUTH2_CLIENT
-- ----------------------------
INSERT INTO "SYSTEM_OAUTH2_CLIENT" ("ID", "CLIENT_ID", "SECRET", "NAME", "LOGO", "DESCRIPTION", "STATUS", "ACCESS_TOKEN_VALIDITY_SECONDS", "REFRESH_TOKEN_VALIDITY_SECONDS", "REDIRECT_URIS", "AUTO_APPROVE", "AUTHORIZED_GRANT_TYPES", "SCOPES", "AUTHORITIES", "RESOURCE_IDS", "ADDITIONAL_INFORMATION", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "DELETED") VALUES ('1', 'default', 'admin123', '芋道源码', 'http://test.yudao.iocoder.cn/a5e2e244368878a366b516805a4aabf1.png', '我是描述', '0', '180', '8640', '["https://www.iocoder.cn","https://doc.iocoder.cn"]', '1', '["password","authorization_code","implicit","refresh_token"]', '["user_info"]', '["system:user:query"]', '[]', '{}', '1', TO_DATE('2022-05-11 21:47:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-05-12 01:00:20', 'SYYYY-MM-DD HH24:MI:SS'), '0');
INSERT INTO "SYSTEM_OAUTH2_CLIENT" ("ID", "CLIENT_ID", "SECRET", "NAME", "LOGO", "DESCRIPTION", "STATUS", "ACCESS_TOKEN_VALIDITY_SECONDS", "REFRESH_TOKEN_VALIDITY_SECONDS", "REDIRECT_URIS", "AUTO_APPROVE", "AUTHORIZED_GRANT_TYPES", "SCOPES", "AUTHORITIES", "RESOURCE_IDS", "ADDITIONAL_INFORMATION", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "DELETED") VALUES ('40', 'test', 'test2', 'biubiu', 'http://test.yudao.iocoder.cn/277a899d573723f1fcdfb57340f00379.png', NULL, '0', '1800', '43200', '["https://www.iocoder.cn"]', '1', '["password","authorization_code","implicit"]', '[]', '[]', '[]', '{}', '1', TO_DATE('2022-05-12 00:28:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-05-13 09:41:21', 'SYYYY-MM-DD HH24:MI:SS'), '0');
INSERT INTO "SYSTEM_OAUTH2_CLIENT" ("ID", "CLIENT_ID", "SECRET", "NAME", "LOGO", "DESCRIPTION", "STATUS", "ACCESS_TOKEN_VALIDITY_SECONDS", "REFRESH_TOKEN_VALIDITY_SECONDS", "REDIRECT_URIS", "AUTO_APPROVE", "AUTHORIZED_GRANT_TYPES", "SCOPES", "AUTHORITIES", "RESOURCE_IDS", "ADDITIONAL_INFORMATION", "CREATOR", "CREATE_TIME", "UPDATER", "UPDATE_TIME", "DELETED") VALUES ('40', 'test', 'test2', 'biubiu', 'http://test.yudao.iocoder.cn/277a899d573723f1fcdfb57340f00379.png', NULL, '0', '999999999', '43200', '["https://www.iocoder.cn"]', '1', '["password","authorization_code","implicit"]', '[]', '[]', '[]', '{}', '1', TO_DATE('2022-05-12 00:28:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', TO_DATE('2022-05-13 09:41:21', 'SYYYY-MM-DD HH24:MI:SS'), '0');
COMMIT;
COMMIT;
@ -3180,8 +3180,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -3249,8 +3249,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -3318,8 +3318,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -3380,8 +3380,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -3441,8 +3441,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -3631,8 +3631,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -3687,8 +3687,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -3749,8 +3749,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -3825,8 +3825,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -3901,8 +3901,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -3974,8 +3974,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -4037,8 +4037,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -4096,8 +4096,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -4158,8 +4158,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -4232,8 +4232,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -4284,8 +4284,8 @@ NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -5261,8 +5261,8 @@ CREATE INDEX "IDX_QRTZ_FT_INST_JOB_REQ_RCVRY"
PCTFREE 10
INITRANS 2
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -5278,8 +5278,8 @@ CREATE INDEX "IDX_QRTZ_FT_JG"
PCTFREE 10
INITRANS 2
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -5293,8 +5293,8 @@ CREATE INDEX "IDX_QRTZ_FT_J_G"
PCTFREE 10
INITRANS 2
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -5308,8 +5308,8 @@ CREATE INDEX "IDX_QRTZ_FT_TG"
PCTFREE 10
INITRANS 2
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -5344,8 +5344,8 @@ CREATE INDEX "IDX_QRTZ_J_GRP"
PCTFREE 10
INITRANS 2
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -5361,8 +5361,8 @@ CREATE INDEX "IDX_QRTZ_J_REQ_RECOVERY"
PCTFREE 10
INITRANS 2
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -5484,8 +5484,8 @@ CREATE INDEX "IDX_QRTZ_T_C"
PCTFREE 10
INITRANS 2
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -5501,8 +5501,8 @@ CREATE INDEX "IDX_QRTZ_T_J"
PCTFREE 10
INITRANS 2
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -5518,8 +5518,8 @@ CREATE INDEX "IDX_QRTZ_T_JG"
PCTFREE 10
INITRANS 2
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -5533,8 +5533,8 @@ CREATE INDEX "IDX_QRTZ_T_NEXT_FIRE_TIME"
PCTFREE 10
INITRANS 2
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -5548,8 +5548,8 @@ CREATE INDEX "IDX_QRTZ_T_NFT_ST"
PCTFREE 10
INITRANS 2
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -5565,8 +5565,8 @@ CREATE INDEX "IDX_QRTZ_T_NFT_ST_MISFIRE"
PCTFREE 10
INITRANS 2
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1
@ -5580,8 +5580,8 @@ CREATE INDEX "IDX_QRTZ_T_STATE"
PCTFREE 10
INITRANS 2
STORAGE (
INITIAL 65536
NEXT 1048576
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 1

View File

@ -20,7 +20,7 @@
-- Sequence structure for act_evt_log_log_nr__seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "act_evt_log_log_nr__seq";
CREATE SEQUENCE "act_evt_log_log_nr__seq"
CREATE SEQUENCE "act_evt_log_log_nr__seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 2147483647
@ -31,7 +31,7 @@ CACHE 1;
-- Sequence structure for act_hi_tsk_log_id__seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "act_hi_tsk_log_id__seq";
CREATE SEQUENCE "act_hi_tsk_log_id__seq"
CREATE SEQUENCE "act_hi_tsk_log_id__seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 2147483647
@ -42,7 +42,7 @@ CACHE 1;
-- Sequence structure for bpm_form_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "bpm_form_seq";
CREATE SEQUENCE "bpm_form_seq"
CREATE SEQUENCE "bpm_form_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -51,7 +51,7 @@ CACHE 1;
-- Sequence structure for bpm_oa_leave_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "bpm_oa_leave_seq";
CREATE SEQUENCE "bpm_oa_leave_seq"
CREATE SEQUENCE "bpm_oa_leave_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -60,7 +60,7 @@ CACHE 1;
-- Sequence structure for bpm_process_definition_ext_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "bpm_process_definition_ext_seq";
CREATE SEQUENCE "bpm_process_definition_ext_seq"
CREATE SEQUENCE "bpm_process_definition_ext_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -69,7 +69,7 @@ CACHE 1;
-- Sequence structure for bpm_process_instance_ext_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "bpm_process_instance_ext_seq";
CREATE SEQUENCE "bpm_process_instance_ext_seq"
CREATE SEQUENCE "bpm_process_instance_ext_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -78,7 +78,7 @@ CACHE 1;
-- Sequence structure for bpm_task_assign_rule_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "bpm_task_assign_rule_seq";
CREATE SEQUENCE "bpm_task_assign_rule_seq"
CREATE SEQUENCE "bpm_task_assign_rule_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -87,7 +87,7 @@ CACHE 1;
-- Sequence structure for bpm_task_ext_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "bpm_task_ext_seq";
CREATE SEQUENCE "bpm_task_ext_seq"
CREATE SEQUENCE "bpm_task_ext_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -96,7 +96,7 @@ CACHE 1;
-- Sequence structure for bpm_user_group_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "bpm_user_group_seq";
CREATE SEQUENCE "bpm_user_group_seq"
CREATE SEQUENCE "bpm_user_group_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -105,7 +105,7 @@ CACHE 1;
-- Sequence structure for infra_api_access_log_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "infra_api_access_log_seq";
CREATE SEQUENCE "infra_api_access_log_seq"
CREATE SEQUENCE "infra_api_access_log_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -114,7 +114,7 @@ CACHE 1;
-- Sequence structure for infra_api_error_log_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "infra_api_error_log_seq";
CREATE SEQUENCE "infra_api_error_log_seq"
CREATE SEQUENCE "infra_api_error_log_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -123,7 +123,7 @@ CACHE 1;
-- Sequence structure for infra_codegen_column_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "infra_codegen_column_seq";
CREATE SEQUENCE "infra_codegen_column_seq"
CREATE SEQUENCE "infra_codegen_column_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -132,7 +132,7 @@ CACHE 1;
-- Sequence structure for infra_codegen_table_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "infra_codegen_table_seq";
CREATE SEQUENCE "infra_codegen_table_seq"
CREATE SEQUENCE "infra_codegen_table_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -141,7 +141,7 @@ CACHE 1;
-- Sequence structure for infra_config_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "infra_config_seq";
CREATE SEQUENCE "infra_config_seq"
CREATE SEQUENCE "infra_config_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -150,7 +150,7 @@ CACHE 1;
-- Sequence structure for infra_data_source_config_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "infra_data_source_config_seq";
CREATE SEQUENCE "infra_data_source_config_seq"
CREATE SEQUENCE "infra_data_source_config_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -159,7 +159,7 @@ CACHE 1;
-- Sequence structure for infra_file_config_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "infra_file_config_seq";
CREATE SEQUENCE "infra_file_config_seq"
CREATE SEQUENCE "infra_file_config_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -168,7 +168,7 @@ CACHE 1;
-- Sequence structure for infra_file_content_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "infra_file_content_seq";
CREATE SEQUENCE "infra_file_content_seq"
CREATE SEQUENCE "infra_file_content_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -177,7 +177,7 @@ CACHE 1;
-- Sequence structure for infra_file_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "infra_file_seq";
CREATE SEQUENCE "infra_file_seq"
CREATE SEQUENCE "infra_file_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -186,7 +186,7 @@ CACHE 1;
-- Sequence structure for infra_job_log_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "infra_job_log_seq";
CREATE SEQUENCE "infra_job_log_seq"
CREATE SEQUENCE "infra_job_log_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -195,7 +195,7 @@ CACHE 1;
-- Sequence structure for infra_job_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "infra_job_seq";
CREATE SEQUENCE "infra_job_seq"
CREATE SEQUENCE "infra_job_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -204,7 +204,7 @@ CACHE 1;
-- Sequence structure for infra_test_demo_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "infra_test_demo_seq";
CREATE SEQUENCE "infra_test_demo_seq"
CREATE SEQUENCE "infra_test_demo_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -213,7 +213,7 @@ CACHE 1;
-- Sequence structure for member_user_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "member_user_seq";
CREATE SEQUENCE "member_user_seq"
CREATE SEQUENCE "member_user_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -222,7 +222,7 @@ CACHE 1;
-- Sequence structure for pay_app_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "pay_app_seq";
CREATE SEQUENCE "pay_app_seq"
CREATE SEQUENCE "pay_app_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -231,7 +231,7 @@ CACHE 1;
-- Sequence structure for pay_channel_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "pay_channel_seq";
CREATE SEQUENCE "pay_channel_seq"
CREATE SEQUENCE "pay_channel_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -240,7 +240,7 @@ CACHE 1;
-- Sequence structure for pay_merchant_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "pay_merchant_seq";
CREATE SEQUENCE "pay_merchant_seq"
CREATE SEQUENCE "pay_merchant_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -249,7 +249,7 @@ CACHE 1;
-- Sequence structure for pay_notify_log_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "pay_notify_log_seq";
CREATE SEQUENCE "pay_notify_log_seq"
CREATE SEQUENCE "pay_notify_log_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -258,7 +258,7 @@ CACHE 1;
-- Sequence structure for pay_notify_task_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "pay_notify_task_seq";
CREATE SEQUENCE "pay_notify_task_seq"
CREATE SEQUENCE "pay_notify_task_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -267,7 +267,7 @@ CACHE 1;
-- Sequence structure for pay_order_extension_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "pay_order_extension_seq";
CREATE SEQUENCE "pay_order_extension_seq"
CREATE SEQUENCE "pay_order_extension_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -276,7 +276,7 @@ CACHE 1;
-- Sequence structure for pay_order_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "pay_order_seq";
CREATE SEQUENCE "pay_order_seq"
CREATE SEQUENCE "pay_order_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -285,7 +285,7 @@ CACHE 1;
-- Sequence structure for pay_refund_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "pay_refund_seq";
CREATE SEQUENCE "pay_refund_seq"
CREATE SEQUENCE "pay_refund_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -294,7 +294,7 @@ CACHE 1;
-- Sequence structure for system_dept_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_dept_seq";
CREATE SEQUENCE "system_dept_seq"
CREATE SEQUENCE "system_dept_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -303,7 +303,7 @@ CACHE 1;
-- Sequence structure for system_dict_data_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_dict_data_seq";
CREATE SEQUENCE "system_dict_data_seq"
CREATE SEQUENCE "system_dict_data_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -312,7 +312,7 @@ CACHE 1;
-- Sequence structure for system_dict_type_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_dict_type_seq";
CREATE SEQUENCE "system_dict_type_seq"
CREATE SEQUENCE "system_dict_type_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -321,7 +321,7 @@ CACHE 1;
-- Sequence structure for system_error_code_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_error_code_seq";
CREATE SEQUENCE "system_error_code_seq"
CREATE SEQUENCE "system_error_code_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -330,7 +330,7 @@ CACHE 1;
-- Sequence structure for system_login_log_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_login_log_seq";
CREATE SEQUENCE "system_login_log_seq"
CREATE SEQUENCE "system_login_log_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -339,7 +339,7 @@ CACHE 1;
-- Sequence structure for system_menu_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_menu_seq";
CREATE SEQUENCE "system_menu_seq"
CREATE SEQUENCE "system_menu_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -348,7 +348,7 @@ CACHE 1;
-- Sequence structure for system_notice_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_notice_seq";
CREATE SEQUENCE "system_notice_seq"
CREATE SEQUENCE "system_notice_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -357,7 +357,7 @@ CACHE 1;
-- Sequence structure for system_oauth2_access_token_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_oauth2_access_token_seq";
CREATE SEQUENCE "system_oauth2_access_token_seq"
CREATE SEQUENCE "system_oauth2_access_token_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
@ -368,7 +368,7 @@ CACHE 1;
-- Sequence structure for system_oauth2_client_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_oauth2_client_seq";
CREATE SEQUENCE "system_oauth2_client_seq"
CREATE SEQUENCE "system_oauth2_client_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
@ -379,7 +379,7 @@ CACHE 1;
-- Sequence structure for system_oauth2_refresh_token_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_oauth2_refresh_token_seq";
CREATE SEQUENCE "system_oauth2_refresh_token_seq"
CREATE SEQUENCE "system_oauth2_refresh_token_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
@ -390,7 +390,7 @@ CACHE 1;
-- Sequence structure for system_operate_log_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_operate_log_seq";
CREATE SEQUENCE "system_operate_log_seq"
CREATE SEQUENCE "system_operate_log_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -399,7 +399,7 @@ CACHE 1;
-- Sequence structure for system_post_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_post_seq";
CREATE SEQUENCE "system_post_seq"
CREATE SEQUENCE "system_post_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -408,7 +408,7 @@ CACHE 1;
-- Sequence structure for system_role_menu_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_role_menu_seq";
CREATE SEQUENCE "system_role_menu_seq"
CREATE SEQUENCE "system_role_menu_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -417,7 +417,7 @@ CACHE 1;
-- Sequence structure for system_role_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_role_seq";
CREATE SEQUENCE "system_role_seq"
CREATE SEQUENCE "system_role_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -426,7 +426,7 @@ CACHE 1;
-- Sequence structure for system_sensitive_word_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_sensitive_word_seq";
CREATE SEQUENCE "system_sensitive_word_seq"
CREATE SEQUENCE "system_sensitive_word_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -435,7 +435,7 @@ CACHE 1;
-- Sequence structure for system_sms_channel_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_sms_channel_seq";
CREATE SEQUENCE "system_sms_channel_seq"
CREATE SEQUENCE "system_sms_channel_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -444,7 +444,7 @@ CACHE 1;
-- Sequence structure for system_sms_code_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_sms_code_seq";
CREATE SEQUENCE "system_sms_code_seq"
CREATE SEQUENCE "system_sms_code_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -453,7 +453,7 @@ CACHE 1;
-- Sequence structure for system_sms_log_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_sms_log_seq";
CREATE SEQUENCE "system_sms_log_seq"
CREATE SEQUENCE "system_sms_log_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -462,7 +462,7 @@ CACHE 1;
-- Sequence structure for system_sms_template_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_sms_template_seq";
CREATE SEQUENCE "system_sms_template_seq"
CREATE SEQUENCE "system_sms_template_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -471,7 +471,7 @@ CACHE 1;
-- Sequence structure for system_social_user_bind_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_social_user_bind_seq";
CREATE SEQUENCE "system_social_user_bind_seq"
CREATE SEQUENCE "system_social_user_bind_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -480,7 +480,7 @@ CACHE 1;
-- Sequence structure for system_social_user_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_social_user_seq";
CREATE SEQUENCE "system_social_user_seq"
CREATE SEQUENCE "system_social_user_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -489,7 +489,7 @@ CACHE 1;
-- Sequence structure for system_tenant_package_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_tenant_package_seq";
CREATE SEQUENCE "system_tenant_package_seq"
CREATE SEQUENCE "system_tenant_package_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -498,7 +498,7 @@ CACHE 1;
-- Sequence structure for system_tenant_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_tenant_seq";
CREATE SEQUENCE "system_tenant_seq"
CREATE SEQUENCE "system_tenant_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -507,7 +507,7 @@ CACHE 1;
-- Sequence structure for system_user_post_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_user_post_seq";
CREATE SEQUENCE "system_user_post_seq"
CREATE SEQUENCE "system_user_post_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -516,7 +516,7 @@ CACHE 1;
-- Sequence structure for system_user_role_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_user_role_seq";
CREATE SEQUENCE "system_user_role_seq"
CREATE SEQUENCE "system_user_role_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -525,7 +525,7 @@ CACHE 1;
-- Sequence structure for system_user_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "system_user_seq";
CREATE SEQUENCE "system_user_seq"
CREATE SEQUENCE "system_user_seq"
INCREMENT 1
MAXVALUE 9223372036854775807
CACHE 1;
@ -3470,7 +3470,7 @@ COMMENT ON TABLE "system_oauth2_client" IS 'OAuth2 客户端表';
-- Records of system_oauth2_client
-- ----------------------------
BEGIN;
INSERT INTO "system_oauth2_client" ("id", "client_id", "secret", "name", "logo", "description", "status", "access_token_validity_seconds", "refresh_token_validity_seconds", "redirect_uris", "auto_approve", "authorized_grant_types", "scopes", "authorities", "resource_ids", "additional_information", "creator", "create_time", "updater", "update_time", "deleted") VALUES (1, 'default', 'admin123', '芋道源码', 'http://test.yudao.iocoder.cn/a5e2e244368878a366b516805a4aabf1.png', '我是描述', 0, 180, 8640, '["https://www.iocoder.cn","https://doc.iocoder.cn"]', '1', '["password","authorization_code","implicit","refresh_token"]', '["user_info"]', '["system:user:query"]', '[]', '{}', '1', '2022-05-11 21:47:12', '1', '2022-05-12 01:00:20', 0);
INSERT INTO "system_oauth2_client" ("id", "client_id", "secret", "name", "logo", "description", "status", "access_token_validity_seconds", "refresh_token_validity_seconds", "redirect_uris", "auto_approve", "authorized_grant_types", "scopes", "authorities", "resource_ids", "additional_information", "creator", "create_time", "updater", "update_time", "deleted") VALUES (1, 'default', 'admin123', '芋道源码', 'http://test.yudao.iocoder.cn/a5e2e244368878a366b516805a4aabf1.png', '我是描述', 0, 999999999, 8640, '["https://www.iocoder.cn","https://doc.iocoder.cn"]', '1', '["password","authorization_code","implicit","refresh_token"]', '["user_info"]', '["system:user:query"]', '[]', '{}', '1', '2022-05-11 21:47:12', '1', '2022-05-12 01:00:20', 0);
INSERT INTO "system_oauth2_client" ("id", "client_id", "secret", "name", "logo", "description", "status", "access_token_validity_seconds", "refresh_token_validity_seconds", "redirect_uris", "auto_approve", "authorized_grant_types", "scopes", "authorities", "resource_ids", "additional_information", "creator", "create_time", "updater", "update_time", "deleted") VALUES (40, 'test', 'test2', 'biubiu', 'http://test.yudao.iocoder.cn/277a899d573723f1fcdfb57340f00379.png', NULL, 0, 1800, 43200, '["https://www.iocoder.cn"]', 'true', '["password","authorization_code","implicit"]', '[]', '[]', '[]', '{}', '1', '2022-05-12 00:28:20', '1', '2022-05-13 01:04:21.023', 0);
COMMIT;

File diff suppressed because it is too large Load Diff

View File

@ -58,6 +58,14 @@
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId> <!-- 多数据源 -->
</dependency>
<!-- 工具类相关 -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId> <!-- 加解密 -->
<optional>true</optional>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,70 @@
package cn.iocoder.yudao.framework.mybatis.core.type;
import cn.hutool.core.lang.Assert;
import cn.hutool.extra.spring.SpringUtil;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.jasypt.encryption.StringEncryptor;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 字段字段的 TypeHandler 实现类基于 {@link StringEncryptor} 实现
* 可通过 jasypt.encryptor.password 配置项设置密钥
*
* @author 芋道源码
*/
public class EncryptTypeHandler extends BaseTypeHandler<String> {
private static StringEncryptor encryptor;
@Override
public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, getEncryptor().encrypt(parameter));
}
@Override
public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
String value = rs.getString(columnName);
return decrypt(value);
}
@Override
public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String value = rs.getString(columnIndex);
return decrypt(value);
}
@Override
public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String value = cs.getString(columnIndex);
return decrypt(value);
}
private static String decrypt(String value) {
if (value == null) {
return null;
}
return getEncryptor().decrypt(value);
}
public static String encrypt(String rawValue) {
if (rawValue == null) {
return null;
}
return getEncryptor().encrypt(rawValue);
}
private static StringEncryptor getEncryptor() {
if (encryptor != null) {
return encryptor;
}
encryptor = SpringUtil.getBean(StringEncryptor.class);
Assert.notNull(encryptor, "StringEncryptor 不能为空");
return encryptor;
}
}

View File

@ -21,7 +21,7 @@ import java.util.List;
*/
@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(List.class)
public class StringLiSTTypeHandler implements TypeHandler<List<String>> {
public class StringListTypeHandler implements TypeHandler<List<String>> {
private static final String COMMA = ",";

View File

@ -1,7 +1,9 @@
package cn.iocoder.yudao.module.infra.dal.dataobject.db;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.framework.mybatis.core.type.EncryptTypeHandler;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@ -10,7 +12,7 @@ import lombok.Data;
*
* @author 芋道源码
*/
@TableName("infra_data_source_config")
@TableName(value = "infra_data_source_config", autoResultMap = true)
@KeySequence("infra_data_source_config_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
public class DataSourceConfigDO extends BaseDO {
@ -40,6 +42,7 @@ public class DataSourceConfigDO extends BaseDO {
/**
* 密码
*/
@TableField(typeHandler = EncryptTypeHandler.class)
private String password;
}

View File

@ -8,7 +8,6 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.db.DataSourceConfigDO;
import cn.iocoder.yudao.module.infra.dal.mysql.db.DataSourceConfigMapper;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;
import org.jasypt.encryption.StringEncryptor;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@ -32,9 +31,6 @@ public class DataSourceConfigServiceImpl implements DataSourceConfigService {
@Resource
private DataSourceConfigMapper dataSourceConfigMapper;
@Resource
private StringEncryptor stringEncryptor;
@Resource
private DynamicDataSourceProperties dynamicDataSourceProperties;
@ -44,7 +40,6 @@ public class DataSourceConfigServiceImpl implements DataSourceConfigService {
checkConnectionOK(dataSourceConfig);
// 插入
dataSourceConfig.setPassword(stringEncryptor.encrypt(createReqVO.getPassword()));
dataSourceConfigMapper.insert(dataSourceConfig);
// 返回
return dataSourceConfig.getId();
@ -58,7 +53,6 @@ public class DataSourceConfigServiceImpl implements DataSourceConfigService {
checkConnectionOK(updateObj);
// 更新
updateObj.setPassword(stringEncryptor.encrypt(updateObj.getPassword()));
dataSourceConfigMapper.updateById(updateObj);
}
@ -83,12 +77,7 @@ public class DataSourceConfigServiceImpl implements DataSourceConfigService {
return buildMasterDataSourceConfig();
}
// DB 中读取
DataSourceConfigDO dataSourceConfig = dataSourceConfigMapper.selectById(id);
try {
dataSourceConfig.setPassword(stringEncryptor.decrypt(dataSourceConfig.getPassword()));
} catch (Exception ignore) { // 解码失败则不解码
}
return dataSourceConfig;
return dataSourceConfigMapper.selectById(id);
}
@Override

View File

@ -1,5 +1,7 @@
package cn.iocoder.yudao.module.infra.service.db;
import cn.hutool.core.util.ReflectUtil;
import cn.iocoder.yudao.framework.mybatis.core.type.EncryptTypeHandler;
import cn.iocoder.yudao.framework.mybatis.core.util.JdbcUtils;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.infra.controller.admin.db.vo.DataSourceConfigCreateReqVO;
@ -8,8 +10,10 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.db.DataSourceConfigDO;
import cn.iocoder.yudao.module.infra.dal.mysql.db.DataSourceConfigMapper;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;
import org.jasypt.encryption.StringEncryptor;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.MockedStatic;
import org.mockito.stubbing.Answer;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Import;
@ -21,7 +25,10 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.DATA_SOURCE_CONFIG_NOT_EXISTS;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.when;
/**
* {@link DataSourceConfigServiceImpl} 的单元测试类
@ -43,13 +50,20 @@ public class DataSourceConfigServiceImplTest extends BaseDbUnitTest {
@MockBean
private DynamicDataSourceProperties dynamicDataSourceProperties;
@BeforeEach
public void setUp() {
// mock 一个空实现的 StringEncryptor避免 EncryptTypeHandler 报错
ReflectUtil.setFieldValue(EncryptTypeHandler.class, "encryptor", stringEncryptor);
when(stringEncryptor.encrypt(anyString())).then((Answer<String>) invocation -> invocation.getArgument(0));
when(stringEncryptor.decrypt(anyString())).then((Answer<String>) invocation -> invocation.getArgument(0));
}
@Test
public void testCreateDataSourceConfig_success() {
try (MockedStatic<JdbcUtils> databaseUtilsMock = mockStatic(JdbcUtils.class)) {
// 准备参数
DataSourceConfigCreateReqVO reqVO = randomPojo(DataSourceConfigCreateReqVO.class);
// mock 方法
when(stringEncryptor.encrypt(eq(reqVO.getPassword()))).thenReturn("123456");
databaseUtilsMock.when(() -> JdbcUtils.isConnectionOK(eq(reqVO.getUrl()),
eq(reqVO.getUsername()), eq(reqVO.getPassword()))).thenReturn(true);
@ -59,8 +73,7 @@ public class DataSourceConfigServiceImplTest extends BaseDbUnitTest {
assertNotNull(dataSourceConfigId);
// 校验记录的属性是否正确
DataSourceConfigDO dataSourceConfig = dataSourceConfigMapper.selectById(dataSourceConfigId);
assertPojoEquals(reqVO, dataSourceConfig, "password");
assertEquals("123456", dataSourceConfig.getPassword());
assertPojoEquals(reqVO, dataSourceConfig);
}
}
@ -75,7 +88,7 @@ public class DataSourceConfigServiceImplTest extends BaseDbUnitTest {
o.setId(dbDataSourceConfig.getId()); // 设置更新的 ID
});
// mock 方法
when(stringEncryptor.encrypt(eq(reqVO.getPassword()))).thenReturn("123456");
// when(stringEncryptor.encrypt(eq(reqVO.getPassword()))).thenReturn("123456");
databaseUtilsMock.when(() -> JdbcUtils.isConnectionOK(eq(reqVO.getUrl()),
eq(reqVO.getUsername()), eq(reqVO.getPassword()))).thenReturn(true);
@ -83,8 +96,7 @@ public class DataSourceConfigServiceImplTest extends BaseDbUnitTest {
dataSourceConfigService.updateDataSourceConfig(reqVO);
// 校验是否更新正确
DataSourceConfigDO dataSourceConfig = dataSourceConfigMapper.selectById(reqVO.getId()); // 获取最新的
assertPojoEquals(reqVO, dataSourceConfig, "password");
assertEquals("123456", dataSourceConfig.getPassword());
assertPojoEquals(reqVO, dataSourceConfig);
}
}
@ -120,4 +132,16 @@ public class DataSourceConfigServiceImplTest extends BaseDbUnitTest {
assertServiceException(() -> dataSourceConfigService.deleteDataSourceConfig(id), DATA_SOURCE_CONFIG_NOT_EXISTS);
}
@Test // 测试使用 password 查询可以查询到数据
public void testSelectPassword() {
// mock 数据
DataSourceConfigDO dbDataSourceConfig = randomPojo(DataSourceConfigDO.class);
dataSourceConfigMapper.insert(dbDataSourceConfig);// @Sql: 先插入出一条存在的数据
// 调用
DataSourceConfigDO result = dataSourceConfigMapper.selectOne(DataSourceConfigDO::getPassword,
EncryptTypeHandler.encrypt(dbDataSourceConfig.getPassword()));
System.out.println(result);
}
}

View File

@ -100,7 +100,7 @@ public class MemberAuthServiceImpl implements MemberAuthService {
}
// 创建 Token 令牌记录登录日志
return createTokenAfterLoginSuccess(user, null, LoginLogTypeEnum.LOGIN_SOCIAL);
return createTokenAfterLoginSuccess(user, user.getMobile(), LoginLogTypeEnum.LOGIN_SOCIAL);
}
@Override

View File

@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.dal.dataobject.sensitiveword;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.framework.mybatis.core.type.StringLiSTTypeHandler;
import cn.iocoder.yudao.framework.mybatis.core.type.StringListTypeHandler;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
@ -46,7 +46,7 @@ public class SensitiveWordDO extends BaseDO {
* 例如说tag 有短信论坛两种敏感词 "推广" 在短信下是敏感词在论坛下不是敏感词
* 此时我们会存储一条敏感词记录它的 name "推广"tag 为短信
*/
@TableField(typeHandler = StringLiSTTypeHandler.class)
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> tags;
/**
* 状态

View File

@ -24,7 +24,8 @@ public interface PostMapper extends BaseMapperX<PostDO> {
return selectPage(reqVO, new QueryWrapperX<PostDO>()
.likeIfPresent("code", reqVO.getCode())
.likeIfPresent("name", reqVO.getName())
.eqIfPresent("status", reqVO.getStatus()));
.eqIfPresent("status", reqVO.getStatus())
.orderByDesc("id"));
}
default List<PostDO> selectList(PostExportReqVO reqVO) {

View File

@ -37,7 +37,7 @@ public interface DictDataMapper extends BaseMapperX<DictDataDO> {
.likeIfPresent(DictDataDO::getLabel, reqVO.getLabel())
.likeIfPresent(DictDataDO::getDictType, reqVO.getDictType())
.eqIfPresent(DictDataDO::getStatus, reqVO.getStatus())
.orderByAsc(Arrays.asList(DictDataDO::getDictType, DictDataDO::getSort)));
.orderByDesc(Arrays.asList(DictDataDO::getDictType, DictDataDO::getSort)));
}
default List<DictDataDO> selectList(DictDataExportReqVO reqVO) {

View File

@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeExportReqVO;
import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypePageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO;
import org.apache.ibatis.annotations.Mapper;
@ -18,7 +19,8 @@ public interface DictTypeMapper extends BaseMapperX<DictTypeDO> {
.likeIfPresent(DictTypeDO::getName, reqVO.getName())
.likeIfPresent(DictTypeDO::getType, reqVO.getType())
.eqIfPresent(DictTypeDO::getStatus, reqVO.getStatus())
.betweenIfPresent(DictTypeDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()));
.betweenIfPresent(DictTypeDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
.orderByDesc(DictTypeDO::getId));
}
default List<DictTypeDO> selectList(DictTypeExportReqVO reqVO) {

View File

@ -23,7 +23,7 @@ public interface ErrorCodeMapper extends BaseMapperX<ErrorCodeDO> {
.eqIfPresent("code", reqVO.getCode())
.likeIfPresent("message", reqVO.getMessage())
.betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
.orderByAsc("application_name", "code"));
.orderByDesc("code"));
}
default List<ErrorCodeDO> selectList(ErrorCodeExportReqVO reqVO) {

View File

@ -13,7 +13,8 @@ public interface NoticeMapper extends BaseMapperX<NoticeDO> {
default PageResult<NoticeDO> selectPage(NoticePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<NoticeDO>()
.likeIfPresent(NoticeDO::getTitle, reqVO.getTitle())
.eqIfPresent(NoticeDO::getStatus, reqVO.getStatus()));
.eqIfPresent(NoticeDO::getStatus, reqVO.getStatus())
.orderByDesc(NoticeDO::getId));
}
}

View File

@ -23,7 +23,8 @@ public interface RoleMapper extends BaseMapperX<RoleDO> {
.likeIfPresent(RoleDO::getName, reqVO.getName())
.likeIfPresent(RoleDO::getCode, reqVO.getCode())
.eqIfPresent(RoleDO::getStatus, reqVO.getStatus())
.betweenIfPresent(BaseDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime()));
.betweenIfPresent(BaseDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime())
.orderByDesc(RoleDO::getId));
}
default List<RoleDO> selectList(RoleExportReqVO reqVO) {

View File

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.user;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserExportReqVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
@ -33,7 +34,9 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
.likeIfPresent(AdminUserDO::getMobile, reqVO.getMobile())
.eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus())
.betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getBeginTime(), reqVO.getEndTime())
.inIfPresent(AdminUserDO::getDeptId, deptIds));
.inIfPresent(AdminUserDO::getDeptId, deptIds)
.orderByDesc(AdminUserDO::getId));
}
default List<AdminUserDO> selectList(UserExportReqVO reqVO, Collection<Long> deptIds) {

View File

@ -181,7 +181,7 @@ public class AdminAuthServiceImpl implements AdminAuthService {
}
// 创建 Token 令牌记录登录日志
return createTokenAfterLoginSuccess(user.getId(), null, LoginLogTypeEnum.LOGIN_SOCIAL);
return createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL);
}
@Override

View File

@ -8,8 +8,8 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
@ -248,7 +248,12 @@ public class PermissionServiceImpl implements PermissionService {
@Override
public Set<Long> getUserRoleIdsFromCache(Long userId, Collection<Integer> roleStatuses) {
Set<Long> roleIds = new HashSet<>(userRoleCache.get(userId));
Set<Long> cacheRoleIds = userRoleCache.get(userId);
// 创建用户的时候没有分配角色会存在空指针异常
if (CollUtil.isEmpty(cacheRoleIds)) {
return Collections.emptySet();
}
Set<Long> roleIds = new HashSet<>(cacheRoleIds);
// 过滤角色状态
if (CollectionUtil.isNotEmpty(roleStatuses)) {
roleIds.removeIf(roleId -> {
@ -451,6 +456,7 @@ public class PermissionServiceImpl implements PermissionService {
@Override
@DataPermission(enable = false) // 关闭数据权限不然就会出现递归获取数据权限的问题
@TenantIgnore // 忽略多租户的自动过滤如果不忽略会导致添加租户时因为切换租户导致获取不到 User即使忽略本身该方法不存在跨租户的操作不会存在问题
public DeptDataPermissionRespDTO getDeptDataPermission(Long userId) {
DeptDataPermissionRespDTO result = new DeptDataPermissionRespDTO();
// 获得用户的角色

View File

@ -215,6 +215,9 @@ public class RoleServiceImpl implements RoleService {
@Override
public List<RoleDO> getRoles(@Nullable Collection<Integer> statuses) {
if (CollUtil.isEmpty(statuses)) {
return roleMapper.selectList();
}
return roleMapper.selectListByStatus(statuses);
}

View File

@ -0,0 +1,36 @@
package cn.iocoder.yudao.server.framework.tip.core;
import cn.hutool.core.thread.ThreadUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
/**
* 项目启动成功后提供文档相关的地址
*/
@Component
@Slf4j
public class TipApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
ThreadUtil.execute(() -> {
ThreadUtil.sleep(1, TimeUnit.SECONDS); // 延迟 1 保证输出到结尾
log.info("\n----------------------------------------------------------\n\t" +
"项目启动成功!\n\t" +
"接口文档: \t{} \n\t" +
"开发文档: \t{} \n\t" +
"视频教程: \t{} \n\t" +
"源码解析: \t{} \n" +
"----------------------------------------------------------",
"https://doc.iocoder.cn/api-doc/",
"https://doc.iocoder.cn",
"https://t.zsxq.com/02Yf6M7Qn",
"https://t.zsxq.com/02B6ujIee");
});
}
}

View File

@ -0,0 +1,4 @@
/**
* 目的项目启动成功后提供文档相关的地址
*/
package cn.iocoder.yudao.server.framework.tip;

View File

@ -1,4 +0,0 @@
/**
* 占位
*/
package cn.iocoder.yudao.server.framework.ui.core;

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because one or more lines are too long

View File

@ -12,15 +12,15 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n
/***/ }),
/***/ "./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"f587f70a-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/error/404.vue?vue&type=template&id=09c68b87&scoped=true&":
/***/ "./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"2ef12c28-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/error/404.vue?vue&type=template&id=09c68b87&scoped=true&":
/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"f587f70a-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/error/404.vue?vue&type=template&id=09c68b87&scoped=true& ***!
!*** ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"2ef12c28-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/error/404.vue?vue&type=template&id=09c68b87&scoped=true& ***!
\*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"wscn-http404-container\" }, [\n _c(\"div\", { staticClass: \"wscn-http404\" }, [\n _vm._m(0),\n _c(\n \"div\",\n { staticClass: \"bullshit\" },\n [\n _c(\"div\", { staticClass: \"bullshit__oops\" }, [_vm._v(\" 404错误! \")]),\n _c(\"div\", { staticClass: \"bullshit__headline\" }, [\n _vm._v(\" \" + _vm._s(_vm.message) + \" \"),\n ]),\n _c(\"div\", { staticClass: \"bullshit__info\" }, [\n _vm._v(\n \" 对不起您正在寻找的页面不存在。尝试检查URL的错误然后按浏览器上的刷新按钮或尝试在我们的应用程序中找到其他内容。 \"\n ),\n ]),\n _c(\n \"router-link\",\n { staticClass: \"bullshit__return-home\", attrs: { to: \"/\" } },\n [_vm._v(\" 返回首页 \")]\n ),\n ],\n 1\n ),\n ]),\n ])\n}\nvar staticRenderFns = [\n function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"pic-404\" }, [\n _c(\"img\", {\n staticClass: \"pic-404__parent\",\n attrs: { src: __webpack_require__(/*! @/assets/404_images/404.png */ \"./src/assets/404_images/404.png\"), alt: \"404\" },\n }),\n _c(\"img\", {\n staticClass: \"pic-404__child left\",\n attrs: {\n src: __webpack_require__(/*! @/assets/404_images/404_cloud.png */ \"./src/assets/404_images/404_cloud.png\"),\n alt: \"404\",\n },\n }),\n _c(\"img\", {\n staticClass: \"pic-404__child mid\",\n attrs: {\n src: __webpack_require__(/*! @/assets/404_images/404_cloud.png */ \"./src/assets/404_images/404_cloud.png\"),\n alt: \"404\",\n },\n }),\n _c(\"img\", {\n staticClass: \"pic-404__child right\",\n attrs: {\n src: __webpack_require__(/*! @/assets/404_images/404_cloud.png */ \"./src/assets/404_images/404_cloud.png\"),\n alt: \"404\",\n },\n }),\n ])\n },\n]\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/views/error/404.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%22f587f70a-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options");
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"wscn-http404-container\" }, [\n _c(\"div\", { staticClass: \"wscn-http404\" }, [\n _vm._m(0),\n _c(\n \"div\",\n { staticClass: \"bullshit\" },\n [\n _c(\"div\", { staticClass: \"bullshit__oops\" }, [_vm._v(\" 404错误! \")]),\n _c(\"div\", { staticClass: \"bullshit__headline\" }, [\n _vm._v(\" \" + _vm._s(_vm.message) + \" \"),\n ]),\n _c(\"div\", { staticClass: \"bullshit__info\" }, [\n _vm._v(\n \" 对不起您正在寻找的页面不存在。尝试检查URL的错误然后按浏览器上的刷新按钮或尝试在我们的应用程序中找到其他内容。 \"\n ),\n ]),\n _c(\n \"router-link\",\n { staticClass: \"bullshit__return-home\", attrs: { to: \"/\" } },\n [_vm._v(\" 返回首页 \")]\n ),\n ],\n 1\n ),\n ]),\n ])\n}\nvar staticRenderFns = [\n function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"pic-404\" }, [\n _c(\"img\", {\n staticClass: \"pic-404__parent\",\n attrs: { src: __webpack_require__(/*! @/assets/404_images/404.png */ \"./src/assets/404_images/404.png\"), alt: \"404\" },\n }),\n _c(\"img\", {\n staticClass: \"pic-404__child left\",\n attrs: {\n src: __webpack_require__(/*! @/assets/404_images/404_cloud.png */ \"./src/assets/404_images/404_cloud.png\"),\n alt: \"404\",\n },\n }),\n _c(\"img\", {\n staticClass: \"pic-404__child mid\",\n attrs: {\n src: __webpack_require__(/*! @/assets/404_images/404_cloud.png */ \"./src/assets/404_images/404_cloud.png\"),\n alt: \"404\",\n },\n }),\n _c(\"img\", {\n staticClass: \"pic-404__child right\",\n attrs: {\n src: __webpack_require__(/*! @/assets/404_images/404_cloud.png */ \"./src/assets/404_images/404_cloud.png\"),\n alt: \"404\",\n },\n }),\n ])\n },\n]\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/views/error/404.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%222ef12c28-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options");
/***/ }),
@ -112,7 +112,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nod
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_f587f70a_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_404_vue_vue_type_template_id_09c68b87_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"f587f70a-vue-loader-template\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib??vue-loader-options!./404.vue?vue&type=template&id=09c68b87&scoped=true& */ \"./node_modules/cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"f587f70a-vue-loader-template\\\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/error/404.vue?vue&type=template&id=09c68b87&scoped=true&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_f587f70a_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_404_vue_vue_type_template_id_09c68b87_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_f587f70a_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_404_vue_vue_type_template_id_09c68b87_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./src/views/error/404.vue?");
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_2ef12c28_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_404_vue_vue_type_template_id_09c68b87_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"2ef12c28-vue-loader-template\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib??vue-loader-options!./404.vue?vue&type=template&id=09c68b87&scoped=true& */ \"./node_modules/cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"2ef12c28-vue-loader-template\\\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/error/404.vue?vue&type=template&id=09c68b87&scoped=true&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_2ef12c28_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_404_vue_vue_type_template_id_09c68b87_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_2ef12c28_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_404_vue_vue_type_template_id_09c68b87_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./src/views/error/404.vue?");
/***/ })

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -12,15 +12,15 @@ eval("\n\nvar _interopRequireDefault = __webpack_require__(/*! ./node_modules/@b
/***/ }),
/***/ "./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"f587f70a-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/error/401.vue?vue&type=template&id=099c4504&scoped=true&":
/***/ "./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"2ef12c28-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/error/401.vue?vue&type=template&id=099c4504&scoped=true&":
/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"f587f70a-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/error/401.vue?vue&type=template&id=099c4504&scoped=true& ***!
!*** ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"2ef12c28-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/error/401.vue?vue&type=template&id=099c4504&scoped=true& ***!
\*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"errPage-container\" },\n [\n _c(\n \"el-button\",\n {\n staticClass: \"pan-back-btn\",\n attrs: { icon: \"arrow-left\" },\n on: { click: _vm.back },\n },\n [_vm._v(\" 返回 \")]\n ),\n _c(\n \"el-row\",\n [\n _c(\"el-col\", { attrs: { span: 12 } }, [\n _c(\"h1\", { staticClass: \"text-jumbo text-ginormous\" }, [\n _vm._v(\" 401错误! \"),\n ]),\n _c(\"h2\", [_vm._v(\"您没有访问权限!\")]),\n _c(\"h6\", [\n _vm._v(\n \"对不起,您没有访问权限,请不要进行非法操作!您可以返回主页面\"\n ),\n ]),\n _c(\"ul\", { staticClass: \"list-unstyled\" }, [\n _c(\n \"li\",\n { staticClass: \"link-type\" },\n [\n _c(\"router-link\", { attrs: { to: \"/\" } }, [\n _vm._v(\" 回首页 \"),\n ]),\n ],\n 1\n ),\n ]),\n ]),\n _c(\"el-col\", { attrs: { span: 12 } }, [\n _c(\"img\", {\n attrs: {\n src: _vm.errGif,\n width: \"313\",\n height: \"428\",\n alt: \"Girl has dropped her ice cream.\",\n },\n }),\n ]),\n ],\n 1\n ),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/views/error/401.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%22f587f70a-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options");
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"errPage-container\" },\n [\n _c(\n \"el-button\",\n {\n staticClass: \"pan-back-btn\",\n attrs: { icon: \"arrow-left\" },\n on: { click: _vm.back },\n },\n [_vm._v(\" 返回 \")]\n ),\n _c(\n \"el-row\",\n [\n _c(\"el-col\", { attrs: { span: 12 } }, [\n _c(\"h1\", { staticClass: \"text-jumbo text-ginormous\" }, [\n _vm._v(\" 401错误! \"),\n ]),\n _c(\"h2\", [_vm._v(\"您没有访问权限!\")]),\n _c(\"h6\", [\n _vm._v(\n \"对不起,您没有访问权限,请不要进行非法操作!您可以返回主页面\"\n ),\n ]),\n _c(\"ul\", { staticClass: \"list-unstyled\" }, [\n _c(\n \"li\",\n { staticClass: \"link-type\" },\n [\n _c(\"router-link\", { attrs: { to: \"/\" } }, [\n _vm._v(\" 回首页 \"),\n ]),\n ],\n 1\n ),\n ]),\n ]),\n _c(\"el-col\", { attrs: { span: 12 } }, [\n _c(\"img\", {\n attrs: {\n src: _vm.errGif,\n width: \"313\",\n height: \"428\",\n alt: \"Girl has dropped her ice cream.\",\n },\n }),\n ]),\n ],\n 1\n ),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/views/error/401.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%222ef12c28-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options");
/***/ }),
@ -101,7 +101,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nod
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_f587f70a_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_401_vue_vue_type_template_id_099c4504_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"f587f70a-vue-loader-template\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib??vue-loader-options!./401.vue?vue&type=template&id=099c4504&scoped=true& */ \"./node_modules/cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"f587f70a-vue-loader-template\\\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/error/401.vue?vue&type=template&id=099c4504&scoped=true&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_f587f70a_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_401_vue_vue_type_template_id_099c4504_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_f587f70a_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_401_vue_vue_type_template_id_099c4504_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./src/views/error/401.vue?");
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_2ef12c28_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_401_vue_vue_type_template_id_099c4504_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"2ef12c28-vue-loader-template\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib??vue-loader-options!./401.vue?vue&type=template&id=099c4504&scoped=true& */ \"./node_modules/cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"2ef12c28-vue-loader-template\\\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/error/401.vue?vue&type=template&id=099c4504&scoped=true&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_2ef12c28_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_401_vue_vue_type_template_id_099c4504_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_2ef12c28_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_401_vue_vue_type_template_id_099c4504_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./src/views/error/401.vue?");
/***/ })

View File

@ -11,6 +11,61 @@ eval("!function(t,e){ true?e(exports):undefined}(this,function(t){\"use strict\"
/***/ }),
/***/ "./src/assets/images/bg-mobile.png":
/*!*****************************************!*\
!*** ./src/assets/images/bg-mobile.png ***!
\*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__.p + \"static/img/bg-mobile.0e3df208.png\";\n\n//# sourceURL=webpack:///./src/assets/images/bg-mobile.png?");
/***/ }),
/***/ "./src/assets/images/bg.png":
/*!**********************************!*\
!*** ./src/assets/images/bg.png ***!
\**********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__.p + \"static/img/bg.9bed9548.png\";\n\n//# sourceURL=webpack:///./src/assets/images/bg.png?");
/***/ }),
/***/ "./src/assets/images/icon.png":
/*!************************************!*\
!*** ./src/assets/images/icon.png ***!
\************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAS1BMVEX///+QkJDq6ur9/f35+fnz8/ORkZGGhob19fWVlZV/f3/v7+/s7Ozc3NzPz8+3t7efn5/d3d3Ly8vCwsK7u7ukpKR1dXVgYGBfX19XIQVLAAAAVUlEQVQI113OWQqAMAxF0ZgO6dw6u/+VWkF8xfsTDiQQ6hnWhNzuM6RLqOaTWsIGUZIrTG+WKbY+QUVD6k+2WG5x4HFKwiKLn3FpqpTh1+xXR0jzoxvqPQI0Iy9ftQAAAABJRU5ErkJggg==\"\n\n//# sourceURL=webpack:///./src/assets/images/icon.png?");
/***/ }),
/***/ "./src/assets/images/pic.png":
/*!***********************************!*\
!*** ./src/assets/images/pic.png ***!
\***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__.p + \"static/img/pic.49137f73.png\";\n\n//# sourceURL=webpack:///./src/assets/images/pic.png?");
/***/ }),
/***/ "./src/assets/logo/login-logo.png":
/*!****************************************!*\
!*** ./src/assets/logo/login-logo.png ***!
\****************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAaEAAABACAYAAACzx8hRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAKwwAACsMBNCkkqwAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAwiSURBVHic7Z3Rcdu4FoZ/39nh8C3uwLzDAuytwNwK4g7CrcDuIEoFUSoIU8E6FSxVwcoFcC5dwVpvHL7kPuAwoWUCBCWQIKX/m9HEESAQoiT8OAcHBxc/fvzA0ri4uPDdBUIImZwljtd9/Md3BwghhJwvFCFCCCHeoAgRQgjxBkWIEEKINyhChBBCvPGb7w6Q06cIwsu4rl6ObCMBkAB4jOtqa1E/ApACyAFsj70+IWQcLpYY8ncKIdpFEK4AfNQUb+K6Sny05RoRj0cAWVxXD5avuYQSnOZx3Sq2ej8d9+QZwLZ5xHX1aNMXFxRBmEG9/3yqa5LTZInjdR+0hMgoiJCsANzLU/dFEOaWg/8lgAzAu46y2yII70ztyLX3Be9KHu8BfIcSxtERAfoA4EMRhF90QiyWWzRFn3p4sbE0CXEFRYg4R6yfDGrQb5MVQZj0DXJxXZViyXzWVFnDLCIP6BYwANhBuelGpyVADfdyb+7iuir3qqfQW7NTsoGyPmdHEYT5SE3ncV2tRmqb9EARIk4pgvAOwF+a4nf4JUTGNZq4rtbS1m1H8VURhGlcV5nm5amh6bsp1oc6BKjhGsBWrLl87H74QgSj67M7hE8iEq7a2ycfqV1iAUXIMUUQprBzqySGskgsAVtctFUaBnVr4rp6LILwCa/XcdpcQ1kyqUVzKdQaTpdVsyqC8HFfUIogfMBbC6zhyxQDv3wHugSo4R2Av4sg/MQZODl3KELuSXH8jO0K7lwztm1toFxoLriDXjwAtT6SN6J34Kz5CsC/RRAOec19EYT3usK4rpxEvMR1lYnbzSREAPCxCMIbTOQeJFpK3x04Z7hPiDhH1jtWPdXWshh/ksR1lQL4ZFH1PZRlSPxR+u7AOUNLiIxCz5oOoKykRwA30/VqWuK6WhVBWAL4aqj2BBVIYQpf31hcTnefd1BWqS2MjCOTQhEiY5LC7Ja7Hrj2tTjENQcoa2f/PuwggRImt2LfviixKP+nKV6f0LqTjRjriKBfK6TweoQiREbDItR6hzNwhYgQbaGisBoh2gFIOkK1D+HOUObL1ZfhbdRZBP062aajfkMO9IuxCVl37BQhZtPwC0XIPRnsQj4T6F0ozxgWJOCirXLA9awRt1yKt9FyGwCpCBUwLEw2gn4wG3rvJiGuq60EK+RQQtS7X2oAOlfeN18DbFekZY/Vm9lEZ7bSN+naKHs7R2YFRcgxtmHO8oPUCUc5xIXisq2RSAH8I3/vAKziuvo5Qx8aGi5h2DoRWrfbnhMtIYoOESBNVoUIejdTLtezYYpMCSaLLbdsI4E+2tP0uV9qnj/GxUccQBEioyOD7xeoIITUwWzVFMyQH9n2qMhAf+hgn2JY6L4pIGKfUTMlSCol3d6xJxcWTI/Vp7s28QxFiEyCTfJSR7vs/xm4d8jZ/qB9ZODNodxEs7TOJsSFFQTMNKUQORyKkD9yQ1npsS3ijjXUDPyzuMXSM14EN4mQi2SyWreabAjWkTu4NjkCitDI9GRHzg2vSwZealBbp5y3bA7IOl173eo91BpNem5ZqsUifK8p3g38LkYHdEG3HkRmAEVofFLMIzvyPss/lGmmSDRg12d+DSVEJ528tIPUUDbUCtIFYZgsTJMInatlOhsoQsQpRRCuYZkFwedhe2Mhrh9TQECTvPRPFwljBeuDC3sOQByL1FDm6lwnk3Vp+j6elVU6RyhCxDU3cJ9y/+hs0+KS/NtJb8yUUKl4+qKxvsqRFunoPfKI3HfdvdgBeOlzPTdWY8/aDlkoFCFCHCIpeBKoNbo+IXqVTfxESQ1l72A3MWhcxya3WmkoM4mX6XVkAihCZAkkDnLMRQ76YUVLiNYwH+ewcSRAt0UQ/nDQjlMkKKfvOIshHCpC2tcxw4J/KEJkCdxivFM1R0FCsVPZs9Q1ED/BHLZ8CvTuDRuIyaJJDW69SPei/cnNDLKLnB0UoZGRL/Xq0Nf3LSSPtdGSuCGuqy4h2uHE9wxJWHY64SUPtbj2f1urI/tBBsJD7QgZGQk++NZ66hz2Cq2gP8KDkJ/QEiJO2Q8VdhQS/IzjF5BNuctGp2URlXFduQpLbhhycF0E/V4bJ8hakPYYdULaUITIEsgWFKKtZcRw7O3M9gmtLOv93N/kaf/SPs+er3+W0B1HyDyIfHfAIbnvDhxI6bsD5wgtIYf05Ik7FGN7B+SYM1HONGTVFPlki9f8YUUQZlDnKJWaKpHm+SeL5i8H3B/ddZwhJ8l2HWdOyBsoQm5JMb1LwaWL6RPmGR10hZHXMcZEBOID1ObUDdTBe7brQjYRdNfw7GrsYA3Hv4VjI00b5rin6pyhO46Q8Wnvb7kF8FcRhGURhGsJZQZOL9Nz5rsDZBlQhAgZn6TjuSuoCLJGfE7q5E9xO3733Q8yf+iOI0tgg+MXuyO4TSEzBN1O/2eLNbi+8jmTQX+O0CAkeekx1uJW0inxWIeZQREiSyB3FKI9uQjJoKdbz8qlTmJoonTbo+mI6+qxCMJPUJbgsWmX1ke28QfU/eaxDjODIkTIuCSGsmbQs5qdNwvzRRBe6lL+GBbd3xyHUQThzdiZG+K6WhVBmI95DbJsKEIOcRW904a54wAAH4sg9L2R8VASQ1ku/1rPzsWy2hZBuMWB+efE8soAXBVB+PsZpBAiM4aBCYSMS6J5ftca/HV1gLfrFA9Q7r33AMoiCK0zVRdBGBVB+AgVzt24CLOedRJCRoUiRMi46KLe2taH1hJqWymyON+2CN8B+FwEYW5x6uiNXHM/UOAa89wbRs4EuuPI2JztLLsn4CCXOjfQZxbYz5aQaerdov8+b6VO1+L+fRGEj80x2hMStc7zSSa65lTXIZZQhMhoSKoabURaEYTZiEk950BiKMst6pTNHzJY66yqb5YCkkKJUZfoZRKoMGWY8hXssyo84MgQbYs6+RHtkwOhCM2fyHcHDqFPgIQPcrzBgwx+xw40c0N7cmpLNFLD63Pgp0WlG6x3sDzBNK6rUnK6dbV1Je2sbNqaGofBE6f0/ToJKEIzRlw1vjZYHoQscuewzwDwAUAiM/3HUzltVO6D7h48SZ3IUAdQUXCXAEx55gZFyEnIdIruvUsfxS13ktFyci9P/Uj1xUER8oRENe3/ILb4FQ11A0e7zScmx/AUNFcAvgL4WgThd6j7kLfKt+2B1sHu+X3a7eWO1kYSQ1nT/spQpzmoLod+zeh7OxGqRXBCQwp9wtM1FrZuIqKatp7KNVVTLDgR7qlCEfLHC94uEg/dEX6Kh3C9l8crl5G47abAlRVgmnHnFrPyHEoQTILehGhvoYR0ZdOxuK5yEfuuSc5tEYRpXFeZTVszIcLr386hmRVOwgpfGgzR9kfuoI05uk0yQ9kOdufj+GLn8OjtxFCWQwmG6bydEmaR2kElQP0MZdV87mlvH9060jOmG4x3UHkBNzhuQpW76MupuiHnDkXIE5K48lhLxtWA6RJTn+6gBue5ClHmohFxi+ncPs1nft/TzArqXu06yj5BWUlDeDXAyvfvS0e7Nw6FuLdPcV0lcsR3dkQ7LkRzjr+ls4Ai5JdjZl7Pc3SZyOC26Sj6M66rPK6rl7iubvB2AJwDmaN2UkNZLutbf6BbYAAVcv0iM/MIr0V7I+mh8oF96qq/wi9r5L9xXa2WGBjiwILZYaZRgecARcgvh/54dph3lE+29/9v+4IZ19UDgN8xnzNnnidyx+TAzxDtCN1WYdb80RLtb3j9uQ/p65cucZHnbsQaKQe0N0cO9SrsAJzC+18sFz9+LO+k24uL08jZKfs/hh7L/A3Aas4/Gll0/1f++z2uK6NgSqhy46pLMGxtwxVvskwfSxGEd1Dv6w6/3tOrhKEdIe0bcU91tRe1P/ciCEv0R3ttANz5tHAkei3qKCqbyYn8FpKu19t8LpKpe2hAwux/S/sscbzugyLkmY409yXeniHzAjXz3S7FXSKJMiOoWeZBfZYB2jbs2ERiUScbczBqBKkrQ4S8zzXUnqk/bEPEDQPvE9R36HGOLtsxGBq27yFFkROWOF73QREioyCDQrkU0ZwDRRDeTRgUQBbIEsfrPihChBCyEJY4XvfBwARCCCHeoAgRQgjxBkWIEEKINyhChBBCvEERIoQQ4g2KECGEEG/8H4e6e0opY/nPAAAAAElFTkSuQmCC\"\n\n//# sourceURL=webpack:///./src/assets/logo/login-logo.png?");
/***/ }),
/***/ "./src/utils/jsencrypt.js":
/*!********************************!*\
!*** ./src/utils/jsencrypt.js ***!

View File

@ -12,15 +12,15 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n
/***/ }),
/***/ "./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"f587f70a-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/bpm/oa/leave/create.vue?vue&type=template&id=e0c7f4d2&":
/***/ "./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"2ef12c28-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/bpm/oa/leave/create.vue?vue&type=template&id=e0c7f4d2&":
/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"f587f70a-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/bpm/oa/leave/create.vue?vue&type=template&id=e0c7f4d2& ***!
!*** ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"2ef12c28-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/bpm/oa/leave/create.vue?vue&type=template&id=e0c7f4d2& ***!
\*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"app-container\" },\n [\n _c(\n \"el-form\",\n {\n ref: \"form\",\n attrs: { model: _vm.form, rules: _vm.rules, \"label-width\": \"80px\" },\n },\n [\n _c(\n \"el-form-item\",\n { attrs: { label: \"开始时间\", prop: \"startTime\" } },\n [\n _c(\"el-date-picker\", {\n attrs: {\n clearable: \"\",\n size: \"small\",\n type: \"date\",\n \"value-format\": \"timestamp\",\n placeholder: \"选择开始时间\",\n },\n model: {\n value: _vm.form.startTime,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"startTime\", $$v)\n },\n expression: \"form.startTime\",\n },\n }),\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"结束时间\", prop: \"endTime\" } },\n [\n _c(\"el-date-picker\", {\n attrs: {\n clearable: \"\",\n size: \"small\",\n type: \"date\",\n \"value-format\": \"timestamp\",\n placeholder: \"选择结束时间\",\n },\n model: {\n value: _vm.form.endTime,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"endTime\", $$v)\n },\n expression: \"form.endTime\",\n },\n }),\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"请假类型\", prop: \"type\" } },\n [\n _c(\n \"el-select\",\n {\n attrs: { placeholder: \"请选择\" },\n model: {\n value: _vm.form.type,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"type\", $$v)\n },\n expression: \"form.type\",\n },\n },\n _vm._l(_vm.typeDictData, function (dict) {\n return _c(\"el-option\", {\n key: parseInt(dict.value),\n attrs: { label: dict.label, value: parseInt(dict.value) },\n })\n }),\n 1\n ),\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"原因\", prop: \"reason\" } },\n [\n _c(\n \"el-col\",\n { attrs: { span: 10 } },\n [\n _c(\"el-input\", {\n attrs: {\n type: \"textarea\",\n rows: 3,\n placeholder: \"请输入原因\",\n },\n model: {\n value: _vm.form.reason,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"reason\", $$v)\n },\n expression: \"form.reason\",\n },\n }),\n ],\n 1\n ),\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n [\n _c(\n \"el-button\",\n { attrs: { type: \"primary\" }, on: { click: _vm.submitForm } },\n [_vm._v(\"提 交\")]\n ),\n ],\n 1\n ),\n ],\n 1\n ),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/views/bpm/oa/leave/create.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%22f587f70a-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options");
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"app-container\" },\n [\n _c(\n \"el-form\",\n {\n ref: \"form\",\n attrs: { model: _vm.form, rules: _vm.rules, \"label-width\": \"80px\" },\n },\n [\n _c(\n \"el-form-item\",\n { attrs: { label: \"开始时间\", prop: \"startTime\" } },\n [\n _c(\"el-date-picker\", {\n attrs: {\n clearable: \"\",\n size: \"small\",\n type: \"date\",\n \"value-format\": \"timestamp\",\n placeholder: \"选择开始时间\",\n },\n model: {\n value: _vm.form.startTime,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"startTime\", $$v)\n },\n expression: \"form.startTime\",\n },\n }),\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"结束时间\", prop: \"endTime\" } },\n [\n _c(\"el-date-picker\", {\n attrs: {\n clearable: \"\",\n size: \"small\",\n type: \"date\",\n \"value-format\": \"timestamp\",\n placeholder: \"选择结束时间\",\n },\n model: {\n value: _vm.form.endTime,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"endTime\", $$v)\n },\n expression: \"form.endTime\",\n },\n }),\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"请假类型\", prop: \"type\" } },\n [\n _c(\n \"el-select\",\n {\n attrs: { placeholder: \"请选择\" },\n model: {\n value: _vm.form.type,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"type\", $$v)\n },\n expression: \"form.type\",\n },\n },\n _vm._l(_vm.typeDictData, function (dict) {\n return _c(\"el-option\", {\n key: parseInt(dict.value),\n attrs: { label: dict.label, value: parseInt(dict.value) },\n })\n }),\n 1\n ),\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"原因\", prop: \"reason\" } },\n [\n _c(\n \"el-col\",\n { attrs: { span: 10 } },\n [\n _c(\"el-input\", {\n attrs: {\n type: \"textarea\",\n rows: 3,\n placeholder: \"请输入原因\",\n },\n model: {\n value: _vm.form.reason,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"reason\", $$v)\n },\n expression: \"form.reason\",\n },\n }),\n ],\n 1\n ),\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n [\n _c(\n \"el-button\",\n { attrs: { type: \"primary\" }, on: { click: _vm.submitForm } },\n [_vm._v(\"提 交\")]\n ),\n ],\n 1\n ),\n ],\n 1\n ),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/views/bpm/oa/leave/create.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%222ef12c28-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options");
/***/ }),
@ -68,7 +68,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nod
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_f587f70a_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_e0c7f4d2___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"f587f70a-vue-loader-template\"}!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib??vue-loader-options!./create.vue?vue&type=template&id=e0c7f4d2& */ \"./node_modules/cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"f587f70a-vue-loader-template\\\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/bpm/oa/leave/create.vue?vue&type=template&id=e0c7f4d2&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_f587f70a_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_e0c7f4d2___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_f587f70a_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_e0c7f4d2___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./src/views/bpm/oa/leave/create.vue?");
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_2ef12c28_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_e0c7f4d2___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"2ef12c28-vue-loader-template\"}!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib??vue-loader-options!./create.vue?vue&type=template&id=e0c7f4d2& */ \"./node_modules/cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"2ef12c28-vue-loader-template\\\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/bpm/oa/leave/create.vue?vue&type=template&id=e0c7f4d2&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_2ef12c28_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_e0c7f4d2___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_2ef12c28_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_create_vue_vue_type_template_id_e0c7f4d2___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./src/views/bpm/oa/leave/create.vue?");
/***/ })

View File

@ -12,15 +12,15 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n
/***/ }),
/***/ "./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"f587f70a-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/bpm/oa/leave/detail.vue?vue&type=template&id=003aca6c&":
/***/ "./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"2ef12c28-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/bpm/oa/leave/detail.vue?vue&type=template&id=003aca6c&":
/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"f587f70a-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/bpm/oa/leave/detail.vue?vue&type=template&id=003aca6c& ***!
!*** ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"2ef12c28-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/bpm/oa/leave/detail.vue?vue&type=template&id=003aca6c& ***!
\*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"app-container\" },\n [\n _c(\n \"el-form\",\n {\n ref: \"form\",\n attrs: { model: _vm.form, rules: _vm.rules, \"label-width\": \"100px\" },\n },\n [\n _c(\n \"el-form-item\",\n { attrs: { label: \"开始时间:\", prop: \"startTime\" } },\n [\n _vm._v(\n \" \" +\n _vm._s(_vm.parseTime(_vm.form.startTime, \"{y}-{m}-{d}\")) +\n \" \"\n ),\n ]\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"结束时间:\", prop: \"endTime\" } },\n [\n _vm._v(\n \" \" +\n _vm._s(_vm.parseTime(_vm.form.endTime, \"{y}-{m}-{d}\")) +\n \" \"\n ),\n ]\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"请假类型:\", prop: \"type\" } },\n [\n _c(\"dict-tag\", {\n attrs: {\n type: _vm.DICT_TYPE.BPM_OA_LEAVE_TYPE,\n value: _vm.form.type,\n },\n }),\n ],\n 1\n ),\n _c(\"el-form-item\", { attrs: { label: \"原因:\", prop: \"reason\" } }, [\n _vm._v(\" \" + _vm._s(_vm.form.reason)),\n ]),\n ],\n 1\n ),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/views/bpm/oa/leave/detail.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%22f587f70a-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options");
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"app-container\" },\n [\n _c(\n \"el-form\",\n {\n ref: \"form\",\n attrs: { model: _vm.form, rules: _vm.rules, \"label-width\": \"100px\" },\n },\n [\n _c(\n \"el-form-item\",\n { attrs: { label: \"开始时间:\", prop: \"startTime\" } },\n [\n _vm._v(\n \" \" +\n _vm._s(_vm.parseTime(_vm.form.startTime, \"{y}-{m}-{d}\")) +\n \" \"\n ),\n ]\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"结束时间:\", prop: \"endTime\" } },\n [\n _vm._v(\n \" \" +\n _vm._s(_vm.parseTime(_vm.form.endTime, \"{y}-{m}-{d}\")) +\n \" \"\n ),\n ]\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: \"请假类型:\", prop: \"type\" } },\n [\n _c(\"dict-tag\", {\n attrs: {\n type: _vm.DICT_TYPE.BPM_OA_LEAVE_TYPE,\n value: _vm.form.type,\n },\n }),\n ],\n 1\n ),\n _c(\"el-form-item\", { attrs: { label: \"原因:\", prop: \"reason\" } }, [\n _vm._v(\" \" + _vm._s(_vm.form.reason)),\n ]),\n ],\n 1\n ),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/views/bpm/oa/leave/detail.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%222ef12c28-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options");
/***/ }),
@ -68,7 +68,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nod
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_f587f70a_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_vue_vue_type_template_id_003aca6c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"f587f70a-vue-loader-template\"}!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib??vue-loader-options!./detail.vue?vue&type=template&id=003aca6c& */ \"./node_modules/cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"f587f70a-vue-loader-template\\\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/bpm/oa/leave/detail.vue?vue&type=template&id=003aca6c&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_f587f70a_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_vue_vue_type_template_id_003aca6c___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_f587f70a_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_vue_vue_type_template_id_003aca6c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./src/views/bpm/oa/leave/detail.vue?");
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_2ef12c28_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_vue_vue_type_template_id_003aca6c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"2ef12c28-vue-loader-template\"}!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib??vue-loader-options!./detail.vue?vue&type=template&id=003aca6c& */ \"./node_modules/cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"2ef12c28-vue-loader-template\\\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/bpm/oa/leave/detail.vue?vue&type=template&id=003aca6c&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_2ef12c28_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_vue_vue_type_template_id_003aca6c___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _node_modules_cache_loader_dist_cjs_js_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_2ef12c28_vue_loader_template_node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_detail_vue_vue_type_template_id_003aca6c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n//# sourceURL=webpack:///./src/views/bpm/oa/leave/detail.vue?");
/***/ })

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

4
yudao-ui-admin/.npmrc Normal file
View File

@ -0,0 +1,4 @@
phantomjs_cdnurl=http://cnpmjs.org/downloads
chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
registry=https://registry.npmmirror.com

View File

@ -12,7 +12,8 @@
"build:dev": "vue-cli-service build --mode dev",
"build:demo1024": "vue-cli-service build --mode demo1024",
"preview": "node build/index.js --preview",
"lint": "eslint --ext .js,.vue src"
"lint": "eslint --ext .js,.vue src",
"clean": "rimraf node_modules"
},
"husky": {
"hooks": {
@ -62,11 +63,11 @@
"vue-router": "3.4.9",
"vuedraggable": "2.24.3",
"vuex": "3.6.0",
"bpmn-js-token-simulation": "^0.10.0",
"min-dash": "^3.5.2",
"xml-js": "^1.6.11",
"@babel/parser": "^7.7.4",
"throttle-debounce": "^2.1.0"
"bpmn-js-token-simulation": "0.10.0",
"min-dash": "3.5.2",
"xml-js": "1.6.11",
"@babel/parser": "7.7.4",
"throttle-debounce": "2.1.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "4.4.6",

View File

@ -499,7 +499,8 @@ export const selectComponents = [
__slot__: {
'list-type': true
},
action: process.env.VUE_APP_BASE_API + "/admin-api/infra/file/upload", // 请求地址
// action: process.env.VUE_APP_BASE_API + "/admin-api/infra/file/upload", // 请求地址
action: '/infra/file/upload', // 请求地址
disabled: false,
accept: '',
name: 'file',

View File

@ -1,6 +1,7 @@
<script>
import { deepClone } from '@/utils/index'
import render from '@/components/render/render.js'
import {getAccessToken} from "@/utils/auth";
const ruleTrigger = {
'el-input': 'blur',
@ -79,10 +80,51 @@ function formBtns(h) {
}
function renderFormItem(h, elementList) {
const that = this
const data = this[this.formConf.formModel]
// const formRef = that.$refs[that.formConf.formRef] // $refs
return elementList.map(scheme => {
const config = scheme.__config__
const layout = layouts[config.layout]
// edit by el-upload
// https://github.com/JakHuang/form-generator/blob/master/src/components/parser/example/Index.vue
const vModel = scheme.__vModel__
const val = data[vModel]
if (scheme.__config__.tag === 'el-upload') {
//
scheme['file-list'] = (val || []).map(url => ({ name: url, url }))
// +
scheme.action = process.env.VUE_APP_BASE_API + "/admin-api/infra/file/upload"
scheme.headers = { Authorization: "Bearer " + getAccessToken() }
// on-success
scheme['on-success'] = function (response, file, fileList) {
if (response.code !== 0) {
return;
}
// data
const prev = data[vModel] || []
this.$set(data, vModel, [
...prev,
response.data
])
//
that.$refs[that.formConf.formRef].validateField(vModel)
}
// on-remove
scheme['on-remove'] = function (file, fileList) {
// data
const prev = data[vModel] || []
const index = prev.indexOf(file.response.data)
if (index === -1) {
return
}
prev.splice(index, 1) // set array
//
that.$refs[that.formConf.formRef].validateField(vModel)
}
}
if (layout) {
return layout.call(this, h, scheme)
}

View File

@ -152,31 +152,24 @@ export default {
})
},
refreshSelectedTag(view) {
this.$store.dispatch('tagsView/delCachedView', view).then(() => {
const { fullPath } = view
this.$nextTick(() => {
this.$router.replace({
path: '/redirect' + fullPath
})
})
})
this.$tab.refreshPage(view);
},
closeSelectedTag(view) {
this.$store.dispatch('tagsView/delView', view).then(({ visitedViews }) => {
this.$tab.closePage(view).then(({ visitedViews }) => {
if (this.isActive(view)) {
this.toLastView(visitedViews, view)
}
})
},
closeRightTags() {
this.$store.dispatch('tagsView/delRightTags', this.selectedTag).then(visitedViews => {
this.$tab.closeRightPage(this.selectedTag).then(visitedViews => {
if (!visitedViews.find(i => i.fullPath === this.$route.fullPath)) {
this.toLastView(visitedViews)
}
})
},
closeLeftTags() {
this.$store.dispatch('tagsView/delLeftTags', this.selectedTag).then(visitedViews => {
this.$tab.closeLeftPage(this.selectedTag).then(visitedViews => {
if (!visitedViews.find(i => i.fullPath === this.$route.fullPath)) {
this.toLastView(visitedViews)
}
@ -184,12 +177,12 @@ export default {
},
closeOthersTags() {
this.$router.push(this.selectedTag).catch(()=>{});
this.$store.dispatch('tagsView/delOthersViews', this.selectedTag).then(() => {
this.$tab.closeOtherPage(this.selectedTag).then(() => {
this.moveToCurrentTag()
})
},
closeAllTags(view) {
this.$store.dispatch('tagsView/delAllViews').then(({ visitedViews }) => {
this.$tab.closeAllPage().then(({ visitedViews }) => {
if (this.affixTags.some(tag => tag.path === this.$route.path)) {
return
}

View File

@ -69,8 +69,9 @@ import "bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css";
import Tinymce from '@/components/tinymce/index.vue'
Vue.component('tinymce', Tinymce)
import '@/icons'
import axios from 'axios'
Vue.prototype.$axios = axios
import request from "@/utils/request" // 实现 form generator 使用自己定义的 axios request 对象
console.log(request)
Vue.prototype.$axios = request
import '@/styles/index.scss'
/**

View File

@ -2,6 +2,7 @@ import { constantRoutes } from '@/router'
import { getRouters } from '@/api/menu'
import Layout from '@/layout/index'
import ParentView from '@/components/ParentView';
import { toCamelCase } from "@/utils";
const permission = {
state: {
@ -56,6 +57,8 @@ function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) {
icon: route.icon,
noCache: !route.keepAlive,
}
// 路由地址转首字母大写驼峰作为路由名称适配keepAlive
route.name = toCamelCase(route.path, true)
route.hidden = !route.visible
// 处理 component 属性
if (route.children) { // 父节点

View File

@ -63,7 +63,7 @@ const mutations = {
}
}
},
DEL_RIGHT_VIEWS: (state, view) => {
const index = state.visitedViews.findIndex(v => v.path === view.path)
if (index === -1) {
@ -79,6 +79,23 @@ const mutations = {
}
return false
})
},
DEL_LEFT_VIEWS: (state, view) => {
const index = state.visitedViews.findIndex(v => v.path === view.path)
if (index === -1) {
return
}
state.visitedViews = state.visitedViews.filter((item, idx) => {
if (idx >= index || (item.meta && item.meta.affix)) {
return true
}
const i = state.cachedViews.indexOf(item.name)
if (i > -1) {
state.cachedViews.splice(i, 1)
}
return false
})
}
}
@ -172,7 +189,14 @@ const actions = {
commit('DEL_RIGHT_VIEWS', view)
resolve([...state.visitedViews])
})
}
},
delLeftTags({ commit }, view) {
return new Promise(resolve => {
commit('DEL_LEFT_VIEWS', view)
resolve([...state.visitedViews])
})
},
}
export default {

View File

@ -1,22 +1,96 @@
import Cookies from 'js-cookie'
import {decrypt, encrypt} from "@/utils/jsencrypt";
const AccessTokenKey = 'ACCESS_TOKEN'
const RefreshTokenKey = 'REFRESH_TOKEN'
// ========== Token 相关 ==========
export function getAccessToken() {
return Cookies.get(AccessTokenKey)
return localStorage.getItem(AccessTokenKey)
}
export function getRefreshToken() {
return Cookies.get(RefreshTokenKey)
return localStorage.getItem(RefreshTokenKey)
}
export function setToken(token) {
Cookies.set(AccessTokenKey, token.accessToken)
Cookies.set(RefreshTokenKey, token.refreshToken)
localStorage.setItem(AccessTokenKey, token.accessToken)
localStorage.setItem(RefreshTokenKey, token.refreshToken)
}
export function removeToken() {
Cookies.remove(AccessTokenKey)
Cookies.remove(RefreshTokenKey)
localStorage.removeItem(AccessTokenKey)
localStorage.removeItem(RefreshTokenKey)
}
// ========== 账号相关 ==========
const UsernameKey = 'USERNAME'
const PasswordKey = 'PASSWORD'
const RememberMeKey = 'REMEMBER_ME'
export function getUsername() {
return localStorage.getItem(UsernameKey)
}
export function setUsername(username) {
localStorage.setItem(UsernameKey, username)
}
export function removeUsername() {
localStorage.removeItem(UsernameKey)
}
export function getPassword() {
const password = localStorage.getItem(PasswordKey)
return password ? decrypt(password) : undefined
}
export function setPassword(password) {
localStorage.setItem(PasswordKey, encrypt(password))
}
export function removePassword() {
localStorage.removeItem(PasswordKey)
}
export function getRememberMe() {
return localStorage.getItem(RememberMeKey) === 'true'
}
export function setRememberMe(rememberMe) {
localStorage.setItem(RememberMeKey, rememberMe)
}
export function removeRememberMe() {
localStorage.removeItem(RememberMeKey)
}
// ========== 租户相关 ==========
const TenantIdKey = 'TENANT_ID'
const TenantNameKey = 'TENANT_NAME'
export function getTenantName() {
return localStorage.getItem(TenantNameKey)
}
export function setTenantName(username) {
localStorage.setItem(TenantNameKey, username)
}
export function removeTenantName() {
localStorage.removeItem(TenantNameKey)
}
export function getTenantId() {
return localStorage.getItem(TenantIdKey)
}
export function setTenantId(username) {
localStorage.setItem(TenantIdKey, username)
}
export function removeTenantId() {
localStorage.removeItem(TenantIdKey)
}

View File

@ -75,13 +75,13 @@ export const SystemUserSocialTypeEnum = {
title: "钉钉",
type: 20,
source: "dingtalk",
img: "https://cdn.jsdelivr.net/gh/justauth/justauth-oauth-logo@1.11/dingtalk.png",
img: "https://s1.ax1x.com/2022/05/22/OzMDRs.png",
},
WECHAT_ENTERPRISE: {
title: "企业微信",
type: 30,
source: "wechat_enterprise",
img: "https://cdn.jsdelivr.net/gh/justauth/justauth-oauth-logo@1.11/wechat_enterprise.png",
img: "https://s1.ax1x.com/2022/05/22/OzMrzn.png",
}
}

View File

@ -427,3 +427,15 @@ export function isNumberStr(str) {
return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str)
}
// -转驼峰
export function toCamelCase(str, upperCaseFirst) {
str = (str || '').toLowerCase().replace(/-(.)/g, function (match, group1) {
return group1.toUpperCase();
});
if (upperCaseFirst && str) {
str = str.charAt(0).toUpperCase() + str.slice(1);
}
return str;
}

View File

@ -1,12 +1,17 @@
import axios from 'axios'
import { Notification, MessageBox, Message } from 'element-ui'
import {Message, MessageBox, Notification} from 'element-ui'
import store from '@/store'
import {getAccessToken, getRefreshToken, setToken} from '@/utils/auth'
import {getAccessToken, getRefreshToken, getTenantId, setToken} from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import Cookies from "js-cookie";
import {getPath, getTenantEnable} from "@/utils/ruoyi";
import {refreshToken} from "@/api/login";
// 需要忽略的提示。忽略后,自动 Promise.reject('error')
const ignoreMsgs = [
"无效的刷新令牌", // 刷新令牌被删除时,不用提示
"刷新令牌已过期" // 使用刷新令牌,刷新获取新的访问令牌时,结果因为过期失败,此时需要忽略。否则,会导致继续 401无法跳转到登出界面
]
// 是否显示重新登录
export let isRelogin = { show: false };
// Axios 无感知刷新令牌,参考 https://www.dashingdog.cn/article/11 与 https://segmentfault.com/a/1190000020210980 实现
@ -21,7 +26,9 @@ const service = axios.create({
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API + '/admin-api/', // 此处的 /admin-api/ 地址,原因是后端的基础路径为 /admin-api/
// 超时
timeout: 30000
timeout: 30000,
// 禁用 Cookie 等信息
withCredentials: false,
})
// request拦截器
service.interceptors.request.use(config => {
@ -32,7 +39,7 @@ service.interceptors.request.use(config => {
}
// 设置租户
if (getTenantEnable()) {
const tenantId = Cookies.get('tenantId');
const tenantId = getTenantId();
if (tenantId) {
config.headers['tenant-id'] = tenantId;
}
@ -66,85 +73,84 @@ service.interceptors.request.use(config => {
})
// 响应拦截器
service.interceptors.response.use( async res => {
// 未设置状态码则默认成功状态
const code = res.data.code || 200;
// 获取错误信息
const msg = errorCode[code] || res.data.msg || errorCode['default']
if (code === 401) {
// 如果未认证,并且未进行刷新令牌,说明可能是访问令牌过期了
if (!isRefreshToken) {
isRefreshToken = true;
// 1. 如果获取不到刷新令牌,则只能执行登出操作
if (!getRefreshToken()) {
return handleAuthorized();
}
// 2. 进行刷新访问令牌
try {
const refreshTokenRes = await refreshToken()
// 2.1 刷新成功,则回放队列的请求 + 当前请求
setToken(refreshTokenRes.data)
requestList.forEach(cb => cb())
return service(res.config)
} catch (e) {// 为什么需要 catch 异常呢?刷新失败时,请求因为 Promise.reject 触发异常。
// 2.2 刷新失败,只回放队列的请求
requestList.forEach(cb => cb())
// 提示是否要登出。即不回放当前请求!不然会形成递归
return handleAuthorized();
} finally {
requestList = []
isRefreshToken = false
}
} else {
// 添加到队列,等待刷新获取到新的令牌
return new Promise(resolve => {
requestList.push(() => {
res.config.headers['Authorization'] = 'Bearer ' + getAccessToken() // 让每个请求携带自定义token 请根据实际情况自行修改
resolve(service(res.config))
})
})
service.interceptors.response.use(async res => {
// 未设置状态码则默认成功状态
const code = res.data.code || 200;
// 获取错误信息
const msg = res.data.msg || errorCode[code] || errorCode['default']
if (ignoreMsgs.indexOf(msg) !== -1) { // 如果是忽略的错误码,直接返回 msg 异常
return Promise.reject(msg)
} else if (code === 401) {
// 如果未认证,并且未进行刷新令牌,说明可能是访问令牌过期了
if (!isRefreshToken) {
isRefreshToken = true;
// 1. 如果获取不到刷新令牌,则只能执行登出操作
if (!getRefreshToken()) {
return handleAuthorized();
}
} else if (code === 500) {
Message({
message: msg,
type: 'error'
})
return Promise.reject(new Error(msg))
} else if (code === 901) {
Message({
type: 'error',
duration: 0,
dangerouslyUseHTMLString: true,
message: '<div>演示模式,无法进行写操作</div>'
+ '<div> &nbsp; </div>'
+ '<div>参考 https://doc.iocoder.cn/ 教程</div>'
+ '<div> &nbsp; </div>'
+ '<div>5 分钟搭建本地环境</div>',
})
return Promise.reject(new Error(msg))
} else if (code !== 200) {
if (msg === '无效的刷新令牌') { // hard coding忽略这个提示直接登出
console.log('无效的刷新令牌')
} else {
Notification.error({
title: msg
})
// 2. 进行刷新访问令牌
try {
const refreshTokenRes = await refreshToken()
// 2.1 刷新成功,则回放队列的请求 + 当前请求
setToken(refreshTokenRes.data)
requestList.forEach(cb => cb())
return service(res.config)
} catch (e) {// 为什么需要 catch 异常呢?刷新失败时,请求因为 Promise.reject 触发异常。
// 2.2 刷新失败,只回放队列的请求
requestList.forEach(cb => cb())
// 提示是否要登出。即不回放当前请求!不然会形成递归
return handleAuthorized();
} finally {
requestList = []
isRefreshToken = false
}
return Promise.reject('error')
} else {
return res.data
// 添加到队列,等待刷新获取到新的令牌
return new Promise(resolve => {
requestList.push(() => {
res.config.headers['Authorization'] = 'Bearer ' + getAccessToken() // 让每个请求携带自定义token 请根据实际情况自行修改
resolve(service(res.config))
})
})
}
},
error => {
} else if (code === 500) {
Message({
message: msg,
type: 'error'
})
return Promise.reject(new Error(msg))
} else if (code === 901) {
Message({
type: 'error',
duration: 0,
dangerouslyUseHTMLString: true,
message: '<div>演示模式,无法进行写操作</div>'
+ '<div> &nbsp; </div>'
+ '<div>参考 https://doc.iocoder.cn/ 教程</div>'
+ '<div> &nbsp; </div>'
+ '<div>5 分钟搭建本地环境</div>',
})
return Promise.reject(new Error(msg))
} else if (code !== 200) {
if (msg === '无效的刷新令牌') { // hard coding忽略这个提示直接登出
console.log(msg)
} else {
Notification.error({
title: msg
})
}
return Promise.reject('error')
} else {
return res.data
}
}, error => {
console.log('err' + error)
let { message } = error;
let {message} = error;
if (message === "Network Error") {
message = "后端接口连接异常";
}
else if (message.includes("timeout")) {
} else if (message.includes("timeout")) {
message = "系统接口请求超时";
}
else if (message.includes("Request failed with status code")) {
} else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
@ -159,7 +165,7 @@ service.interceptors.response.use( async res => {
export function getBaseHeader() {
return {
'Authorization': "Bearer " + getAccessToken(),
'tenant-id': Cookies.get('tenantId'),
'tenant-id': getTenantId(),
}
}

View File

@ -429,7 +429,7 @@ export default {
this.$modal.confirm('是否删除该流程!!').then(function() {
deleteModel(row.id).then(response => {
that.getList();
that.msgSuccess("删除成功");
that.$modal.msgSuccess("删除成功");
})
}).catch(() => {});
},
@ -439,7 +439,7 @@ export default {
this.$modal.confirm('是否部署该流程!!').then(function() {
deployModel(row.id).then(response => {
that.getList();
that.msgSuccess("部署成功");
that.$modal.msgSuccess("部署成功");
})
}).catch(() => {});
},

View File

@ -55,10 +55,9 @@
<script>
import {getProcessDefinitionBpmnXML, getProcessDefinitionList} from "@/api/bpm/definition";
import {DICT_TYPE, getDictDatas} from "@/utils/dict";
import {getForm} from "@/api/bpm/form";
import {decodeFields} from "@/utils/formGenerator";
import Parser from '@/components/parser/Parser'
import {createProcessInstance, getMyProcessInstancePage} from "@/api/bpm/processInstance";
import {createProcessInstance} from "@/api/bpm/processInstance";
//
export default {

View File

@ -58,7 +58,7 @@
</el-table-column>
<el-table-column label="当前审批任务" align="center" prop="tasks">
<template slot-scope="scope">
<el-button v-for="task in scope.row.tasks" type="text" @click="handleFormDetail(task.id)">
<el-button v-for="task in scope.row.tasks" :key="task.id" type="text" @click="handleFormDetail(task.id)">
<span>{{ task.name }}</span>
</el-button>
</template>

View File

@ -12,7 +12,7 @@
</el-table-column>
<el-table-column label="规则范围" align="center" prop="options" width="440px">
<template slot-scope="scope">
<el-tag size="medium" v-if="scope.row.options" v-for="option in scope.row.options">
<el-tag size="medium" v-if="scope.row.options" :key="option" v-for="option in scope.row.options">
{{ getAssignRuleOptionName(scope.row.type, option) }}
</el-tag>
</template>

View File

@ -107,9 +107,17 @@
import {getCodeImg, sendSmsCode, socialAuthRedirect} from "@/api/login";
import {getTenantIdByName} from "@/api/system/tenant";
import Cookies from "js-cookie";
import {decrypt, encrypt} from '@/utils/jsencrypt'
import {SystemUserSocialTypeEnum} from "@/utils/constants";
import {getTenantEnable} from "@/utils/ruoyi";
import {
getPassword,
getRememberMe, getTenantName,
getUsername,
removePassword, removeRememberMe, removeTenantName,
removeUsername,
setPassword, setRememberMe, setTenantId, setTenantName,
setUsername
} from "@/utils/auth";
export default {
name: "Login",
@ -161,7 +169,7 @@ export default {
const tenantId = res.data;
if (tenantId && tenantId >= 0) {
//
Cookies.set("tenantId", tenantId);
setTenantId(tenantId)
callback();
} else {
callback('租户不存在');
@ -172,8 +180,6 @@ export default {
}
]
},
loading: false,
redirect: undefined,
//
@ -213,21 +219,16 @@ export default {
});
},
getCookie() {
const username = Cookies.get("username");
const password = Cookies.get("password");
const rememberMe = Cookies.get('rememberMe')
const tenantName = Cookies.get('tenantName');
const mobile = Cookies.get('mobile');
const mobileCode = Cookies.get('mobileCode');
const loginType = Cookies.get('loginType');
const username = getUsername();
const password = getPassword();
const rememberMe = getRememberMe();
const tenantName = getTenantName();
this.loginForm = {
username: username === undefined ? this.loginForm.username : username,
password: password === undefined ? this.loginForm.password : decrypt(password),
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
tenantName: tenantName === undefined ? this.loginForm.tenantName : tenantName,
mobile: mobile === undefined ? this.loginForm.mobile : mobile,
mobileCode: mobileCode === undefined ? this.loginForm.mobileCode : mobileCode,
loginType: loginType === undefined ? this.loginForm.loginType : loginType,
...this.loginForm,
username: username ? username : this.loginForm.username,
password: password ? password : this.loginForm.password,
rememberMe: rememberMe ? getRememberMe() : false,
tenantName: tenantName ? tenantName : this.loginForm.tenantName,
};
},
handleLogin() {
@ -236,18 +237,18 @@ export default {
this.loading = true;
// Cookie
if (this.loginForm.rememberMe) {
Cookies.set("username", this.loginForm.username, {expires: 30});
Cookies.set("password", encrypt(this.loginForm.password), {expires: 30});
Cookies.set('rememberMe', this.loginForm.rememberMe, {expires: 30});
Cookies.set('tenantName', this.loginForm.tenantName, {expires: 30});
setUsername(this.loginForm.username)
setPassword(this.loginForm.password)
setRememberMe(this.loginForm.rememberMe)
setTenantName(this.loginForm.tenantName)
} else {
Cookies.remove("username");
Cookies.remove("password");
Cookies.remove('rememberMe');
Cookies.remove('tenantName');
removeUsername()
removePassword()
removeRememberMe()
removeTenantName()
}
//
console.log("发起登录", this.loginForm);
// console.log("", this.loginForm);
this.$store.dispatch(this.loginForm.loginType === "sms" ? "SmsLogin" : "Login", this.loginForm).then(() => {
this.$router.push({path: this.redirect || "/"}).catch(() => {
});

View File

@ -74,7 +74,7 @@
<!-- <el-table-column label="商户名称" align="center" prop="merchantName" width="120"/>-->
<!-- <el-table-column label="应用名称" align="center" prop="appName" width="120"/>-->
<el-table-column label="支付渠道" align="center" width="130">
<template v-slot="scope">
<template slot-scope="scope">
<el-popover trigger="hover" placement="top">
<p>商户名称: {{ scope.row.merchantName }}</p>
<p>应用名称: {{ scope.row.appName }}</p>
@ -88,7 +88,7 @@
<!-- <el-table-column label="交易订单号" align="center" prop="tradeNo" width="140"/>-->
<!-- <el-table-column label="商户订单编号" align="center" prop="merchantOrderId" width="140"/>-->
<el-table-column label="商户订单号" align="left" width="230">
<template v-slot="scope">
<template slot-scope="scope">
<p class="order-font">
<el-tag size="mini">退款</el-tag>
{{ scope.row.merchantRefundNo }}
@ -100,7 +100,7 @@
</template>
</el-table-column>
<el-table-column label="支付订单号" align="center" prop="merchantRefundNo" width="250">
<template v-slot="scope">
<template slot-scope="scope">
<p class="order-font">
<el-tag size="mini">交易</el-tag>
{{ scope.row.tradeNo }}
@ -112,7 +112,7 @@
</template>
</el-table-column>
<el-table-column label="支付金额(元)" align="center" prop="payAmount" width="100">
<template v-slot="scope" class="">
<template slot-scope="scope" class="">
{{ parseFloat(scope.row.payAmount / 100).toFixed(2) }}
</template>
</el-table-column>
@ -122,17 +122,17 @@
</template>
</el-table-column>
<el-table-column label="退款类型" align="center" prop="type" width="80">
<template v-slot="scope">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.PAY_REFUND_ORDER_TYPE" :value="scope.row.type" />
</template>
</el-table-column>
<el-table-column label="退款状态" align="center" prop="status">
<template v-slot="scope">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.PAY_REFUND_ORDER_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="回调状态" align="center" prop="notifyStatus">
<template v-slot="scope">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.PAY_ORDER_NOTIFY_STATUS" :value="scope.row.notifyStatus" />
</template>
</el-table-column>
@ -183,7 +183,7 @@
<el-tag class="tag-purple" size="mini">{{ parseFloat(refundDetail.refundAmount / 100).toFixed(2) }}</el-tag>
</el-descriptions-item>
<el-descriptions-item label="退款类型">
<template v-slot="scope">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.PAY_REFUND_ORDER_TYPE" :value="refundDetail.type" />
</template>
</el-descriptions-item>

View File

@ -19,7 +19,7 @@
</el-tab-pane>
</el-tabs>
<div>
<el-form ref="loginForm" :model="loginForm" :rules="LoginRules" class="login-form">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
<!-- 账号密码登录 -->
<el-form-item prop="username">
<el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
@ -65,16 +65,28 @@
<script>
import Cookies from "js-cookie";
import { encrypt, decrypt } from '@/utils/jsencrypt'
import {
getPassword, getRememberMe,
getUsername,
removePassword,
removeUsername,
setPassword,
setRememberMe,
setUsername
} from "@/utils/auth";
import {getCodeImg} from "@/api/login";
export default {
name: "ThirdLogin",
data() {
return {
codeUrl: "",
captchaEnable: true,
loginForm: {
loginType: "uname",
username: "admin",
password: "admin123",
rememberMe: false, // TODO
rememberMe: false,
},
loginRules: {
username: [
@ -104,6 +116,7 @@ export default {
this.getCookie();
//
this.redirect = this.$route.query.redirect;
this.getCode();
//
this.type = this.$route.query.type;
this.code = this.$route.query.code;
@ -119,16 +132,30 @@ export default {
});
},
methods: {
getCode() {
//
if (!this.captchaEnable) {
return;
}
//
getCodeImg().then(res => {
res = res.data;
this.captchaEnable = res.enable;
if (this.captchaEnable) {
this.codeUrl = "data:image/gif;base64," + res.img;
this.loginForm.uuid = res.uuid;
}
});
},
getCookie() {
const username = Cookies.get("username");
const password = Cookies.get("password");
const rememberMe = Cookies.get('rememberMe')
const loginType = Cookies.get('loginType');
const username = getUsername();
const password = getPassword();
const rememberMe = getRememberMe();
this.loginForm = {
username: username === undefined ? this.loginForm.username : username,
password: password === undefined ? this.loginForm.password : decrypt(password),
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
loginType: loginType === undefined ? this.loginForm.loginType : loginType,
username: username ? username : this.loginForm.username,
password: password ? password : this.loginForm.password,
rememberMe: rememberMe ? getRememberMe() : false,
loginType: this.loginForm.loginType,
};
},
handleLogin() {
@ -136,11 +163,12 @@ export default {
if (valid) {
this.loading = true;
if (this.loginForm.rememberMe) {
Cookies.set("username", this.loginForm.username, { expires: 30 });
Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
setUsername(this.loginForm.username)
setPassword(this.loginForm.password)
setRememberMe(this.loginForm.rememberMe)
} else {
Cookies.remove("username");
Cookies.remove("password");
removeUsername()
removePassword()
}
this.$store.dispatch("SocialLogin2", {
code: this.code,

View File

@ -50,7 +50,7 @@
</el-table-column>
<el-table-column label="授权类型" align="center" prop="authorizedGrantTypes">
<template slot-scope="scope">
<el-tag :disable-transitions="true" v-for="(authorizedGrantType, index) in scope.row.authorizedGrantTypes" :index="index">
<el-tag :disable-transitions="true" :key="index" v-for="(authorizedGrantType, index) in scope.row.authorizedGrantTypes" :index="index">
{{ authorizedGrantType }}
</el-tag>
</template>

View File

@ -54,7 +54,7 @@
<el-table-column label="描述" align="center" prop="description"/>
<el-table-column label="标签" align="center" prop="tags">
<template slot-scope="scope">
<el-tag :disable-transitions="true" v-for="(tag, index) in scope.row.tags" :index="index">
<el-tag :disable-transitions="true" :key="index" v-for="(tag, index) in scope.row.tags" :index="index">
{{ tag }}
</el-tag>
</template>

View File

@ -147,7 +147,7 @@
<el-form-item label="手机号" prop="mobile">
<el-input v-model="sendSmsForm.mobile" placeholder="请输入手机号" />
</el-form-item>
<el-form-item v-for="param in sendSmsForm.params" :label="'参数 {' + param + '}'" :prop="'templateParams.' + param">
<el-form-item v-for="param in sendSmsForm.params" :key="param" :label="'参数 {' + param + '}'" :prop="'templateParams.' + param">
<el-input v-model="sendSmsForm.templateParams[param]" :placeholder="'请输入 ' + param + ' 参数'" />
</el-form-item>
</el-form>

View File

@ -111,7 +111,7 @@
</el-col>
<el-col :span="12">
<el-form-item label="归属部门" prop="deptId">
<treeselect v-model="form.deptId" :options="deptOptions" :show-count="true"
<treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" :clearable="false"
placeholder="请选择归属部门" :normalizer="normalizer"/>
</el-form-item>
</el-col>
@ -304,7 +304,7 @@ export default {
//
headers: getBaseHeader(),
//
url: process.env.VUE_APP_BASE_API + '/admin-api/' + "/system/user/import"
url: process.env.VUE_APP_BASE_API + '/admin-api/system/user/import'
},
//
queryParams: {