1191 Commits

Author SHA1 Message Date
5dfe804a17 Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-23 13:48:47 +08:00
e01abcd905 666 2022-03-23 13:48:39 +08:00
ecbaeed77e fix bug 2022-03-23 13:41:32 +08:00
ecd56bc160 fix bug 2022-03-23 13:40:42 +08:00
8e32119abb fix bug 2022-03-23 13:39:25 +08:00
697a1dd432 Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-22 18:03:14 +08:00
6fb554bd5f 待入账明细接口对接 2022-03-22 18:03:01 +08:00
3d8c027de9 Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-22 17:51:02 +08:00
95dc8075eb 666 2022-03-22 17:50:56 +08:00
e3a14bb57f edit 2022-03-22 17:41:58 +08:00
054f630f2e Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-22 17:28:19 +08:00
9c3a9ec3a3 - 2022-03-22 17:13:53 +08:00
873ff7f61b fix bug 2022-03-22 15:05:03 +08:00
1589bb4c82 Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-21 17:24:50 +08:00
957a3b1adb 账户管理 2022-03-21 17:24:05 +08:00
ab5258501a Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-21 14:19:14 +08:00
f14441f420 返佣 2022-03-21 14:19:10 +08:00
a4e4aeb26e Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-21 14:18:49 +08:00
c6e3be24f1 edit 2022-03-21 14:18:43 +08:00
150489598e Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-21 13:55:02 +08:00
b3831e88d8 返佣 2022-03-21 13:54:57 +08:00
5fa519fdbd 666 2022-03-21 10:34:18 +08:00
74968d658c 666 2022-03-21 10:31:06 +08:00
6ac6f01fce Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-21 10:15:35 +08:00
ba4310e079 666 2022-03-21 10:15:29 +08:00
3284eeea24 - 2022-03-21 10:02:29 +08:00
504078a7ec '1' 2022-03-21 00:57:42 +08:00
54e8ff1660 Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-18 20:56:53 +08:00
3590e8c7d1 账户明细接口对接 2022-03-18 20:56:42 +08:00
57e18b18b1 edit 2022-03-18 17:12:33 +08:00
634c4bc6cc Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-18 15:11:44 +08:00
a6193fbddc edit 2022-03-18 14:56:14 +08:00
9c5fdabab9 提现记录、账户明细接口对接 2022-03-17 19:35:35 +08:00
f18d53130a Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-17 17:24:56 +08:00
259effd5b5 入账记录 2022-03-17 17:24:45 +08:00
3539bd2a07 edit 2022-03-15 17:32:24 +08:00
6ccb5ced18 e 2022-03-15 17:02:13 +08:00
87d1523c31 fix bug 2022-03-14 18:23:35 +08:00
97a3aca60c fix bug 2022-03-14 18:18:23 +08:00
47522368ed fix bug 2022-03-14 13:24:26 +08:00
6e2b7d0b03 fix bug 2022-03-14 13:22:37 +08:00
851da10cfb Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-12 15:37:53 +08:00
b605210b11 分类管理 2022-03-12 15:37:45 +08:00
ec9bf57d12 Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-12 15:28:09 +08:00
22ca0b0fb1 666 2022-03-12 15:22:03 +08:00
5fdcfaa1ee 添加分类管理 2022-03-12 14:22:00 +08:00
e03ae573da Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-12 13:47:49 +08:00
f9b176c3c4 666 2022-03-12 13:46:46 +08:00
95ed59c7d2 - 2022-03-11 17:41:28 +08:00
98a709c3f1 - 2022-03-11 17:35:13 +08:00
63ab601233 - 2022-03-11 16:24:17 +08:00
d5f9c14c3a Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-11 16:16:26 +08:00
867a975a92 添加入账记录 2022-03-11 16:16:15 +08:00
e1732480cd fix bug 2022-03-11 16:14:32 +08:00
25b346a81d Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-11 15:28:46 +08:00
2d4eb18350 fix bug 2022-03-11 15:28:41 +08:00
79a1e172dd fix bug 2022-03-11 15:16:02 +08:00
172a0a0f24 Merge branch 'feature/partner' of gitlab.eascs.com:tms-ui/tms-obc-web into feature/partner 2022-03-11 15:05:32 +08:00
0adf32a01a fix bug 2022-03-11 15:05:28 +08:00
a8d25c4302 Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-11 14:50:47 +08:00
05dfb81a20 fix bug 2022-03-11 14:50:43 +08:00
3b976844f0 fix bug 2022-03-11 14:36:29 +08:00
5e26d4a24b Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-11 14:35:50 +08:00
06cbff566a edit 2022-03-11 14:35:47 +08:00
a31290acf8 Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-11 11:16:56 +08:00
403c45c388 - 2022-03-11 11:16:46 +08:00
eaaa3c9858 e 2022-03-11 10:52:44 +08:00
efa9a6bbad e 2022-03-11 10:50:53 +08:00
3d762c82b7 - 2022-03-11 10:41:38 +08:00
1db85b00b9 入账记录 2022-03-11 10:36:49 +08:00
28a20973d3 edit 2022-03-10 20:36:10 +08:00
ab385dea60 - 2022-03-10 17:51:20 +08:00
09462cc750 edit 2022-03-10 16:13:53 +08:00
8c06e1f9de edit 2022-03-10 16:12:36 +08:00
15937316dd fix bug 2022-03-10 15:40:52 +08:00
7406f1234a fix bug 2022-03-10 14:36:27 +08:00
1a353f4c93 解决冲突 2022-03-10 14:15:58 +08:00
8f3e54a812 Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-10 13:39:39 +08:00
5e93d5de64 - 2022-03-10 13:39:28 +08:00
1dc6d31ba8 666 2022-03-10 13:22:30 +08:00
9095126af4 Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-10 13:14:54 +08:00
09a22bab29 客户认领审核静态页面 2022-03-10 11:22:26 +08:00
451d142d0f Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-10 11:20:31 +08:00
31cb7bd194 - 2022-03-10 11:20:21 +08:00
152c139041 Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-03-10 10:38:14 +08:00
7ce80e8036 edit 2022-03-10 10:38:05 +08:00
da3b427a77 新增提现记录 2022-03-10 10:16:00 +08:00
0230886f3a 待入账明细 2022-03-09 20:06:29 +08:00
7550e9ceae - 2022-03-09 16:38:15 +08:00
b0a7611ae4 替换containsAllLable 2022-03-09 16:33:45 +08:00
737cfd55bb fix bug 2022-03-09 15:16:10 +08:00
b848978d70 fix bug 2022-03-09 14:49:59 +08:00
957a66254f - 2022-03-09 14:18:56 +08:00
647d42690c 账户管理 2022-03-09 14:08:38 +08:00
caa7dac493 业务统计 2022-03-01 16:07:48 +08:00
42dd2e6e05 Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-02-24 20:19:45 +08:00
3a90d710eb 解决冲突 2022-02-24 20:19:42 +08:00
d370708e98 业务统计 2022-02-24 20:10:36 +08:00
607ee45d88 Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-02-24 17:23:50 +08:00
984a9a85f0 客户明细 2022-02-24 17:18:22 +08:00
2870adbe6e 解决冲突 2022-02-24 15:36:43 +08:00
d6a5eab320 666 2022-02-24 14:21:29 +08:00
1c7944a48c Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-02-24 14:14:40 +08:00
d198a69eef 666 2022-02-24 14:11:57 +08:00
522043df21 Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-02-24 13:39:40 +08:00
0eb12cdf75 退款记录 2022-02-24 11:23:05 +08:00
c27874bb3f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-23 16:22:07 +08:00
aae2bb67e4 Merge branch 'feature/partner' into develop 2022-02-23 16:22:01 +08:00
b6a19bce22 Merge branch 'feature/partner' of https://gitlab.eascs.com/tms-ui/tms-obc-web into feature/partner 2022-02-23 16:20:43 +08:00
5832cc4fba 解决冲突 2022-02-23 16:20:39 +08:00
c8e2c088ea 添加业务统计 2022-02-23 15:42:26 +08:00
85895343f5 添加业务统计 2022-02-23 15:35:43 +08:00
307ee2a12a Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-23 15:12:52 +08:00
7cbc7b1b2e edit 2022-02-23 15:12:42 +08:00
b868555ef4 解决冲突 2022-02-23 14:26:30 +08:00
8ef9e67941 edit 2022-02-23 14:20:52 +08:00
6ff6a7d2bb edit 2022-02-23 14:07:42 +08:00
be36b14da2 edit 2022-02-23 14:02:52 +08:00
c9a79cfbdc edit 2022-02-23 13:41:09 +08:00
ef798b16b5 edit 2022-02-23 11:22:39 +08:00
6c4ccbd840 edit 2022-02-23 11:17:11 +08:00
6bbe864c56 edit 2022-02-23 09:59:48 +08:00
1eb30c37ba edit 2022-02-22 20:36:45 +08:00
8067580e8c ediut 2022-02-22 20:32:04 +08:00
0e687a4c68 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-22 20:20:09 +08:00
09c054a8d3 e 2022-02-22 20:20:05 +08:00
e8adac0d4f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-22 20:01:04 +08:00
38d03bc213 解决冲突 2022-02-22 20:00:55 +08:00
4160cf8f52 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-22 19:45:04 +08:00
8ad4883533 edit 2022-02-22 19:44:59 +08:00
bc19cadc3c Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-22 19:32:10 +08:00
1037567ab0 解决冲突 2022-02-22 19:32:02 +08:00
55c22bd3d6 edit 2022-02-22 19:20:45 +08:00
a33112d166 edit 2022-02-22 17:39:43 +08:00
2d185ebd19 edit 2022-02-22 17:11:48 +08:00
12be5d37b5 ediut 2022-02-22 16:45:33 +08:00
d86c80d5c5 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-22 16:43:17 +08:00
212be1e066 edit 2022-02-22 16:43:14 +08:00
197f6729aa fix bug 2022-02-22 16:41:53 +08:00
9c415c0b21 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-22 15:53:37 +08:00
e599d1404e fix bug 2022-02-22 15:53:27 +08:00
6285aa085c edit 2022-02-22 15:38:16 +08:00
c3d673380b edit 2022-02-22 15:32:58 +08:00
b46ad16d1b Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-22 15:29:23 +08:00
d6ca4586f5 edit 2022-02-22 15:29:19 +08:00
fd55d5a97b fix bug 2022-02-22 15:27:29 +08:00
79e6c6bd7e fix bug 2022-02-22 15:23:29 +08:00
1e898b4672 fix bug 2022-02-22 15:11:57 +08:00
1a49a3bcd5 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-22 15:06:50 +08:00
a95fc633c5 fix bug 2022-02-22 15:06:41 +08:00
25be51884f edit 2022-02-22 14:59:08 +08:00
78273efc25 fix bug 2022-02-22 14:53:48 +08:00
088817d1e1 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-22 14:30:54 +08:00
c2ff30bb38 fix bug 2022-02-22 14:30:47 +08:00
f3eb1b272c edit 2022-02-22 14:25:56 +08:00
1d5f6d274d edit 2022-02-22 13:49:57 +08:00
4a5c11dc92 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-22 13:43:51 +08:00
2edc16eb08 edit 2022-02-22 13:43:43 +08:00
c9be671576 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-22 13:41:14 +08:00
87ac5d9bd2 fix bug 2022-02-22 13:41:10 +08:00
8a623115aa Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-22 11:12:11 +08:00
38b0e711e2 e 2022-02-22 11:12:03 +08:00
29da0fbb41 fix bug 2022-02-22 10:59:05 +08:00
7df2419c7e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-22 10:16:28 +08:00
67bb8b3ccf fix bug 2022-02-22 10:16:19 +08:00
478739e51a fix bug 2022-02-22 10:14:29 +08:00
8251848a6f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-22 09:57:43 +08:00
da79b65fc5 edit 2022-02-22 09:57:39 +08:00
24edc34a3d Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-22 09:51:14 +08:00
998c59ad73 fix bug 2022-02-22 09:51:05 +08:00
61d00a5c54 edit 2022-02-22 09:38:19 +08:00
602be660ce Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-21 20:50:47 +08:00
a75f0872fe edit 2022-02-21 20:50:42 +08:00
a735f6947b Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-21 20:43:30 +08:00
a5b7c16a73 fix bug 2022-02-21 20:43:22 +08:00
85ff5d3c78 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-21 20:39:38 +08:00
901a5f0cdb edit 2022-02-21 20:39:34 +08:00
5a3ea6ca50 fix bug 2022-02-21 20:27:12 +08:00
ece0d578e1 fix bug 2022-02-21 20:14:32 +08:00
a079a8f8f0 fix bug 2022-02-21 20:12:27 +08:00
28af119a6d fix bug 2022-02-21 20:02:58 +08:00
2c593c17a9 fix bug 2022-02-21 19:59:51 +08:00
bd6b01775d fix bug 2022-02-21 19:53:09 +08:00
716193fe70 fix bug 2022-02-21 19:43:24 +08:00
32baf50a5a fix bug 2022-02-21 19:39:21 +08:00
9e01d52198 fix bug 2022-02-21 19:31:05 +08:00
cf6d0c5158 fix bug 2022-02-21 17:00:23 +08:00
13fab9e062 fix bug 2022-02-21 16:32:36 +08:00
ea407440b6 fix bug 2022-02-21 16:28:01 +08:00
967c972f5f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-21 16:27:01 +08:00
e699a6b8a0 fix bug 2022-02-21 16:26:51 +08:00
2c70028eb3 edit 2022-02-21 16:23:08 +08:00
f855154875 edit 2022-02-21 16:22:35 +08:00
488f4c5f6b fix bug 2022-02-21 16:04:27 +08:00
ba408730bf fix bug 2022-02-21 14:46:19 +08:00
5808200d77 fix bug 2022-02-21 14:28:15 +08:00
ba7df731ff Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-21 14:20:12 +08:00
85c771f9b0 fix bug 2022-02-21 14:20:02 +08:00
f5f682b2ed edit 2022-02-21 13:07:35 +08:00
5f87986be5 edit 2022-02-21 10:34:13 +08:00
b56784f483 ediot 2022-02-18 18:01:25 +08:00
369e41380b Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-18 17:58:34 +08:00
569236e6f9 ediot 2022-02-18 17:58:25 +08:00
29b50850f9 fix bug 2022-02-18 17:48:20 +08:00
c8e1bc6dd4 fix bug 2022-02-18 17:47:22 +08:00
70caafa45e fix bug 2022-02-18 16:31:27 +08:00
d7062ad688 fix bug 2022-02-18 16:13:43 +08:00
46812b44e0 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-18 15:53:33 +08:00
12802191fa fix bug 2022-02-18 15:53:24 +08:00
380f2f953d Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-18 15:47:45 +08:00
ccaa5006b5 edit 2022-02-18 15:47:37 +08:00
619a9ef9b7 fix bug 2022-02-18 15:46:44 +08:00
bad68c45a8 fix bug 2022-02-18 15:44:43 +08:00
d8655a51dd fix bug 2022-02-18 15:43:12 +08:00
90d7104d2c Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-18 15:35:28 +08:00
5903d75bbc fix bug 2022-02-18 15:35:20 +08:00
1b7f2f2ac9 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-18 15:31:07 +08:00
fe6f460d62 edit 2022-02-18 15:31:01 +08:00
dc5c4e44c8 fix bug 2022-02-18 15:24:08 +08:00
3b70f219e1 fix bug 2022-02-18 15:16:25 +08:00
57962d1de9 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-18 14:56:26 +08:00
84f5641cce fix bug 2022-02-18 14:56:17 +08:00
b8cbbbb4c0 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-18 14:54:03 +08:00
ff94f81ab8 edit 2022-02-18 14:53:59 +08:00
3c86e83ca7 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-18 14:35:40 +08:00
f5e4c6d4ae fix bug 2022-02-18 14:35:31 +08:00
a25687a5de edit 2022-02-18 14:25:33 +08:00
d37693cbda edit 2022-02-18 14:24:27 +08:00
a9b59fe1b0 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-18 14:18:55 +08:00
7c8e15a1cf edit 2022-02-18 14:18:50 +08:00
a88876a7bb Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-18 14:04:41 +08:00
d985c233b1 fix bug 2022-02-18 14:04:31 +08:00
05b4ad46e6 添加qrious插件 2022-02-18 13:50:39 +08:00
fc951f218f edit 2022-02-18 11:00:53 +08:00
149742b163 fix bug 2022-02-18 10:55:34 +08:00
cd4d216ec7 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-18 10:46:09 +08:00
35d19d4d7e fix bug 2022-02-18 10:45:58 +08:00
2f01da8ccc edit 2022-02-18 10:38:51 +08:00
c2d067be00 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-18 10:36:29 +08:00
430574fd72 edit 2022-02-18 10:36:20 +08:00
2660fea880 fix bug 2022-02-18 10:28:28 +08:00
27ab44a2e6 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-17 20:24:17 +08:00
e6618f7ce1 fix bug 2022-02-17 20:24:08 +08:00
7a24657bc1 edit 2022-02-17 20:24:06 +08:00
b729574342 edoit 2022-02-17 20:00:04 +08:00
2dbcbb6fac edit 2022-02-17 19:59:20 +08:00
e3f19fb9ff fix bug 2022-02-17 19:44:46 +08:00
7e330ba2df fix bug 2022-02-17 17:26:03 +08:00
cf34bd5146 fix bug 2022-02-17 17:03:31 +08:00
c56e0218ac fix bug 2022-02-17 16:56:01 +08:00
b1a18bbc54 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-17 16:45:21 +08:00
d884571904 fix bug 2022-02-17 16:45:13 +08:00
13415b9260 edit 2022-02-17 16:36:38 +08:00
dd93822325 fix bug 2022-02-17 16:19:27 +08:00
e40e1de488 fix bug 2022-02-17 15:46:05 +08:00
4a23973789 fix bug 2022-02-17 15:41:20 +08:00
b9495a8753 fix bug 2022-02-17 15:30:59 +08:00
b67e17f1d8 fix bug 2022-02-17 14:50:21 +08:00
2e4e4d1574 fix bug 2022-02-17 14:33:51 +08:00
825a3deea6 fix bug 2022-02-17 14:33:28 +08:00
7ebf38bc1f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-17 14:07:22 +08:00
370c7ad97f fix bug 2022-02-17 14:07:14 +08:00
021dcc3f83 edit 2022-02-17 13:16:55 +08:00
4e563b4474 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-17 11:33:47 +08:00
970f0d0a8e edit 2022-02-17 11:33:39 +08:00
38db93088a fix bug 2022-02-17 11:19:17 +08:00
5a6b684e76 fix bug 2022-02-17 11:14:19 +08:00
760e0a2ceb Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-17 11:09:55 +08:00
51832918a0 fix bug 2022-02-17 11:09:46 +08:00
ae821883b4 edit 2022-02-17 10:41:45 +08:00
21166544af edit 2022-02-17 10:23:24 +08:00
57b12bf54a Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-17 10:23:19 +08:00
6ea9c97d08 edit 2022-02-17 10:21:47 +08:00
a10aebd083 fix bug 2022-02-17 10:18:44 +08:00
1852cdb67e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-17 10:13:43 +08:00
512765189e fix bug 2022-02-17 10:13:33 +08:00
228203ea49 edit 2022-02-17 09:50:39 +08:00
82871dbe7d edit 2022-02-17 09:23:52 +08:00
8d4fa3553d edit 2022-02-17 09:22:41 +08:00
6c2271c3d2 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-16 17:49:40 +08:00
83bbef0ada edit 2022-02-16 17:49:33 +08:00
464f6e2b28 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-16 17:48:01 +08:00
8c8eb3faa6 fix bug 2022-02-16 17:47:52 +08:00
e45dfcd818 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-16 17:32:11 +08:00
9e58dddf07 edit 2022-02-16 17:32:07 +08:00
566cc63fed Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-16 17:26:00 +08:00
163d279187 fix bug 2022-02-16 17:25:49 +08:00
c0801a94d6 edit 2022-02-16 17:25:35 +08:00
888103ed65 edit 2022-02-16 17:15:27 +08:00
7d1c0d754e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-16 17:03:58 +08:00
c4b8e0cd31 edit 2022-02-16 17:03:46 +08:00
33fd6b3aac Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-16 16:59:53 +08:00
8572f3449d fix bug 2022-02-16 16:59:49 +08:00
8632aea3b7 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-16 16:47:25 +08:00
56068f5337 edit 2022-02-16 16:47:19 +08:00
f1dc67f92a fix bug 2022-02-16 16:38:09 +08:00
331c3207a7 edit 2022-02-16 16:05:22 +08:00
d8064e3f67 edit 2022-02-16 15:42:16 +08:00
36393ca86e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-16 15:31:42 +08:00
a42498eb2b edit 2022-02-16 15:31:37 +08:00
ce48326072 fix bug 2022-02-16 14:05:09 +08:00
a550a520e2 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-16 13:54:24 +08:00
5b49aeae04 fix bug 2022-02-16 13:54:15 +08:00
af9a1c4bf4 edit 2022-02-16 11:15:38 +08:00
6cea9b6086 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-16 11:10:20 +08:00
769eee319e edit 2022-02-16 11:10:16 +08:00
2b97ad5bb5 fix bug 2022-02-16 10:27:49 +08:00
d84522f4e5 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-16 10:00:50 +08:00
faae5ca73b fix bug 2022-02-16 10:00:40 +08:00
693c2b5cd5 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-16 09:50:59 +08:00
5f36f92aa7 edit 2022-02-16 09:50:50 +08:00
9eb716ecd2 fix bug 2022-02-16 09:50:29 +08:00
c1049e75a4 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-16 09:49:48 +08:00
6857f9a9da fix bug 2022-02-16 09:49:36 +08:00
e431261f9d edit 2022-02-15 16:55:42 +08:00
5da35efeb0 edit 2022-02-15 16:47:14 +08:00
e500a188a9 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-15 16:22:30 +08:00
69f9cb9377 edit 2022-02-15 16:22:19 +08:00
db43513998 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-15 16:19:49 +08:00
8ddd06d330 fix bug 2022-02-15 16:19:40 +08:00
8ccfb9e813 edit 2022-02-15 16:12:34 +08:00
2ec7169598 edit 2022-02-15 16:07:25 +08:00
bb331fa4b8 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-15 15:40:32 +08:00
bfd843de01 edit 2022-02-15 15:40:28 +08:00
9e2900ad75 fix bug 2022-02-15 15:12:38 +08:00
68fd65f6dc fix bug 2022-02-15 14:35:20 +08:00
8b3bec3c95 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-15 14:19:51 +08:00
1d23af8af6 fix bug 2022-02-15 14:19:43 +08:00
52e09f2b52 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-15 14:19:41 +08:00
d2ba3f393f edit 2022-02-15 14:19:33 +08:00
3d06073501 fix bug 2022-02-15 13:49:56 +08:00
b964004ee2 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-15 11:23:58 +08:00
510f8f25a5 fix bug 2022-02-15 11:23:47 +08:00
4b99e7ba59 edit 2022-02-15 10:23:19 +08:00
386bcccae8 edit 2022-02-15 10:01:07 +08:00
2220c62f00 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-14 17:56:32 +08:00
d00c9a2aeb edit 2022-02-14 17:56:28 +08:00
5eaf3cf0bf fix bug 2022-02-14 16:22:44 +08:00
9f538f9346 fix bug 2022-02-14 16:20:12 +08:00
eda51eb741 fix bug 2022-02-14 16:13:58 +08:00
f2e04197c4 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-14 13:33:01 +08:00
f8cc73fb51 fix bug 2022-02-14 13:32:52 +08:00
950f60f717 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-14 11:31:11 +08:00
2fa750982c edit 2022-02-14 11:31:06 +08:00
01cd9dbbde fix bug 2022-02-14 10:16:47 +08:00
ad083aa405 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-14 10:06:25 +08:00
df5b4ad0ad fix bug 2022-02-14 10:06:21 +08:00
72d289d728 edit 2022-02-11 17:40:34 +08:00
ce0dc4c68a Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-11 17:08:32 +08:00
5badfe8207 edit 2022-02-11 17:08:24 +08:00
6fba1aeb13 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-11 17:07:32 +08:00
3c90f63e8a fix bug 2022-02-11 17:07:27 +08:00
3edbff21e4 edit 2022-02-11 16:41:35 +08:00
98f9799643 edit 2022-02-11 15:49:22 +08:00
e3563635ea fix bug 2022-02-11 15:36:38 +08:00
fc661bd697 fix bug 2022-02-11 15:35:33 +08:00
cf1ae122fc edit 2022-02-11 15:33:26 +08:00
63572e11f9 edit 2022-02-11 15:28:46 +08:00
038e0f5891 edit 2022-02-11 15:20:43 +08:00
16aebd5930 edit 2022-02-11 14:11:57 +08:00
f0ec72ef5f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-11 14:03:23 +08:00
1c2218927d edit 2022-02-11 14:03:15 +08:00
bbd47bd2b7 fix bug 2022-02-11 13:52:07 +08:00
8e834a3da6 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-11 13:24:10 +08:00
b2925be94d fix bug 2022-02-11 13:24:02 +08:00
4089096207 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-11 10:52:49 +08:00
e2ef3366a9 edit 2022-02-11 10:52:44 +08:00
aa1ac020bb fix bug 2022-02-11 10:42:02 +08:00
8d8cae8424 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-11 10:26:41 +08:00
57e2efca94 fix bug 2022-02-11 10:26:36 +08:00
079e222ca9 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-10 17:49:38 +08:00
5e57929e3d edit 2022-02-10 17:49:30 +08:00
50ab4e4747 fix bug 2022-02-10 17:21:18 +08:00
0019e4730d fix bug 2022-02-10 17:18:26 +08:00
a110d88814 fix bug 2022-02-10 16:49:47 +08:00
b99fc687ab fix bug 2022-02-10 16:48:49 +08:00
ee1db2e57f fix bug 2022-02-10 16:46:50 +08:00
ac1138c8d8 fix bug 2022-02-10 16:43:47 +08:00
969c75f4d7 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-10 16:33:40 +08:00
00872adf10 fix bug 2022-02-10 16:33:30 +08:00
db3013c809 edit 2022-02-10 16:04:12 +08:00
22228e623a Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-10 14:49:47 +08:00
78ed555551 edit 2022-02-10 14:49:37 +08:00
72ff7ccc12 fix bug 2022-02-10 14:46:50 +08:00
421c458eab fix bug 2022-02-10 14:40:46 +08:00
cc736c7b3d fix bug 2022-02-10 14:24:39 +08:00
598bb5739e fix bug 2022-02-10 14:20:53 +08:00
73737ef3f2 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-10 13:37:32 +08:00
ca821d51c9 fix bug 2022-02-10 13:37:21 +08:00
6709a00c1f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-10 11:20:23 +08:00
10b7496b27 edit 2022-02-10 11:20:18 +08:00
1162a54f3a fix bug 2022-02-10 10:38:12 +08:00
18b1c0da61 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-10 09:53:47 +08:00
10c083f328 fix bug 2022-02-10 09:53:40 +08:00
885e9eacb5 edit 2022-02-10 09:48:10 +08:00
e59ad0a4e0 edit 2022-02-10 09:25:46 +08:00
306952a850 edit 2022-02-10 09:24:09 +08:00
b27cb58959 edit 2022-02-10 09:21:23 +08:00
e5fd7489cf edit 2022-02-10 09:13:25 +08:00
84b4ef6810 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-02-09 17:55:40 +08:00
ac29c0363d edit 2022-02-09 17:55:31 +08:00
f538024bf3 解决冲突 2022-02-09 17:48:55 +08:00
208f7f7c8e 解决冲突 2022-02-09 17:23:50 +08:00
de20e1859a 车辆接口更新 2022-02-09 17:22:46 +08:00
aa44534eab edit 2022-02-09 16:59:09 +08:00
cb7ef02e64 edit 2022-02-09 09:13:14 +08:00
29f656184a edit 2022-02-09 08:58:18 +08:00
a51249f32c 666 2022-01-28 10:00:52 +08:00
48d0232eef 666 2022-01-27 17:24:58 +08:00
b8e2d21f4b 666 2022-01-27 17:17:05 +08:00
3a37e012a6 666 2022-01-27 11:14:59 +08:00
9b2c25524a 车辆接口更新 2022-01-26 16:56:50 +08:00
b733972e11 车辆接口更新 2022-01-26 16:36:02 +08:00
b9277b64c4 车辆接口更新 2022-01-26 16:27:08 +08:00
1b5453669f 车辆接口更新 2022-01-26 15:57:37 +08:00
e8d0bb8d35 车辆接口更新 2022-01-26 15:34:27 +08:00
026b9c51d9 车辆接口更新 2022-01-26 14:52:59 +08:00
b17d109057 车辆接口更新 2022-01-26 14:31:02 +08:00
f158c94cca 车辆接口更新 2022-01-26 14:20:15 +08:00
bb61708d7a 车辆接口更新 2022-01-26 10:41:51 +08:00
a837d6e434 车辆接口更新 2022-01-26 10:38:03 +08:00
8a25947901 车辆接口更新 2022-01-26 10:33:07 +08:00
e0afdb2ea2 车辆接口更新 2022-01-26 10:31:39 +08:00
5b7261022b 车辆接口更新 2022-01-26 10:16:37 +08:00
5b6737f76a 车辆接口更新 2022-01-25 20:04:35 +08:00
35717ca650 车辆接口更新 2022-01-25 19:12:27 +08:00
f468d98cda 车辆接口更新 2022-01-25 17:35:34 +08:00
a5c4458f75 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-25 16:55:13 +08:00
5ae390dae5 车辆接口更新 2022-01-25 16:55:03 +08:00
6cf934c175 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-25 16:40:44 +08:00
e3eb03ac60 edit 2022-01-25 16:40:36 +08:00
2dbfef7d8c 车辆接口更新 2022-01-25 16:19:21 +08:00
4844efec30 车辆接口更新 2022-01-25 16:11:01 +08:00
0aa4e28e36 车辆接口更新 2022-01-25 16:09:24 +08:00
e300ba26dc Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-25 16:03:45 +08:00
eeb6fdcf61 车辆接口更新 2022-01-25 16:03:36 +08:00
1692eaa1e4 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-25 15:59:07 +08:00
f2779a13d6 edit 2022-01-25 15:59:01 +08:00
4b2521ccdf 车辆接口更新 2022-01-25 15:53:43 +08:00
eb893786f1 货源 2022-01-25 15:34:32 +08:00
e943c2f4d2 货源 2022-01-25 15:24:46 +08:00
a486a40b80 车辆接口更新 2022-01-25 15:04:03 +08:00
d55e607d55 车辆接口更新 2022-01-25 14:49:56 +08:00
03c77e2695 车辆接口更新 2022-01-25 14:35:14 +08:00
7d4875707b 车辆接口更新 2022-01-25 14:32:30 +08:00
bc8304e930 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-25 13:10:49 +08:00
a4e402fea6 车辆接口更新 2022-01-25 13:10:45 +08:00
36757adc20 edit 2022-01-25 10:56:12 +08:00
ec2e1516f4 edit 2022-01-25 10:55:47 +08:00
66177af625 edit 2022-01-24 20:52:26 +08:00
89e05507b6 edit 2022-01-24 19:58:38 +08:00
41a3c528f4 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-24 19:55:14 +08:00
89242d8d15 edit 2022-01-24 19:55:10 +08:00
220ffa2d6d Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-24 19:32:16 +08:00
ea8e4ac7e8 车辆接口更新 2022-01-24 19:32:08 +08:00
203701315d Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-24 17:07:17 +08:00
ac97fab679 edit 2022-01-24 17:07:03 +08:00
f6a74eceda Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-24 17:06:26 +08:00
57e5b1f3d3 车辆接口更新 2022-01-24 17:06:14 +08:00
e46bff7579 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-24 17:00:18 +08:00
0e8b1def3f edit 2022-01-24 17:00:12 +08:00
da1f474e57 车辆接口更新 2022-01-24 16:49:24 +08:00
5ce1b29126 车辆接口更新 2022-01-24 16:37:26 +08:00
9dd6530c5b 车辆接口更新 2022-01-24 16:09:32 +08:00
0d2c5eccf0 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-24 15:59:56 +08:00
9ae9f9894d 车辆接口更新 2022-01-24 15:59:51 +08:00
eff67c4b0f edit 2022-01-24 15:52:27 +08:00
4c75dd3a77 edit 2022-01-24 15:48:52 +08:00
6b92227e4a eduit 2022-01-24 14:33:53 +08:00
bb18cc386e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-24 14:04:01 +08:00
da62ad6fce edit 2022-01-24 14:03:52 +08:00
17b457cd0d 车辆接口更新 2022-01-24 11:11:47 +08:00
d0eadd3f0d 车辆接口更新 2022-01-24 10:56:04 +08:00
5ffcf27259 车辆接口更新 2022-01-24 10:46:40 +08:00
fbeb7ce765 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-24 10:07:49 +08:00
fb3aab3de2 车辆接口更新 2022-01-24 09:54:01 +08:00
034a3bc695 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-21 17:59:32 +08:00
d743a9af68 edit 2022-01-21 17:59:24 +08:00
a3698bdc0d Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-21 17:15:14 +08:00
30587959b9 车辆接口更新 2022-01-21 17:15:10 +08:00
1774fd7ced Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-21 17:00:13 +08:00
06043e703a edit 2022-01-21 17:00:05 +08:00
ec41f11e47 车辆接口更新 2022-01-21 16:47:45 +08:00
12f0c31d62 edit 2022-01-21 15:35:18 +08:00
2c3d76e439 edit 2022-01-21 15:27:28 +08:00
11307ad764 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-21 14:47:52 +08:00
8d296f1dcf edit 2022-01-21 14:47:47 +08:00
090606cf67 车辆接口更新 2022-01-21 14:05:11 +08:00
a409f9a613 车辆接口更新 2022-01-21 13:52:26 +08:00
7cfbcf2db2 车辆接口更新 2022-01-21 13:46:17 +08:00
b6e8520a35 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-21 13:24:29 +08:00
d919231f87 申诉处理 2022-01-21 13:24:06 +08:00
eed0749612 edit 2022-01-21 11:28:50 +08:00
7c821be050 edit 2022-01-21 11:17:29 +08:00
869c01b1a9 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-21 11:11:19 +08:00
cdfa96bc87 edit 2022-01-21 11:11:08 +08:00
624ceec32b 车辆接口更新 2022-01-21 10:59:07 +08:00
a6c4b19165 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-21 10:59:01 +08:00
7fa76b52fc edit 2022-01-21 10:58:20 +08:00
2bc832186a 车辆接口更新 2022-01-21 10:57:11 +08:00
cf084ff97c edit 2022-01-21 10:37:04 +08:00
571fe1c696 edit 2022-01-21 10:34:28 +08:00
77086c2ce8 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-21 10:31:06 +08:00
96e2e5297b edit 2022-01-21 10:31:03 +08:00
c05a8eb2ba 车辆接口更新 2022-01-21 10:11:34 +08:00
369d591b63 车辆接口更新 2022-01-20 20:57:00 +08:00
9bd9de7bf8 车辆接口更新 2022-01-20 20:51:32 +08:00
f2f88ba7f1 车辆接口更新 2022-01-20 20:36:36 +08:00
ff1b644c23 车辆接口更新 2022-01-20 20:24:49 +08:00
34dc8c83c6 车辆接口更新 2022-01-20 20:03:23 +08:00
f86f4cc801 车辆接口更新 2022-01-20 19:45:38 +08:00
cb9e56892b 车辆接口更新 2022-01-20 19:08:36 +08:00
64eebb5c4a Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-20 17:45:44 +08:00
ba4d1e9217 车辆接口更新 2022-01-20 17:45:30 +08:00
f638ba2682 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-20 17:27:44 +08:00
121fcce44c edit 2022-01-20 17:27:41 +08:00
7e498fe364 车辆接口更新 2022-01-20 17:18:45 +08:00
5818711df5 车辆接口更新 2022-01-20 17:18:25 +08:00
12c8510a5e 车辆接口更新 2022-01-20 17:15:24 +08:00
7e0259a0cc 车辆接口更新 2022-01-20 17:04:06 +08:00
96bdd7f602 车辆接口更新 2022-01-20 16:59:58 +08:00
267bf8a693 车辆接口更新 2022-01-20 16:40:29 +08:00
d9a3bb581c 车辆接口更新 2022-01-20 16:36:06 +08:00
440c8d38dc 车辆接口更新 2022-01-20 16:34:32 +08:00
60544b8896 车辆接口更新 2022-01-20 16:26:08 +08:00
9232c4cc0e 车辆接口更新 2022-01-20 16:08:16 +08:00
c6ebb6b0e6 车辆接口更新 2022-01-20 15:28:57 +08:00
61dccdd3d3 车辆接口更新 2022-01-20 15:24:19 +08:00
a68612626b 车辆接口更新 2022-01-20 15:12:09 +08:00
d51c0d0801 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-20 15:06:35 +08:00
b6f2c2c449 车辆接口更新 2022-01-20 15:06:27 +08:00
b96d3d5c39 车辆接口更新 2022-01-20 14:53:30 +08:00
3a0ae6a54e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-20 13:51:22 +08:00
a76a9f0718 edit 2022-01-20 13:51:18 +08:00
6bfc719245 车辆接口更新 2022-01-20 13:34:31 +08:00
2d3d12bdac 车辆接口更新 2022-01-20 10:56:05 +08:00
a75f0acda0 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-20 10:44:46 +08:00
10d2fc0150 车辆接口更新 2022-01-20 10:44:35 +08:00
ec285a095b Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-20 10:38:27 +08:00
29e13a49be edit 2022-01-20 10:38:23 +08:00
759b05471b 车辆接口更新 2022-01-20 10:30:55 +08:00
35feb48d2b 车辆接口更新 2022-01-20 10:20:36 +08:00
f6ac750157 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-20 10:00:39 +08:00
c6f38f6391 车辆接口更新 2022-01-20 10:00:35 +08:00
af0ffc08ea Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-19 21:00:08 +08:00
fa3f79e60b edit 2022-01-19 21:00:00 +08:00
ed8547e827 车辆接口更新 2022-01-19 20:38:24 +08:00
9f7c536255 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-19 20:19:59 +08:00
90887acf86 车辆接口更新 2022-01-19 20:19:55 +08:00
619eea6220 edit 2022-01-19 17:45:26 +08:00
a379828475 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-19 17:40:12 +08:00
d6f7fae989 车辆接口更新 2022-01-19 17:40:03 +08:00
50eeb36d64 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-19 17:37:34 +08:00
2837f3ef07 edit 2022-01-19 17:37:30 +08:00
05355b9412 车辆接口更新 2022-01-19 17:25:53 +08:00
42ed8b5f07 车辆接口更新 2022-01-19 17:09:14 +08:00
716b7f3aef Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-19 16:54:07 +08:00
dbb0aa089f 车辆接口更新 2022-01-19 16:53:58 +08:00
94c8c45126 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-19 16:30:17 +08:00
48ce6a1d10 edit 2022-01-19 16:30:12 +08:00
f61162a63c 车辆接口更新 2022-01-19 16:29:45 +08:00
321d14e9df 车辆接口更新 2022-01-19 15:52:33 +08:00
175e48816a 车辆接口更新 2022-01-19 15:13:45 +08:00
51a7014b2c 车辆接口更新 2022-01-19 14:41:29 +08:00
ccb410d145 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-19 14:37:56 +08:00
065232539e 车辆接口更新 2022-01-19 14:37:52 +08:00
eca3b314df 车辆接口更新 2022-01-19 14:32:46 +08:00
ce64b48674 edit 2022-01-19 14:21:42 +08:00
182e54e421 edit 2022-01-19 14:08:27 +08:00
26a0b9cd99 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-19 14:02:14 +08:00
eb42a89f0f edit 2022-01-19 14:02:10 +08:00
2c208636e6 车辆接口更新 2022-01-19 13:54:44 +08:00
7c8578a106 车辆接口更新 2022-01-19 13:50:55 +08:00
fce0c56506 车辆接口更新 2022-01-19 13:47:07 +08:00
a212b6200f 车辆接口更新 2022-01-19 13:35:19 +08:00
432e334c10 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-19 13:29:00 +08:00
3f83aa5cd6 车辆接口更新 2022-01-19 13:28:56 +08:00
d3246222f7 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-19 11:37:14 +08:00
54565374c0 edit 2022-01-19 11:37:10 +08:00
fa37d5c255 车辆接口更新 2022-01-19 11:37:03 +08:00
d708aa67b5 车辆接口更新 2022-01-19 11:25:09 +08:00
90ea64ab85 车辆接口更新 2022-01-19 11:15:52 +08:00
79ff8ddbd7 车辆接口更新 2022-01-19 11:13:54 +08:00
d718a7ff08 车辆接口更新 2022-01-19 10:41:44 +08:00
15fafe787c 车辆接口更新 2022-01-19 10:30:09 +08:00
f68400f42c 车辆接口更新 2022-01-19 10:12:31 +08:00
c442051454 车辆接口更新 2022-01-19 09:28:29 +08:00
4ccb9db42a 车辆接口更新 2022-01-18 20:05:27 +08:00
7a7af4f763 车辆接口更新 2022-01-18 20:02:26 +08:00
ca2e639b77 车辆接口更新 2022-01-18 19:51:26 +08:00
9f61585a67 车辆接口更新 2022-01-18 19:50:58 +08:00
1f4d59c56e 批量审核 2022-01-18 19:37:52 +08:00
661cd59af3 批量审核 2022-01-18 19:31:11 +08:00
4786d7d1f3 批量审核 2022-01-18 19:30:14 +08:00
5e6f55b7dc 批量审核 2022-01-18 19:26:01 +08:00
d18d3bf3ec 批量审核 2022-01-18 19:18:25 +08:00
c4e4441354 批量审核 2022-01-18 18:48:29 +08:00
958b468a51 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-18 18:43:42 +08:00
47a90970f5 批量审核 2022-01-18 18:43:38 +08:00
b699292cc9 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-18 17:55:57 +08:00
3ce3677b86 edit 2022-01-18 17:55:52 +08:00
0eab6eacc3 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-18 17:44:08 +08:00
8bf3a60425 批量审核 2022-01-18 17:44:03 +08:00
d37c5ac2b0 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-18 17:00:52 +08:00
09e1dd38f1 edit 2022-01-18 17:00:48 +08:00
a8a9565b40 批量审核 2022-01-18 16:57:24 +08:00
ae8d1eef2a 批量审核 2022-01-18 16:55:18 +08:00
bcad306ae5 批量审核 2022-01-18 16:36:36 +08:00
924441482f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-18 15:57:44 +08:00
5e56b43da0 批量审核 2022-01-18 15:57:40 +08:00
7d0d2fb7da Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-18 15:49:13 +08:00
9d1ba35333 edit 2022-01-18 15:49:09 +08:00
e3ffe66a67 批量审核 2022-01-18 15:21:33 +08:00
f6ccc1285c 批量审核 2022-01-18 13:24:18 +08:00
aebd899f51 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-18 09:51:21 +08:00
545d674d44 批量审核 2022-01-18 09:51:11 +08:00
7775b39bc6 edit 2022-01-17 21:07:42 +08:00
191301aa00 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-17 20:38:32 +08:00
d8b381a4f0 edit 2022-01-17 20:38:28 +08:00
47a0cecb9a 批量审核 2022-01-17 19:31:03 +08:00
2246e31d68 批量审核 2022-01-17 19:05:56 +08:00
b26a6a8b2c Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-17 17:05:58 +08:00
d93fd449af 批量审核 2022-01-17 17:05:49 +08:00
f8a55a7068 edit 2022-01-17 15:56:05 +08:00
3d220de130 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-17 15:55:51 +08:00
0b5b638964 edit 2022-01-17 15:55:48 +08:00
c34f6ffd63 批量审核 2022-01-17 15:01:46 +08:00
e13233f99e 批量审核 2022-01-17 14:58:34 +08:00
835e42460f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-17 14:31:51 +08:00
2442f6c014 批量审核 2022-01-17 14:31:46 +08:00
7f20f59b0e edit 2022-01-17 13:30:30 +08:00
e72b3727af edit 2022-01-17 13:27:36 +08:00
3a88615847 车辆接口更新 2022-01-14 17:04:32 +08:00
c10d02316e 车辆接口更新 2022-01-14 17:02:20 +08:00
05ebc15274 车辆接口更新 2022-01-14 16:57:27 +08:00
1d97fc658b 车辆接口更新 2022-01-14 16:52:40 +08:00
fcabc1ad84 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-14 15:59:59 +08:00
1656578951 车辆接口更新 2022-01-14 15:58:09 +08:00
33ba9a0ead Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-14 15:53:41 +08:00
939503f1ff edit 2022-01-14 15:53:33 +08:00
509f521c65 状态更新 2022-01-14 15:39:42 +08:00
7e5661416a 状态更新 2022-01-14 15:29:31 +08:00
5cddf9a778 状态更新 2022-01-14 15:27:15 +08:00
37108424e6 车辆接口更新 2022-01-14 15:19:26 +08:00
387c63bdb3 车辆接口更新 2022-01-14 15:05:31 +08:00
b38cf032f8 状态更新 2022-01-14 14:48:06 +08:00
78179621b4 车辆对接 2022-01-14 14:44:53 +08:00
56f916ffca Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-14 14:39:04 +08:00
eb783b95f1 车辆对接 2022-01-14 14:39:00 +08:00
803835ba0a edit 2022-01-14 14:23:10 +08:00
d4d49d12b1 edit 2022-01-14 14:06:48 +08:00
07c07e9537 edit 2022-01-14 14:05:13 +08:00
6a902fad23 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-14 09:37:33 +08:00
7659770852 edit 2022-01-14 09:37:21 +08:00
f03a738c98 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-13 20:55:23 +08:00
ea5a84c15f 车辆对接 2022-01-13 20:55:20 +08:00
35c3135e52 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-13 20:29:27 +08:00
2061944237 edit 2022-01-13 20:29:23 +08:00
87453dfe12 车辆对接 2022-01-13 20:10:14 +08:00
63d76dd8cc 车辆对接 2022-01-13 19:55:10 +08:00
672ec14b95 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-13 19:55:07 +08:00
244c708a5f 车辆对接 2022-01-13 19:38:41 +08:00
274af8abd9 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-13 19:35:12 +08:00
2afbde6281 edit 2022-01-13 19:35:08 +08:00
6ca38f4623 车辆对接 2022-01-13 19:32:36 +08:00
bcff51a24a Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-13 19:25:19 +08:00
7e04c359a5 车辆对接 2022-01-13 19:25:09 +08:00
5d7f49966a Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-13 19:23:08 +08:00
872776514e edit 2022-01-13 19:23:03 +08:00
bd88cc2c3e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-13 19:22:47 +08:00
8bab2011fd 车辆对接 2022-01-13 19:22:42 +08:00
89c26cd829 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-13 17:13:28 +08:00
fe3d6b6f92 edit 2022-01-13 17:13:24 +08:00
03af0d2dfb 车辆对接 2022-01-13 17:10:40 +08:00
db8208f63f 车辆对接 2022-01-13 16:55:51 +08:00
07c936a089 车辆对接 2022-01-13 16:38:46 +08:00
1c1ee02e49 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-13 16:31:33 +08:00
66655f298d 车辆对接 2022-01-13 16:31:29 +08:00
46379ffe4f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-13 16:25:02 +08:00
45f0869f1f edit 2022-01-13 16:24:58 +08:00
6ae6403750 车辆对接 2022-01-13 16:22:30 +08:00
dc7d0d5e1d Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-13 15:57:40 +08:00
ec9123c805 车辆对接 2022-01-13 15:57:36 +08:00
6fc033cc95 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-13 15:50:02 +08:00
08617ecfa1 edit 2022-01-13 15:49:58 +08:00
772090017b 车辆对接 2022-01-13 15:49:51 +08:00
be43d47341 车辆对接 2022-01-13 15:43:45 +08:00
5bf20e71c1 车辆对接 2022-01-13 15:21:30 +08:00
a917c83275 edit 2022-01-13 15:13:53 +08:00
bcd5543d77 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-13 15:10:10 +08:00
074093760e edit 2022-01-13 15:10:02 +08:00
4bd3baf238 车辆对接 2022-01-13 14:46:05 +08:00
4dc7b9490b 车辆对接 2022-01-13 14:30:03 +08:00
73b7bd66a9 车辆对接 2022-01-13 14:17:07 +08:00
87967c7b24 车辆对接 2022-01-13 14:03:45 +08:00
948165710b 车辆对接 2022-01-13 13:53:47 +08:00
b8a8526d54 车辆对接 2022-01-13 11:05:27 +08:00
91ab995e44 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-13 10:14:53 +08:00
f216c25f7c 车辆对接 2022-01-13 10:14:43 +08:00
6d8cf857fb Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 21:28:51 +08:00
7235c826e0 edit 2022-01-12 21:28:48 +08:00
df8c32b0eb 车辆对接 2022-01-12 18:52:47 +08:00
8d3544a3e2 车辆对接 2022-01-12 18:35:46 +08:00
a8c7b82a98 车辆对接 2022-01-12 18:34:48 +08:00
1fa11a5b3f 车辆对接 2022-01-12 18:30:16 +08:00
8d887465fc Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 17:50:25 +08:00
3a0b624f03 车辆对接 2022-01-12 17:50:16 +08:00
18872aab7a Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 17:49:46 +08:00
c918757a6c edit 2022-01-12 17:49:41 +08:00
77b04db858 车辆对接 2022-01-12 17:40:23 +08:00
f1abf0e91e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 17:23:08 +08:00
e1d53dbd1c 车辆对接 2022-01-12 17:22:57 +08:00
5157974d35 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 17:21:33 +08:00
b57e8514c6 edit 2022-01-12 17:21:30 +08:00
3b3886389f 车辆对接 2022-01-12 17:04:53 +08:00
e1dad9183e 车辆对接 2022-01-12 16:59:31 +08:00
bbad57aa07 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 15:23:09 +08:00
3f422636da 车辆对接 2022-01-12 15:22:59 +08:00
8907373b55 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 15:10:38 +08:00
50090b6971 edit 2022-01-12 15:10:32 +08:00
1ca5e81dad 车辆对接 2022-01-12 15:03:59 +08:00
c7eeba9ba9 车辆对接 2022-01-12 14:56:09 +08:00
0352cd2f08 车辆对接 2022-01-12 14:33:13 +08:00
22ee46d6b6 车辆对接 2022-01-12 14:20:09 +08:00
6b5180d083 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 14:20:02 +08:00
de44c74656 车辆对接 2022-01-12 14:07:28 +08:00
f31144e246 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 13:57:07 +08:00
e6900e79fd edit 2022-01-12 13:57:00 +08:00
9dd5d07c15 车辆对接 2022-01-12 13:56:55 +08:00
b6291879ab Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 13:35:56 +08:00
4c544cbcd0 车辆对接 2022-01-12 13:35:52 +08:00
e4ab54e330 edit 2022-01-12 13:28:29 +08:00
e6724d3557 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 13:14:18 +08:00
673b27a935 edit 2022-01-12 13:14:15 +08:00
eaef5be8ff Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 13:12:36 +08:00
a7ea496e4d 车辆对接 2022-01-12 13:12:32 +08:00
ad33c512f1 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 11:26:23 +08:00
6eb92655d8 edit 2022-01-12 11:26:19 +08:00
67a814eece Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 11:25:19 +08:00
126dd432cc 车辆对接 2022-01-12 11:25:15 +08:00
ea460ed554 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 10:54:05 +08:00
03dbc7fce6 edit 2022-01-12 10:53:52 +08:00
71a4cd86d1 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 10:52:50 +08:00
7465b4f643 车辆对接 2022-01-12 10:52:46 +08:00
35b68ef287 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 10:48:59 +08:00
75808bbaf5 edit 2022-01-12 10:47:36 +08:00
bb5006f723 车辆对接 2022-01-12 10:20:32 +08:00
b6de1804c5 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-12 09:48:15 +08:00
ba78e70eaf 车辆对接 2022-01-12 09:48:10 +08:00
9d8da4f37e edit 2022-01-11 17:58:18 +08:00
4c73584af7 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-11 17:47:16 +08:00
cd037f29e8 edit 2022-01-11 17:47:07 +08:00
f52e7b2fc6 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-11 17:08:43 +08:00
347cb109af 车辆对接 2022-01-11 17:08:39 +08:00
a69bdc3c60 edit 2022-01-11 17:04:39 +08:00
43f6a81f2c edit 2022-01-11 16:50:52 +08:00
c142196137 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-11 16:42:31 +08:00
8e93a648a2 edit 2022-01-11 16:42:26 +08:00
0dde51a145 车辆对接 2022-01-11 16:42:06 +08:00
070d6bbf11 车辆对接 2022-01-11 16:18:17 +08:00
ecaa2ae4e2 车辆对接 2022-01-11 15:45:28 +08:00
1e26e45bda 车辆对接 2022-01-11 14:36:20 +08:00
928a623660 车辆对接 2022-01-11 13:59:24 +08:00
5150b79344 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-10 20:22:07 +08:00
ccf560f30b 车辆对接 2022-01-10 20:21:57 +08:00
eeb23fb975 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-10 20:10:48 +08:00
195a8f6ca0 edit 2022-01-10 20:09:11 +08:00
ec1b76c8b9 车辆对接 2022-01-10 20:04:54 +08:00
275cd0c1bc 车辆对接 2022-01-10 19:57:16 +08:00
2888828356 车辆对接 2022-01-10 19:41:07 +08:00
d4d6579555 车辆对接 2022-01-10 19:34:02 +08:00
805a2aeb63 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-10 19:33:37 +08:00
4e1a020569 车辆对接 2022-01-10 19:33:28 +08:00
5e445b7619 edit 2022-01-10 19:29:12 +08:00
ca12cd2f08 edit 2022-01-10 19:21:08 +08:00
28cf90cf26 edit 2022-01-10 19:15:47 +08:00
e387c21f6f edit 2022-01-10 19:08:25 +08:00
769f358df0 edit 2022-01-10 17:58:39 +08:00
0c135d1ade Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-10 17:54:06 +08:00
926ab3bc03 edit 2022-01-10 17:54:01 +08:00
e19d5533e4 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-10 17:48:29 +08:00
9389402f6a 车辆对接 2022-01-10 17:48:25 +08:00
77d0a4b6e3 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-10 17:41:16 +08:00
f0987cadf8 edit 2022-01-10 17:41:05 +08:00
5f63353599 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-10 17:22:11 +08:00
682b58e738 车辆对接 2022-01-10 17:22:07 +08:00
01d8f27b3d Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-10 17:21:56 +08:00
61416df10f edit 2022-01-10 17:21:51 +08:00
dcc16ae5d9 车辆对接 2022-01-10 17:03:25 +08:00
7e03766eee 车辆对接 2022-01-10 16:55:59 +08:00
8d8ec89632 车辆对接 2022-01-10 16:51:49 +08:00
5aaf422d54 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-10 16:48:53 +08:00
d0f2b30d5b 车辆对接 2022-01-10 16:48:49 +08:00
fb3a88fd4e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-10 16:46:59 +08:00
df5a8b71bf edi8t 2022-01-10 16:46:51 +08:00
ae813263d6 车辆对接 2022-01-10 16:37:36 +08:00
857697adc0 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-10 16:06:17 +08:00
00ff2fc5ab 车辆对接 2022-01-10 16:06:13 +08:00
4fec082b18 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-10 15:49:14 +08:00
976e3a7b9b edit 2022-01-10 15:49:06 +08:00
4c3485ada1 车辆对接 2022-01-10 14:21:04 +08:00
71e74eb657 车辆对接 2022-01-10 13:40:48 +08:00
e3931d50f8 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-10 13:32:21 +08:00
a0c7db29a4 车辆对接 2022-01-10 13:32:17 +08:00
865534d2ab edit 2022-01-10 13:20:56 +08:00
5fa122dd25 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-07 13:54:40 +08:00
b39118da5e edit 2022-01-07 13:54:36 +08:00
11c5ab47b8 车辆对接 2022-01-07 11:13:06 +08:00
90e53e568c 车辆对接 2022-01-07 11:11:09 +08:00
4400e545aa Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-06 20:52:42 +08:00
9d3a02a671 edit 2022-01-06 20:52:37 +08:00
2068a1d723 车辆对接 2022-01-06 20:52:20 +08:00
e4bb40839c Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-06 19:37:24 +08:00
24ee495bec 车辆对接 2022-01-06 19:37:16 +08:00
3a39ad53fb edit 2022-01-06 19:37:00 +08:00
024d7ff39d edit 2022-01-06 19:33:52 +08:00
f38bca116c edit 2022-01-06 19:17:42 +08:00
3261a3fc5a edit 2022-01-06 17:09:14 +08:00
55da844c79 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-06 16:52:19 +08:00
d865c99fc8 edoi 2022-01-06 16:52:15 +08:00
97f707a972 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-06 16:51:58 +08:00
d003166b31 车辆对接 2022-01-06 16:51:48 +08:00
a87cadb815 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-06 16:17:53 +08:00
52c59e2d69 edit 2022-01-06 16:17:48 +08:00
bfcbe348b6 车辆对接 2022-01-06 16:14:28 +08:00
c83c1e7a8e 车辆对接 2022-01-06 14:57:46 +08:00
9f13a0a263 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-06 14:48:01 +08:00
23fdddcd34 车辆对接 2022-01-06 14:47:57 +08:00
ad5236e676 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-06 13:32:56 +08:00
c2bba55a48 edit 2022-01-06 13:32:48 +08:00
1ced203cb9 车辆对接 2022-01-06 13:32:11 +08:00
7609178295 车辆对接 2022-01-06 13:21:40 +08:00
c5a15ed78d 车辆对接 2022-01-06 11:13:20 +08:00
78329f292c 车辆对接 2022-01-06 10:57:01 +08:00
a777f43a56 edit 2022-01-05 21:07:44 +08:00
bf153ca635 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-05 21:02:56 +08:00
fb87845bde edi 2022-01-05 21:02:28 +08:00
d7ee2f56cf 车辆对接 2022-01-05 21:02:22 +08:00
f4e924e314 车辆对接 2022-01-05 20:24:23 +08:00
961c21f6df Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-05 20:15:41 +08:00
cd0035940a 车辆对接 2022-01-05 20:15:37 +08:00
e4c007f0d5 edit 2022-01-05 20:05:41 +08:00
7d07ca73dc edit 2022-01-05 20:03:53 +08:00
ecce96705e edit 2022-01-05 19:43:04 +08:00
b6755ec49f edit 2022-01-05 19:06:38 +08:00
3be663b9af edit 2022-01-05 17:14:08 +08:00
badaa27cff edit 2022-01-05 14:52:22 +08:00
aad0fed832 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-05 14:11:33 +08:00
9e129f9a3f edit 2022-01-05 14:11:29 +08:00
c7f9874e43 车辆对接 2022-01-05 11:00:51 +08:00
75e135c738 车辆对接 2022-01-05 09:41:40 +08:00
a9c4c04f7c Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-04 21:05:49 +08:00
8618108b81 车辆对接 2022-01-04 21:05:44 +08:00
8843ca50bc Merge branch 'cwy' into 'develop'
添加保单模块

See merge request tms-ui/tms-obc-web!6
2022-01-04 18:44:14 +08:00
bbfa5d5fb5 添加保单模块 2022-01-04 18:43:43 +08:00
ae2bde8d33 edit 2022-01-04 18:00:50 +08:00
94536ab262 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-04 17:18:12 +08:00
a6a0a9f7fb edit 2022-01-04 17:18:05 +08:00
630813359b 车辆对接 2022-01-04 16:14:43 +08:00
aeaa15404a Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-04 16:05:52 +08:00
0c930be5fb 车辆对接 2022-01-04 16:05:44 +08:00
9a6818fb7e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-04 15:15:05 +08:00
429c7c3d0e edit 2022-01-04 15:15:01 +08:00
ba501195b9 车辆对接 2022-01-04 14:35:04 +08:00
251b40ece6 车辆对接 2022-01-04 14:01:36 +08:00
09f89f0226 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2022-01-04 11:23:54 +08:00
c276ce4726 车辆对接 2022-01-04 11:23:50 +08:00
fb0b0036be edit 2022-01-04 10:40:54 +08:00
4f51c487cc 车辆对接 2022-01-04 09:38:03 +08:00
3168fd2dca 车辆对接 2021-12-31 17:32:57 +08:00
5245db0b39 车辆对接 2021-12-31 13:53:53 +08:00
1561d4b6eb Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-30 19:36:30 +08:00
331219c6a0 车辆对接 2021-12-30 19:36:20 +08:00
98879c08d2 edit 2021-12-30 17:07:30 +08:00
bee71216b0 edit 2021-12-30 16:37:34 +08:00
5cad416499 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-30 16:25:53 +08:00
b87b9d554a edit 2021-12-30 16:25:49 +08:00
4e05ff50aa 车辆对接 2021-12-30 16:06:09 +08:00
b2794c80f0 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-30 15:53:05 +08:00
12653a2961 车辆对接 2021-12-30 15:53:02 +08:00
6d173e8aa5 edit 2021-12-30 15:47:33 +08:00
315a684dad edit 2021-12-30 15:36:16 +08:00
838bf749d4 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-30 14:46:48 +08:00
28cf1865d8 edit 2021-12-30 14:46:40 +08:00
34a654a21d Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-30 14:45:39 +08:00
dd5aa113dc 车辆对接 2021-12-30 14:45:36 +08:00
6875d92f4b Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-30 14:45:05 +08:00
8bedb7e610 edit 2021-12-30 14:45:01 +08:00
20e61482e4 车辆对接 2021-12-30 14:42:22 +08:00
e363f96c88 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-30 14:41:56 +08:00
abdc899a29 edit 2021-12-30 14:41:52 +08:00
95e53aa6e3 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-30 14:26:32 +08:00
64096c02a1 车辆对接 2021-12-30 14:26:28 +08:00
6e33516cd4 edit 2021-12-30 11:18:24 +08:00
9270ece824 edit 2021-12-30 09:34:49 +08:00
9b27cfe76b edit 2021-12-29 21:00:40 +08:00
7e5a3a84ae Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-29 20:52:06 +08:00
c1e8dd6c4d edit 2021-12-29 20:52:02 +08:00
e50b2a3f88 车辆对接 2021-12-29 20:33:08 +08:00
e2fbea997a edit 2021-12-29 20:32:43 +08:00
a99a15e570 edit 2021-12-29 19:46:29 +08:00
f6f17a410d 车辆对接 2021-12-29 19:40:50 +08:00
5772be6e6f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-29 17:20:03 +08:00
2ded33f4d6 车辆对接 2021-12-29 17:20:00 +08:00
929fda3253 edit 2021-12-29 16:58:32 +08:00
981d622aaf Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-29 16:15:50 +08:00
a82a0ba1ae edit 2021-12-29 16:15:38 +08:00
a3f3b2e9a8 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-29 13:12:35 +08:00
0262716364 车辆对接 2021-12-29 13:12:26 +08:00
128e785a41 edit 2021-12-28 20:55:49 +08:00
571bf8728d edit 2021-12-28 20:25:36 +08:00
62313baf18 ediot 2021-12-28 20:00:15 +08:00
1b14dc6281 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-28 17:36:54 +08:00
e68d4cf6cb edit 2021-12-28 17:36:51 +08:00
5aec1bf8f1 车辆对接 2021-12-28 17:26:38 +08:00
1587602f7e 车辆对接 2021-12-28 17:23:31 +08:00
34efb8be23 车辆对接 2021-12-28 17:12:03 +08:00
1c5ca651ea 车辆对接 2021-12-28 16:33:45 +08:00
8d381ef42a e 2021-12-28 11:13:28 +08:00
1a4a0bbf15 edit 2021-12-28 11:10:46 +08:00
9ffc4c6f89 edit 2021-12-28 10:51:44 +08:00
ec51030da0 车辆对接 2021-12-28 10:51:30 +08:00
269355e7bc Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-28 10:27:46 +08:00
c904aeba46 车辆对接 2021-12-28 10:27:34 +08:00
31a7d50f81 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-28 10:02:52 +08:00
b7d054ab18 edit 2021-12-28 10:02:41 +08:00
2d67ea537d Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-27 21:08:36 +08:00
777e5dd101 车辆对接 2021-12-27 21:08:22 +08:00
1454acc726 edit 2021-12-27 21:00:35 +08:00
8ead989ec1 edit 2021-12-27 18:35:24 +08:00
786c2e1bad edit 2021-12-27 18:27:08 +08:00
7e6d86d00e edit 2021-12-27 17:06:31 +08:00
1a41c2999e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-27 15:16:16 +08:00
61efaca517 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-27 15:16:12 +08:00
0024f68903 edit 2021-12-27 15:15:33 +08:00
94e76d3eac 车辆对接 2021-12-27 15:15:31 +08:00
5163b786e8 车辆对接 2021-12-27 14:09:32 +08:00
a1cf5944c1 车辆对接 2021-12-27 14:08:42 +08:00
cac371baf3 edit 2021-12-27 13:55:46 +08:00
0f532ad744 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-27 13:26:47 +08:00
358ba2708e edit 2021-12-27 13:26:43 +08:00
ce13bc115e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-27 10:30:56 +08:00
775114e4ef crm对接完成 2021-12-27 10:30:50 +08:00
6a3f551509 edit 2021-12-27 10:06:54 +08:00
aefcd67313 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-24 17:50:56 +08:00
adaaebee99 车辆对接 2021-12-24 17:50:47 +08:00
724a78d601 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-24 17:46:24 +08:00
0fd49f3c8b edit 2021-12-24 17:46:16 +08:00
3fa2476b52 车辆对接 2021-12-24 16:52:41 +08:00
86ca0d4549 车辆对接 2021-12-24 16:30:58 +08:00
4011f13d30 车辆对接 2021-12-24 15:49:47 +08:00
5ef6635df8 车辆对接 2021-12-24 15:48:00 +08:00
a08590e010 车辆对接 2021-12-24 15:43:55 +08:00
000d7d48ff Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-24 15:37:00 +08:00
78f4659a73 车辆对接 2021-12-24 15:36:49 +08:00
c421bcd829 edit 2021-12-24 15:28:17 +08:00
3c618492a9 edit 2021-12-24 15:26:15 +08:00
15cb91f21e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-24 15:26:11 +08:00
8905745828 edit 2021-12-24 15:26:03 +08:00
f45dfc4732 车辆对接 2021-12-24 15:14:00 +08:00
6339e3359a 车辆对接 2021-12-24 15:11:49 +08:00
5fb5097acf 车辆对接 2021-12-24 14:34:31 +08:00
1733c588cd Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-24 14:00:28 +08:00
1c627d5705 车辆对接 2021-12-24 14:00:19 +08:00
1026847317 edir 2021-12-24 13:22:59 +08:00
858bcb2b11 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-24 13:18:40 +08:00
336dfd81f5 edit 2021-12-24 13:18:34 +08:00
6418d33dfb Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-24 13:17:55 +08:00
01bf9ec560 车辆对接 2021-12-24 13:17:44 +08:00
dc28444d16 edit 2021-12-23 20:05:25 +08:00
37daa23ae1 edit 2021-12-23 17:07:57 +08:00
eb432e521f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-23 16:44:27 +08:00
386271289c 开票申请 2021-12-23 16:44:20 +08:00
532755c8a9 车辆对接 2021-12-23 16:41:02 +08:00
e974ca1593 edit 2021-12-23 15:42:44 +08:00
6beec8edb9 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-23 15:35:52 +08:00
6ee9324cdb dev-config 2021-12-23 15:35:45 +08:00
3de6b7805e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-23 14:44:26 +08:00
4b4e54933e 车辆对接 2021-12-23 14:44:17 +08:00
716bbea97c edit 2021-12-22 21:00:37 +08:00
51326de661 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-22 20:17:35 +08:00
5c8002a093 edit 2021-12-22 20:17:29 +08:00
c914ee023e 车辆对接 2021-12-22 20:14:59 +08:00
2a91d9fd80 车辆对接 2021-12-22 20:01:22 +08:00
65a842767d Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-22 11:28:28 +08:00
1a3091eb1e 车辆对接 2021-12-22 11:28:20 +08:00
2181b8e5cb edit 2021-12-22 11:16:04 +08:00
f0298edc7b Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-22 11:13:58 +08:00
3337204d01 车辆对接 2021-12-22 11:13:34 +08:00
9e54bb9e6d Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-22 11:13:30 +08:00
70aef3b778 edit 2021-12-22 11:06:53 +08:00
ad0abccf0f 车辆对接 2021-12-22 10:49:49 +08:00
657cd16ab1 车辆对接 2021-12-22 10:37:09 +08:00
870a2119d8 车辆对接 2021-12-22 10:23:10 +08:00
d2b42d961c 车辆对接 2021-12-22 10:09:59 +08:00
6d1c880b2f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-22 09:50:30 +08:00
d40830c870 车辆对接 2021-12-22 09:50:17 +08:00
81987f56dc edit 2021-12-21 17:38:46 +08:00
198fa1e9e8 edit 2021-12-21 17:37:13 +08:00
4e5b5b7989 edit 2021-12-21 16:18:00 +08:00
55f56f826a Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-21 15:47:58 +08:00
3dae93db94 edit 2021-12-21 15:47:49 +08:00
c79ea5261f 车辆对接 2021-12-21 15:03:59 +08:00
c9906c0588 车辆对接 2021-12-21 11:20:04 +08:00
f95e9336b6 车辆对接 2021-12-21 11:05:39 +08:00
6dfc1e75fc Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-21 10:52:36 +08:00
f27a6bddbc 车辆对接 2021-12-21 10:52:28 +08:00
d8b068229c Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-20 19:21:40 +08:00
9f54a16757 edit 2021-12-20 19:21:28 +08:00
4aad1e6a47 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-20 17:18:43 +08:00
0a31c9eb4e 车辆对接 2021-12-20 17:18:40 +08:00
361dea1cbd edit 2021-12-20 15:51:31 +08:00
581d7c44e7 edit 2021-12-20 15:42:05 +08:00
bce661246c edit 2021-12-20 15:15:13 +08:00
c3f31cc224 edit 2021-12-20 10:53:33 +08:00
f18f512aac Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-20 10:53:15 +08:00
19fa0ddbd5 edit 2021-12-20 10:53:10 +08:00
70407631f1 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-20 10:13:31 +08:00
d45721e494 车辆对接 2021-12-20 10:12:53 +08:00
91dcc20d9a meun 2021-12-20 10:07:52 +08:00
46fb4d51e8 edit 2021-12-20 09:34:46 +08:00
4e29393386 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-17 17:38:56 +08:00
b47fe7a472 edit 2021-12-17 17:38:47 +08:00
1969c9f434 车辆对接 2021-12-17 17:37:08 +08:00
17354d05ec 车辆对接 2021-12-17 17:36:35 +08:00
49e4042c4c Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-17 16:43:53 +08:00
da45d8ec04 车辆对接 2021-12-17 16:43:44 +08:00
7b80dced8b edit 2021-12-17 16:17:55 +08:00
97c3bced33 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-17 16:13:19 +08:00
fbab4f6b57 车辆对接 2021-12-17 16:10:50 +08:00
99253cd327 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-17 16:03:39 +08:00
92c844a2b5 edit 2021-12-17 16:03:27 +08:00
4bb0520a73 车辆对接 2021-12-17 16:03:22 +08:00
6d65ead997 车辆对接 2021-12-16 21:17:37 +08:00
1642ef2334 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-16 21:09:26 +08:00
76fcfb0682 车辆对接 2021-12-16 21:09:21 +08:00
a9d80ddb29 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-16 21:03:30 +08:00
f7fa7e6981 edit 2021-12-16 21:03:26 +08:00
ee61a26e60 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-16 20:28:32 +08:00
4350fecab1 车辆对接 2021-12-16 20:28:23 +08:00
75c541d74b edit 2021-12-16 19:40:21 +08:00
0084570fd8 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-16 17:00:38 +08:00
2e659b1d3c edit 2021-12-16 17:00:33 +08:00
7150f45b31 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-16 11:23:38 +08:00
fc53095c17 车辆对接 2021-12-16 11:23:34 +08:00
05f3480d80 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-15 21:06:39 +08:00
af6675263a edit 2021-12-15 21:06:32 +08:00
1a8468a8a9 fix bug 2021-12-15 20:50:54 +08:00
3ba6d074cb fix bug 2021-12-15 20:24:24 +08:00
7f65ee67ec edit 2021-12-15 20:06:47 +08:00
fbad9c32d8 edit 2021-12-15 18:59:52 +08:00
78776dd2ac Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-15 16:32:19 +08:00
7ec9e03984 edit 2021-12-15 16:32:11 +08:00
a82c732e59 fix bug 2021-12-15 15:54:10 +08:00
3ff0fef50e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-15 13:19:12 +08:00
5f7df7339a fix bug 2021-12-15 13:19:03 +08:00
3485744f47 edit 2021-12-14 21:12:26 +08:00
54386497e5 edit 2021-12-14 21:04:54 +08:00
3b81ba30f7 edit 2021-12-14 21:03:03 +08:00
e072377f5f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-14 20:58:57 +08:00
12ef96df31 edit 2021-12-14 20:58:53 +08:00
0201624265 fix bug 2021-12-14 20:51:27 +08:00
1a611f3a69 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-14 20:51:21 +08:00
ad327c87ef fix bug 2021-12-14 20:42:23 +08:00
12d4df947d Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-14 20:30:59 +08:00
d0403784eb edit 2021-12-14 20:30:50 +08:00
724f350955 fix bug 2021-12-14 20:30:33 +08:00
7bbd8a8bc9 fix bug 2021-12-14 20:24:42 +08:00
553d22a01e fix bug 2021-12-14 19:12:55 +08:00
feabfee6aa Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-14 17:44:34 +08:00
fc0f4e3a4e fix bug 2021-12-14 17:44:24 +08:00
b887055dbe Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-14 16:09:11 +08:00
19fcbbed7c edit 2021-12-14 16:08:59 +08:00
cb276a4ee7 fix bug 2021-12-14 16:01:26 +08:00
27ca6ba078 fix bug 2021-12-14 15:47:47 +08:00
959773af11 fix bug 2021-12-14 13:40:10 +08:00
a0e0199cee remove demop 2021-12-14 12:33:26 +08:00
9bc40fced0 fix bug 2021-12-14 10:11:10 +08:00
bcac90db18 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-14 10:11:01 +08:00
eec89375e9 fix bug 2021-12-14 09:38:55 +08:00
64a3d18c88 edit 2021-12-14 09:14:21 +08:00
d1142fecc1 edit 2021-12-13 21:23:56 +08:00
c49ce32985 merge 2021-12-13 20:59:25 +08:00
5c7a303abc edit 2021-12-13 20:57:26 +08:00
44a391667e fix bug 2021-12-13 20:42:59 +08:00
a77b5f8c01 fix bug 2021-12-13 14:42:21 +08:00
abafcd8326 fix bug 2021-12-13 13:16:52 +08:00
c4b249fe94 edit 2021-12-13 10:46:19 +08:00
cc7f7c7649 fix bug 2021-12-13 10:43:03 +08:00
d13b27e76b fix bug 2021-12-13 09:33:08 +08:00
7da8395f88 fix bug 2021-12-13 09:31:22 +08:00
7d7f32aa8d Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-10 14:42:57 +08:00
144b2eb8b9 fix bug 2021-12-10 14:42:47 +08:00
e35df5f4ad Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-09 21:23:16 +08:00
8df3fcf013 edit 2021-12-09 21:23:10 +08:00
b513099359 fix bug 2021-12-09 19:21:22 +08:00
d4a4b45194 edit 2021-12-09 16:46:40 +08:00
0c77591af8 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-09 16:15:53 +08:00
8091d8e274 货主管理 2021-12-09 16:15:47 +08:00
7152089562 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-09 00:12:58 +08:00
5dcc2d0b4b 初步联调货源 2021-12-09 00:12:53 +08:00
b074f72593 edit 2021-12-08 20:59:28 +08:00
429c212255 edit 2021-12-08 19:25:54 +08:00
2637bcbf02 edit 2021-12-08 19:15:15 +08:00
e94c4486ea 初步联调货源 2021-12-08 16:57:32 +08:00
1c77ab802a Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-08 16:32:27 +08:00
1d395b3a8a 初步联调货源 2021-12-08 16:32:15 +08:00
b6093f354d Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-08 15:56:26 +08:00
c369d42414 edit 2021-12-08 15:56:22 +08:00
a6b9c6b07f 合同 2021-12-08 15:40:46 +08:00
a299e56181 合同 2021-12-08 14:21:05 +08:00
55811ba396 edit 2021-12-08 09:49:30 +08:00
305c15e4fa edit 2021-12-08 09:45:34 +08:00
348d69d96b edit 2021-12-08 09:32:47 +08:00
66283ddc3d edit 2021-12-07 20:56:18 +08:00
4ad7282e51 手机登录 2021-12-07 19:53:27 +08:00
01258211b3 merge 2021-12-07 19:42:07 +08:00
b5262f5a26 edit 2021-12-07 19:39:28 +08:00
f27735b72f 合同 2021-12-07 17:33:07 +08:00
30ce971501 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-07 16:27:52 +08:00
69ff7dc306 合同 2021-12-07 16:27:41 +08:00
647b288042 移除百度地图 2021-12-07 15:40:57 +08:00
6214ebf4af Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-07 15:35:54 +08:00
4e0c3a3d03 登录接口实现 2021-12-07 15:35:48 +08:00
94fe5ffaae 订单 2021-12-07 15:30:12 +08:00
86fe0b1f2b 订单 2021-12-07 15:12:54 +08:00
aef47c0d77 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-07 14:19:25 +08:00
841a0d2055 订单 2021-12-07 14:19:21 +08:00
9167bb35f4 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-07 14:14:06 +08:00
141345b1d6 map component 2021-12-07 14:14:01 +08:00
ffbacadff4 订单 2021-12-07 14:03:37 +08:00
4613b502a9 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-07 13:25:56 +08:00
485686c4ab edit 2021-12-07 13:25:52 +08:00
0ab4631163 订单 2021-12-07 13:24:09 +08:00
74f7526984 订单 2021-12-07 11:23:51 +08:00
f490075fdd 订单 2021-12-07 11:13:32 +08:00
2af0eedb2d 订单 2021-12-07 10:48:27 +08:00
da9ad95fe3 订单 2021-12-07 10:19:05 +08:00
a413db0bcc Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-07 09:50:47 +08:00
d24543d3f1 订单 2021-12-07 09:50:37 +08:00
34c9809e3e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-06 21:09:27 +08:00
a80c348022 map 2021-12-06 21:09:16 +08:00
fb71a1a066 订单 2021-12-06 21:06:19 +08:00
df352618aa 订单 2021-12-06 20:37:41 +08:00
19d73293b9 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-06 20:28:10 +08:00
1d79ed291c 修改地图使用方式 2021-12-06 20:28:01 +08:00
474f0ead3b Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-06 20:23:47 +08:00
322aca7b43 订单 2021-12-06 20:23:42 +08:00
2be2d330a9 edit 2021-12-06 19:37:04 +08:00
76951f250c 票务 2021-12-06 17:49:20 +08:00
24de0ea9ea 地图 2021-12-06 15:56:46 +08:00
1c5643b7e9 订单 2021-12-06 14:57:20 +08:00
72708a6f91 订单 2021-12-03 16:02:39 +08:00
6867ba8332 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-03 16:02:07 +08:00
7fbab89388 订单 2021-12-03 16:01:55 +08:00
8b5d9f1a8f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-03 15:35:36 +08:00
f704037fe4 票务管理配置 2021-12-03 15:35:24 +08:00
c34b8f7bc4 货源修改 2021-12-03 15:23:52 +08:00
db95de90fb 货源修改 2021-12-03 15:22:55 +08:00
24895e552e Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-02 17:37:19 +08:00
a9ef21e333 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-02 17:36:07 +08:00
1169034130 用户中心 2021-12-02 17:36:04 +08:00
436dd750d3 edit 2021-12-02 17:35:43 +08:00
d1467d4f45 merge 2021-12-02 10:12:58 +08:00
df711ddcb8 edit 2021-12-02 10:10:24 +08:00
acee22b1f3 车队长列表 2021-12-01 20:38:44 +08:00
3e4e9ee49e 车队长列表 2021-12-01 15:21:03 +08:00
eda6196972 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-01 15:07:23 +08:00
d4efbe4468 车队长列表 2021-12-01 15:07:12 +08:00
1ea3377be7 Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-12-01 10:58:31 +08:00
b88e313785 添加富文本插件 2021-12-01 10:58:24 +08:00
741912c630 车队长列表 2021-12-01 10:51:13 +08:00
4d0627ff35 车队长列表 2021-11-30 20:38:56 +08:00
b1814a722f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-11-30 19:42:47 +08:00
8aca1f7b83 edit 2021-11-30 19:42:42 +08:00
fc86bb36c5 fix bug 2021-11-30 17:26:27 +08:00
db7426089f fix bug 2021-11-30 16:24:00 +08:00
540c845ca9 用户中心 2021-11-30 15:56:18 +08:00
a0845f956f fix bug 2021-11-30 15:13:48 +08:00
8cb0cb7865 fix bug 2021-11-30 14:59:57 +08:00
3c753a3b4f Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop 2021-11-30 11:11:09 +08:00
83208b4934 员工管理 2021-11-30 11:11:02 +08:00
7998c8f3f7 fix bug 2021-11-30 11:10:32 +08:00
30dcfbb4f1 fix bug 2021-11-30 10:17:00 +08:00
08d5b09401 merge 2021-11-29 20:09:57 +08:00
d18633a1a8 edit 2021-11-29 20:07:51 +08:00
b0ed9bf5c2 用户中心 2021-11-29 20:04:56 +08:00
c5eaff493d 用户中心 2021-11-29 20:03:45 +08:00
2450c20151 登录模块 2021-11-29 19:37:46 +08:00
8530a23707 个人中心 2021-11-29 15:10:39 +08:00
d4bd35b9df 添加zorro,alain样例 2021-11-27 17:17:55 +08:00
1153 changed files with 233498 additions and 4201 deletions

1
.husky/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
_

View File

@ -10,7 +10,7 @@ for (let i = 0; i < 46; i += 1) {
href: 'https://ant.design', href: 'https://ant.design',
avatar: [ avatar: [
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png'
][i % 2], ][i % 2],
no: `TradeCode ${i}`, no: `TradeCode ${i}`,
title: `一个任务名称 ${i}`, title: `一个任务名称 ${i}`,
@ -20,11 +20,11 @@ for (let i = 0; i < 46; i += 1) {
status: Math.floor(Math.random() * 10) % 4, status: Math.floor(Math.random() * 10) % 4,
updatedAt: new Date(`2017-07-${i < 18 ? '0' + (Math.floor(i / 2) + 1) : Math.floor(i / 2) + 1}`), updatedAt: new Date(`2017-07-${i < 18 ? '0' + (Math.floor(i / 2) + 1) : Math.floor(i / 2) + 1}`),
createdAt: new Date(`2017-07-${i < 18 ? '0' + (Math.floor(i / 2) + 1) : Math.floor(i / 2) + 1}`), createdAt: new Date(`2017-07-${i < 18 ? '0' + (Math.floor(i / 2) + 1) : Math.floor(i / 2) + 1}`),
progress: Math.ceil(Math.random() * 100), progress: Math.ceil(Math.random() * 100)
}); });
} }
function getRule(params: any): any[] { function getRule(params: any): any {
let ret = [...list]; let ret = [...list];
if (params.sorter) { if (params.sorter) {
const s = params.sorter.split('_'); const s = params.sorter.split('_');
@ -36,22 +36,23 @@ function getRule(params: any): any[] {
}); });
} }
if (params.statusList && params.statusList.length > 0) { if (params.statusList && params.statusList.length > 0) {
ret = ret.filter((data) => params.statusList.indexOf(data.status) > -1); ret = ret.filter(data => params.statusList.indexOf(data.status) > -1);
} }
if (params.no) { if (params.no) {
ret = ret.filter((data) => data.no.indexOf(params.no) > -1); ret = ret.filter(data => data.no.indexOf(params.no) > -1);
} }
return ret; return { data: { records: ret, total: ret.length }, success: true };
} }
function removeRule(nos: string): boolean { function removeRule(nos: string): any {
nos.split(',').forEach((no) => { nos.split(',').forEach(no => {
const idx = list.findIndex((w) => w.no === no); const idx = list.findIndex(w => w.no === no);
if (idx !== -1) { if (idx !== -1) {
list.splice(idx, 1); list.splice(idx, 1);
} }
}); });
return true;
return { data: true, success: true };
} }
function saveRule(description: string): void { function saveRule(description: string): void {
@ -61,7 +62,7 @@ function saveRule(description: string): void {
href: 'https://ant.design', href: 'https://ant.design',
avatar: [ avatar: [
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png'
][i % 2], ][i % 2],
no: `TradeCode ${i}`, no: `TradeCode ${i}`,
title: `一个任务名称 ${i}`, title: `一个任务名称 ${i}`,
@ -71,12 +72,12 @@ function saveRule(description: string): void {
status: Math.floor(Math.random() * 10) % 2, status: Math.floor(Math.random() * 10) % 2,
updatedAt: new Date(), updatedAt: new Date(),
createdAt: new Date(), createdAt: new Date(),
progress: Math.ceil(Math.random() * 100), progress: Math.ceil(Math.random() * 100)
}); });
} }
export const RULES = { export const RULES = {
'/rule': (req: MockRequest) => getRule(req.queryString), 'POST /rule': (req: MockRequest) => getRule(req.queryString),
'DELETE /rule': (req: MockRequest) => removeRule(req.queryString.nos), 'POST /delete/rule': (req: MockRequest) => removeRule(req.body.nos)
'POST /rule': (req: MockRequest) => saveRule(req.body.description), // 'POST /rule': (req: MockRequest) => saveRule(req.body.description)
}; };

View File

@ -39,7 +39,8 @@
], ],
"scripts": [ "scripts": [
"node_modules/quill/dist/quill.min.js", "node_modules/quill/dist/quill.min.js",
"node_modules/perfect-scrollbar/dist/perfect-scrollbar.js" "node_modules/perfect-scrollbar/dist/perfect-scrollbar.js",
"node_modules/qrious/dist/qrious.min.js"
], ],
"allowedCommonJsDependencies": [ "allowedCommonJsDependencies": [
"ajv", "ajv",
@ -48,20 +49,28 @@
}, },
"configurations": { "configurations": {
"production": { "production": {
"fileReplacements": [ "fileReplacements": [{
{ "replace": "src/environments/environment.ts",
"replace": "src/environments/environment.ts", "with": "src/environments/environment.prod.ts"
"with": "src/environments/environment.prod.ts" }],
}
],
"outputHashing": "all", "outputHashing": "all",
"budgets": [ "budgets": [{
{ "type": "initial",
"type": "initial", "maximumWarning": "4mb",
"maximumWarning": "2mb", "maximumError": "10mb"
"maximumError": "5mb" }]
} },
] "dev": {
"fileReplacements": [{
"replace": "src/environments/environment.ts",
"with": "src/environments/eascs/environment.dev.ts"
}],
"outputHashing": "all",
"budgets": [{
"type": "initial",
"maximumWarning": "4mb",
"maximumError": "10mb"
}]
}, },
"development": { "development": {
"buildOptimizer": false, "buildOptimizer": false,
@ -84,6 +93,9 @@
"production": { "production": {
"browserTarget": "ng-alain:build:production" "browserTarget": "ng-alain:build:production"
}, },
"dev": {
"browserTarget": "app:build:dev"
},
"development": { "development": {
"browserTarget": "ng-alain:build:development" "browserTarget": "ng-alain:build:development"
} }
@ -131,6 +143,9 @@
"configurations": { "configurations": {
"production": { "production": {
"devServerTarget": "ng-alain:serve:production" "devServerTarget": "ng-alain:serve:production"
},
"dev": {
"devServerTarget": "app:build:dev"
} }
} }
} }

20
package-lock.json generated
View File

@ -1,5 +1,5 @@
{ {
"name": "ng-alain-pro", "name": "tms-obc-web",
"version": "0.0.0", "version": "0.0.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
@ -19,6 +19,11 @@
} }
} }
}, },
"@amap/amap-jsapi-loader": {
"version": "1.0.1",
"resolved": "https://registry.nlark.com/@amap/amap-jsapi-loader/download/@amap/amap-jsapi-loader-1.0.1.tgz",
"integrity": "sha1-nsS01dJGfqxFH2yFLjXbaen58MA="
},
"@ampproject/remapping": { "@ampproject/remapping": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmmirror.com/@ampproject/remapping/download/@ampproject/remapping-1.0.1.tgz", "resolved": "https://registry.npmmirror.com/@ampproject/remapping/download/@ampproject/remapping-1.0.1.tgz",
@ -3426,14 +3431,6 @@
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
"dev": true "dev": true
}, },
"angular-baidu-maps": {
"version": "12.0.0",
"resolved": "https://registry.nlark.com/angular-baidu-maps/download/angular-baidu-maps-12.0.0.tgz",
"integrity": "sha1-I/Sn52ggJcLJRnGdIR6eNmt6sXQ=",
"requires": {
"tslib": "^2.1.0"
}
},
"ansi-colors": { "ansi-colors": {
"version": "4.1.1", "version": "4.1.1",
"resolved": "https://registry.nlark.com/ansi-colors/download/ansi-colors-4.1.1.tgz", "resolved": "https://registry.nlark.com/ansi-colors/download/ansi-colors-4.1.1.tgz",
@ -14814,6 +14811,11 @@
"integrity": "sha1-xF6cYYAL0IfviNfiVkI73Unl0HE=", "integrity": "sha1-xF6cYYAL0IfviNfiVkI73Unl0HE=",
"dev": true "dev": true
}, },
"qrious": {
"version": "4.0.2",
"resolved": "http://npm.eascs.com/qrious/-/qrious-4.0.2.tgz",
"integrity": "sha1-CcTUB50rlhYX9ixpz/O5u2ajlpM="
},
"qs": { "qs": {
"version": "6.7.0", "version": "6.7.0",
"resolved": "https://registry.nlark.com/qs/download/qs-6.7.0.tgz", "resolved": "https://registry.nlark.com/qs/download/qs-6.7.0.tgz",

View File

@ -1,7 +1,7 @@
{ {
"name": "ng-alain-pro", "name": "tms-obc-web",
"version": "0.0.0", "version": "0.0.0",
"description": "Ng-alain business theme, ng-zorro-antd admin panel front-end framework", "description": "运营后台WEB",
"author": "cipchk <cipchk@qq.com>", "author": "cipchk <cipchk@qq.com>",
"repository": { "repository": {
"type": "git", "type": "git",
@ -11,9 +11,10 @@
"scripts": { "scripts": {
"ng-high-memory": "node --max_old_space_size=8000 ./node_modules/@angular/cli/bin/ng", "ng-high-memory": "node --max_old_space_size=8000 ./node_modules/@angular/cli/bin/ng",
"ng": "ng", "ng": "ng",
"start": "ng s -o --port 4202", "start": "ng s -o --port 4202 --host 0.0.0.0",
"hmr": "ng s -o --hmr", "hmr": "ng s -o --hmr",
"build": "npm run ng-high-memory build", "build": "npm run ng-high-memory build --",
"build:dev": "npm run build -- -c dev",
"analyze": "npm run ng-high-memory build -- --source-map", "analyze": "npm run ng-high-memory build -- --source-map",
"analyze:view": "source-map-explorer dist/**/*.js", "analyze:view": "source-map-explorer dist/**/*.js",
"lint": "npm run lint:ts && npm run lint:style", "lint": "npm run lint:ts && npm run lint:style",
@ -29,6 +30,7 @@
}, },
"dependencies": { "dependencies": {
"@agm/core": "^1.1.0", "@agm/core": "^1.1.0",
"@amap/amap-jsapi-loader": "^1.0.1",
"@angular/animations": "~12.2.0", "@angular/animations": "~12.2.0",
"@angular/common": "~12.2.0", "@angular/common": "~12.2.0",
"@angular/compiler": "~12.2.0", "@angular/compiler": "~12.2.0",
@ -53,7 +55,6 @@
"@fullcalendar/timegrid": "^5.9.0", "@fullcalendar/timegrid": "^5.9.0",
"@swimlane/ngx-charts": "^18.0.1", "@swimlane/ngx-charts": "^18.0.1",
"ajv": "^8.6.2", "ajv": "^8.6.2",
"angular-baidu-maps": "^12.0.0",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"js-base64": "^3.6.1", "js-base64": "^3.6.1",
"masonry-layout": "^4.2.2", "masonry-layout": "^4.2.2",
@ -62,6 +63,7 @@
"ngx-tinymce": "^12.0.0", "ngx-tinymce": "^12.0.0",
"ngx-trend": "^7.0.0", "ngx-trend": "^7.0.0",
"perfect-scrollbar": "^1.5.2", "perfect-scrollbar": "^1.5.2",
"qrious": "^4.0.2",
"quill": "^1.3.7", "quill": "^1.3.7",
"quill-image-resize-module": "^3.0.0", "quill-image-resize-module": "^3.0.0",
"rxjs": "~6.6.0", "rxjs": "~6.6.0",

View File

@ -1,10 +1,14 @@
/** /*
* For more configuration, please refer to https://angular.io/guide/build#proxying-to-a-backend-server * @Description :
* * @Version : 1.0
* 更多配置描述请参考 https://angular.cn/guide/build#proxying-to-a-backend-server * @Author : Shiming
* * @Date : 2022-01-18 09:51:21
* Note: The proxy is only valid for real requests, Mock does not actually generate requests, so the priority of Mock will be higher than the proxy * @LastEditors : Shiming
* @LastEditTime : 2022-02-17 15:57:11
* @FilePath : \\tms-obc-web\\proxy.conf.js
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/ */
module.exports = { module.exports = {
/** /**
* The following means that all requests are directed to the backend `https://localhost:9000/` * The following means that all requests are directed to the backend `https://localhost:9000/`
@ -14,4 +18,14 @@ module.exports = {
// secure: false, // Ignore invalid SSL certificates // secure: false, // Ignore invalid SSL certificates
// changeOrigin: true // changeOrigin: true
// } // }
'//api': {
target: {
host: 'tms-api-dev.eascs.com',
protocol: 'https:',
port: 443
},
secure: false,
changeOrigin: true,
logLevel: 'debug'
},
}; };

View File

@ -2,6 +2,7 @@ import { Component, ElementRef, OnInit, Renderer2 } from '@angular/core';
import { NavigationEnd, NavigationError, RouteConfigLoadStart, Router } from '@angular/router'; import { NavigationEnd, NavigationError, RouteConfigLoadStart, Router } from '@angular/router';
import { TitleService, VERSION as VERSION_ALAIN } from '@delon/theme'; import { TitleService, VERSION as VERSION_ALAIN } from '@delon/theme';
import { environment } from '@env/environment'; import { environment } from '@env/environment';
import { NzIconService } from 'ng-zorro-antd/icon';
import { NzModalService } from 'ng-zorro-antd/modal'; import { NzModalService } from 'ng-zorro-antd/modal';
import { VERSION as VERSION_ZORRO } from 'ng-zorro-antd/version'; import { VERSION as VERSION_ZORRO } from 'ng-zorro-antd/version';
@ -15,10 +16,14 @@ export class AppComponent implements OnInit {
renderer: Renderer2, renderer: Renderer2,
private router: Router, private router: Router,
private titleSrv: TitleService, private titleSrv: TitleService,
private modalSrv: NzModalService private modalSrv: NzModalService,
private iconService: NzIconService
) { ) {
renderer.setAttribute(el.nativeElement, 'ng-alain-version', VERSION_ALAIN.full); renderer.setAttribute(el.nativeElement, 'ng-alain-version', VERSION_ALAIN.full);
renderer.setAttribute(el.nativeElement, 'ng-zorro-version', VERSION_ZORRO.full); renderer.setAttribute(el.nativeElement, 'ng-zorro-version', VERSION_ZORRO.full);
this.iconService.fetchFromIconfont({
scriptUrl: 'https://at.alicdn.com/t/font_3153207_udngwyp35db.js'
});
} }
ngOnInit(): void { ngOnInit(): void {

View File

@ -2,12 +2,13 @@
/* eslint-disable import/no-duplicates */ /* eslint-disable import/no-duplicates */
import { HttpClientModule } from '@angular/common/http'; import { HttpClientModule } from '@angular/common/http';
import { default as ngLang } from '@angular/common/locales/zh'; import { default as ngLang } from '@angular/common/locales/zh';
import { APP_INITIALIZER, LOCALE_ID, NgModule, Type } from '@angular/core'; import { APP_INITIALIZER, DEFAULT_CURRENCY_CODE, LOCALE_ID, NgModule, Type } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser'; import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { SimpleInterceptor } from '@delon/auth'; import { SimpleInterceptor } from '@delon/auth';
import { NzNotificationModule } from 'ng-zorro-antd/notification'; import { NzNotificationModule } from 'ng-zorro-antd/notification';
import zh from '@angular/common/locales/zh';
registerLocaleData(zh);
// #region global third module // #region global third module
import { BidiModule } from '@angular/cdk/bidi'; import { BidiModule } from '@angular/cdk/bidi';
@ -18,10 +19,11 @@ const GLOBAL_THIRD_MODULES: Array<Type<any>> = [BidiModule];
// #region Http Interceptors // #region Http Interceptors
import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { DefaultInterceptor } from '@core'; import { BusinessInterceptor, DefaultInterceptor } from '@core';
const INTERCEPTOR_PROVIDES = [ const INTERCEPTOR_PROVIDES = [
{ provide: HTTP_INTERCEPTORS, useClass: SimpleInterceptor, multi: true }, { provide: HTTP_INTERCEPTORS, useClass: SimpleInterceptor, multi: true },
{ provide: HTTP_INTERCEPTORS, useClass: BusinessInterceptor, multi: true },
{ provide: HTTP_INTERCEPTORS, useClass: DefaultInterceptor, multi: true } { provide: HTTP_INTERCEPTORS, useClass: DefaultInterceptor, multi: true }
]; ];
// #endregion // #endregion
@ -38,7 +40,9 @@ const APPINIT_PROVIDES = [
useFactory: StartupServiceFactory, useFactory: StartupServiceFactory,
deps: [StartupService], deps: [StartupService],
multi: true multi: true
} },
{ provide: DEFAULT_CURRENCY_CODE, useValue: '¥' },
AuthGuard
]; ];
// #endregion // #endregion
@ -49,7 +53,8 @@ import { LayoutModule } from './layout/layout.module';
import { RoutesModule } from './routes/routes.module'; import { RoutesModule } from './routes/routes.module';
import { SharedModule } from './shared/shared.module'; import { SharedModule } from './shared/shared.module';
import { STWidgetModule } from './shared/widget/st-widget.module'; import { STWidgetModule } from './shared/widget/st-widget.module';
import { Observable } from 'rxjs'; import { registerLocaleData } from '@angular/common';
import { AuthGuard } from './core/guards/auth.guard';
@NgModule({ @NgModule({
declarations: [AppComponent], declarations: [AppComponent],

View File

@ -1,9 +1,10 @@
import { NgModule, Optional, SkipSelf } from '@angular/core'; import { NgModule, Optional, SkipSelf } from '@angular/core';
import { EATokenGuard } from './guards/token.guard';
import { throwIfAlreadyLoaded } from './module-import-guard'; import { throwIfAlreadyLoaded } from './module-import-guard';
@NgModule({ @NgModule({
providers: [] providers: [EATokenGuard]
}) })
export class CoreModule { export class CoreModule {
constructor(@Optional() @SkipSelf() parentModule: CoreModule) { constructor(@Optional() @SkipSelf() parentModule: CoreModule) {

View File

@ -15,14 +15,16 @@ import { EnvironmentService } from '@env/environment.service';
import { NzMessageService } from 'ng-zorro-antd/message'; import { NzMessageService } from 'ng-zorro-antd/message';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root'
}) })
export class CoreService { export class CoreService {
// 获取当前登录用户信息 // 获取当前登录用户信息
public $api_get_current_user_info = `/scm/cuc/cuc/user/getUserDetail`; public $api_get_current_user_info = `/scm/cuc/cuc/user/getUserDetail`;
// 获取当前用户所拥有的菜单 // 获取当前用户所拥有的菜单
public $api_get_current_user_menus = `/scm/cuc/cuc/functionInfo/getUserHaveFunctionsList`; public $api_get_current_user_menus = `/api/mdc/cuc/functionInfo/getUserHaveFunctionsList`;
position = { lat: '', lng: '' };
constructor(private injector: Injector) {} constructor(private injector: Injector) {}
// 注入路由 // 注入路由

View File

@ -0,0 +1,89 @@
import { Injectable, Injector } from '@angular/core';
import { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';
import { ACLGuard, ACLService } from '@delon/acl';
import { MenuService, SettingsService } from '@delon/theme';
import { EAUserService } from '@shared';
import { Observable, of } from 'rxjs';
import { switchMap } from 'rxjs/operators';
@Injectable()
export class AuthGuard extends ACLGuard {
constructor(
srv: ACLService,
public srv1: ACLService,
private menuService: MenuService,
private settings: SettingsService,
private userService: EAUserService,
router: Router,
private inject: Injector
) {
super(srv, router, inject);
}
canActivate(route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable<boolean> {
// if (Object.keys(route.params)?.length > 0 || !route.routeConfig?.path) {
// return super.canActivate(route, _state);
// } else {
// return super.canActivate(route, _state);
// }
return super.canActivate(route, _state);
}
canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
if (childRoute.routeConfig?.loadChildren || childRoute.routeConfig?.children) {
return super.canActivateChild(childRoute, state);
} else {
return this.handle(childRoute, state, 2, this.settingRoute(childRoute.params, state.url));
}
}
private handle(route: ActivatedRouteSnapshot, state: RouterStateSnapshot, type: 1 | 2, router?: string): Observable<boolean> {
if (!router) {
return type === 1 ? super.canActivate(route, state) : super.canActivateChild(route, state);
}
return this.userService
.request('/api/mdc/cuc/userAuthority/isUserAdmin', {
appUserId: this.settings.user.appUserId
})
.pipe(
switchMap(res => {
if (res) {
// 超级管理员赋值全量权限
this.srv1.setFull(true);
return of(true);
} else {
// 如果不是超级管理员 获取权限
return this.userService.request('/api/mdc/cuc/functionButton/getUserFunctionButton', { link: router });
}
}),
switchMap(res => {
if (res?.abilities) {
this.srv1.setAbility(res.abilities || []);
// this.menuService.resume();
this.userService.loadUserMenus();
}
return type === 1 ? super.canActivate(route, state) : super.canActivateChild(route, state);
})
);
}
/**
* 根据参数拼接原始路由
* @param params 参数
* @param route 实际路由
* @returns
*/
private settingRoute(params: any, route: string) {
let _route = route;
if (_route.indexOf('?') > -1) {
_route = route.split('?')[0];
}
for (const key of Object.keys(params)) {
if (_route.indexOf(params[key]) > -1) {
_route = _route.replace(params[key], ':' + key);
}
}
return _route;
}
}

View File

@ -0,0 +1,38 @@
import { Inject, Injectable, Injector } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, RouterStateSnapshot } from '@angular/router';
import { sysConf } from '@conf/sys.conf';
import { CoreService } from '@core';
import { ACLGuard, ACLService } from '@delon/acl';
import { EAUserService } from '@shared';
import { Observable, of } from 'rxjs';
@Injectable()
export class EATokenGuard implements CanActivate, CanActivateChild {
constructor(srv: ACLService, router: Router, private eaUserSrv: CoreService, private router2: Router, private inject: Injector) {}
canActivate(route: ActivatedRouteSnapshot, _state: RouterStateSnapshot | null): Observable<boolean> {
const canOpen = this.eaUserSrv.loginStatus;
if (!canOpen) {
this.router2.navigate([sysConf.login_url], {
queryParams: {
returnUrl: _state?.url
}
});
return of(!canOpen);
}
return of(true);
}
canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
const canOpen = this.eaUserSrv.loginStatus;
if (!canOpen) {
this.router2.navigate([sysConf.login_url], {
queryParams: {
returnUrl: state?.url
}
});
return of(!canOpen);
}
return of(true);
}
}

View File

@ -1,6 +1,9 @@
export * from './module-import-guard'; export * from './module-import-guard';
export * from './net/default.interceptor'; export * from './net/default.interceptor';
export * from './net/business.interceptor';
// Services // Services
export * from './core.service'; export * from './core.service';
export * from './startup/startup.service'; export * from './startup/startup.service';
export * from './guards/token.guard';

View File

@ -0,0 +1,108 @@
import {
HttpErrorResponse,
HttpEvent,
HttpHandler,
HttpInterceptor,
HttpRequest,
HttpResponse,
HttpResponseBase
} from '@angular/common/http';
import { Inject, Injectable, Optional } from '@angular/core';
import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';
import { environment } from '@env/environment';
import { EAEnvironmentService, EAUserService } from '@shared';
import { Observable, of } from 'rxjs';
import { catchError, mergeMap } from 'rxjs/operators';
import { CoreService } from '../core.service';
@Injectable()
export class BusinessInterceptor implements HttpInterceptor {
constructor(
private envSrv: EAEnvironmentService,
private eaUserSrv: EAUserService,
@Optional()
@Inject(DA_SERVICE_TOKEN)
private tokenSrv: ITokenService,
private coreSrv: CoreService
) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// 构造新的请求URL
req = this.constructNewRequestUrl(req);
// 附加额外的请求头
req = this.attachAdditionalHeaders(req);
// 后续操作
return next.handle(req).pipe(
mergeMap(ev => this.handlingBussinessResponseData(ev)),
catchError((err: HttpErrorResponse) => this.handlingBusinessErrors(err))
);
}
/**
* 构造新的请求URL
*/
private constructNewRequestUrl(req: HttpRequest<any>): HttpRequest<any> {
let url = req.url;
if (!url.startsWith('https://') && !url.startsWith('http://')) {
if (!url.startsWith('assets')) {
url = environment.api.baseUrl + url;
}
}
return req.clone({ url });
}
/**
* 附加额外的请求头
*/
private attachAdditionalHeaders(req: HttpRequest<any>): HttpRequest<any> {
let position = {};
if (this.coreSrv.position.lat && this.coreSrv.position.lng) {
position = { lat: this.coreSrv.position.lat.toString(), lng: this.coreSrv.position.lng.toString() };
}
// 附加环境变量
const header: any = {
appId: this.envSrv.env.appId,
tenantId: this.envSrv.env.tenantId,
enterpriseId: this.envSrv.env.enterpriseId,
...position
};
// 附加授权声明
const token = this.tokenSrv.get()?.token;
if (token) {
header.Authorization = `Bearer ${token}`;
}
return req.clone({ setHeaders: header });
}
/**
* 处理业务数据
*/
private handlingBussinessResponseData(ev: HttpEvent<any>): Observable<any> {
if (ev instanceof HttpResponseBase) {
const body = (ev as HttpResponse<any>).body;
if (body) {
switch (body.status) {
case 505001:
case 505002:
this.eaUserSrv.logout();
break;
default:
break;
}
}
}
if (ev instanceof HttpErrorResponse) {
return this.handlingBusinessErrors(ev);
}
return of(ev);
}
/**
* 处理响应错误
*/
private handlingBusinessErrors(err: HttpErrorResponse): Observable<any> {
/** Http响应异常已在默认拦截器处理完成 ,该处不再处理 */
return of(err);
}
}

View File

@ -1,20 +1,8 @@
import { import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponseBase } from '@angular/common/http';
HttpErrorResponse, import { Injectable } from '@angular/core';
HttpEvent, import { Observable, of } from 'rxjs';
HttpHandler, import { catchError, mergeMap } from 'rxjs/operators';
HttpHeaders, import { CoreService } from './../core.service';
HttpInterceptor,
HttpRequest,
HttpResponseBase
} from '@angular/common/http';
import { Injectable, Injector } from '@angular/core';
import { Router } from '@angular/router';
import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';
import { _HttpClient } from '@delon/theme';
import { environment } from '@env/environment';
import { NzNotificationService } from 'ng-zorro-antd/notification';
import { BehaviorSubject, Observable, of, throwError } from 'rxjs';
import { catchError, filter, mergeMap, switchMap, take } from 'rxjs/operators';
const CODEMESSAGE: { [key: number]: string } = { const CODEMESSAGE: { [key: number]: string } = {
200: '服务器成功返回请求的数据。', 200: '服务器成功返回请求的数据。',
@ -34,228 +22,38 @@ const CODEMESSAGE: { [key: number]: string } = {
504: '网关超时。' 504: '网关超时。'
}; };
/**
* 默认HTTP拦截器其注册细节见 `app.module.ts`
*/
@Injectable() @Injectable()
export class DefaultInterceptor implements HttpInterceptor { export class DefaultInterceptor implements HttpInterceptor {
private refreshTokenEnabled = environment.api.refreshTokenEnabled; constructor(private coreSrv: CoreService) {}
private refreshTokenType: 're-request' | 'auth-refresh' = environment.api.refreshTokenType;
private refreshToking = false;
private refreshToken$: BehaviorSubject<any> = new BehaviorSubject<any>(null);
constructor(private injector: Injector) {
if (this.refreshTokenType === 'auth-refresh') {
this.buildAuthRefresh();
}
}
private get notification(): NzNotificationService {
return this.injector.get(NzNotificationService);
}
private get tokenSrv(): ITokenService {
return this.injector.get(DA_SERVICE_TOKEN);
}
private get http(): _HttpClient {
return this.injector.get(_HttpClient);
}
private goTo(url: string): void {
setTimeout(() => this.injector.get(Router).navigateByUrl(url));
}
private checkStatus(ev: HttpResponseBase): void {
if ((ev.status >= 200 && ev.status < 300) || ev.status === 401) {
return;
}
const errortext = CODEMESSAGE[ev.status] || ev.statusText;
this.notification.error(`请求错误 ${ev.status}: ${ev.url}`, errortext);
}
/**
* 刷新 Token 请求
*/
private refreshTokenRequest(): Observable<any> {
const model = this.tokenSrv.get();
return this.http.post(`/api/auth/refresh`, null, null, { headers: { refresh_token: model?.refresh_token || '' } });
}
// #region 刷新Token方式一使用 401 重新刷新 Token
private tryRefreshToken(ev: HttpResponseBase, req: HttpRequest<any>, next: HttpHandler): Observable<any> {
// 1、若请求为刷新Token请求表示来自刷新Token可以直接跳转登录页
if ([`/api/auth/refresh`].some(url => req.url.includes(url))) {
this.toLogin();
return throwError(ev);
}
// 2、如果 `refreshToking` 为 `true` 表示已经在请求刷新 Token 中,后续所有请求转入等待状态,直至结果返回后再重新发起请求
if (this.refreshToking) {
return this.refreshToken$.pipe(
filter(v => !!v),
take(1),
switchMap(() => next.handle(this.reAttachToken(req)))
);
}
// 3、尝试调用刷新 Token
this.refreshToking = true;
this.refreshToken$.next(null);
return this.refreshTokenRequest().pipe(
switchMap(res => {
// 通知后续请求继续执行
this.refreshToking = false;
this.refreshToken$.next(res);
// 重新保存新 token
this.tokenSrv.set(res);
// 重新发起请求
return next.handle(this.reAttachToken(req));
}),
catchError(err => {
this.refreshToking = false;
this.toLogin();
return throwError(err);
})
);
}
/**
* 重新附加新 Token 信息
*
* > 由于已经发起的请求,不会再走一遍 `@delon/auth` 因此需要结合业务情况重新附加新的 Token
*/
private reAttachToken(req: HttpRequest<any>): HttpRequest<any> {
// 以下示例是以 NG-ALAIN 默认使用 `SimpleInterceptor`
const token = this.tokenSrv.get()?.token;
return req.clone({
setHeaders: {
token: `Bearer ${token}`
}
});
}
// #endregion
// #region 刷新Token方式二使用 `@delon/auth` 的 `refresh` 接口
private buildAuthRefresh(): void {
if (!this.refreshTokenEnabled) {
return;
}
this.tokenSrv.refresh
.pipe(
filter(() => !this.refreshToking),
switchMap(res => {
console.log(res);
this.refreshToking = true;
return this.refreshTokenRequest();
})
)
.subscribe(
res => {
// TODO: Mock expired value
res.expired = +new Date() + 1000 * 60 * 5;
this.refreshToking = false;
this.tokenSrv.set(res);
},
() => this.toLogin()
);
}
// #endregion
private toLogin(): void {
this.notification.error(`未登录或登录已过期,请重新登录。`, ``);
this.goTo(this.tokenSrv.login_url!);
}
private handleData(ev: HttpResponseBase, req: HttpRequest<any>, next: HttpHandler): Observable<any> {
this.checkStatus(ev);
// 业务处理:一些通用操作
switch (ev.status) {
case 200:
// 业务层级错误处理以下是假定restful有一套统一输出格式指不管成功与否都有相应的数据格式情况下进行处理
// 例如响应内容:
// 错误内容:{ status: 1, msg: '非法参数' }
// 正确内容:{ status: 0, response: { } }
// 则以下代码片断可直接适用
// if (ev instanceof HttpResponse) {
// const body = ev.body;
// if (body && body.status !== 0) {
// this.injector.get(NzMessageService).error(body.msg);
// // 注意这里如果继续抛出错误会被行254的 catchError 二次拦截,导致外部实现的 Pipe、subscribe 操作被中断例如this.http.get('/').subscribe() 不会触发
// // 如果你希望外部实现需要手动移除行254
// return throwError({});
// } else {
// // 忽略 Blob 文件体
// if (ev.body instanceof Blob) {
// return of(ev);
// }
// // 重新修改 `body` 内容为 `response` 内容,对于绝大多数场景已经无须再关心业务状态码
// return of(new HttpResponse(Object.assign(ev, { body: body.response })));
// // 或者依然保持完整的格式
// return of(ev);
// }
// }
break;
case 401:
if (this.refreshTokenEnabled && this.refreshTokenType === 're-request') {
return this.tryRefreshToken(ev, req, next);
}
this.toLogin();
break;
case 403:
case 404:
case 500:
this.goTo(`/exception/${ev.status}`);
break;
default:
if (ev instanceof HttpErrorResponse) {
console.warn(
'未可知错误大部分是由于后端不支持跨域CORS或无效配置引起请参考 https://ng-alain.com/docs/server 解决跨域问题',
ev
);
}
break;
}
if (ev instanceof HttpErrorResponse) {
return throwError(ev);
} else {
return of(ev);
}
}
private getAdditionalHeaders(headers?: HttpHeaders): { [name: string]: string } {
const res: { [name: string]: string } = {};
// const lang = this.injector.get(ALAIN_I18N_TOKEN).currentLang;
// if (!headers?.has('Accept-Language') && lang) {
// res['Accept-Language'] = lang;
// }
return res;
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// 统一加上服务端前缀 return next.handle(req).pipe(
let url = req.url; mergeMap(ev => this.handlingHttpResponseData(ev)),
if (!url.startsWith('https://') && !url.startsWith('http://')) { catchError((err: HttpErrorResponse) => this.handlingHttpErrorResponse(err))
const { baseUrl } = environment.api;
url = baseUrl + (baseUrl.endsWith('/') && url.startsWith('/') ? url.substring(1) : url);
}
const newReq = req.clone({ url, setHeaders: this.getAdditionalHeaders(req.headers) });
return next.handle(newReq).pipe(
mergeMap(ev => {
// 允许统一对请求错误处理
if (ev instanceof HttpResponseBase) {
return this.handleData(ev, newReq, next);
}
// 若一切都正常,则后续操作
return of(ev);
}),
catchError((err: HttpErrorResponse) => this.handleData(err, newReq, next))
); );
} }
/**
* 处理Http响应数据
*/
private handlingHttpResponseData(ev: HttpEvent<any>): Observable<any> {
if (ev instanceof HttpResponseBase) {
// 正常情况直接返回到下个业务拦截器处理
if (ev.status >= 200 && ev.status < 300) {
return of(ev);
}
// 所有状态不是2xx和3xx都当作异常处理
if (ev instanceof HttpErrorResponse) {
return this.handlingHttpErrorResponse(ev);
}
}
return of(ev);
}
/**
* 处理默认Http响应错误
*/
private handlingHttpErrorResponse(err: HttpErrorResponse): Observable<any> {
return of(err);
}
} }

View File

@ -1,7 +1,11 @@
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { Inject, Injectable } from '@angular/core'; import { Inject, Injectable } from '@angular/core';
import { cacheConf } from '@conf/cache.conf';
import { sysConf } from '@conf/sys.conf';
import { ACLService } from '@delon/acl'; import { ACLService } from '@delon/acl';
import { MenuService, SettingsService, TitleService, _HttpClient } from '@delon/theme'; import { MenuService, SettingsService, TitleService, _HttpClient } from '@delon/theme';
import { environment } from '@env/environment';
import { AmapService, EACacheService, EAUserService } from '@shared';
import { NzSafeAny } from 'ng-zorro-antd/core/types'; import { NzSafeAny } from 'ng-zorro-antd/core/types';
import { NzIconService } from 'ng-zorro-antd/icon'; import { NzIconService } from 'ng-zorro-antd/icon';
import { Observable, zip } from 'rxjs'; import { Observable, zip } from 'rxjs';
@ -24,6 +28,9 @@ export class StartupService {
private aclService: ACLService, private aclService: ACLService,
private titleService: TitleService, private titleService: TitleService,
private httpClient: _HttpClient, private httpClient: _HttpClient,
private userSrv: EAUserService,
private amapService: AmapService,
public cacheSrv: EACacheService,
private coreSrv: CoreService private coreSrv: CoreService
) { ) {
iconSrv.addIcon(...ICONS_AUTO, ...ICONS); iconSrv.addIcon(...ICONS_AUTO, ...ICONS);
@ -33,6 +40,12 @@ export class StartupService {
load(): Promise<void> { load(): Promise<void> {
return new Promise(resolve => { return new Promise(resolve => {
this.amapService.getCurrentPosition().subscribe(res => {
if (res.position) {
this.coreSrv.position = { lat: res.position.lat, lng: res.position.lng };
}
});
let data; let data;
if (this.coreSrv.loginStatus) { if (this.coreSrv.loginStatus) {
// 本地菜单 // 本地菜单
@ -74,8 +87,13 @@ export class StartupService {
this.settingService.setApp(appData); this.settingService.setApp(appData);
// 用户信息:包括姓名、头像、邮箱地址 // 用户信息:包括姓名、头像、邮箱地址
this.settingService.setUser(userData); this.settingService.setUser(userData);
this.cacheSrv.set(cacheConf.env, {
appId: sysConf.appId,
tenantId: userData?.tenantId || sysConf.tenantId,
enterpriseId: userData?.enterpriseId || sysConf.enterpriseId
});
// ACL设置权限为全量 // ACL设置权限为全量
this.aclService.setFull(true); this.aclService.setFull(false);
// 初始化菜单 // 初始化菜单
this.menuService.add(menuData); this.menuService.add(menuData);
// 设置页面标题的后缀 // 设置页面标题的后缀
@ -94,12 +112,10 @@ export class StartupService {
const appData = this.httpClient.get(`assets/mocks/app-data.json`).pipe(map((res: any) => res.app)); const appData = this.httpClient.get(`assets/mocks/app-data.json`).pipe(map((res: any) => res.app));
// 用户数据 // 用户数据
const userData = this.coreSrv.loginStatus const userData = this.httpClient.get('assets/mocks/user-data.json').pipe(map((res: any) => res.user));
? this.httpClient.post(this.coreSrv.$api_get_current_user_info, {}).pipe(map((res: any) => res.data))
: this.httpClient.get('assets/mocks/user-data.json').pipe(map((res: any) => res.user));
// 菜单数据 // 菜单数据
const menuData = this.httpClient.get('assets/mocks/menu-data.json').pipe(map((res: any) => res.menu)); const menuData = this.httpClient.get('assets/mocks/menu-data.json').pipe(map((res: any) => res.data.menu));
return zip(appData, userData, menuData); return zip(appData, userData, menuData);
} }
@ -115,16 +131,15 @@ export class StartupService {
const appData = this.httpClient.get(`assets/mocks/app-data.json`).pipe(map((res: any) => res.app)); const appData = this.httpClient.get(`assets/mocks/app-data.json`).pipe(map((res: any) => res.app));
// 用户数据 // 用户数据
const userData = this.coreSrv.loginStatus const userData = this.httpClient.post(this.userSrv.$api_get_user_by_token, {}).pipe(map((res: any) => res.data));
? this.httpClient.post(this.coreSrv.$api_get_current_user_info, {}).pipe(map((res: any) => res.data))
: this.httpClient.get('assets/mocks/user-data.json').pipe(map((res: any) => res.user));
// 菜单数据 // 菜单数据
const menuData = this.httpClient // const menuData = this.httpClient
.post(this.coreSrv.$api_get_current_user_menus, { // .post(this.coreSrv.$api_get_current_user_menus, {
appId: this.coreSrv.envSrv.getEnvironment().appId // appId: this.coreSrv.envSrv.getEnvironment().appId
}) // })
.pipe(map((res: any) => res.data)); // .pipe(map((res: any) => res.data));
const menuData = this.httpClient.get('assets/mocks/menu-data.json').pipe(map((res: any) => res.data.menu));
return zip(appData, userData, menuData); return zip(appData, userData, menuData);
} }

View File

@ -11,9 +11,23 @@ import { environment } from '@env/environment';
// #region NG-ALAIN Config // #region NG-ALAIN Config
const alainConfig: AlainConfig = { const alainConfig: AlainConfig = {
st: { modal: { size: 'lg' } }, st: {
req: { method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' } },
res: { reName: { list: 'data.records', total: 'data.total' } },
page: { show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] },
modal: { size: 'lg' }
},
sf: { button: { search: '查询' }, ui: { placeholder: '请输入' } },
pageHeader: { homeI18n: 'home', recursiveBreadcrumb: true }, pageHeader: { homeI18n: 'home', recursiveBreadcrumb: true },
auth: { login_url: '/passport/login' } auth: { login_url: '/passport/login' },
acl: { guard_url: '/exception/403' },
chart: {
// 以下是默认配置,如果项目无法外网访问,可以根据 `angular.json` 配置将依赖包直接使用 `./assets***` 路径
libs: [
'https://gw.alipayobjects.com/os/lib/antv/g2/4.1.4/dist/g2.min.js',
'https://gw.alipayobjects.com/os/lib/antv/data-set/0.11.7/dist/data-set.js'
]
}
}; };
const alainModules = [AlainThemeModule.forRoot(), DelonACLModule.forRoot()]; const alainModules = [AlainThemeModule.forRoot(), DelonACLModule.forRoot()];
@ -21,12 +35,12 @@ const alainProvides = [{ provide: ALAIN_CONFIG, useValue: alainConfig }];
// #region reuse-tab // #region reuse-tab
import { RouteReuseStrategy } from '@angular/router'; // import { RouteReuseStrategy } from '@angular/router';
alainProvides.push({ // alainProvides.push({
provide: RouteReuseStrategy, // provide: RouteReuseStrategy,
useClass: ReuseTabStrategy, // useClass: ReuseTabStrategy,
deps: [ReuseTabService] // deps: [ReuseTabService]
} as any); // } as any);
// #endregion // #endregion
@ -51,9 +65,9 @@ export class GlobalConfigModule {
throwIfAlreadyLoaded(parentModule, 'GlobalConfigModule'); throwIfAlreadyLoaded(parentModule, 'GlobalConfigModule');
// NOTICE: Only valid for menus with reuse property // NOTICE: Only valid for menus with reuse property
// Pls refer to the E-Mail demo effect // Pls refer to the E-Mail demo effect
reuseTabService.mode = ReuseTabMatchMode.MenuForce; // reuseTabService.mode = ReuseTabMatchMode.MenuForce;
// Shouled be trigger init, you can ingore when used `reuse-tab` component in layout component // Shouled be trigger init, you can ingore when used `reuse-tab` component in layout component
reuseTabService.init(); // reuseTabService.init();
} }
static forRoot(): ModuleWithProviders<GlobalConfigModule> { static forRoot(): ModuleWithProviders<GlobalConfigModule> {

View File

@ -24,7 +24,7 @@ import { NzSpinModule } from 'ng-zorro-antd/spin';
import { NzSwitchModule } from 'ng-zorro-antd/switch'; import { NzSwitchModule } from 'ng-zorro-antd/switch';
import { NzTimelineModule } from 'ng-zorro-antd/timeline'; import { NzTimelineModule } from 'ng-zorro-antd/timeline';
import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; import { NzToolTipModule } from 'ng-zorro-antd/tooltip';
import { NzGridModule } from 'ng-zorro-antd/grid';
import { LayoutPassportComponent } from './passport/passport.component'; import { LayoutPassportComponent } from './passport/passport.component';
import { PRO_COMPONENTS } from './pro/index'; import { PRO_COMPONENTS } from './pro/index';
@ -56,6 +56,7 @@ const COMPONENTS: Array<Type<any>> = [...PRO_COMPONENTS, LayoutPassportComponent
NoticeIconModule, NoticeIconModule,
ThemeBtnModule, ThemeBtnModule,
ScrollbarModule, ScrollbarModule,
NzGridModule,
NzMessageModule NzMessageModule
], ],
declarations: COMPONENTS, declarations: COMPONENTS,

View File

@ -1,13 +1,15 @@
<div class="container"> <nz-layout class="layout">
<!-- <pro-langs class="langs" btnClass></pro-langs> --> <nz-header>
<div class="wrap"> <div nz-row>
<div class="top"> <div nz-col nzSpan="24" style="display: flex;align-items: center;">
<div class="head"> <img width="32" height="32" src="./assets/images/user/logo.svg" [routerLink]="['/']" />
<img class="logo" src="./assets/logo-color.svg"> <label class="title ml-sm">运多星网络货运管理平台</label>
<span class="title">ng-alain pro</span>
</div> </div>
<div class="desc">武林中最有影响力的《葵花宝典》;欲练神功,挥刀自宫</div>
</div> </div>
<router-outlet></router-outlet> </nz-header>
</div> <nz-content class="content">
</div> <div class="inner-content">
<router-outlet></router-outlet>
</div>
</nz-content>
</nz-layout>

View File

@ -1,74 +1,22 @@
@import '~@delon/theme/index'; @import '~@delon/theme/index';
:host { :host {
::ng-deep { ::ng-deep {
.container { .layout {
display: flex; height: 100%;
flex-direction: column;
min-height: 100%;
background: #f0f2f5;
}
.langs {
width: 100%;
height: 40px;
line-height: 44px;
text-align: right;
.ant-dropdown-trigger {
display: inline-block;
}
.anticon {
margin-top: 24px;
margin-right: 24px;
font-size: 14px;
vertical-align: top;
cursor: pointer;
}
}
.wrap {
flex: 1;
padding: 32px 0;
}
.ant-form-item {
margin-bottom: 24px;
} }
@media (min-width: @screen-md-min) { .ant-layout-header {
.container { background: #ffffff;
background-image: url('https://gw.alipayobjects.com/zos/rmsportal/TVYTbAXWheQpRcWDaDMu.svg'); box-shadow: 0px 5px 5px #d1d1d1;
background-repeat: no-repeat;
background-position: center 110px;
background-size: 100%;
}
.wrap {
padding: 32px 0 24px;
}
}
.top {
text-align: center;
}
.header {
height: 44px;
line-height: 44px;
a {
text-decoration: none;
}
}
.logo {
height: 44px;
margin-right: 16px;
}
.title {
position: relative;
color: @heading-color;
font-weight: 600;
font-size: 33px;
font-family: 'Myriad Pro', 'Helvetica Neue', Arial, Helvetica, sans-serif;
vertical-align: middle;
}
.desc {
margin-top: 12px;
margin-bottom: 40px;
color: @text-color-secondary;
font-size: @font-size-base;
} }
} }
} }
.title {
font-size : 18px;
font-weight: 600;
color : #26282A;
}

View File

@ -7,24 +7,9 @@ import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';
styleUrls: ['./passport.component.less'] styleUrls: ['./passport.component.less']
}) })
export class LayoutPassportComponent implements OnInit { export class LayoutPassportComponent implements OnInit {
links = [ constructor() {}
{
title: '帮助',
href: ''
},
{
title: '隐私',
href: ''
},
{
title: '条款',
href: ''
}
];
constructor(@Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService) {}
ngOnInit(): void { ngOnInit(): void {
this.tokenService.clear(); // this.tokenService.clear();
} }
} }

View File

@ -1,7 +1,7 @@
<div *ngIf="pro.isTopMenu" class="alain-pro__top-nav"> <div *ngIf="pro.isTopMenu" class="alain-pro__top-nav">
<div class="alain-pro__top-nav-main" [ngClass]="{ 'alain-pro__top-nav-main-wide': pro.isFixed }"> <div class="alain-pro__top-nav-main" [ngClass]="{ 'alain-pro__top-nav-main-wide': pro.isFixed }">
<div class="alain-pro__top-nav-main-left"> <div class="alain-pro__top-nav-main-left">
<layout-pro-logo class="alain-pro__top-nav-logo"></layout-pro-logo> <layout-pro-logo class="alain-pro__top-nav-logo" style="width: 195px;"></layout-pro-logo>
<div class="alain-pro__menu-wrap"> <div class="alain-pro__menu-wrap">
<div layout-pro-menu mode="horizontal"></div> <div layout-pro-menu mode="horizontal"></div>
</div> </div>

View File

@ -1,4 +1,4 @@
<a [routerLink]="['/']" class="d-flex align-items-center"> <a [routerLink]="['/']" class="d-flex align-items-center">
<img src="./assets/logo-color.svg" alt="{{ name }}" height="32" /> <img src="./assets/images/user/logo.png" alt="{{ name }}" height="32" />
<h1>{{ name }}</h1> <h1>{{ name }}</h1>
</a> </a>

View File

@ -1,9 +1,9 @@
<ng-template #icon let-i> <ng-template #icon let-i>
<ng-container *ngIf="i" [ngSwitch]="i.type"> <ng-container *ngIf="i" [ngSwitch]="i.type">
<i *ngSwitchCase="'icon'" nz-icon [nzType]="i.value" class="alain-pro__menu-icon"></i> <i *ngSwitchCase="'icon'" nz-icon [nzType]="i.value" class="alain-pro__menu-icon"></i>
<i *ngSwitchCase="'iconfont'" nz-icon [nzIconfont]="i.iconfont" class="alain-pro__menu-icon"></i> <i *ngSwitchCase="'iconfont'" nz-icon [nzIconfont]="i.iconfont" class="alain-pro__menu-icon icon"></i>
<img *ngSwitchCase="'img'" src="{{ i.value }}" class="anticon alain-pro__menu-icon alain-pro__menu-img" /> <img *ngSwitchCase="'img'" src="{{ i.value }}" class="anticon alain-pro__menu-icon alain-pro__menu-img" />
<i *ngSwitchDefault class="anticon alain-pro__menu-icon {{ i.value }}"></i> <i *ngSwitchDefault class="icon alain-pro__menu-icon {{ i.value }}"></i>
</ng-container> </ng-container>
</ng-template> </ng-template>
<ng-template #mainLink let-i> <ng-template #mainLink let-i>
@ -17,39 +17,22 @@
<a *ngIf="!i.externalLink" [routerLink]="i.link" [target]="i.target">{{ i.text }} </a> <a *ngIf="!i.externalLink" [routerLink]="i.link" [target]="i.target">{{ i.text }} </a>
<a *ngIf="i.externalLink" [attr.href]="i.externalLink" [attr.target]="i.target">{{ i.text }} </a> <a *ngIf="i.externalLink" [attr.href]="i.externalLink" [attr.target]="i.target">{{ i.text }} </a>
</ng-template> </ng-template>
<ul *ngIf="menus" nz-menu [nzMode]="mode" [nzTheme]="pro.theme" [nzInlineCollapsed]="pro.isMobile ? false : pro.collapsed"> <ul *ngIf="menus" nz-menu [nzMode]="mode" [nzTheme]="pro.theme"
[nzInlineCollapsed]="pro.isMobile ? false : pro.collapsed">
<ng-container *ngFor="let l1 of menus"> <ng-container *ngFor="let l1 of menus">
<li <li *ngIf="l1.children!.length === 0" nz-menu-item class="alain-pro__menu-item"
*ngIf="l1.children!.length === 0" [class.alain-pro__menu-item--disabled]="l1.disabled" [nzSelected]="l1._selected" [nzDisabled]="l1.disabled">
nz-menu-item
class="alain-pro__menu-item"
[class.alain-pro__menu-item--disabled]="l1.disabled"
[nzSelected]="l1._selected"
[nzDisabled]="l1.disabled"
>
<a *ngIf="!l1.externalLink" [routerLink]="l1.link" (click)="closeCollapsed()" class="alain-pro__menu-title"> <a *ngIf="!l1.externalLink" [routerLink]="l1.link" (click)="closeCollapsed()" class="alain-pro__menu-title">
<ng-template [ngTemplateOutlet]="mainLink" [ngTemplateOutletContext]="{ $implicit: l1 }"></ng-template> <ng-template [ngTemplateOutlet]="mainLink" [ngTemplateOutletContext]="{ $implicit: l1 }"></ng-template>
</a> </a>
<a <a *ngIf="l1.externalLink" [attr.href]="l1.externalLink" [attr.target]="l1.target" (click)="closeCollapsed()"
*ngIf="l1.externalLink" class="alain-pro__menu-title">
[attr.href]="l1.externalLink"
[attr.target]="l1.target"
(click)="closeCollapsed()"
class="alain-pro__menu-title"
>
<ng-template [ngTemplateOutlet]="mainLink" [ngTemplateOutletContext]="{ $implicit: l1 }"></ng-template> <ng-template [ngTemplateOutlet]="mainLink" [ngTemplateOutletContext]="{ $implicit: l1 }"></ng-template>
</a> </a>
</li> </li>
<li <li *ngIf="l1.children!.length > 0" nz-submenu [nzTitle]="l1TitleTpl" class="alain-pro__menu-item"
*ngIf="l1.children!.length > 0" [class.text-white]="pro.theme === 'dark' && l1._selected" [nzOpen]="l1._open" [nzDisabled]="l1.disabled"
nz-submenu (nzOpenChange)="openChange(l1, $event)">
[nzTitle]="l1TitleTpl"
class="alain-pro__menu-item"
[class.text-white]="pro.theme === 'dark' && l1._selected"
[nzOpen]="l1._open"
[nzDisabled]="l1.disabled"
(nzOpenChange)="openChange(l1, $event)"
>
<ng-template #l1TitleTpl> <ng-template #l1TitleTpl>
<span title class="alain-pro__menu-title"> <span title class="alain-pro__menu-title">
<ng-template [ngTemplateOutlet]="icon" [ngTemplateOutletContext]="{ $implicit: l1.icon }"></ng-template> <ng-template [ngTemplateOutlet]="icon" [ngTemplateOutletContext]="{ $implicit: l1.icon }"></ng-template>
@ -61,34 +44,17 @@
</ng-template> </ng-template>
<ul> <ul>
<ng-container *ngFor="let l2 of l1.children"> <ng-container *ngFor="let l2 of l1.children">
<li <li *ngIf="!l2._hidden && l2.children!.length === 0" nz-menu-item
*ngIf="!l2._hidden && l2.children!.length === 0" [class.alain-pro__menu-item--disabled]="l2.disabled" [nzSelected]="l2._selected" [nzDisabled]="l2.disabled"
nz-menu-item (click)="closeCollapsed()">
[class.alain-pro__menu-item--disabled]="l2.disabled"
[nzSelected]="l2._selected"
[nzDisabled]="l2.disabled"
(click)="closeCollapsed()"
>
<ng-template [ngTemplateOutlet]="subLink" [ngTemplateOutletContext]="{ $implicit: l2 }"></ng-template> <ng-template [ngTemplateOutlet]="subLink" [ngTemplateOutletContext]="{ $implicit: l2 }"></ng-template>
</li> </li>
<li <li *ngIf="!l2._hidden && l2.children!.length > 0" nz-submenu [nzTitle]="l2.text!" [nzOpen]="l2._open"
*ngIf="!l2._hidden && l2.children!.length > 0" [nzDisabled]="l2.disabled" (nzOpenChange)="openChange(l2, $event)">
nz-submenu
[nzTitle]="l2.text!"
[nzOpen]="l2._open"
[nzDisabled]="l2.disabled"
(nzOpenChange)="openChange(l2, $event)"
>
<ul> <ul>
<ng-container *ngFor="let l3 of l2.children"> <ng-container *ngFor="let l3 of l2.children">
<li <li *ngIf="!l3._hidden" nz-menu-item [class.alain-pro__menu-item--disabled]="l3.disabled"
*ngIf="!l3._hidden" [nzSelected]="l3._selected" [nzDisabled]="l3.disabled" (click)="closeCollapsed()">
nz-menu-item
[class.alain-pro__menu-item--disabled]="l3.disabled"
[nzSelected]="l3._selected"
[nzDisabled]="l3.disabled"
(click)="closeCollapsed()"
>
<ng-template [ngTemplateOutlet]="subLink" [ngTemplateOutletContext]="{ $implicit: l3 }"></ng-template> <ng-template [ngTemplateOutlet]="subLink" [ngTemplateOutletContext]="{ $implicit: l3 }"></ng-template>
</li> </li>
</ng-container> </ng-container>
@ -98,4 +64,4 @@
</ul> </ul>
</li> </li>
</ng-container> </ng-container>
</ul> </ul>

View File

@ -1,10 +1,4 @@
<notice-icon <notice-icon btnClass="alain-pro__header-item" btnIconClass="alain-pro__header-item-icon" [data]="data" [count]="count"
btnClass="alain-pro__header-item" [loading]="loading" (select)="select($event)" (clear)="clear($event)" (popoverVisibleChange)="loadData()">
btnIconClass="alain-pro__header-item-icon" </notice-icon>
[data]="data"
[count]="count"
[loading]="loading"
(select)="select($event)"
(clear)="clear($event)"
(popoverVisibleChange)="loadData()"
></notice-icon>

View File

@ -1,21 +1,21 @@
<div nz-dropdown [nzDropdownMenu]="userMenu" nzPlacement="bottomRight" class="alain-pro__header-item"> <div nz-dropdown [nzDropdownMenu]="userMenu" nzPlacement="bottomRight" class="alain-pro__header-item">
<nz-avatar [nzSrc]="settings.user.avatar" nzSize="small" class="mr-sm"></nz-avatar> <nz-avatar [nzSrc]="settings.user?.avatar" nzSize="small" class="mr-sm"></nz-avatar>
{{ settings.user.name }} {{ settings.user?.realName }}
</div> </div>
<nz-dropdown-menu #userMenu="nzDropdownMenu"> <nz-dropdown-menu #userMenu="nzDropdownMenu">
<div nz-menu class="width-sm"> <div nz-menu class="width-sm">
<div nz-menu-item routerLink="/pro/account/center"> <div nz-menu-item routerLink="/account/center">
<i nz-icon nzType="user" class="mr-sm"></i> <i nz-icon nzType="user" class="mr-sm"></i>
个人中心 个人中心
</div> </div>
<div nz-menu-item routerLink="/pro/account/settings"> <!-- <div nz-menu-item routerLink="/pro/account/settings">
<i nz-icon nzType="setting" class="mr-sm"></i> <i nz-icon nzType="setting" class="mr-sm"></i>
个人设置 个人设置
</div> </div>
<div nz-menu-item routerLink="/exception/trigger"> <div nz-menu-item routerLink="/exception/trigger">
<i nz-icon nzType="close-circle" class="mr-sm"></i> <i nz-icon nzType="close-circle" class="mr-sm"></i>
触发错误 触发错误
</div> </div> -->
<li nz-menu-divider></li> <li nz-menu-divider></li>
<div nz-menu-item (click)="logout()"> <div nz-menu-item (click)="logout()">
<i nz-icon nzType="logout" class="mr-sm"></i> <i nz-icon nzType="logout" class="mr-sm"></i>

View File

@ -9,6 +9,10 @@
<!-- <quick-chat-status class="hidden-xs"></quick-chat-status> --> <!-- <quick-chat-status class="hidden-xs"></quick-chat-status> -->
<!--Notify--> <!--Notify-->
<layout-pro-notify class="hidden-xs"></layout-pro-notify> <layout-pro-notify class="hidden-xs"></layout-pro-notify>
<a nz-tooltip nzTooltipTitle="下载中心" nzTooltipPlacement="bottom" class="hidden-xs" target="_blank" href="/#/download"
rel="noopener noreferrer" class="alain-pro__header-item">
<i nz-icon nzType="cloud-download" nzTheme="outline" style="font-size: 18px;" ></i>
</a>
<!--RTL--> <!--RTL-->
<!-- <layout-pro-rtl></layout-pro-rtl> --> <!-- <layout-pro-rtl></layout-pro-rtl> -->
<!--User--> <!--User-->

View File

@ -23,7 +23,7 @@ export class BrandService {
* @alain-pro-sider-menu-width: 256px; * @alain-pro-sider-menu-width: 256px;
* ``` * ```
*/ */
readonly width = 256; readonly width = 205;
/** /**
* Specify width of the sidebar after collapsed, If you change it, muse be synchronize change less parameter: * Specify width of the sidebar after collapsed, If you change it, muse be synchronize change less parameter:

View File

@ -29,7 +29,7 @@
@alain-pro-light-color: #fff; @alain-pro-light-color: #fff;
@alain-pro-light-slider-shadow: 2px 0 8px 0 rgba(29, 35, 41, 0.05); @alain-pro-light-slider-shadow: 2px 0 8px 0 rgba(29, 35, 41, 0.05);
@alain-pro-logo-font-size: 20px; @alain-pro-logo-font-size: 17px;
@alain-pro-logo-font-family: 'Myriad Pro', 'Helvetica Neue', Arial, Helvetica, sans-serif; @alain-pro-logo-font-family: 'Myriad Pro', 'Helvetica Neue', Arial, Helvetica, sans-serif;
@alain-pro-content-margin: 24px; @alain-pro-content-margin: 24px;

View File

@ -0,0 +1,31 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-05 20:15:41
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:14:30
* @FilePath : \\tms-obc-web\\src\\app\\routes\\account\\account-routing.module.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { AccountComponentsCenterComponent } from './components/center/center.component';
const routes: Routes = [
{ path: '', redirectTo: 'center', pathMatch: 'full' },
{
path: 'center',
component: AccountComponentsCenterComponent,
data: {
title: '账户中心'
}
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class AccountRoutingModule {}

View File

@ -0,0 +1,30 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2021-11-29 11:06:01
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:14:34
* @FilePath : \\tms-obc-web\\src\\app\\routes\\account\\account.module.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { NgModule } from '@angular/core';
import { SharedModule } from '@shared';
import { AccountRoutingModule } from './account-routing.module';
import { AccountComponentsCenterComponent } from './components/center/center.component';
import { AccountComponentsEditNameComponent } from './components/edit-name/edit-name.component';
import { AccountComponentsCenterEditComponent } from './components/edit-password/edit-password.component';
const COMPONENTS = [
AccountComponentsCenterComponent,
AccountComponentsEditNameComponent,
AccountComponentsCenterEditComponent
];
const COMPONENTS_NOROUNT = [AccountComponentsEditNameComponent];
@NgModule({
imports: [SharedModule, AccountRoutingModule],
declarations: [...COMPONENTS, ...COMPONENTS_NOROUNT],
})
export class AccountModule {}

View File

@ -0,0 +1,48 @@
<div class="main">
<nz-card style="margin-top: 20px; min-height: 780px;">
<h3 style="font-size: 20px; font-weight: 700;">个人中心</h3>
<nz-list style="border-bottom: 1px solid #f0f0f0">
<nz-list-item>
<nz-list-item-meta>
<nz-list-item-meta-title>
<div nz-row [nzGutter]="16">
<div nz-col [nzSpan]="4" class="li-label">
<span class="icon iconfont icon-shoujihao" style="color: #aaa"></span> 手机号码/账号
</div>
<div nz-col [nzSpan]="10">{{ infoData.phone }}</div>
<div nz-col [nzSpan]="10">
<span *ngIf="infoData.phone; else elsePhone"><i nz-icon [nzType]="'check-circle'" [nzTheme]="'fill'"
style="color: #52c41a"></i> 已绑定</span>
<ng-template #elsePhone><i nz-icon [nzType]="'question-circle'" [nzTheme]="'fill'"
style="color: #ccc"></i> 未绑定</ng-template>
</div>
</div>
</nz-list-item-meta-title>
</nz-list-item-meta>
<div class="item-btn"><a (click)="edit('phone')">修改</a></div>
</nz-list-item>
<nz-list-item>
<nz-list-item-meta>
<nz-list-item-meta-title>
<div nz-row [nzGutter]="16">
<div nz-col [nzSpan]="4" class="li-label">
<span class="icon iconfont icon-mima" style="color: #aaa"></span> 账户密码
</div>
<div nz-col [nzSpan]="10">定期更换密码有助于账号安全</div>
<div nz-col [nzSpan]="10">
<span *ngIf="infoData.isPwd; else elsePwd"
><i nz-icon [nzType]="'check-circle'" [nzTheme]="'fill'" style="color: #52c41a"></i> 已设置</span
>
<ng-template #elsePwd
><i nz-icon [nzType]="'question-circle'" [nzTheme]="'fill'" style="color: #ccc"></i> 未设置</ng-template
>
</div>
</div>
</nz-list-item-meta-title>
</nz-list-item-meta>
<div class="item-btn"><a (click)="edit('password')">修改</a></div>
</nz-list-item>
</nz-list>
</nz-card>
</div>

View File

@ -0,0 +1,46 @@
:host {
::ng-deep {
.info-main {
padding: 30px;
}
.info-main h3 {
margin-bottom: 30px;
color: #333;
font-size: 24px;
}
.info {
position: relative;
}
.info-btn {
position: absolute;
top: 20px;
right: 20px;
}
.item-btn {
width: 28px;
text-align: center;
}
.li-label {
color: #333;
font-weight: bold;
font-size: 14px;
}
page-grid {
background-color: #f0f3f7;
div.container {
width: 80%;
margin: 0 auto;
padding: 1rem;
}
}
}
.info-row {
padding: 24px 0;
.info-icon {
margin-right: 15px;
color: #3875fb;
font-size: 16px;
}
}
}

View File

@ -0,0 +1,23 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AccountComponentsCenterComponent } from './center.component';
describe('AccountComponentsCenterComponent', () => {
let component: AccountComponentsCenterComponent;
let fixture: ComponentFixture<AccountComponentsCenterComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [AccountComponentsCenterComponent],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AccountComponentsCenterComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,202 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { Router } from '@angular/router';
import { SFComponent, SFSchema, SFSelectWidgetSchema, SFUISchema, SFUploadWidgetSchema } from '@delon/form';
import { ModalHelper, _HttpClient } from '@delon/theme';
import { Observable, Observer } from 'rxjs';
import { AccountService } from '../../services/account.service';
import { AccountComponentsEditNameComponent } from '../edit-name/edit-name.component';
import { NzModalService } from 'ng-zorro-antd/modal';
import { AccountComponentsCenterEditComponent } from '../edit-password/edit-password.component';
@Component({
selector: 'app-account-components-center',
templateUrl: './center.component.html',
styleUrls: ['./center.component.less'],
})
export class AccountComponentsCenterComponent implements OnInit {
url = `/rule?_allow_anonymous=true`;
@ViewChild('sf', { static: false }) sf!: SFComponent;
i: any;
formDate: any = {};
schema!: SFSchema;
ui: SFUISchema = {};
infoData: any = {
appId: '',
appTypeId: 0,
appTypeName: '',
appUserId: 0,
avatar: 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png?_allow_anonymous=true',
birthday: '',
cert: 0,
createTime: '',
email: '',
id: 0,
isPwd: true,
lastLoginDate: '',
name: '',
nickName: '',
openId: '',
phone: '',
remark: '',
sex: 0,
state: 0,
stateLocked: true,
token: '',
userType: 0,
};
tabs = [
{
name: '基本设置',
},
{
name: '安全设置',
},
];
idx: any = 0;
constructor(public service: AccountService, private modal: ModalHelper, private http: _HttpClient, private router: Router, private modalService: NzModalService,) {}
ngOnInit() {
this.initSF();
this.getInfo();
}
initSF() {
this.schema = {
properties: {
avatar: {
type: 'string',
title: '头像',
ui: {
action: `/cms/upload/multipartFile/fileModel?_allow_anonymous=true`,
fileType: 'image/png,image/jpeg,image/jpg,image/png,image/gif,image/bmp',
limit: 1,
limitFileCount: 1,
resReName: 'url',
urlReName: 'url',
widget: 'upload',
descriptionI18n: '支持JPG、GIF、PNG、JPEG、BMP格式文件小于2M',
data: {
// appId: environment.appId,
},
name: 'multipartFile',
multiple: false,
listType: 'picture-card',
change: (args: any) => {
if (args.type === 'success') {
const avatar = [
{
uid: -1,
name: 'LOGO',
status: 'done',
url: args.fileList[0].response.url,
response: {
url: args.fileList[0].response.url,
},
},
];
this.sf?.setValue('/avatar', avatar);
}
},
beforeUpload: (file: any, _fileList) => {
return new Observable((observer: Observer<boolean>) => {
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
this.service.msgSrv.warning('图片大小超过2M!');
observer.complete();
return;
}
observer.next(isLt2M);
observer.complete();
});
},
} as SFUploadWidgetSchema,
},
nickName: {
title: '昵称',
type: 'string',
minLength: 1,
maxLength: 18,
ui: {
placeholder: '请输入昵称',
width: 400,
errors: {
required: '请输入昵称',
},
},
},
},
required: ['nickName', 'avatar'],
};
this.ui = {
'*': {
spanLabel: 5,
grid: { span: 24 },
},
};
}
getInfo() {
this.service.http.post(this.service.$api_get_current_user_info).subscribe((res) => {
this.infoData = res.data;
});
}
edit(tpye: string) {
if (tpye === 'phone') {
const modalRef = this.modalService.create({
nzTitle: '验证手机号码',
nzContent: AccountComponentsEditNameComponent,
nzComponentParams: {
i: this.infoData
},
nzFooter: null
});
modalRef.afterClose.subscribe((result: any) => {
if (result === true) {
// this.st.load(1);
}
});
}
if (tpye === 'password') {
const modalRef = this.modalService.create({
nzTitle: '设置/修改登录密码',
nzContent: AccountComponentsCenterEditComponent,
nzComponentParams: {
record: this.infoData
},
});
modalRef.afterClose.subscribe((result: any) => {
if (result === true) {
// this.st.load(1);
}
});
}
// if (tpye === 'info') {
// this.router.navigate(['/account/editInfo'], {
// queryParams: { realName: this.infoData.realName, certificateNumber: this.infoData.certificateNumber },
// });
// }
// if (tpye === 'name') {
// this.modal
// .createStatic(AccountComponentsEditNameComponent, { i: { name: this.infoData.name, phone: this.infoData.phone } })
// .subscribe(() => {
// this.getInfo();
// // this.st.reload();
// });
// }
}
changeType(type: number): void {
this.idx = type;
}
formSubmit(value: any): void {
const params = { ...value };
this.service.request(`${this.service.$api_get_current_user_info}`, params).subscribe((res) => {
if (res === true) {
this.service.msgSrv.success('保存成功');
this.getInfo();
// this.initSF();
}
});
}
}

View File

@ -0,0 +1,75 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2021-11-29 11:06:01
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:14:39
* @FilePath : \\tms-obc-web\\src\\app\\routes\\account\\components\\edit-name\\edit-name.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<sf #sf [compact]="true" [ui]="ui" [schema]="schema" [button]="'none'" [formData]="formData">
<ng-template sf-template="smsVerifyCode" let-me let-ui="ui" let-schema="schema">
<div class="valid-code">
<input
type="text"
maxlength="6"
nz-input
[ngModel]="me.formProperty.value"
(ngModelChange)="me.setValue($event)"
placeholder="请输入验证码"
/>
<button class="btn-code" nz-button nzType="link" [disabled]="count > 0" (click)="getCaptcha()">
{{ count > 0 ? '请等待' + count + 's' : '获取验证码' }}
</button>
</div>
</ng-template>
</sf>
<div class="modal-footer">
<button nz-button type="button" (click)="close()">关闭</button>
<button nz-button type="button" nzType="primary" (click)="submitForm()" [disabled]="!sf.valid">下一步</button>
</div>
<nz-modal [(nzVisible)]="isVisibleView" [nzWidth]="600" [nzFooter]="nzModalFooterview" nzTitle="修改手机号码" (nzOnOk)="handleOK()" (nzOnCancel)="handleCancel('1')">
<ng-container *nzModalContent>
<sf #sfView [schema]="schemaView" [ui]="uiView" [compact]="true" [button]="'none'">
<ng-template sf-template="smsVerifyCode" let-me let-ui="uiView" let-schema="schemaView">
<div style="position: relative;">
<input
type="text"
maxlength="6"
nz-input
[ngModel]="me.formProperty.value"
(ngModelChange)="me.setValue($event)"
placeholder="请输入验证码"
/>
<button style="position: absolute;
top: 0;
right: 0;
z-index: 9;" nz-button nzType="link" [disabled]="count2 > 0" (click)="getCaptcha2()">
{{ count2 > 0 ? '请等待' + count2 + 's' : '获取验证码' }}
</button>
</div>
</ng-template>
</sf>
</ng-container>
<ng-template #nzModalFooterview>
<button nz-button nzType="default" (click)="handleCancel('1')">取消</button>
<button nz-button nzType="primary" (click)="handleNew()">确定</button>
</ng-template>
</nz-modal>
<nz-modal [(nzVisible)]="isVisibleOk" [nzWidth]="600" (nzOnCancel)="handleCancel('1')" [nzFooter]='null' >
<ng-container *nzModalContent>
<nz-result
nzStatus="success"
nzTitle="修改成功!"
nzSubTitle="您已绑定新手机号,以后可用新手机号登录!"
>
<div nz-result-extra>
<button nz-button nzType="primary" (click)="handleCancel('3')">确定</button>
</div>
</nz-result>
</ng-container>
</nz-modal>

View File

@ -0,0 +1,20 @@
:host {
.valid-code {
position: relative;
}
.btn-code {
position: absolute;
top: 0;
right: 0;
z-index: 9;
}
.valid-code2 {
position: relative;
}
.btn-code2 {
position: absolute;
top: 0;
right: 0;
z-index: 9;
}
}

View File

@ -0,0 +1,34 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2021-11-29 11:06:01
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:14:44
* @FilePath : \\tms-obc-web\\src\\app\\routes\\account\\components\\edit-name\\edit-name.component.spec.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AccountComponentsEditNameComponent } from './edit-name.component';
describe('AccountComponentsEditNameComponent', () => {
let component: AccountComponentsEditNameComponent;
let fixture: ComponentFixture<AccountComponentsEditNameComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [AccountComponentsEditNameComponent],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AccountComponentsEditNameComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,271 @@
import { AfterViewInit, ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core';
import { ErrorData, SFComponent, SFSchema, SFStringWidgetSchema, SFUISchema } from '@delon/form';
import { _HttpClient } from '@delon/theme';
// import { CaptchaComponent } from '@shared';
import { NzMessageService } from 'ng-zorro-antd/message';
import { NzModalRef } from 'ng-zorro-antd/modal';
import { interval, Observable, Observer } from 'rxjs';
import { take } from 'rxjs/operators';
import { AccountService } from '../../services/account.service';
@Component({
selector: 'app-account-components-edit-name',
templateUrl: './edit-name.component.html',
styleUrls: ['./edit-name.component.less'],
})
export class AccountComponentsEditNameComponent implements OnInit, AfterViewInit {
// @ViewChild('dun', { static: false })
// private dun!: CaptchaComponent;
@ViewChild('sf', { static: false }) sf!: SFComponent;
@ViewChild('sfView', { static: false }) sfView!: SFComponent;
record: any = {};
i: any;
schema!: SFSchema;
schemaView!: SFSchema;
ui!: SFUISchema;
uiView: SFUISchema = {};
isVisibleView = false;
isVisibleOk = false;
formData: any = {};
count = 0;
count2 = 0;
oldName: any;
voucher: any;
codeTips: any;
interval$: any;
constructor(private modal: NzModalRef, public msgSrv: NzMessageService, public http: _HttpClient, public service: AccountService,private cdr: ChangeDetectorRef,) {}
ngAfterViewInit(): void {
// this.dun.init();
}
ngOnInit() {
this.codeTips = '为了账户安全,需您的手机验证(' + this.i?.phone + '';
this.formData.oldName = this.i?.phone;
this.initSF();
this.initSFNew();
// this.getInfo();
}
initSF() {
this.schema = {
properties: {
oldName: {
title: '手机号',
type: 'string',
default: this.formData?.oldName,
ui: {
widget: 'text',
},
},
// userName: {
// title: '用户名(新)',
// type: 'string',
// minLength: 3,
// maxLength: 30,
// description: '3-30个字符支持中英文、数字、符号“_”和“-”,只能修改一次',
// ui: {
// placeholder: '请输入新用户名',
// errors: {
// required: '请输入新用户名',
// },
// } as SFStringWidgetSchema,
// },
smsVerifyCode: {
title: '验证码',
type: 'string',
maxLength: 6,
minLength: 6,
description: this.codeTips,
ui: {
widget: 'custom',
placeholder: '请输入验证码',
errors: {
required: '请输入6位数字验证码',
minLength: '请输入6位数字验证码',
},
},
},
},
required: ['userName', 'smsVerifyCode'],
};
this.ui = {
'*': {
spanLabelFixed: 100,
grid: { span: 24 },
},
};
}
initSFNew() {
this.schemaView = {
properties: {
phone: {
title: '新手机号',
type: 'string',
format: 'mobile',
maxLength: 11,
ui: {
placeholder: '请输入新手机号',
errors: {
required: '请输入新手机号',
},
} as SFStringWidgetSchema,
},
smsVerifyCode: {
title: '验证码',
type: 'string',
maxLength: 6,
minLength: 6,
ui: {
widget: 'custom',
placeholder: '请输入验证码',
errors: {
required: '请输入6位验证码',
minLength: '请输入6位验证码',
},
},
},
},
required: ['phone', 'smsVerifyCode'],
};
this.uiView = {
'*': {
spanLabelFixed: 100,
grid: { span: 24 },
},
};
}
getCaptcha() {
const params = {
// phoneNumber: phone
};
this.service.request(this.service.$api_get_current_user_smVerification, params, 'POST', true, 'FORM').subscribe((res) => {
// code==503046 弹出网易盾
if (res && res.code === '1') {
this.service.msgSrv.success('发送成功');
this.createInterval();
} else if (res.code === '503046') {
// this.dun.popUp();
} else {
this.service.msgSrv.success(res.msg);
}
});
}
getCaptcha2() {
const params = {
phoneNumber: this.sfView.value.phone
};
this.service.request(this.service.$api_get_getSMVerificationCode, params, 'POST', true, 'FORM').subscribe((res) => {
// code==503046 弹出网易盾
if (res && res.code === '1') {
this.service.msgSrv.success('发送成功');
this.createInterval2();
} else if (res.code === '503046') {
// this.dun.popUp();
} else {
this.service.msgSrv.success(res.msg);
}
});
}
// /* code倒计时 */
// codeCountDown() {
// this.count = 59;
// this.interval$ = setInterval(() => {
// this.count -= 1;
// if (this.count <= 0) {
// clearInterval(this.interval$);
// }
// }, 1000);
// }
private createInterval() {
this.count = 59;
interval(1000)
.pipe(take(60))
.subscribe((x: any) => {
this.count = 59 - (x + 1);
this.cdr.detectChanges();
});
}
private createInterval2() {
this.count2 = 59;
interval(1000)
.pipe(take(60))
.subscribe((x: any) => {
this.count2 = 59 - (x + 1);
this.cdr.detectChanges();
});
}
// codeCountDown2() {
// this.count2 = 59;
// this.interval$ = setInterval(() => {
// this.count2 -= 1;
// if (this.count <= 0) {
// clearInterval(this.interval$);
// }
// }, 1000);
// }
/* 网易盾验证通过 */
captchaDone(validate: any) {
this.createInterval();
}
getInfo() {
const params = {
// id: this.i.id,
};
this.service.http.post(this.service.$api_get_current_user_info, params).subscribe((res) => {
// if (res) {
// this.getCaptcha(res.data.phone);
// }
});
}
close() {
this.modal.destroy();
}
submitForm() {
const params = {
smsVerifyCode: this.sf.value.smsVerifyCode,
};
this.service.http.post(this.service.$api_get_verifyPhone, params).subscribe((res) => {
if (res.success) {
// this.modal.close(true);
this.voucher = res.data.voucher
this.isVisibleView = true
} else {
this.service.msgSrv.error(res.msg)
}
});
}
handleCancel(type: string) {
if(type === '1') {
this.isVisibleView = false
} else if(type === '2') {
console.log(type)
} else if(type === '3') {
this.modal.close()
}
}
handleOK() {
}
handleNew() {
if(!this.sfView.valid) {
return;
}
const params = {
voucher: this.voucher,
...this.sfView.value,
}
this.service.http.post(this.service.$api_set_voucherUpdatePhone, params).subscribe((res) => {
if (res.success) {
this.isVisibleOk = true;
} else {
this.service.msgSrv.error(res.msg)
}
});
}
}

View File

@ -0,0 +1,94 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2021-11-29 13:50:46
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:14:50
* @FilePath : \\tms-obc-web\\src\\app\\routes\\account\\components\\edit-password\\edit-password.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<nz-alert style="margin-bottom: 15px;" nzType="info" nzMessage="密码为字母和数字组成的8-16个字符支持符号“_”和“-”。" nzShowIcon></nz-alert>
<form nz-form [formGroup]="validateForm">
<nz-form-item>
<nz-form-label nzRequired>新密码</nz-form-label>
<nz-form-control nzErrorTip="密码格式错误">
<nz-input-group [nzSuffix]="suffixTemplate" name='passWord'>
<input
[type]="passwordVisible ? 'text' : 'password'"
nz-input
placeholder="请输入新密码"
[(ngModel)]="password"
formControlName="passWord"
/>
</nz-input-group>
<ng-template #suffixTemplate>
<i nz-icon [nzType]="passwordVisible ? 'eye-invisible' : 'eye'" (click)="passwordVisible = !passwordVisible"></i>
</ng-template>
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-label nzRequired>确认新密码</nz-form-label>
<nz-form-control nzErrorTip="密码不一致">
<nz-input-group [nzSuffix]="suffixTemplate2" name='passWordTo'>
<input
[type]="passwordVisible2 ? 'text' : 'password'"
nz-input
formControlName="passWordTo"
placeholder="请确认输入新密码"
[(ngModel)]="password2"
/>
</nz-input-group>
<ng-template #suffixTemplate2>
<i nz-icon [nzType]="passwordVisible2 ? 'eye-invisible' : 'eye'" (click)="passwordVisible2 = !passwordVisible2"></i>
</ng-template>
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-label nzRequired>手机号</nz-form-label>
{{this.record?.phone}}
</nz-form-item>
<nz-form-item>
<nz-form-label
nzFor="smsVerifyCode"
nzRequired
[nzTooltipIcon]="captchaTooltipIcon"
>
验证码
</nz-form-label>
<nz-form-control
[nzSm]="14"
[nzXs]="24"
>
<div nz-row [nzGutter]="8">
<div nz-col [nzSpan]="12">
<input nz-input [maxlength]="6" formControlName="smsVerifyCode" id="smsVerifyCode" />
</div>
<div nz-col [nzSpan]="12" style="display: flex; align-items: center;">
<button nz-button *ngIf="count < 1;" (click)="getCaptcha($event)">获取验证码</button>
<span *ngIf="count > 1;">{{ count > 0 ? '请等待' + count + 's' : '获取验证码' }}</span>
</div>
</div>
</nz-form-control>
</nz-form-item>
</form>
<div *nzModalFooter>
<button nz-button nzType="default" (click)="destroyModal()">取消</button>
<button nz-button nzType="primary" (click)="save()" >确定</button>
</div>
<nz-modal [(nzVisible)]="isVisibleView" [nzWidth]="600" (nzOnCancel)="handleCancel()" [nzFooter]='null' >
<ng-container *nzModalContent>
<nz-result
nzStatus="success"
nzTitle="密码设置成功!"
nzSubTitle="请牢记您的新密码修改密码后需重新登录3秒后自动跳转至登录页..."
>
<div nz-result-extra>
<button nz-button nzType="primary" (click)="handleOK()">重新登录</button>
</div>
</nz-result>
</ng-container>
</nz-modal>

View File

@ -0,0 +1,130 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2021-12-27 10:30:56
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:14:54
* @FilePath : \\tms-obc-web\\src\\app\\routes\\account\\components\\edit-password\\edit-password.component.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { Component, Inject, OnInit, ViewChild } from '@angular/core';
import { FormBuilder, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
import { STChange, STColumn, STComponent, STData, STRequestOptions } from '@delon/abc/st';
import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';
import { SFComponent, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form';
import { NzDrawerRef, NzDrawerService } from 'ng-zorro-antd/drawer';
import { NzFormTooltipIcon } from 'ng-zorro-antd/form';
import { NzModalRef } from 'ng-zorro-antd/modal';
import { AccountService } from '../../services/account.service';
@Component({
selector: 'app-account-components-edit',
templateUrl: './edit-password.component.html'
})
export class AccountComponentsCenterEditComponent implements OnInit {
validateForm!: FormGroup;
record: any;
count = 0;
type = 'create';
isVisibleView = false
passwordVisible = false;
passwordVisible2 = false;
password: any;
password2: any;
interval$: any;
confirmationValidator =
(control: FormControl): { [s: string]: boolean } => {
if (!control.value) {
return { required: true };
} else if (control?.value !== this.validateForm?.value?.passWord) {
return { confirm: true, error: true };
}
return {};
};
captchaTooltipIcon: NzFormTooltipIcon = {
type: 'info-circle',
theme: 'twotone'
};
constructor(
public router: Router,
public ar: ActivatedRoute,
private modalRef: NzModalRef,
private fb: FormBuilder,
public service: AccountService,
@Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService
) {}
ngOnInit() {
this.initForm();
}
initForm () {
this.validateForm = this.fb.group({
passWord: [null,
[
Validators.required,
Validators.maxLength(16),
Validators.minLength(8),
Validators.pattern('^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z-_]{8,16}$')
]],
passWordTo: [null, [ Validators.required, Validators.maxLength(16), Validators.minLength(8), this.confirmationValidator,]],
smsVerifyCode: [null, [Validators.required]],
});
}
destroyModal(): void {
this.modalRef.destroy();
}
getCaptcha(e: MouseEvent): void {
this.service.request(this.service.$api_get_current_user_smVerification).subscribe(res => {
// code==503046 弹出网易盾
if (res && res.code === '1') {
this.service.msgSrv.success('发送成功');
e.preventDefault();
this.codeCountDown();
}else {
this.service.msgSrv.success(res.msg);
}
});
}
save() {
if(!this.validateForm.valid) {
this.service.msgSrv.warning('必填项为空或格式错误,请检查!')
return;
}
const params = {
...this.validateForm.value
};
this.service.request(this.service.$api_set_phoneUpdatePassword, params).subscribe((res) => {
if (res) {
this.service.msgSrv.success('修改密码成功!');
this.isVisibleView = true;
setTimeout(() => {
this.tokenService.clear();
this.router.navigate(['/passport/login'])
this.modalRef.close()
}, 3000)
}
});
}
/* code倒计时 */
codeCountDown() {
this.count = 59;
this.interval$ = setInterval(() => {
this.count -= 1;
if (this.count <= 0) {
clearInterval(this.interval$);
}
}, 1000);
}
handleCancel() {
this.isVisibleView = false
}
handleOK() {
this.modalRef.close()
this.tokenService.clear();
this.router.navigate(['/passport/login'])
}
}

View File

@ -0,0 +1,42 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2021-12-27 10:30:56
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:14:59
* @FilePath : \\tms-obc-web\\src\\app\\routes\\account\\services\\account.service.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { Injectable, Injector } from '@angular/core';
import { _HttpClient } from '@delon/theme';
import { NzMessageService } from 'ng-zorro-antd/message';
import { map } from 'rxjs/operators';
import { BaseService } from 'src/app/shared/services/core/base.service';
import { EAFileUtil } from 'src/app/shared/utils/file.util';
@Injectable({
providedIn: 'root',
})
export class AccountService extends BaseService {
// 获取当前登录用户详情
$api_get_current_user_info = `/api/mdc/cuc/user/getUserInfo`;
// 根据当前登录用户绑定的手机号码获取短信验证码
$api_get_current_user_smVerification = `/api/mdc/pbc/smsSend/getSmVerificationCodeByToken`;
// 获取短信验证码
$api_get_getSMVerificationCode = `/api/mdc/pbc/smsSend/getSMVerificationCode`;
// 验证手机号
$api_get_verifyPhone = `/api/mdc/cuc/userBasicInfo/forgetPassword/verifyPhone`;
// 凭证修改手机号
$api_set_voucherUpdatePhone = `/api/mdc/cuc/userBasicInfo/forgetPassword/voucherUpdatePhone`;
// 凭证修改密码
$api_set_phoneUpdatePassword = `/api/mdc/cuc/userBasicInfo/phoneUpdatePassword`;
constructor(public injector: Injector) {
super(injector);
}
}

View File

@ -0,0 +1,5 @@
:host::ng-deep {
.ant-form-item {
margin-bottom: 0;
}
}

View File

@ -0,0 +1,34 @@
:host::ng-deep {
.search-box {
.ant-card-body {
padding-bottom: 18px;
}
}
.content-box {
.ant-card-body {
padding-top: 0;
}
}
nz-range-picker {
width: 100%;
}
.ant-tabs-tab-btn {
padding-right: 16px;
padding-left : 16px;
}
.text-truncate {
white-space: normal;
}
.bold {
.ant-statistic-title {
font-weight: 600;
color : #000;
font-size : 16px;
}
}
}

View File

@ -0,0 +1,13 @@
.expend-options {
margin-top: 0;
}
@media (min-width: 1200px) {
.expend-options {
position : absolute;
right : 0;
bottom : 25px;
max-width: 450px;
}
}

View File

@ -0,0 +1,26 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-10 14:44:57
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:15:13
* @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-detail\\contract-detail.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<!-- 页头 -->
<page-header-wrapper [logo]="logo" [title]="textStatus" >
<ng-template #logo>
<button nz-button nz-tooltip nzTooltipTitle="返回上一页" (click)="goBack()">
<i nz-icon nzType="left" nzTheme="outline"></i>
</button>
</ng-template>
</page-header-wrapper>
<nz-card>
<div nz-col nzSpan="20" style="overflow: scroll">
<nz-card class="card-height" >
<div [innerHTML]="detailList?.contractContent | safehtml"></div>
</nz-card>
</div>
</nz-card>

View File

@ -0,0 +1,4 @@
.title {
padding-right: 4px;
padding-left: 14px !important;
}

View File

@ -0,0 +1,34 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-10 14:44:57
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:15:18
* @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-detail\\contract-detail.component.spec.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ContractManagementDetailComponent } from './contract-detail.component';
describe('ContractManagementDetailComponent', () => {
let component: ContractManagementDetailComponent;
let fixture: ComponentFixture<ContractManagementDetailComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ContractManagementDetailComponent],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ContractManagementDetailComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,59 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-10 14:44:57
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:15:43
* @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-detail\\contract-detail.component.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { DatePipe } from '@angular/common';
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { NzModalService } from 'ng-zorro-antd/modal';
import { ContractManagementService } from '../../services/contract-management.service';
@Component({
selector: 'app-contract-management-detail-complaint',
templateUrl: './contract-detail.component.html',
styleUrls: ['./contract-detail.component.less'],
providers: [DatePipe]
})
export class ContractManagementDetailComponent implements OnInit {
constructor(
private nzModalService: NzModalService,
public service: ContractManagementService,
public route: ActivatedRoute,
private datePipe: DatePipe,
private router: Router
) {}
textStatus = '合同详情';
name: any;
code: any;
templateHTML: any;
detailList: any = {
templateName: ''
};
ngOnInit() {
this.initData(this.service.$api_contract_get);
}
goBack() {
window.history.go(-1);
}
initData(url: string) {
this.service.request(url, { id: this.route.snapshot.params.id }).subscribe(res => {
if (res) {
this.detailList = res;
this.detailList = res;
let value: any = JSON.parse(res.contractParameter);
this.code = value['${code}'];
this.name = value['${name}'];
}
});
}
cancel() {
window.history.go(-1);
}
}

View File

@ -0,0 +1,100 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-07 13:29:57
* @LastEditors : Shiming
* @LastEditTime : 2022-02-23 16:04:18
* @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-frame\\contract-frame.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<nz-card>
<div nz-row nzGutter="8">
<!-- 查询字段小于或等于3个时不显示伸缩按钮 -->
<div nz-col nzSpan="24" *ngIf="queryFieldCount <= 4">
<sf
#sf
[schema]="schema"
[ui]="ui"
[mode]="'search'"
[disabled]="!sf?.valid"
[loading]="service.http.loading"
(formSubmit)="st?.load(1)"
(formReset)="resetSF()"
></sf>
</div>
<!-- 查询字段大于3个时根据展开状态调整布局 -->
<ng-container>
<div nz-col [nzSpan]="_$expand ? 24 : 18">
<sf #sf [schema]="schema" [ui]="ui" [compact]="true" [button]="'none'">
<ng-template sf-template="signTime" let-me let-ui="ui" let-schema="schema">
<!-- <input placeholder="请输入1-30" type="number" [ngModel]="sf.value.description3" style="width: 200px;" nz-input />
<span> 天内支付运费</span> -->
<nz-range-picker [nzShowTime]="true" [(ngModel)]="sf.value.signTime"></nz-range-picker>
</ng-template>
</sf>
</div>
<div nz-col [nzSpan]="_$expand ? 24 : 6" [class.text-right]="_$expand">
<button
nz-button
nzType="primary"
[disabled]="!sf.valid"
[nzLoading]="service.http.loading"
(click)="st?.load(1)"
acl
[acl-ability]="['CONTRACT-INDEX-listFrame']"
>查询</button
>
<button nz-button (click)="resetSF()">重置</button>
<button nz-button nzType="link" (click)="expandToggle()">
{{ !_$expand ? '展开' : '收起' }}
<i nz-icon [nzType]="!_$expand ? 'down' : 'up'"></i>
</button>
</div>
</ng-container>
</div>
</nz-card>
<nz-card class="content-box" nzBordered>
<div style="position: relative">
<nz-alert
nzType="info"
[nzMessage]="'当前共' + st?.total + '行记录已选择' + selectedRows.length + ''"
nzShowIcon
[ngStyle]="{ margin: '0 0 1rem 0' }"
>
</nz-alert>
</div>
<st
#st
[data]="service.$api_listFrame_page"
[columns]="columns"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }"
[res]="{ reName: { list: 'data.records', total: 'data.total' } }"
[page]="{ show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }"
[loading]="service.http.loading"
[scroll]="{ x: '1200px', y: '370px' }"
(change)="stChange($event)"
>
<ng-template st-row="contractCode" let-item let-index="index">
<a [routerLink]="'/contract-management/index/detail/' + item.id">{{ item?.contractCode }}</a>
</ng-template>
</st>
</nz-card>
<ng-template #auditModal>
<div nz-row nzGutter="8">
<div nz-col nzSpan="24" se-container [labelWidth]="80">
<se [col]="1" label="备注">
<textarea
nz-input
rows="3"
placeholder="同意可以不用填写原因 ,拒绝必须说明原因"
style="width: 325px; margin-left: 14px"
></textarea>
</se>
</div>
</div>
</ng-template>

View File

@ -0,0 +1,35 @@
:host::ng-deep {
.search-box {
.ant-card-body {
padding-bottom: 18px;
}
}
.content-box {
.ant-card-body {
padding-top: 0;
}
}
nz-range-picker {
width: 100%;
}
.ant-tabs-tab-btn {
padding-right: 16px;
padding-left : 16px;
}
}
.expend-options {
margin-top: 0;
}
@media (min-width: 1200px) {
.expend-options {
z-index : -99;
margin-top: -40px;
}
}

View File

@ -0,0 +1,200 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { Router } from '@angular/router';
import { STComponent, STColumn, STChange } from '@delon/abc/st';
import { SFComponent, SFSchema, SFDateWidgetSchema, SFUISchema } from '@delon/form';
import { NzModalService } from 'ng-zorro-antd/modal';
import { ContractManagementService } from '../../services/contract-management.service';
@Component({
selector: 'app-contract-management-contract-frame',
templateUrl: './contract-frame.component.html',
styleUrls: ['./contract-frame.component.less']
})
export class ContractManagementFrameComponent implements OnInit {
url = `/rule?_allow_anonymous=true`;
@ViewChild('st', { static: true })
st!: STComponent;
@ViewChild('sf', { static: false })
sf!: SFComponent;
@ViewChild('auditModal', { static: false })
auditModal!: any;
schema: SFSchema = {};
columns: STColumn[] = [];
ui: SFUISchema = {};
_$expand = false;
reqParams = {};
selectedRows: any[] = [];
constructor(public service: ContractManagementService, private nzModalService: NzModalService, private router: Router) {}
ngOnInit(): void {
this.initST()
this.initSF()
}
/**
* 初始化数据列表
*/
initST() {
this.columns = [
{
title: '合同编号',
width: '100px',
className: 'text-center',
render: 'contractCode'
},
{
title: '合同名称',
width: '100px',
className: 'text-center',
index:'contractName'
},
{ title: '托运人', index: 'shipperName', width: '120px', className: 'text-center' },
{ title: '承运人', index: 'carrierName', width: '120px', className: 'text-center' },
{
title: '有效期至',
className: 'text-center',
width: '120px',
index: 'effectiveEndTime'
},
{
title: '签署日期',
className: 'text-center',
width: '120px',
index: 'signTime'
},
{
title: '状态',
className: 'text-center',
width: '120px',
type: 'badge',
index: 'esignFlowStatus',
badge: {
'0': { text: '未发起', color: 'default' },
'1': { text: '待签章', color: 'default' },
'2': { text: '已生效', color: 'success' },
'3': { text: '已撤销', color: 'warning' },
'4': { text: '已作废', color: 'warning' },
'5': { text: '已过期', color: 'warning' },
'7': { text: '已拒签', color: 'warning' },
},
},
];
}
/**
* 初始化查询表单
*/
initSF() {
this.schema = {
properties: {
_$expand: { type: 'boolean', ui: { hidden: true } },
contractCode: {
type: 'string',
title: '合同编号',
},
shipperName: {
type: 'string',
title: '托运人'
},
carrierName: {
type: 'string',
title: '承运人',
},
signTime: {
title: '签署日期',
type: 'string',
ui: {
widget: 'custom',
visibleIf: {
_$expand: (value: boolean) => value,
},
}
},
},
type: 'object',
};
this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
}
/**
* 查询字段个数
*/
get queryFieldCount(): number {
return Object.keys(this.schema?.properties || {}).length;
}
stChange(e: STChange): void {
switch (e.type) {
case 'checkbox':
this.selectedRows = e.checkbox!;
break;
case 'filter':
this.st.load();
break;
}
}
approval(): void {}
add(): void {}
routeTo(item: any) {
this.router.navigate(['/ticket/invoice-requested-detail/1']);
}
auditAction(item: any) {
const modal = this.nzModalService.create({
nzTitle: '审核',
nzContent: this.auditModal,
nzFooter: [
{
label: '拒绝',
type: 'default',
onClick: () => {
modal.destroy();
}
},
{
label: '通过',
type: 'primary',
onClick: () => {
modal.destroy();
}
}
]
});
modal.afterClose.subscribe(res => {
this.st.load();
});
}
showReason(item: any) {
const modal = this.nzModalService.create({
nzTitle: '查看原因',
nzContent: '运单数据异常暂时无法开票请联系客服400-xxxx-xxxx',
nzFooter: [
{
label: '关闭',
type: 'primary',
onClick: () => {
modal.destroy();
}
}
]
});
}
/**
* 重置表单
*/
resetSF() {
this.sf.reset();
this._$expand = false;
}
/**
* 伸缩查询条件
*/
expandToggle(): void {
this._$expand = !this._$expand;
this.sf?.setValue('/_$expand', this._$expand);
}
}

View File

@ -0,0 +1,68 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2021-12-07 15:57:49
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:16:12
* @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-list\\contract-list.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<nz-card>
<div nz-row nzGutter="8">
<!-- 查询字段小于或等于3个时不显示伸缩按钮 -->
<div nz-col nzSpan="24" *ngIf="queryFieldCount <= 4">
<sf #sf [schema]="schema" [ui]="ui" [mode]="'search'" [disabled]="!sf?.valid" [loading]="service.http.loading"
(formSubmit)="st?.load(1)" (formReset)="resetSF()"></sf>
</div>
<!-- 查询字段大于3个时根据展开状态调整布局 -->
<ng-container>
<div nz-col [nzSpan]="_$expand ? 24 : 18">
<sf #sf [schema]="schema" [ui]="ui" [compact]="true" [button]="'none'">
<ng-template sf-template="signTime" let-me let-ui="ui" let-schema="schema">
<!-- <input placeholder="请输入1-30" type="number" [ngModel]="sf.value.description3" style="width: 200px;" nz-input />
<span> 天内支付运费</span> -->
<nz-range-picker [nzShowTime]="true" [(ngModel)]="sf.value.signTime"></nz-range-picker>
</ng-template>
</sf>
</div>
<div nz-col [nzSpan]="_$expand ? 24 : 6" [class.text-right]="_$expand">
<button nz-button nzType="primary" [disabled]="!sf.valid" [nzLoading]="service.http.loading"
(click)="st?.load(1)" acl [acl-ability]="['CONTRACT-INDEX-searchDetail']">查询</button>
<button nz-button (click)="resetSF()">重置</button>
<button nz-button nzType="link" (click)="expandToggle()">
{{ !_$expand ? '展开' : '收起' }}
<i nz-icon [nzType]="!_$expand ? 'down' : 'up'"></i>
</button>
</div>
</ng-container>
</div>
</nz-card>
<nz-card class="content-box" nzBordered>
<div style="position: relative">
<nz-alert nzType="info" [nzMessage]="'当前共' + st?.total + '行记录已选择' + selectedRows.length + ''" nzShowIcon
[ngStyle]="{ margin: '0 0 1rem 0' }">
</nz-alert>
</div>
<st #st [data]="service.$api_listDetailed_page" [columns]="columns" [req]="{ params: reqParams }"
[loading]="service.http.loading" [scroll]="{ x: '1200px', y: '370px' }" (change)="stChange($event)">
<ng-template st-row="contractCode" let-item let-index="index">
<a [routerLink]="'/contract-management/index/detail/' + item.id">{{ item?.contractCode }}</a>
</ng-template>
</st>
</nz-card>
<ng-template #auditModal>
<div nz-row nzGutter="8">
<div nz-col nzSpan="24" se-container [labelWidth]="80">
<se [col]="1" label="备注">
<textarea nz-input rows="3" placeholder="同意可以不用填写原因 ,拒绝必须说明原因"
style="width: 325px; margin-left: 14px"></textarea>
</se>
</div>
</div>
</ng-template>

View File

@ -0,0 +1,35 @@
:host::ng-deep {
.search-box {
.ant-card-body {
padding-bottom: 18px;
}
}
.content-box {
.ant-card-body {
padding-top: 0;
}
}
nz-range-picker {
width: 100%;
}
.ant-tabs-tab-btn {
padding-left : 16px;
padding-right: 16px;
}
}
.expend-options {
margin-top: 0px;
}
@media (min-width: 1200px) {
.expend-options {
margin-top: -40px;
z-index : -99;
}
}

View File

@ -0,0 +1,246 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { Router } from '@angular/router';
import { STComponent, STColumn, STChange } from '@delon/abc/st';
import { SFComponent, SFSchema, SFDateWidgetSchema, SFUISchema, SFSelectWidgetSchema } from '@delon/form';
import { NzModalService } from 'ng-zorro-antd/modal';
import { ContractManagementService } from '../../services/contract-management.service';
import { DatePipe } from '@angular/common';
@Component({
selector: 'app-contract-management-contract-list',
templateUrl: './contract-list.component.html',
styleUrls: ['./contract-list.component.less'],
providers: [DatePipe]
})
export class ContractManagementContractListComponent implements OnInit {
url = `/rule?_allow_anonymous=true`;
@ViewChild('st', { static: true })
st!: STComponent;
@ViewChild('sf', { static: false })
sf!: SFComponent;
@ViewChild('auditModal', { static: false })
auditModal!: any;
schema: SFSchema = {};
columns: STColumn[] = [];
ui: SFUISchema = {};
_$expand = false;
/**
* 查询参数
*/
get reqParams() {
const params = {
...this.sf?.value,
}
delete params.signTime;
delete params._$expand;
if (this.datePipe.transform(this.sf?.value?.signTime?.[0], 'yyyy-MM-dd HH:mm:ss') && this.datePipe.transform(this.sf?.value?.signTime?.[1], 'yyyy-MM-dd HH:mm:ss')) {
params.signTime = {
start: this.datePipe.transform(this.sf?.value?.signTime?.[0], 'yyyy-MM-dd HH:mm:ss'),
end: this.datePipe.transform(this.sf?.value?.signTime?.[1], 'yyyy-MM-dd HH:mm:ss'),
}
}
return {
...params
};
}
selectedRows: any[] = [];
constructor(
public service: ContractManagementService,
private nzModalService: NzModalService,
private router: Router,
private datePipe: DatePipe,
) { }
ngOnInit(): void {
this.initST()
this.initSF()
}
/**
* 初始化数据列表
*/
initST() {
this.columns = [
{
title: '合同编号',
width: '100px',
className: 'text-center',
render: 'contractCode'
},
{
title: '单据类型',
width: '100px',
className: 'text-center',
index: 'documentType'
},
{
title: '合同名称',
width: '100px',
className: 'text-center',
index: 'contractName'
},
{ title: '托运人', index: 'shipperName', width: '120px', className: 'text-center' },
{ title: '承运人', index: 'carrierName', width: '120px', className: 'text-center' },
{
title: '业务单号',
className: 'text-center',
width: '120px',
index: 'businessCode'
},
{
title: '签署日期',
className: 'text-center',
width: '120px',
index: 'signTime'
},
{
title: '状态',
className: 'text-center',
width: '120px',
type: 'badge',
index: 'esignFlowStatus',
badge: {
'0': { text: '未发起', color: 'default' },
'1': { text: '待签章', color: 'default' },
'2': { text: '已生效', color: 'success' },
'3': { text: '已撤销', color: 'warning' },
'4': { text: '已作废', color: 'warning' },
'5': { text: '已过期', color: 'warning' },
'7': { text: '已拒签', color: 'warning' },
},
},
];
}
/**
* 初始化查询表单
*/
initSF() {
this.schema = {
properties: {
_$expand: { type: 'boolean', ui: { hidden: true } },
contractCode: {
type: 'string',
title: '合同编号',
},
businessCode: {
type: 'string',
title: '业务单号'
},
shipperName: {
type: 'string',
title: '托运人'
},
carrierName: {
type: 'string',
title: '承运人',
ui: {
visibleIf: {
_$expand: (value: boolean) => value,
},
}
},
documentType: {
title: '单据类型',
type: 'string',
default: '',
ui: {
widget: 'dict-select',
containsAllLabel: true,
params: { dictKey: 'contract:document:type' },
containAllLable: true,
visibleIf: {
_$expand: (value: boolean) => value,
},
} as SFSelectWidgetSchema,
},
signTime: {
title: '签署日期',
type: 'string',
ui: {
widget: 'custom',
visibleIf: {
_$expand: (value: boolean) => value,
},
}
},
},
type: 'object',
};
this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
}
/**
* 查询字段个数
*/
get queryFieldCount(): number {
return Object.keys(this.schema?.properties || {}).length;
}
stChange(e: STChange): void {
switch (e.type) {
case 'checkbox':
this.selectedRows = e.checkbox!;
break;
case 'filter':
this.st.load();
break;
}
}
routeTo(item: any) {
this.router.navigate(['/ticket/invoice-requested-detail/1']);
}
auditAction(item: any) {
const modal = this.nzModalService.create({
nzTitle: '审核',
nzContent: this.auditModal,
nzFooter: [
{
label: '拒绝',
type: 'default',
onClick: () => {
modal.destroy();
}
},
{
label: '通过',
type: 'primary',
onClick: () => {
modal.destroy();
}
}
]
});
modal.afterClose.subscribe(res => {
this.st.load();
});
}
showReason(item: any) {
const modal = this.nzModalService.create({
nzTitle: '查看原因',
nzContent: '运单数据异常暂时无法开票请联系客服400-xxxx-xxxx',
nzFooter: [
{
label: '关闭',
type: 'primary',
onClick: () => {
modal.destroy();
}
}
]
});
}
/**
* 重置表单
*/
resetSF() {
this.sf.reset();
this._$expand = false;
}
/**
* 伸缩查询条件
*/
expandToggle(): void {
this._$expand = !this._$expand;
this.sf?.setValue('/_$expand', this._$expand);
}
}

View File

@ -0,0 +1,60 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-05 11:01:55
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:16:27
* @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-template-detail\\contract-template-detail.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<!-- 页头 -->
<page-header-wrapper [logo]="logo" [title]="textStatus" [content]="headerContent">
<ng-template #logo>
<button nz-button nz-tooltip nzTooltipTitle="返回上一页" (click)="goBack()">
<i nz-icon nzType="left" nzTheme="outline"></i>
</button>
</ng-template>
<ng-template #headerContent>
<div nz-row style="display: flex; justify-content: end;">
<div nz-col *ngIf="isUpdate">
<button nz-button nzSize="default" nzType="default" (click)="cancel()">取消</button>
<button class="ml-lg" nz-button nzSize="default" nzType="primary" (click)="save()">保存</button>
</div>
</div>
</ng-template>
</page-header-wrapper>
<nz-card >
<sf #sf [schema]="schema" [formData]="sfdata" [button]="'none'" [ui]="ui"></sf>
</nz-card>
<nz-card>
<div nz-col nzSpan="20" style="overflow: scroll">
<nz-card class="card-height" *ngIf="!isUpdate">
<div class="mb-md">
<div>{{detailList?.templateName}}</div>
</div>
<div [innerHTML]="detailList?.templateContent | safehtml"></div>
</nz-card>
<nz-card class="card-height" *ngIf="isUpdate">
<div nz-row nzGutter="8">
<div class="title" style="width: 100%;">
<input style="width: 100%;" nz-input placeholder="请输入合同标题" [(ngModel)]="detailList.templateName" />
</div>
<div nz-col nzSpan="24" style="margin-top: 15px;">
<sf #sf2 mode="edit" [formData]="sfdata2" [schema]="schema2" [ui]="{ '*': { spanLabelFixed: 10, grid: { span: 24 }} }"
button="none"> </sf>
</div>
</div>
</nz-card>
</div>
</nz-card>
<!-- <div class="mb-md save-btn">
<button nz-button nzSize="large" nzType="default" (click)="cancel()">取消</button>
<button class="ml-lg" nz-button nzSize="large" nzType="primary" (click)="save()">保存</button>
</div> -->

View File

@ -0,0 +1,4 @@
.title {
padding-right: 4px;
padding-left: 14px !important;
}

View File

@ -0,0 +1,34 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-05 11:01:55
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:16:31
* @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-template-detail\\contract-template-detail.component.spec.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ContractManagementTemplateDetailComponent } from './contract-template-detail.component';
describe('ContractManagementTemplateDetailComponent', () => {
let component: ContractManagementTemplateDetailComponent;
let fixture: ComponentFixture<ContractManagementTemplateDetailComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ContractManagementTemplateDetailComponent],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ContractManagementTemplateDetailComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,165 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-05 11:01:55
* @LastEditors : Shiming
* @LastEditTime : 2022-01-25 14:25:49
* @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-template-detail\\contract-template-detail.component.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { DatePipe } from '@angular/common';
import { Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { SFComponent, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form';
import { NzModalService } from 'ng-zorro-antd/modal';
import { ContractManagementService } from '../../services/contract-management.service';
@Component({
selector: 'app-contract-management-template-detail-complaint',
templateUrl: './contract-template-detail.component.html',
styleUrls: ['./contract-template-detail.component.less'],
providers: [DatePipe]
})
export class ContractManagementTemplateDetailComponent implements OnInit {
constructor(
private nzModalService: NzModalService,
public service: ContractManagementService,
public route: ActivatedRoute,
private datePipe: DatePipe,
private router: Router
) {}
textStatus = '新建模板';
@ViewChild('sf', { static: false }) sf!: SFComponent;
schema: SFSchema = {};
@ViewChild('sf2', { static: false }) sf2!: SFComponent;
schema2: SFSchema = {};
ui!: SFUISchema;
sfdata: any;
sfdata2: any;
title: any;
templateHTML: any;
detailList: any = {
templateName: ''
};
isUpdate = false;
ngOnInit() {
this.initSF();
this.initSF2();
if (this.route.snapshot.queryParams.status == 1) {
// 新建
this.isUpdate = true;
} else if (this.route.snapshot.queryParams.status == 2) {
// 编辑
this.textStatus = '编辑模板';
this.isUpdate = true;
this.initData(this.service.$api_get_contractTemplate);
} else if (this.route.snapshot.queryParams.status == 3) {
// 编辑
this.textStatus = '查看模板';
this.isUpdate = false;
this.initData(this.service.$api_get_contractTemplate);
}
}
goBack() {
window.history.go(-1);
}
initSF() {
this.schema = {
properties: {
templateName: {
type: 'string',
title: '模版名称'
},
templateType: {
title: '模板类型',
type: 'string',
default: '',
ui: {
widget: 'dict-select',
params: { dictKey: 'contract:template:type' },
containAllLable: true,
visibleIf: {
_$expand: (value: boolean) => value
}
} as SFSelectWidgetSchema
},
contractType: {
title: '单据类型',
type: 'string',
default: '',
ui: {
widget: 'dict-select',
params: { dictKey: 'contract:document:type' },
containAllLable: true,
visibleIf: {
templateType: value => value === 'MX'
}
} as SFSelectWidgetSchema
}
},
required: ['templateName', 'templateType']
};
this.ui = {
'*': {
spanLabelFixed: 120,
grid: { span: 8 }
}
};
}
initSF2(data?: any) {
this.schema2 = {
properties: {
templateContent: {
type: 'string',
title: '',
ui: {
widget: 'tinymce',
loadingTip: 'loading...',
config: {
height: 650
}
},
default: data?.agreementContent || ''
}
}
};
}
initData(url: string) {
this.service.request(url, { id: this.route.snapshot.params.id }).subscribe(res => {
if (res) {
this.detailList = res;
this.title = this.detailList?.templateName
this.sfdata = res;
this.sfdata2 = res;
}
});
}
cancel() {
window.history.go(-1);
}
save() {
if (!this.sf.value.templateName || !this.sf.value.templateType || !this.sf2.value.templateContent || !this.title) {
this.service.msgSrv.error('必填参数为空,请检查再重新保存!');
return;
}
if (this.sf.value.templateType == 'MX') {
if (this.sf.value.contractType == '') {
this.service.msgSrv.error('必填参数为空,请检查再重新保存!');
return;
}
}
const params = {
...this.sf.value,
...this.sf2.value,
templateTitle: this.title
};
this.service.request(this.service.$api_save_contractTemplate, params).subscribe((res: any) => {
if (res) {
this.service.msgSrv.success('保存成功!');
this.router.navigate(['/contract-management/template']);
}
});
}
}

View File

@ -0,0 +1,77 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-12 10:52:50
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:16:18
* @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-template\\contract-template.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<!-- 搜索表单 -->
<page-header-wrapper [title]="'合同模板'"> </page-header-wrapper>
<nz-card>
<div nz-row nzGutter="8">
<!-- 查询字段小于或等于3个时不显示伸缩按钮 -->
<div nz-col nzSpan="24" *ngIf="queryFieldCount <= 4">
<sf
#sf
[schema]="schema"
[ui]="ui"
[mode]="'search'"
[disabled]="!sf?.valid"
[loading]="service.http.loading"
(formSubmit)="st?.load(1)"
(formReset)="resetSF()"
></sf>
</div>
<!-- 查询字段大于3个时根据展开状态调整布局 -->
<ng-container *ngIf="queryFieldCount > 4">
<div nz-col [nzSpan]="_$expand ? 24 : 18">
<sf #sf [schema]="schema" [ui]="ui" [compact]="true" [button]="'none'"></sf>
</div>
<div nz-col [nzSpan]="_$expand ? 24 : 6" [class.text-right]="_$expand">
<button
nz-button
nzType="primary"
[disabled]="!sf.valid"
[nzLoading]="service.http.loading"
(click)="st?.load(1)"
acl
[acl-ability]="['CONTRACT-TEMPLATE-search']"
>查询</button
>
<button nz-button nzType="primary" acl [acl-ability]="['CONTRACT-TEMPLATE-export']">导出</button>
<button nz-button (click)="resetSF()">重置</button>
<button nz-button nzType="link" (click)="expandToggle()">
{{ !_$expand ? '展开' : '收起' }}
<i nz-icon [nzType]="!_$expand ? 'down' : 'up'"></i>
</button>
</div>
</ng-container>
</div>
</nz-card>
<nz-card>
<div class="NewBtn">
<button nz-button nzType="primary" (click)="creatTemplate()" acl [acl-ability]="['CONTRACT-TEMPLATE-new']"> 新建 </button>
</div>
<div style="margin-top: 15px">
<st
#st
[bordered]="true"
[data]="service.$api_get_contractTemplate_page"
[columns]="columns"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }"
[res]="{ reName: { list: 'data.records', total: 'data.total' } }"
[page]="{ show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }"
[loading]="service.http.loading"
>
<ng-template st-row="templateName" let-item let-index="index">
<a (click)="view(item)">{{ item.templateName }}</a>
</ng-template>
</st>
</div>
</nz-card>

View File

@ -0,0 +1,4 @@
.NewBtn{
float: right;
margin-bottom: 15px;
}

View File

@ -0,0 +1,35 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-05 09:45:47
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:16:22
* @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-template\\contract-template.component.spec.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { ContractManagementTemplateComponent } from './contract-template.component';
describe('ContractManagementTemplateComponent', () => {
let component: ContractManagementTemplateComponent;
let fixture: ComponentFixture<ContractManagementTemplateComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ ContractManagementTemplateComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ContractManagementTemplateComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,216 @@
import { Router } from '@angular/router';
import { Component, OnInit, ViewChild } from '@angular/core';
import { STColumn, STComponent } from '@delon/abc/st';
import { SFComponent, SFDateWidgetSchema, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form';
import { ModalHelper, _HttpClient } from '@delon/theme';
import { NzModalService } from 'ng-zorro-antd/modal';
import { map } from 'rxjs/operators';
import { ContractManagementService } from '../../services/contract-management.service';
@Component({
selector: 'app-contract-management-template-complaint',
templateUrl: './contract-template.component.html',
styleUrls: ['./contract-template.component.less']
})
export class ContractManagementTemplateComponent implements OnInit {
ui: SFUISchema = {};
uiView: SFUISchema = {};
schema: SFSchema = {};
schemaView: SFSchema = {};
auditMany = false;
_$expand = false;
channelId: any;
@ViewChild('st') private readonly st!: STComponent;
@ViewChild('sf', { static: false }) sf!: SFComponent;
columns: STColumn[] = [];
datass: any = [
{
one: '1',
two: '1',
three: '1',
id: 1
},
{
one: '2',
two: '2',
three: '2',
id: 2
},
];
constructor(
public service: ContractManagementService,
private modal: NzModalService,
private router: Router
) { }
/**
* 查询参数
*/
get reqParams() {
return {
...this.sf?.value,
};
}
get selectedRows() {
return this.st?.list.filter((item) => item.checked) || [];
}
ngOnInit(): void {
this.initSF();
this.initST();
this.initSTAudit();
}
/**
* 初始化查询表单
*/
initSF() {
this.schema = {
properties: {
templateName: {
type: 'string',
title: '模板名称',
},
templateType: {
title: '模板类型',
type: 'string',
default: '',
ui: {
widget: 'dict-select',
params: { dictKey: 'contract:template:type' },
containsAllLabel: true,
visibleIf: {
_$expand: (value: boolean) => value,
},
} as SFSelectWidgetSchema,
},
},
};
this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
}
/**
* 初始化数据列表
*/
initST() {
this.columns = [
{
title: '合同模板名称',
className: 'text-center',
render: 'templateName'
},
{
title: '模板类型',
className: 'text-center',
index: 'templateType'
},
{
title: '单据类型',
index: 'contractType',
className: 'text-center',
},
{ title: '创建人', index: 'createUserId', width: '120px', className: 'text-center' },
{
title: '创建时间',
className: 'text-center',
index: 'createTime'
},
{
title: '操作',
fixed: 'right',
className: 'text-left',
buttons: [
{
text: '编辑',
click: (_record) => this.edit(_record),
acl: { ability: ['CONTRACT-TEMPLATE-edit'] },
},
{
text: '删除',
click: (_record) => this.delete(_record),
acl: { ability: ['CONTRACT-TEMPLATE-delete'] },
},
],
},
];
}
initSTAudit() {
this.schemaView = {
properties: {
handleResult: {
title: '处理结果',
type: 'string',
maxLength: 50,
ui: {
placeholder: '最多不超过50字',
widget: 'textarea',
autosize: { minRows: 3, maxRows: 6 }
},
},
},
required: ['handleResult']
};
this.uiView = { '*': { spanLabelFixed: 110, grid: { span: 24 } } };
}
/**
* 查询字段个数
*/
get queryFieldCount(): number {
return Object.keys(this.schema?.properties || {}).length;
}
/**
* 伸缩查询条件
*/
expandToggle(): void {
this._$expand = !this._$expand;
this.sf?.setValue('/_$expand', this._$expand);
}
tabChange(item: any) {
}
/**
* 重置表单
*/
resetSF(): void {
this.sf.reset();
this._$expand = false;
}
edit(value: any) {
this.router.navigate(['/contract-management/template/detail/' + value.id], {
queryParams: {
status: 2
}
})
}
creatTemplate() {
this.router.navigate(['/contract-management/template/detail/' + 0], {
queryParams: {
status: 1
}
})
}
goBack() {
window.history.go(-1)
}
view(value: any) {
this.router.navigate(['/contract-management/template/detail/' + value.id], {
queryParams: {
status: 3
}
})
}
delete(value: any) {
this.modal.confirm({
nzTitle: '<i>删除确认</i>',
nzOnOk: () =>
this.service.request(this.service.$api_deletebatch_contractTemplate, [value.id]).subscribe(res => {
if (res) {
this.service.msgSrv.success('删除成功!');
this.st.reload(1)
}
})
});
}
}

View File

@ -0,0 +1,23 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-07 13:27:10
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:16:56
* @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\index\\index.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<page-header-wrapper title="合同管理" [tab]="tpTab">
</page-header-wrapper>
<ng-template #tpTab>
<nz-tabset [(nzSelectedIndex)]="selectedIndex">
<nz-tab nzTitle="明细合同">
<app-contract-management-contract-list></app-contract-management-contract-list>
</nz-tab>
<nz-tab nzTitle="框架合同">
<app-contract-management-contract-frame></app-contract-management-contract-frame>
</nz-tab>
</nz-tabset>
</ng-template>

View File

@ -0,0 +1,24 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { SupplyManagementIndexComponent } from './index.component';
describe('SupplyManagementIndexComponent', () => {
let component: SupplyManagementIndexComponent;
let fixture: ComponentFixture<SupplyManagementIndexComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ SupplyManagementIndexComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SupplyManagementIndexComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,27 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-07 13:27:10
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:17:01
* @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\index\\index.component.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { Component, OnInit } from '@angular/core';
import { ModalHelper, _HttpClient } from '@delon/theme';
@Component({
selector: 'app-supply-management-index',
templateUrl: './index.component.html',
})
export class ContractManagementIndexComponent implements OnInit {
selectedIndex = 0;
constructor(private http: _HttpClient, private modal: ModalHelper) { }
ngOnInit(): void { }
}

View File

@ -0,0 +1,74 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-12 10:52:50
* @LastEditors : Shiming
* @LastEditTime : 2022-02-23 15:57:26
* @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\policy\\policy.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<page-header [action]="phActionTpl">
<ng-template #phActionTpl> </ng-template>
</page-header>
<nz-card>
<div nz-row nzGutter="8">
<!-- 查询字段小于或等于3个时不显示伸缩按钮 -->
<div nz-col nzSpan="24" *ngIf="queryFieldCount <= 4">
<sf
#sf
[schema]="schema"
[ui]="ui"
[mode]="'search'"
[disabled]="!sf?.valid"
[loading]="service.http.loading"
(formSubmit)="st?.load(1)"
(formReset)="resetSF()"
></sf>
</div>
<!-- 查询字段大于3个时根据展开状态调整布局 -->
<ng-container>
<div nz-col [nzSpan]="_$expand ? 24 : 18">
<sf #sf [schema]="schema" [ui]="ui" [compact]="true" [button]="'none'"></sf>
</div>
<div nz-col [nzSpan]="_$expand ? 24 : 6" [class.text-right]="_$expand">
<button nz-button nzType="primary" [disabled]="!sf.valid" [nzLoading]="service.http.loading" (click)="st?.load(1)" acl [acl-ability]="['CONTRACT-POLICY-search']">查询</button>
<button nz-button (click)="resetSF()">重置</button>
<button nz-button nzType="link" (click)="expandToggle()">
{{ !_$expand ? '展开' : '收起' }}
<i nz-icon [nzType]="!_$expand ? 'down' : 'up'"></i>
</button>
</div>
</ng-container>
</div>
</nz-card>
<nz-card>
<st
#st
[data]="service.$api_get_getPremiumInformationPage"
[columns]="columns"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }"
[res]="{ reName: { list: 'data.records', total: 'data.total' } }"
[page]="{ show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }"
[loading]="service.http.loading"
>
</st>
</nz-card>
<ng-template #promoterModal>
<div nz-row nzGutter="8">
<div nz-col nzSpan="24" se-container [labelWidth]="80">
<sv-container col="1">
<sv label="传入值" [col]="1">
{{paramValue}}
</sv>
</sv-container>
</div>
</div>
</ng-template>

View File

@ -0,0 +1,24 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { ContractManagementPolicyComponent } from './policy.component';
describe('ContractManagementPolicyComponent', () => {
let component: ContractManagementPolicyComponent;
let fixture: ComponentFixture<ContractManagementPolicyComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ ContractManagementPolicyComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ContractManagementPolicyComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,211 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { STColumn, STComponent, STChange } from '@delon/abc/st';
import { SFComponent, SFSchema, SFDateWidgetSchema, SFUISchema } from '@delon/form';
import { ModalHelper, _HttpClient } from '@delon/theme';
import { NzModalService } from 'ng-zorro-antd/modal';
import { ContractManagementService } from '../../services/contract-management.service';
import { Router } from '@angular/router';
@Component({
selector: 'app-contract-management-policy',
templateUrl: './policy.component.html'
})
export class ContractManagementPolicyComponent implements OnInit {
@ViewChild('st', { static: true })
st!: STComponent;
@ViewChild('sf', { static: false })
sf!: SFComponent;
@ViewChild('auditModal', { static: false })
auditModal!: any;
schema: SFSchema = {};
columns: STColumn[] = [];
ui: SFUISchema = {};
@ViewChild('promoterModal', { static: false })
promoterModal!: any;
_$expand = false;
selectedRows: any[] = [];
paramValue = '';
constructor(public service: ContractManagementService, private modal: NzModalService, private router: Router) {}
/**
* 查询参数
*/
get reqParams() {
const params: any = {
...(this.sf && this.sf.value)
};
delete params.expand;
return params;
}
ngOnInit(): void {
this.initST();
this.initSF();
}
openDetail(item?: any) {
this.paramValue = item?.paramValue
const modal = this.modal.create({
nzTitle: '传入值',
nzContent: this.promoterModal,
nzOnOk: () => {
return;
}
});
}
initST() {
this.columns = [
{ title: '', type: 'checkbox', width: '50px', className: 'text-center' },
{
title: '订单ID',
width: '100px',
className: 'text-center',
index: 'billId'
},
{
title: '项目ID',
width: '100px',
className: 'text-center',
index: 'enterpriseProjectId'
},
{
title: '保险公司',
width: '100px',
className: 'text-center',
index: 'insuranceCompany'
},
{
title: '投保金额',
width: '100px',
className: 'text-center',
index: 'insureAmount'
},
{
title: '保单号',
width: '100px',
className: 'text-center',
index: 'policyNo'
},
{
title: '保单地址',
width: '100px',
className: 'text-center',
index: 'policyUrl'
},
{
title: '保费',
width: '100px',
className: 'text-center',
index: 'premium'
},
{
title: '处理消息',
width: '100px',
className: 'text-center',
index: 'processMessage'
},
{
title: '处理结果',
width: '100px',
className: 'text-center',
index: 'processResult'
},
{
title: '操作',
width: '170px',
className: 'text-center',
buttons: [
{
text: '查看传入值',
click: item => {
this.openDetail(item)
},
acl: { ability: ['CONTRACT-POLICY-view'] },
}
]
}
];
}
initSF() {
this.schema = {
properties: {
_$expand: { type: 'boolean', ui: { hidden: true } },
billId: {
type: 'string',
title: '订单id'
},
enterpriseProjectId: {
type: 'string',
title: '项目id'
},
insuranceCompany: {
type: 'string',
title: '保险公司'
},
policyNo: {
type: 'string',
title: '保单号',
ui: {
visibleIf: {
_$expand: (value: boolean) => value
},
}
},
processResult: {
type: 'string',
title: '处理结果',
enum: [
{ label: '全部', value: '' },
{ label: '成功', value: 1 },
{ label: '失败', value: 2 }
],
ui: {
widget: 'select',
placeholder: '请选择',
visibleIf: {
_$expand: (value: boolean) => value
},
allowClear: true
}
}
},
type: 'object'
};
this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
}
/**
* 重置表单
*/
resetSF() {
this.sf.reset();
this._$expand = false;
}
/**
* 伸缩查询条件
*/
expandToggle(): void {
this._$expand = !this._$expand;
this.sf?.setValue('/_$expand', this._$expand);
}
get queryFieldCount(): number {
return Object.keys(this.schema?.properties || {}).length;
}
stChange(e: STChange): void {
switch (e.type) {
case 'checkbox':
this.selectedRows = e.checkbox!;
break;
case 'filter':
this.st.load();
break;
}
}
}

View File

@ -0,0 +1,32 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-04 21:05:49
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:15:03
* @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\contract-management-routing.module.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { ContractManagementDetailComponent } from './components/contract-detail/contract-detail.component';
import { ContractManagementContractListComponent } from './components/contract-list/contract-list.component';
import { ContractManagementTemplateDetailComponent } from './components/contract-template-detail/contract-template-detail.component';
import { ContractManagementTemplateComponent } from './components/contract-template/contract-template.component';
import { ContractManagementIndexComponent } from './components/index/index.component';
import { ContractManagementPolicyComponent } from './components/policy/policy.component';
const routes: Routes = [
{ path: 'index', component: ContractManagementIndexComponent },
{ path: 'index/detail/:id', component: ContractManagementDetailComponent },
{ path: 'template', component: ContractManagementTemplateComponent },
{ path: 'template/detail/:id', component: ContractManagementTemplateDetailComponent },
{ path: 'policy', component: ContractManagementPolicyComponent }
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class ContractManagementManagementRoutingModule {}

View File

@ -0,0 +1,38 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-04 21:05:49
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:15:08
* @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\contract-management.module.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { SharedModule } from '@shared';
import { ContractManagementManagementRoutingModule } from './contract-management-routing.module';
import { ContractManagementContractListComponent } from './components/contract-list/contract-list.component';
import { ContractManagementPolicyComponent } from './components/policy/policy.component';
import { ContractManagementTemplateComponent } from './components/contract-template/contract-template.component';
import { ContractManagementIndexComponent } from './components/index/index.component';
import { ContractManagementFrameComponent } from './components/contract-frame/contract-frame.component';
import { ContractManagementTemplateDetailComponent } from './components/contract-template-detail/contract-template-detail.component';
import { ContractManagementDetailComponent } from './components/contract-detail/contract-detail.component';
const COMPONENTS: any = [
ContractManagementContractListComponent,
ContractManagementPolicyComponent,
ContractManagementTemplateComponent,
ContractManagementTemplateDetailComponent,
ContractManagementIndexComponent,
ContractManagementFrameComponent,
ContractManagementDetailComponent
];
const NOTROUTECOMPONENTS: any = [];
@NgModule({
declarations: [...COMPONENTS, ...NOTROUTECOMPONENTS],
imports: [CommonModule, ContractManagementManagementRoutingModule, SharedModule]
})
export class ContractManagementManagementModule {}

View File

@ -0,0 +1,39 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-04 21:05:49
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:17:10
* @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\services\\contract-management.service.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { Injectable, Injector } from '@angular/core';
import { BaseService } from 'src/app/shared/services';
@Injectable({
providedIn: 'root'
})
export class ContractManagementService extends BaseService {
$api_get_getPremiumInformationPage = `/api/sdc/billOperate/listPremiumInformationPage`;
// 查询投诉列表
$api_get_operate_listPage = `/api/sdc/complaint/operate/listPage`;
// 新增/更新信息
$api_save_contractTemplate = `/api/sdc/contractTemplate/save`;
// 查询合同模板表
$api_get_contractTemplate_page = `/api/sdc/contractTemplate/list/page`;
// 查询合同模板表详情
$api_get_contractTemplate = `/api/sdc/contractTemplate/get`;
// 删除合同模板
$api_deletebatch_contractTemplate = `/api/sdc/contractTemplate/deletebatch`;
// 查询明细合同
$api_listDetailed_page = `/api/sdc/contract/listDetailed/page`;
// 查询框架合同
$api_listFrame_page = `/api/sdc/contract/listFrame/page`;
// 获取订单合同表
$api_contract_get = `/api/sdc/contract/get`;
constructor(public injector: Injector) {
super(injector);
}
}

View File

@ -1,109 +0,0 @@
<page-header [title]="'查询表格'"></page-header>
<nz-card [nzBordered]="false">
<form nz-form [nzLayout]="'inline'" (ngSubmit)="getData()" class="search__form">
<div nz-row [nzGutter]="{ xs: 8, sm: 8, md: 8, lg: 24, xl: 48, xxl: 48 }">
<div nz-col nzMd="8" nzSm="24">
<nz-form-item>
<nz-form-label nzFor="no">规则编号</nz-form-label>
<nz-form-control>
<input nz-input [(ngModel)]="q.no" name="no" placeholder="请输入" id="no" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col nzMd="8" nzSm="24">
<nz-form-item>
<nz-form-label nzFor="status">使用状态</nz-form-label>
<nz-form-control>
<nz-select [(ngModel)]="q.status" name="status" id="status" [nzPlaceHolder]="'请选择'" [nzShowSearch]="true">
<nz-option *ngFor="let i of status; let idx = index" [nzLabel]="i.text" [nzValue]="idx"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col nzMd="8" nzSm="24" *ngIf="expandForm">
<nz-form-item>
<nz-form-label nzFor="callNo">调用次数</nz-form-label>
<nz-form-control>
<input nz-input id="callNo" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col nzMd="8" nzSm="24" *ngIf="expandForm">
<nz-form-item>
<nz-form-label nzFor="updatedAt">更新日期</nz-form-label>
<nz-form-control>
<nz-date-picker id="updatedAt"></nz-date-picker>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col nzMd="8" nzSm="24" *ngIf="expandForm">
<nz-form-item>
<nz-form-label nzFor="status2">使用状态</nz-form-label>
<nz-form-control>
<nz-select [nzPlaceHolder]="'请选择'" nzId="status2" [nzShowSearch]="true">
<nz-option *ngFor="let i of status; let idx = index" [nzLabel]="i.text" [nzValue]="idx"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col nzMd="8" nzSm="24" *ngIf="expandForm">
<nz-form-item>
<nz-form-label nzFor="status3">使用状态</nz-form-label>
<nz-form-control>
<nz-select [nzPlaceHolder]="'请选择'" nzId="status3" [nzShowSearch]="true">
<nz-option *ngFor="let i of status; let idx = index" [nzLabel]="i.text" [nzValue]="idx"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="expandForm ? 24 : 8" [class.text-right]="expandForm">
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="loading">查询</button>
<button nz-button type="reset" (click)="reset()" class="mx-sm">重置</button>
<a (click)="expandForm = !expandForm">
{{ expandForm ? '收起' : '展开' }}
<i nz-icon [nzType]="expandForm ? 'up' : 'down'"></i>
</a>
</div>
</div>
</form>
<button nz-button (click)="add(modalContent)" [nzType]="'primary'">
<i nz-icon nzType="plus"></i>
<span>新建</span>
</button>
<ng-container *ngIf="selectedRows.length > 0">
<button nz-button>批量操作</button>
<button nz-button nz-dropdown [nzDropdownMenu]="batchMenu" nzPlacement="bottomLeft">
更多操作
<i nz-icon nzType="down"></i>
</button>
<nz-dropdown-menu #batchMenu="nzDropdownMenu">
<ul nz-menu>
<li nz-menu-item (click)="remove()">删除</li>
<li nz-menu-item (click)="approval()">批量审批</li>
</ul>
</nz-dropdown-menu>
</ng-container>
<div class="my-md">
<nz-alert [nzType]="'info'" [nzShowIcon]="true" [nzMessage]="message">
<ng-template #message>
已选择
<strong class="text-primary">{{ selectedRows.length }}</strong>&nbsp;&nbsp; 服务调用总计 <strong>{{ totalCallNo
}}</strong>
<a *ngIf="totalCallNo > 0" (click)="st.clearCheck()" class="ml-lg">清空</a>
</ng-template>
</nz-alert>
</div>
<st #st [columns]="columns" [data]="data" [loading]="loading" (change)="stChange($event)">
<ng-template st-row="status" let-i>
<nz-badge [nzStatus]="i.statusType" [nzText]="i.statusText"></nz-badge>
</ng-template>
</st>
</nz-card>
<ng-template #modalContent>
<nz-form-item>
<nz-form-label nzFor="no">描述</nz-form-label>
<nz-form-control>
<input nz-input [(ngModel)]="description" name="description" placeholder="请输入" id="no" />
</nz-form-control>
</nz-form-item>
</ng-template>

View File

@ -1,6 +0,0 @@
@import '~@delon/theme/index';
:host {
::ng-deep {
}
}

View File

@ -1,166 +1,8 @@
import { Component, ChangeDetectionStrategy, ChangeDetectorRef, TemplateRef, ViewChild } from '@angular/core'; import { Component } from '@angular/core';
import { STComponent, STColumn, STData, STChange } from '@delon/abc/st';
import { _HttpClient } from '@delon/theme';
import { NzSafeAny } from 'ng-zorro-antd/core/types';
import { NzMessageService } from 'ng-zorro-antd/message';
import { NzModalService } from 'ng-zorro-antd/modal';
import { map, tap } from 'rxjs/operators';
@Component({ @Component({
selector: 'app-dashboard', selector: 'app-dashboard',
templateUrl: './dashboard.component.html', templateUrl: './dashboard.component.html',
styleUrls: ['./dashboard.component.less'], styleUrls: ['./dashboard.component.less']
changeDetection: ChangeDetectionStrategy.OnPush
}) })
export class DashboardComponent { export class DashboardComponent {}
q: {
pi: number;
ps: number;
no: string;
sorter: string;
status: number | null;
statusList: NzSafeAny[];
} = {
pi: 1,
ps: 10,
no: '',
sorter: '',
status: null,
statusList: []
};
data: any[] = [];
loading = false;
status = [
{ index: 0, text: '关闭', value: false, type: 'default', checked: false },
{
index: 1,
text: '运行中',
value: false,
type: 'processing',
checked: false
},
{ index: 2, text: '已上线', value: false, type: 'success', checked: false },
{ index: 3, text: '异常', value: false, type: 'error', checked: false }
];
@ViewChild('st', { static: true })
st!: STComponent;
columns: STColumn[] = [
{ title: '', index: 'key', type: 'checkbox' },
{ title: '规则编号', index: 'no' },
{ title: '描述', index: 'description' },
{
title: '服务调用次数',
index: 'callNo',
type: 'number',
format: item => `${item.callNo}`,
sort: {
compare: (a, b) => a.callNo - b.callNo
}
},
{
title: '状态',
index: 'status',
render: 'status',
filter: {
menus: this.status,
fn: (filter, record) => record.status === filter.index
}
},
{
title: '更新时间',
index: 'updatedAt',
type: 'date',
sort: {
compare: (a, b) => a.updatedAt - b.updatedAt
}
},
{
title: '操作',
buttons: [
{
text: '配置',
click: item => this.msg.success(`配置${item.no}`)
},
{
text: '订阅警报',
click: item => this.msg.success(`订阅警报${item.no}`)
}
]
}
];
selectedRows: STData[] = [];
description = '';
totalCallNo = 0;
expandForm = false;
constructor(private http: _HttpClient, public msg: NzMessageService, private modalSrv: NzModalService, private cdr: ChangeDetectorRef) {}
ngOnInit(): void {
this.getData();
}
getData(): void {
this.loading = true;
this.q.statusList = this.status.filter(w => w.checked).map(item => item.index);
if (this.q.status !== null && this.q.status > -1) {
this.q.statusList.push(this.q.status);
}
this.http
.get('/rule?_allow_anonymous=true', this.q)
.pipe(
map((list: Array<{ status: number; statusText: string; statusType: string }>) =>
list.map(i => {
const statusItem = this.status[i.status];
i.statusText = statusItem.text;
i.statusType = statusItem.type;
return i;
})
),
tap(() => (this.loading = false))
)
.subscribe(res => {
this.data = res;
this.cdr.detectChanges();
});
}
stChange(e: STChange): void {
switch (e.type) {
case 'checkbox':
this.selectedRows = e.checkbox!;
this.totalCallNo = this.selectedRows.reduce((total, cv) => total + cv.callNo, 0);
this.cdr.detectChanges();
break;
case 'filter':
this.getData();
break;
}
}
remove(): void {
this.http.delete('/rule', { nos: this.selectedRows.map(i => i.no).join(',') }).subscribe(() => {
this.getData();
this.st.clearCheck();
});
}
approval(): void {
this.msg.success(`审批了 ${this.selectedRows.length}`);
}
add(tpl: TemplateRef<{}>): void {
this.modalSrv.create({
nzTitle: '新建规则',
nzContent: tpl,
nzOnOk: () => {
this.loading = true;
this.http.post('/rule', { description: this.description }).subscribe(() => this.getData());
}
});
}
reset(): void {
// wait form reset updated finished
setTimeout(() => this.getData());
}
}

View File

@ -0,0 +1,13 @@
<page-header-wrapper [title]="'下载中心'"></page-header-wrapper>
<nz-card nzSize="small">
<!-- 搜索区 -->
<sf #sf mode="search" [schema]="schema" (formSubmit)="st.load(1)" (formReset)="resetSF()"></sf>
<!-- 数据列表 -->
<st #st multiSort [scroll]="{ x: '1200px' }" [size]="'small'" [data]="service.$api_get_page" [columns]="columns"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }"
[res]="{ reName: { list: 'data.records', total: 'data.total' } }"
[page]="{ show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }"
[loading]="service.http.loading">
</st>
</nz-card>

View File

@ -0,0 +1,135 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { STChange, STColumn, STComponent, STData } from '@delon/abc/st';
import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form';
import { _HttpClient } from '@delon/theme';
import { NzModalService } from 'ng-zorro-antd/modal';
import { DownloadService } from '../../services/download.service';
@Component({
selector: 'app-download-center-components-list',
templateUrl: './list.component.html',
})
export class DownloadComponentsListComponent implements OnInit {
ui: SFUISchema = {};
schema: SFSchema = {};
columns: STColumn[] = [];
@ViewChild('st', { static: false }) st!: STComponent;
@ViewChild('sf', { static: false }) sf!: SFComponent;
constructor(public service: DownloadService, private modal: NzModalService, private router: Router, private ar: ActivatedRoute) {}
/**
* 查询参数
*/
get reqParams() {
const params = Object.assign({}, this.sf?.value || {});
delete params._$expand;
return { ...params };
}
/**
* 重置表单
*/
resetSF() {
this.sf.reset();
}
/**
* 程序初始化入口
*/
ngOnInit() {
this.initSF();
this.initST();
}
/**
* 初始化查询表单
*/
initSF() {
this.schema = {
properties: {
_$expand: {
type: 'boolean',
ui: { hidden: true },
},
applyStartTime: {
type: 'string',
title: '创建时间',
ui: {
widget: 'date',
format: 'yyyy-MM-dd',
end: 'applyEndTime',
} as SFDateWidgetSchema,
},
applyEndTime: {
type: 'string',
title: '',
ui: { widget: 'date', end: 'end' } as SFDateWidgetSchema,
},
},
};
this.ui = { '*': { spanLabelFixed: 80, grid: { span: 8, gutter: 4 } } };
}
/**
* 初始化数据列表
*/
initST() {
this.columns = [
{ title: '文件名称', index: 'dataSourcesDetail', className: 'text-center' },
{ title: '文件来源', index: 'dataSources', className: 'text-center' },
{ title: '文件大小', index: 'dataSize', width: '120px', className: 'text-center' },
{
title: '生成状态',
index: 'status',
width: '120px',
className: 'text-center',
type: 'enum',
enum: {
0: '生成中',
1: '已完成',
2: '失败',
},
},
{ title: '下载次数', index: 'downloadCount', width: '120px', className: 'text-center' },
{ title: '创建时间', index: 'createTime', width: '120px', className: 'text-center' },
{ title: '生成时间', index: 'completeTime', width: '180px', className: 'text-center' },
{
title: '操作',
fixed: 'right',
width: '170px',
className: 'text-center',
buttons: [
{ text: '下载', click: (_record) => this.download(_record)},
],
},
];
}
/**
* 删除单个实例
* @param record 记录实例
*/
delOne(record: STData) {
const headers = [{ key: 'Content-Type', value: 'application/json' }];
this.modal.confirm({
nzTitle: '<i>删除确认</i>',
nzContent: `<b>即将删除 当前行数据,请仔细核对,避免误操作!<br>是否删除?</br>`,
nzOnOk: () =>
this.service.request(this.service.encodeUrlHeader(this.service.$api_del_many, headers), { fileKey: record.id }).subscribe((res) => {
if (res) {
this.service.msgSrv.success('数据删除成功!');
this.st?.reload();
}
}),
});
}
download(record: STData) {
const headers = [{ key: 'Content-Type', value: 'application/json' }];
this.service.downloadFile(
this.service.encodeUrlHeader(this.service.$api_download_file, headers),
{},
{ fileKey: record.fileUniqueKey },
'POST',
);
}
}

View File

@ -0,0 +1,14 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { DownloadComponentsListComponent } from './components/list/list.component';
const routes: Routes = [
{ path: '', redirectTo: 'list', pathMatch: 'full' },
{ path: 'list', component: DownloadComponentsListComponent, data: { reuse: true } },
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class DownloadRoutingModule {}

View File

@ -0,0 +1,12 @@
import { NgModule, Type } from '@angular/core';
import { SharedModule } from '@shared';
import { DownloadComponentsListComponent } from './components/list/list.component';
import { DownloadRoutingModule } from './download-routing.module';
const COMPONENTS: Type<void>[] = [DownloadComponentsListComponent];
@NgModule({
imports: [SharedModule, DownloadRoutingModule],
declarations: COMPONENTS,
})
export class DownloadModule {}

View File

@ -0,0 +1,18 @@
import { Injectable, Injector } from '@angular/core';
import { BaseService } from '@shared';
@Injectable({
providedIn: 'root',
})
export class DownloadService extends BaseService {
// 删除多个实例接口地址
$api_del_many = '/scm/cms/cms/deleteRecordInfo/file';
// 获取实例分页数据接口地址
$api_get_page = '/api/mdc/pbc/asynExportInfo/getAsynExportInfoListPage';
// 下载文件
$api_download_file = '/api/mdc/pbc/download/file';
constructor(public injector: Injector) {
super(injector);
}
}

View File

@ -0,0 +1,35 @@
<page-header-wrapper [title]="'异常入金'">
</page-header-wrapper>
<nz-card class="search-box" nzBordered>
<div nz-row nzGutter="8">
<div nz-col [nzXl]="_$expand ? 24 : 18" [nzLg]="24" [nzSm]="24" [nzXs]="24">
<sf #sf [schema]="searchSchema"
[ui]="{ '*': { spanLabelFixed: 90,grid: { lg: 8, md: 12, sm: 12, xs: 24 } }}" [compact]="true"
[button]="'none'"></sf>
</div>
<div nz-col [nzXl]="_$expand ? 24 : 6" [nzLg]="24" [nzSm]="24" [nzXs]="24" [class.expend-options]="_$expand"
class="text-right">
<button nz-button nzType="primary" [nzLoading]="service.http.loading" (click)="st?.load(1)">查询</button>
<button nz-button (click)="resetSF()">重置</button>
<button nz-button> 导出</button>
<button nz-button nzType="link" (click)="expandToggle()">
{{ !_$expand ? '展开' : '收起' }}
<i nz-icon [nzType]="!_$expand ? 'down' : 'up'"></i>
</button>
</div>
</div>
</nz-card>
<nz-card class="content-box" nzBordered>
<nz-tabset>
<nz-tab nzTitle="待处理"></nz-tab>
<nz-tab nzTitle="已清分"></nz-tab>
<nz-tab nzTitle="已退款"></nz-tab>
<nz-tab nzTitle="全部"></nz-tab>
</nz-tabset>
<st #st [data]="service.$api_get_abnormal_gold_page" [columns]="columns" [req]="{ process: beforeReq }"
[loading]="service.http.loading" [scroll]="{ x:'1200px' }"></st>
</nz-card>

View File

@ -0,0 +1,37 @@
:host::ng-deep {
.search-box {
.ant-card-body {
padding-bottom: 18px;
}
}
.content-box {
.ant-card-body {
padding-top: 0;
}
}
nz-range-picker {
width: 100%;
}
.ant-tabs-tab-btn {
padding-left : 16px;
padding-right: 16px;
}
}
.expend-options {
margin-top: 0px;
}
@media (min-width: 1200px) {
.expend-options {
max-width: 400px;
position : absolute;
right : 0;
bottom : 25px;
}
}

View File

@ -0,0 +1,192 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { Router } from '@angular/router';
import { STComponent, STColumn, STRequestOptions, STChange } from '@delon/abc/st';
import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
import { NzModalService } from 'ng-zorro-antd/modal';
import { FreightAccountService } from '../../services/freight-account.service';
import { ClearingModalComponent } from './clearing-modal/clearing-modal.component';
@Component({
selector: 'app-abnormal-gold',
templateUrl: './abnormal-gold.component.html',
styleUrls: ['./abnormal-gold.component.less']
})
export class AbnormalGoldComponent implements OnInit {
@ViewChild('st', { static: true })
st!: STComponent;
@ViewChild('sf', { static: false })
sf!: SFComponent;
columns: STColumn[] = this.initST();
searchSchema: SFSchema = this.initSF();
_$expand = false;
constructor(public service: FreightAccountService, private nzModalService: NzModalService, private router: Router) {}
ngOnInit(): void {}
beforeReq = (requestOptions: STRequestOptions) => {
if (this.sf) {
Object.assign(requestOptions.body, { ...this.sf.value });
}
return requestOptions;
};
refund(item: any) {
this.nzModalService.warning({
nzTitle: '确定要将该笔款项原路退回?',
nzOnOk: () => {}
});
}
clearingAction(item: any) {
const modal = this.nzModalService.create({
nzTitle: '清分',
nzContent: ClearingModalComponent,
nzOnOk: com => {
return false;
}
});
}
/**
* 重置表单
*/
resetSF() {
this.sf.reset();
this._$expand = false;
}
/**
* 伸缩查询条件
*/
expandToggle() {
this._$expand = !this._$expand;
this.sf?.setValue('/expand', this._$expand);
}
private initSF(): SFSchema {
return {
properties: {
expand: {
type: 'boolean',
ui: {
hidden: true
}
},
paySerialNumber: {
type: 'string',
title: '银行流水号',
ui: {
placeholder: '请输入'
}
},
ltdId: {
type: 'string',
title: '网络货运人',
ui: {
widget: 'select',
placeholder: '请选择',
allowClear: true,
asyncData: () => this.service.getNetworkFreightForwarder()
}
},
bankType: {
type: 'string',
title: '银行类型',
enum: [
{ label: '全部', value: '' },
{ label: '平安银行', value: '1' },
{ label: '浦发银行', value: '2' }
],
ui: {
widget: 'select',
placeholder: '请选择',
},
default: ''
},
transferBankAccount: {
type: 'string',
title: '付款账户',
ui: {
placeholder: '请输入',
visibleIf: {
expand: (value: boolean) => value
}
}
},
transferBankCardNumber: {
type: 'string',
title: '付款账号',
ui: {
placeholder: '请输入',
visibleIf: {
expand: (value: boolean) => value
}
}
},
transferBankOpenName: {
type: 'string',
title: '付款银行',
ui: {
placeholder: '请输入',
visibleIf: {
expand: (value: boolean) => value
}
}
},
transferDate: {
title: '转账时间',
type: 'string',
ui: {
widget: 'sl-from-to-search',
format: 'yyyy-MM-dd',
placeholder: '请选择',
nzShowTime: true,
visibleIf: {
expand: (value: boolean) => value
}
} as SFDateWidgetSchema
}
}
};
}
private initST(): STColumn[] {
return [
{ title: '银行流水号', index: 'paySerialNumber', width: 150 },
{ title: '网络货运人', index: 'ltdId', width: 120 },
{ title: '银行类型', index: 'callNo', width: 100, type: 'enum', enum: { 1: '平安银行', 2: '浦发银行' } },
{ title: '资金总账号', index: 'callNo', width: 120 },
{ title: '充值金额', index: 'rechargeAmount', width: 100 },
{ title: '付款账户', index: 'transferBankAccount', width: 100 },
{ title: '付款账号', index: 'transferBankCardNumber', width: 100 },
{ title: '付款银行', index: 'transferBankOpenName', width: 100 },
{ title: '转账时间', index: 'transferDate', type: 'date', width: 150 },
{ title: '转账备注', index: 'rechargeRemark', width: 100 },
{ title: '操作人', index: 'rechargeName', width: 90 },
{ title: '操作时间', index: 'callNo', type: 'date', width: 150 },
{ title: '状态', index: 'callNo', width: 90 },
{
title: '操作',
fixed: 'right',
className: 'text-center',
width: 120,
buttons: [
{
text: '清分',
click: item => this.clearingAction(item)
},
{
text: '退款',
click: item => this.refund(item)
},
{
text: '查看',
click: item => this.router.navigate(['/financial-management/withdrawals-record/detail/1'])
}
]
}
];
}
}

View File

@ -0,0 +1,2 @@
<sf #sf [compact]="true" [ui]="ui" [schema]="schema" [button]="'none'">
</sf>

View File

@ -0,0 +1,106 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { apiConf } from '@conf/api.conf';
import { SFComponent, SFSchema, SFTextWidgetSchema, SFUISchema, SFUploadWidgetSchema } from '@delon/form';
import { ShipperBaseService } from '@shared';
import { NzModalRef } from 'ng-zorro-antd/modal';
import { FreightAccountService } from '../../../services/freight-account.service';
const IMAGECONFIG = {
action: apiConf.waterFileUpload,
fileType: 'image/png,image/jpeg,image/jpg,image/gif',
fileSize: 5120,
limit: 1,
limitFileCount: 1,
resReName: 'data.fullFileWatermarkPath',
urlReName: 'data.fullFileWatermarkPath',
widget: 'upload',
name: 'multipartFile',
multiple: false,
listType: 'picture-card'
};
@Component({
selector: 'app-clearing-modal',
templateUrl: './clearing-modal.component.html',
styleUrls: ['./clearing-modal.component.less']
})
export class ClearingModalComponent implements OnInit {
@ViewChild('sf', { static: false })
sf!: SFComponent;
i: any;
schema!: SFSchema;
ui: SFUISchema = {
'*': {
spanLabelFixed: 120,
grid: { span: 18 }
}
};
constructor(
private modal: NzModalRef,
public service: FreightAccountService,
public shipperservice: ShipperBaseService,
) {}
ngOnInit(): void {
this.initSF(this.i);
}
initSF(staff: any) {
this.schema = {
properties: {
name: {
title: '入账金额',
type: 'string',
ui: {
widget: 'text'
} as SFTextWidgetSchema,
default: '10000.00'
},
enterpriseInfoId: {
type: 'string',
title: '网络货运人',
ui: {
widget: 'select',
placeholder: '请选择',
visibleIf: {
_$expand: (value: boolean) => value,
},
allowClear: true,
asyncData: () => this.shipperservice.getNetworkFreightForwarder(),
},
},
name3: {
title: '银行类型',
type: 'string',
ui: {
widget: 'text'
} as SFTextWidgetSchema,
default: '平安银行'
},
receiveName: {
type: 'string',
title: '分配对象',
enum: [{ label: '全部', value: '全部' }],
ui: {
widget: 'select',
placeholder: '请选择'
},
default: ''
},
licensePhotoWatermark: {
type: 'string',
title: '上传凭证',
ui: {
...IMAGECONFIG,
change: args => {
if (args.type === 'success') {
this.sf.setValue('/licensePhoto', args.fileList[0].response.data.fullFilePath);
}
}
} as SFUploadWidgetSchema
}
},
required: ['name', 'name2', 'name3', 'receiveName']
};
}
}

View File

@ -0,0 +1,84 @@
<page-header-wrapper title="收款单" [logo]="logo">
<ng-template #logo>
<button nz-button nz-tooltip nzTooltipTitle="返回上一页" (click)="goBack()">
<i nz-icon nzType="left" nzTheme="outline"></i>
</button>
</ng-template>
</page-header-wrapper>
<nz-card class="search-box">
<div nz-row>
<div nz-col nzSpan="24">
<se-container col="3" labelWidth="100">
<se-title class="mb-md" style="font-size: 18px">基本信息</se-title>
<se label="网络货运人" required>
{{ costInfo?.ltdName }}
</se>
<se label="银行类型">
{{ costInfo?.banktypeLabel }}
</se>
<se label="付款人" required>
{{ costInfo?.artoname }}
</se>
<se label="结算客户" required>
{{ costInfo?.shipperId }}
</se>
<se label="收款账户">
{{ costInfo?.ltdaccountId }}
</se>
<se label="预收金额">
{{ costInfo?.premoney |currency }}
</se>
<se label="收款类型" required>
{{ costInfo?.brmtypeLabel }}
</se>
</se-container>
</div>
</div>
</nz-card>
<nz-card class="content-box" nzBordered>
<nz-tabset>
<nz-tab nzTitle="转入信息">
<!-- <div nz-row nzGutter="8">
<div nz-col [nzXl]="16" [nzLg]="18" [nzSm]="24" [nzXs]="24">
<sf #sf [schema]="inputSearchSchema"
[ui]="{ '*': { spanLabelFixed: 90,grid: { lg: 12, md: 12, sm: 12, xs: 24 } }}" [compact]="true"
[button]="'none'"></sf>
</div>
<div nz-col [nzXl]="8" [nzLg]="6" [nzSm]="24" [nzXs]="24">
<button nz-button nzType="primary" [nzLoading]="service.http.loading"
(click)="inputST?.load(1)">查询</button>
<button nz-button (click)="resetInputSF()">重置</button>
</div>
</div> -->
<st #inputST [data]="service.$api_get_advance_collection_detail" [columns]="columns.input"
[page]="{ show: false }" [req]="{ process: beforeReq }" [res]="{ reName: { list: 'data' } }"
[loading]="service.http.loading" [scroll]="{ x: '1200px', y: '370px' }" class="mt-md">
<ng-template st-row="no" let-item let-index="index" let-column="column">
{{index+1}}
</ng-template>
</st>
</nz-tab>
<!-- <nz-tab nzTitle="核销信息">
<div nz-row nzGutter="8">
<div nz-col [nzXl]="16" [nzLg]="18" [nzSm]="24" [nzXs]="24">
<sf #sf [schema]="infoSearchSchema"
[ui]="{ '*': { spanLabelFixed: 90,grid: { lg: 12, md: 12, sm: 12, xs: 24 } }}" [compact]="true"
[button]="'none'"></sf>
</div>
<div nz-col [nzXl]="8" [nzLg]="6" [nzSm]="24" [nzXs]="24">
<button nz-button nzType="primary" [nzLoading]="service.http.loading"
(click)="infoST?.load(1)">查询</button>
<button nz-button (click)="resetInfoSF()">重置</button>
</div>
</div>
<st #infoST [scroll]="{ x: '2000px' }" [data]="[]" [columns]="columns.info" [req]="{ process: beforeReq }"
[loading]="service.http.loading" [scroll]="{ x: '1200px', y: '370px' }" class="mt-md">
<ng-template st-row="no" let-item let-index="index" let-column="column">
{{index+1}}
</ng-template>
</st>
</nz-tab> -->
</nz-tabset>
</nz-card>

View File

@ -0,0 +1,150 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { STComponent, STColumn, STRequestOptions } from '@delon/abc/st';
import { SFComponent, SFDateWidgetSchema, SFSchema } from '@delon/form';
import { FreightAccountService } from '../../../services/freight-account.service';
@Component({
selector: 'app-advance-collection-detail',
templateUrl: './advance-collection-detail.component.html',
styleUrls: ['../../../../commom/less/box.less', '../../../../commom/less/basic-board.less']
})
export class AdvanceCollectionDetailComponent implements OnInit {
@ViewChild('inputST', { static: true })
inputST!: STComponent;
columns: { [key: string]: STColumn[] } = this.initST();
@ViewChild('infoST', { static: true })
infoST!: STComponent;
costInfo: any = {};
id: any = null;
@ViewChild('sf', { static: false })
inputSF!: SFComponent;
@ViewChild('sf', { static: false })
infoSF!: SFComponent;
inputSearchSchema: SFSchema = this.initInputSF();
infoSearchSchema: SFSchema = this.initInfoSF();
constructor(public service: FreightAccountService, private route: ActivatedRoute) {
this.id = route.snapshot.params.id;
this.loadDetail(this.id);
}
ngOnInit(): void {}
beforeReq = (requestOptions: STRequestOptions) => {
Object.assign(requestOptions.body, {
id: this.id
});
return requestOptions;
};
loadDetail(id: any) {
this.service.request(this.service.$api_get_advance_collection_header, { id }).subscribe(res => {
if (res) {
this.costInfo = res;
}
});
}
/**
* 重置表单
*/
resetInputSF() {
this.inputSF.reset();
}
/**
* 重置表单
*/
resetInfoSF() {
this.infoSF.reset();
}
goBack() {
history.go(-1);
}
private initInputSF(): SFSchema {
return {
properties: {
feedate: {
title: '到账日期',
type: 'string',
ui: {
widget: 'sl-from-to-search',
format: 'yyyy-MM-dd'
} as SFDateWidgetSchema
},
billHCode: {
type: 'string',
title: '收款单号',
ui: {
placeholder: '请输入'
}
}
}
};
}
private initInfoSF(): SFSchema {
return {
properties: {
feedate: {
title: '核销日期',
type: 'string',
ui: {
widget: 'sl-from-to-search',
format: 'yyyy-MM-dd'
} as SFDateWidgetSchema
},
billHCode: {
type: 'string',
title: '核销单号',
ui: {
placeholder: '请输入'
}
}
}
};
}
private initST(): { [key: string]: STColumn[] } {
return {
input: [
{ title: '序号', render: 'no', width: 70, className: 'text-left' },
{ title: '收款单号', index: 'brmHCode', className: 'text-left', width: 200 },
// { title: '到账日期', index: 'billHId', className: 'text-center', width: 150 },
{
title: '到账金额',
index: 'yskmoney',
type: 'widget',
className: 'text-right',
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yskmoney }) },
width: 140
},
{
title: '转预收金额',
index: 'yskmoney',
type: 'widget',
className: 'text-right',
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yskmoney }) },
width: 140
},
// { title: '预收备注', index: 'callNo', width: 200 }
],
info: [
{ title: '序号', render: 'no', width: 70, className: 'text-left' },
{ title: '核销单号', index: 'cnoName', className: 'text-left', width: 200 },
{ title: '核销日期', index: 'billHId', className: 'text-center', width: 150 },
{
title: '核销金额',
index: 'yskmoney',
type: 'widget',
className: 'text-right',
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yskmoney }) },
width: 200
},
{ title: '核销备注', index: 'vatapptype', className: 'text-left', width: 200 }
]
};
}
}

View File

@ -0,0 +1,28 @@
<page-header-wrapper title="预收款余额">
</page-header-wrapper>
<nz-card class="search-box">
<div nz-row nzGutter="8">
<div nz-col [nzXl]="_$expand ? 24 : 18" [nzLg]="24" [nzSm]="24" [nzXs]="24">
<sf #sf [schema]="searchSchema"
[ui]="{ '*': { spanLabelFixed: 110,grid: { lg: 8, md: 12, sm: 12, xs: 24 } }}" [compact]="true"
[button]="'none'"></sf>
</div>
<div nz-col [nzXl]="_$expand ? 24 : 6" [nzLg]="24" [nzSm]="24" [nzXs]="24" [class.expend-options]="_$expand"
class="text-right">
<button nz-button nzType="primary" [nzLoading]="service.http.loading" (click)="st?.load(1)">查询</button>
<button nz-button (click)="resetSF()">重置</button>
<button nz-button (click)="exportList()"> 导出</button>
<button nz-button nzType="link" (click)="expandToggle()">
{{ !_$expand ? '展开' : '收起' }}
<i nz-icon [nzType]="!_$expand ? 'down' : 'up'"></i>
</button>
</div>
</div>
</nz-card>
<nz-card class="content-box">
<st #st [data]="service.$api_get_advance_collection_page" [columns]="columns" [req]="{ process: beforeReq }"
[loading]="service.http.loading" [scroll]="{ x: '1200px' }">
</st>
</nz-card>

View File

@ -0,0 +1,164 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { Router } from '@angular/router';
import { STComponent, STColumn, STRequestOptions } from '@delon/abc/st';
import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
import { NzModalService } from 'ng-zorro-antd/modal';
import { AccountDetailComponent } from 'src/app/shared/components/account-detail/account-detail.component';
import { FreightAccountService } from '../../services/freight-account.service';
@Component({
selector: 'app-advance-collection',
templateUrl: './advance-collection.component.html',
styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less']
})
export class AdvanceCollectionComponent implements OnInit {
@ViewChild('st', { static: true })
st!: STComponent;
@ViewChild('sf', { static: false })
sf!: SFComponent;
searchSchema: SFSchema = this.initSF();
columns: STColumn[] = this.initST();
_$expand = false;
constructor(public service: FreightAccountService, private router: Router, private modal: NzModalService) {}
ngOnInit(): void {}
beforeReq = (requestOptions: STRequestOptions) => {
if (this.sf) {
Object.assign(requestOptions.body, { ...this.sf.value });
}
return requestOptions;
};
/**
* 重置表单
*/
resetSF() {
this.sf.reset();
this._$expand = false;
}
/**
* 伸缩查询条件
*/
expandToggle() {
this._$expand = !this._$expand;
this.sf?.setValue('/expand', this._$expand);
}
exportList() {
this.service.downloadFile(this.service.$mock_url, { ...this.sf.value, pageIndex: this.st.pi, pageSize: this.st.ps });
}
private initSF(): SFSchema {
return {
properties: {
expand: {
type: 'boolean',
ui: {
hidden: true
}
},
ltdId: {
type: 'string',
title: '网络货运人',
ui: {
widget: 'select',
placeholder: '请选择',
allowClear: true,
asyncData: () => this.service.getNetworkFreightForwarder()
}
},
cno: {
type: 'string',
title: '结算客户',
ui: {
widget: 'select',
placeholder: '请选择',
allowClear: true,
asyncData: () => this.service.getCloseAccount()
}
},
arto: {
type: 'string',
title: '付款人',
ui: {
widget: 'select',
placeholder: '请选择',
allowClear: true,
asyncData: () => this.service.getCRM()
}
},
brmtype: {
type: 'string',
title: '收款类型',
enum: [{ label: '全部', value: null }],
ui: {
widget: 'select',
placeholder: '请选择',
visibleIf: {
expand: (value: boolean) => value
}
},
default: null
},
bankType: {
type: 'string',
title: '银行类型',
enum: [
{ label: '全部', value: null },
{ label: '平安银行', value: '1' },
{ label: '浦发银行', value: '2' }
],
ui: {
widget: 'select',
placeholder: '请选择',
visibleIf: {
expand: (value: boolean) => value
}
},
default: null
}
}
};
}
private initST(): STColumn[] {
return [
{ title: '网络货运人', width: 160, index: 'ltdName' },
{ title: '银行类型', width: 120, index: 'banktypeLabel' },
{ title: '收款账户', width: 150, index: 'ltdaccountId' },
{ title: '收款类型', width: 120, index: 'brmtypeLabel' },
{
title: '预收余额',
index: 'yskmoney',
width: 140,
type: 'widget',
className: 'text-right',
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yskmoney }) }
},
{ title: '付款人', index: 'artoName', width: 180 },
{ title: '结算客户', index: 'cnoName', width: 150 },
{
title: '操作',
width: 120,
className: 'text-center',
fixed: 'right',
buttons: [
{
text: '浏览',
click: item => this.router.navigate(['/financial-management/advance-collection/detail/' + item.id])
},
{
text: '核销'
},
{
text: '退款'
}
]
}
];
}
}

View File

@ -0,0 +1,177 @@
<page-header-wrapper title="费用单" [logo]="logo">
<ng-template #logo>
<button nz-button nz-tooltip nzTooltipTitle="返回上一页" (click)="goBack()">
<i nz-icon nzType="left" nzTheme="outline"></i>
</button>
</ng-template>
</page-header-wrapper>
<nz-card class="search-box">
<div nz-row>
<div nz-col nzSpan="24">
<se-container col="3" labelWidth="100" *ngIf="!textStatus">
<se-title class="mb-md" style="font-size: 18px">基本信息(应收费用)</se-title>
<se label="网络货运人" required>
{{ costInfo?.ltdName }}
</se>
<se label="费用类型" required col="2">
{{ costInfo?.feetypeLabel }}
</se>
<se label="费用备注">
{{ costInfo?.arremarks }}
</se>
<se label="应收对象" required>
{{ costInfo?.artoname }}
</se>
<se label="开票类型" required>
{{ costInfo?.arvattypeLabel }}
</se>
<se label="应收金额" required>
{{ costInfo?.armoeny }}
</se>
<se label="开票金额" required>
{{ costInfo?.arkpmoney }}
</se>
<se label="收款金额" required>
{{ costInfo?.armoeny }}
</se>
</se-container>
<se-container col="3" labelWidth="100" *ngIf="textStatus" class="mt-md">
<se-title class="mb-md" style="font-size: 18px">基本信息(应付费用)</se-title>
<se label="网络货运人" required>
{{ costInfo?.ltdName }}
</se>
<se label="费用类型" required>
{{ costInfo?.feetypeLabel }}
</se>
<se label="应付核销" required> </se>
<se label="费用备注">
{{ costInfo?.hrremarks }}
</se>
<se label="应收对象" required>
{{ costInfo?.hrtoname }}
</se>
<se label="收票类型" required>
{{ costInfo?.hrvattypeLabel }}
</se>
<se label="应付金额" required>
{{ costInfo?.hrmoney }}
</se>
<se label="收票金额" required>
{{ costInfo?.hrvatmoney }}
</se>
<se label="付款金额" required>
{{ costInfo?.hrpaymoney }}
</se>
</se-container>
</div>
</div>
</nz-card>
<nz-card class="content-box" nzBordered>
<nz-tabset>
<nz-tab nzTitle="费用明细">
<st
#st
[scroll]="{ x: '2000px' }"
[data]="costInfo?.ficoFeeLList"
[columns]="columns.cost"
[page]="{ show: false }"
[loading]="service.http.loading"
[scroll]="{ x: '1200px', y: '370px' }"
>
<ng-template st-row="artocode" let-item let-index="index">
{{ costInfo?.artocode}}/{{ costInfo?.artonames}}
</ng-template>
<ng-template st-row="hrvatmoney" let-item let-index="index">
<span *ngIf="!textStatus">{{ item.armoney | currency}}</span>
<span *ngIf="textStatus">{{ item.hrmoney | currency}}</span>
</ng-template>
<ng-template st-row="armoney" let-item let-index="index">
{{ item.armoney | currency}}
</ng-template>
<ng-template st-row="arkpmoney" let-item let-index="index">
{{ item.arkpmoney | currency}}
</ng-template>
<ng-template st-row="no" let-item let-index="index" let-column="column">
{{ textStatus ? item.hrmoney : item.hrvatmoney }}
</ng-template>
<ng-template st-row="billTime" let-item let-index="index" let-column="column">
{{costInfo.billTime}}
</ng-template>
<ng-template st-row="cnoName" let-item let-index="index" let-column="column">
{{costInfo.cnoName}}
</ng-template>
</st>
</nz-tab>
<nz-tab nzTitle="开票信息">
<st
#st
[scroll]="{ x: '2000px' }"
[data]="costInfo?.ficoVatappDatailList"
[columns]="columns.requested"
[page]="{ show: false }"
[loading]="service.http.loading"
[scroll]="{ x: '1200px', y: '370px' }"
>
<ng-template st-row="vatnotax" let-item let-index="index">
{{ item.vatnotax | currency}}
</ng-template>
<ng-template st-row="vatmoney" let-item let-index="index">
{{ item.vatmoney | currency}}
</ng-template>
<ng-template st-row="no" let-item let-index="index" let-column="column">
{{ index + 1 }}
</ng-template>
</st>
</nz-tab>
<nz-tab nzTitle="收款信息">
<st
#st
[scroll]="{ x: '2000px' }"
[data]="costInfo?.ficoAhxLList"
[columns]="columns.collection"
[page]="{ show: false }"
[loading]="service.http.loading"
[scroll]="{ x: '1200px', y: '370px' }"
>
<ng-template st-row="ahxmoney" let-item let-index="index">
{{ item.ahxmoney | currency}}
</ng-template>
<ng-template st-row="ahxmoney" let-item let-index="index">
{{ item.ahxmoney | currency}}
</ng-template>
<ng-template st-row="no" let-item let-index="index" let-column="column">
{{ index + 1 }}
</ng-template>
<ng-template st-row="status" let-item let-index="index" let-column="column"> 已核销 </ng-template>
</st>
</nz-tab>
<nz-tab nzTitle="收票信息">
<st
#st
[data]="data"
[scroll]="{ x: '2000px' }"
[columns]="columns.ticket"
[page]="{ show: false }"
[loading]="service.http.loading"
[scroll]="{ x: '1200px', y: '370px' }"
></st>
</nz-tab>
<nz-tab nzTitle="付款信息">
<st
#st
[scroll]="{ x: '2000px' }"
[data]="costInfo?.ficoPhxLList"
[columns]="columns.payment"
[page]="{ show: false }"
[loading]="service.http.loading"
[scroll]="{ x: '1200px', y: '370px' }"
>
<ng-template st-row="no" let-item let-index="index" let-column="column">
{{ index + 1 }}
</ng-template>
</st>
</nz-tab>
</nz-tabset>
</nz-card>

View File

@ -0,0 +1,24 @@
:host::ng-deep {
.search-box {
.ant-card-body {
padding-bottom: 18px;
}
}
.content-box {
.ant-card-body {
padding-top: 14px;
}
}
.text-truncate {
white-space: normal;
}
.ant-form-item {
margin-bottom: 0;
}
}

View File

@ -0,0 +1,103 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { STComponent, STColumn } from '@delon/abc/st';
import { FreightAccountService } from '../../../services/freight-account.service';
@Component({
selector: 'app-cost-management-detail',
templateUrl: './cost-management-detail.component.html',
styleUrls: ['./cost-management-detail.component.less']
})
export class CostManagementDetailComponent implements OnInit {
@ViewChild('st', { static: true })
st!: STComponent;
columns: { [key: string]: STColumn[] } = this.initST();
data = [];
textStatus: boolean = false;
costInfo: any = {};
constructor(public service: FreightAccountService, private route: ActivatedRoute) {
const id = route.snapshot.params.id;
this.loadDetail(id);
}
ngOnInit(): void {
if (this.route.snapshot?.queryParams?.status === '应收') {
this.textStatus = false;
} else {
this.textStatus = true;
}
}
loadDetail(id: any) {
this.service.request(this.service.$api_get_cost_detail, { id }).subscribe(res => {
if (res) {
this.costInfo = res;
}
});
}
goBack() {
history.go(-1);
}
private initST(): { [key: string]: STColumn[] } {
return {
cost: [
{ title: '序号', render: 'no', width: 70, className: 'text-left' },
{ title: '费用明细号', index: 'feeHId', className: 'text-left', width: 200 },
{ title: '订单号', index: 'billHCode', className: 'text-left', width: 200 },
{ title: '订单日期', render: 'billTime', className: 'text-left', width: 200 },
{ title: '运单号', index: 'waybillHCode', className: 'text-left', width: 200 },
{ title: '运单日期', index: 'waybillDate', className: 'text-left', width: 200, format: _ => this.costInfo.billTime },
{ title: '结算客户', render: 'cnoName', className: 'text-left', width: 200 },
{ title: '订单费用类型', index: 'billLTypeLabel', className: 'text-left', width: 200 },
{ title: '费用科目', index: 'feeSubName', className: 'text-left', width: 200 },
{ title: '税率', index: 'hrvatrate', className: 'text-right', width: 200 },
{ title: '费用金额', render: 'hrvatmoney', className: 'text-right', width: 200 },
{ title: '收/付款金额', render: 'armoney', className: 'text-right', width: 200 },
{ title: '开/收票金额', render: 'arkpmoney', className: 'text-right', width: 200 }
],
requested: [
{ title: '序号', render: 'no', width: 70, className: 'text-left' },
{ title: '费用明细号', index: 'feeLId', className: 'text-left', width: 200 },
{ title: '发票申请', index: 'vatinvcode', className: 'text-left', width: 200 },
{ title: '发票类型', index: 'vatapptype', className: 'text-left', width: 200 },
{ title: '发票号', index: 'vatappcode', className: 'text-left', width: 200 },
{ title: '发票日期', index: 'vatappdate', className: 'text-left', width: 200 },
{ title: '发票状态', index: 'stsLabel', className: 'text-left', width: 200 },
{ title: '应收金额', render: 'armoney', className: 'text-left', width: 200 },
{ title: '开票金额', render: 'vatmoney', className: 'text-left', width: 200 }
],
collection: [
{ title: '序号', render: 'no', width: 70 },
{ title: '费用明细号', index: 'feeLId', className: 'text-left', width: 200 },
{ title: '收款单号', index: 'ahxHId', className: 'text-left', width: 200 },
{ title: '收款日期', index: 'feedate', className: 'text-left', width: 200 },
{ title: '收款状态', render: 'status', className: 'text-left', width: 150 },
{ title: '应收金额', render: 'ahxmoney', className: 'text-left', width: 120 },
{ title: '收款金额', render: 'ahxmoney', className: 'text-left', width: 120 }
],
ticket: [
{ title: '序号', render: 'no', width: 70 },
{ title: '费用明细号', index: 'callNo' },
{ title: '进项发票号', index: 'callNo' },
{ title: '发票类型', index: 'callNo' },
{ title: '发票日期', index: 'callNo' },
{ title: '认证日期', index: 'callNo' },
{ title: '发票状态', index: 'callNo' },
{ title: '应付金额', index: 'callNo' },
{ title: '收票金额', index: 'callNo' }
],
payment: [
{ title: '序号', render: 'no', width: 70 },
{ title: '费用明细号', index: 'feeHCode' },
{ title: '付款单号', index: 'phxHId' },
{ title: '要求日期', index: 'billTime' },
{ title: '确认日期', index: 'feedate' },
{ title: '付款状态', index: 'callNo' },
{ title: '应付金额', index: 'callNo' },
{ title: '付款金额', index: 'phxmoney' }
]
};
}
}

View File

@ -0,0 +1,71 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2021-12-30 19:36:30
* @LastEditors : Shiming
* @LastEditTime : 2022-01-20 17:14:57
* @FilePath : \\tms-obc-web\\src\\app\\routes\\financial-management\\components\\cost-management\\cost-management.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<page-header-wrapper title="费用管理"> </page-header-wrapper>
<nz-card class="search-box">
<div nz-row nzGutter="8">
<div nz-col [nzXl]="_$expand ? 24 : 18" [nzLg]="24" [nzSm]="24" [nzXs]="24">
<sf #sf [schema]="searchSchema" [ui]="{ '*': { spanLabelFixed: 110, grid: { lg: 8, md: 12, sm: 12, xs: 24 } } }"
[compact]="true" [button]="'none'"></sf>
</div>
<div nz-col [nzXl]="_$expand ? 24 : 6" [nzLg]="24" [nzSm]="24" [nzXs]="24" class="text-right">
<button nz-button nzType="primary" [nzLoading]="service.http.loading" (click)="st?.load(1)">查询</button>
<button nz-button (click)="resetSF()">重置</button>
<!-- <button nz-button (click)="exportList()"> 导出</button>
<button nz-button (click)="exportList()"> 导出明细</button> -->
<button nz-button nzType="link" (click)="expandToggle()">
{{ !_$expand ? '展开' : '收起' }}
<i nz-icon [nzType]="!_$expand ? 'down' : 'up'"></i>
</button>
</div>
</div>
</nz-card>
<nz-card class="content-box">
<div nz-row class="mb-sm">
<div nz-col nzSpan="24">
<!-- <button nz-button nzType="primary" [nzLoading]="service.http.loading"
(click)="routeTo('/financial-management/cost-management/expenses-receivable/1')">添加应收费用</button>
<button nz-button nzType="primary" [nzLoading]="service.http.loading"
(click)="routeTo('/financial-management/cost-management/expenses-payable/1')">添加应付费用</button>
<button nz-button nzType="primary" [nzLoading]="service.http.loading">导入费用</button> -->
</div>
</div>
<st #st [data]="service.$api_get_cost_page" [columns]="columns" [req]="{ process: beforeReq }"
[loading]="service.http.loading" [scroll]="{ x: '2000px' }">
<ng-template st-row="armoeny" let-item let-index="index">
{{ item.armoeny | currency}}
</ng-template>
<ng-template st-row="hrmoney" let-item let-index="index">
{{ item.hrmoney | currency}}
</ng-template>
<ng-template st-row="artocode" let-item let-index="index">
{{ item.cnoCode}}/{{ item.cnoName}}
</ng-template>
<ng-template st-row="hrpaymoney" let-item let-index="index">
{{ item.hrpaymoney | currency}}
</ng-template>
<ng-template st-row="hrvatmoney" let-item let-index="index">
{{ item.hrvatmoney | currency}}
</ng-template>
</st>
</nz-card>
<ng-template #auditModal>
<div nz-row nzGutter="8">
<div nz-col nzSpan="24" se-container [labelWidth]="80">
<se [col]="1" label="备注">
<textarea nz-input rows="3" placeholder="同意可以不用填写原因 ,拒绝必须说明原因"
style="width: 325px; margin-left: 14px"></textarea>
</se>
</div>
</div>
</ng-template>

View File

@ -0,0 +1,317 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { Router } from '@angular/router';
import { STComponent, STColumn, STRequestOptions } from '@delon/abc/st';
import { SFComponent, SFSchema, SFDateWidgetSchema, SFSelectWidgetSchema, SFSchemaEnum } from '@delon/form';
import { NzModalService } from 'ng-zorro-antd/modal';
import { of } from 'rxjs';
import { map } from 'rxjs/operators';
import { FreightAccountService } from '../../services/freight-account.service';
@Component({
selector: 'app-cost-management',
templateUrl: './cost-management.component.html',
styleUrls: ['../../../commom/less/box.less']
})
export class CostManagementComponent implements OnInit {
@ViewChild('st', { static: true })
st!: STComponent;
@ViewChild('sf', { static: false })
sf!: SFComponent;
@ViewChild('auditModal', { static: false })
auditModal!: any;
searchSchema: SFSchema = this.initSF();
columns: STColumn[] = this.initST();
selectedRows: any[] = [];
_$expand = false;
constructor(public service: FreightAccountService, private nzModalService: NzModalService, private router: Router) {}
ngOnInit(): void {}
beforeReq = (requestOptions: STRequestOptions) => {
if (this.sf) {
Object.assign(requestOptions.body, {
...this.sf.value,
feedate: {
start: this.sf.value.feedate?.[0] || '',
end: this.sf.value.feedate?.[1] || ''
},
createTime: {
start: this.sf.value.createTime?.[0] || '',
end: this.sf.value.createTime?.[1] || ''
}
});
}
return requestOptions;
};
auditAction(item: any) {
const modal = this.nzModalService.create({
nzTitle: '审核',
nzContent: this.auditModal,
nzFooter: [
{
label: '拒绝',
type: 'default',
onClick: () => {
modal.destroy();
}
},
{
label: '通过',
type: 'primary',
onClick: () => {
modal.destroy();
}
}
]
});
modal.afterClose.subscribe(res => {
this.st.load();
});
}
/**
* 重置表单
*/
resetSF() {
this.sf.reset();
this._$expand = false;
}
/**
* 伸缩查询条件
*/
expandToggle() {
this._$expand = !this._$expand;
this.sf?.setValue('/expand', this._$expand);
}
exportList() {
this.service.downloadFile(this.service.$mock_url, { ...this.sf.value, pageIndex: this.st.pi, pageSize: this.st.ps });
}
routeTo(url: string, params?: any, status?: any) {
this.router.navigate([url], { queryParams: params });
}
private initSF(): SFSchema {
return {
properties: {
expand: {
type: 'boolean',
ui: {
hidden: true
}
},
feecode: {
type: 'string',
title: '费用单号',
ui: { placeholder: '请输入' }
},
billHCode: {
type: 'string',
title: '订单号',
ui: { placeholder: '请输入' }
},
waybillHCode: {
type: 'string',
title: '运单号',
ui: {
placeholder: '请输入'
}
},
feedate: {
title: '费用日期',
type: 'string',
ui: {
widget: 'sl-from-to-search',
format: 'yyyy-MM-dd',
placeholder: '请选择',
nzShowTime: true,
visibleIf: {
expand: (value: boolean) => value
}
} as SFDateWidgetSchema
},
feetype: {
type: 'string',
title: '费用类型',
enum: [
{ label: '全部', value: '' },
{ label: '应收', value: 1 },
{ label: '应付', value: 2 }
],
ui: {
widget: 'select',
placeholder: '请选择',
visibleIf: {
expand: (value: boolean) => value
}
},
default: ''
},
feeSubId: {
type: 'string',
title: '费用科目',
enum: [{ label: '全部', value: '全部' }],
ui: {
widget: 'select',
placeholder: '请选择',
visibleIf: {
expand: (value: boolean) => value
}
}
},
ltdId: {
type: 'string',
title: '网络货运人',
ui: {
widget: 'select',
placeholder: '请选择',
allowClear: true,
asyncData: () => this.service.getNetworkFreightForwarder(),
visibleIf: {
expand: (value: boolean) => value
}
}
},
hrto: {
type: 'string',
title: '应付对象',
ui: {
widget: 'select',
serverSearch: true,
searchDebounceTime: 300,
searchLoadingText: '搜索中...',
allowClear: true,
onSearch: (q: any) => {
if (!!q) {
return this.service
.request(this.service.$api_enterpriceList, { enterpriseName: q })
.pipe(map((res: any) => (res as any[]).map(i => ({ label: i.enterpriseName, value: i.id } as SFSchemaEnum))))
.toPromise();
} else {
return of([]);
}
},
visibleIf: {
expand: (value: boolean) => value
}
} as SFSelectWidgetSchema
},
arto: {
type: 'string',
title: '应收对象',
ui: {
widget: 'select',
serverSearch: true,
searchDebounceTime: 300,
searchLoadingText: '搜索中...',
allowClear: true,
onSearch: (q: any) => {
if (!!q) {
return this.service
.request(this.service.$api_enterpriceList, { enterpriseName: q })
.pipe(map((res: any) => (res as any[]).map(i => ({ label: i.enterpriseName, value: i.id } as SFSchemaEnum))))
.toPromise();
} else {
return of([]);
}
},
visibleIf: {
expand: (value: boolean) => value
}
} as SFSelectWidgetSchema
},
createTime: {
title: '创建时间',
type: 'string',
ui: {
widget: 'sl-from-to-search',
format: 'yyyy-MM-dd',
placeholder: '请选择',
nzShowTime: true,
visibleIf: {
expand: (value: boolean) => value
}
} as SFDateWidgetSchema
},
ishrhx: {
type: 'string',
title: '应付核销',
enum: [
{ label: '全部', value: '' },
{ label: '否', value: 0 },
{ label: '是', value: 1 }
],
ui: {
widget: 'select',
placeholder: '请选择',
visibleIf: {
expand: (value: boolean) => value
}
},
default: ''
},
cno: {
type: 'string',
title: '结算客户',
ui: {
widget: 'select',
placeholder: '请选择',
allowClear: true,
asyncData: () => this.service.getCloseAccount(),
visibleIf: {
expand: (value: boolean) => value
}
}
}
}
};
}
private initST(): STColumn[] {
return [
{ title: '费用单号', fixed: 'left', index: 'feecode', width: 200, className: 'text-left' },
{ title: '网络货运人', index: 'ltdName', width: 220, className: 'text-left' },
{ title: '订单号', index: 'billHCode', width: 200, className: 'text-left' },
{ title: '运单号', index: 'waybillHCode', width: 200, className: 'text-left' },
{ title: '费用日期', index: 'feedate', width: 200, className: 'text-left' },
{ title: '费用类型', index: 'feetypeLabel', width: 150, className: 'text-center' },
{ title: '应付核销', index: 'ishrhx', width: 200, type: 'enum', enum: { 0: '否', 1: '是' }, className: 'text-left' },
{ title: '结算客户', render: 'artocode', width: 200, className: 'text-left' },
{ title: '应收对象', index: 'artoname', width: 200, className: 'text-left' },
{ title: '应付对象', index: 'hrtoname', width: 200, className: 'text-left' },
{ title: '应收金额', render: 'armoeny', width: 100, className: 'text-right' },
{ title: '应付金额', render: 'hrmoney', width: 100, className: 'text-right' },
{ title: '收/付款金额', render: 'hrpaymoney', width: 120, className: 'text-right' },
{ title: '开/收票金额', render: 'hrvatmoney', width: 120, className: 'text-right' },
{ title: '创建时间', index: 'createTime', type: 'date', width: 200, className: 'text-center' },
{ title: '状态', index: 'stsLabel', width: 90, className: 'text-center' },
{
title: '操作',
fixed: 'right',
className: 'text-center',
width: '110px',
buttons: [
{
text: '浏览',
click: item => this.routeTo('/financial-management/cost-management/detail/' + item.id, { status: item?.feetypeLabel })
},
{
text: '审核',
click: item => this.auditAction(item),
iif: item => item.sts === 2
}
// {
// text: '修改',
// click: item => this.router.navigate(['/financial-management/cost-management/expenses-receivable/1'], { queryParams: { id: 1 } })
// }
]
}
];
}
}

View File

@ -0,0 +1,56 @@
<page-header-wrapper title="应付费用单" [logo]="logo">
<ng-template #logo>
<button nz-button nz-tooltip nzTooltipTitle="返回上一页" (click)="goBack()">
<i nz-icon nzType="left" nzTheme="outline"></i>
</button>
</ng-template>
</page-header-wrapper>
<nz-card [nzExtra]="cardTemplate" nzTitle="基本信息">
<ng-template #cardTemplate>
<button nz-button nzType="primary" [nzLoading]="service.http.loading">保存</button>
</ng-template>
<div nz-row nzGutter="8">
<div nz-col nzSpan="24">
<sf #sf [schema]="schema" [ui]="{ '*': { spanLabelFixed: 110,grid: { lg: 8, md: 12, sm: 12, xs: 24 } }}"
[button]="'none'"></sf>
</div>
</div>
<st #st [data]="data" [columns]="columns" [page]="{ show: false}" [loading]="service.http.loading" size="small"
[scroll]="{ y: '370px' }" class="mt-sm">
<ng-template st-row="description1" let-item let-index="index">
<nz-select [ngModel]="item.description" (ngModelChange)="st.setRow(index, { description: $event })"
style="width: 100%;">
<nz-option nzValue="曲丽丽" nzLabel="曲丽丽"></nz-option>
<nz-option nzValue="lucy" nzLabel="Lucy"></nz-option>
</nz-select>
</ng-template>
<ng-template st-row="description2" let-item let-index="index">
<nz-select [ngModel]="item.description" (ngModelChange)="st.setRow(index, { description: $event })"
style="width: 100%;">
<nz-option nzValue="曲丽丽" nzLabel="曲丽丽"></nz-option>
<nz-option nzValue="lucy" nzLabel="Lucy"></nz-option>
</nz-select>
</ng-template>
<ng-template st-row="description3" let-item let-index="index">
<nz-select [ngModel]="item.description" (ngModelChange)="st.setRow(index, { description: $event })"
style="width: 100%;">
<nz-option nzValue="曲丽丽" nzLabel="曲丽丽"></nz-option>
<nz-option nzValue="lucy" nzLabel="Lucy"></nz-option>
</nz-select>
</ng-template>
<ng-template st-row="num" let-item let-index="index">
<nz-input-number [ngModel]="item.num" (ngModelChange)="st.setRow(index, { num: $event })" [nzMin]="0"
style="width: 100%;"></nz-input-number>
</ng-template>
<ng-template st-row="description5" let-item let-index="index">
<input nz-input [ngModel]="item.description5"
(ngModelChange)="st.setRow(index, { description5: $event })" />
</ng-template>
</st>
<button nz-button nzType="dashed" nzBlock class="mt-md" (click)="addRow()"><i nz-icon nzType="plus"
nzTheme="outline"></i>添加</button>
</nz-card>

View File

@ -0,0 +1,13 @@
:host::ng-deep {
.content-box {
.ant-card-body {
padding-top: 14px;
}
}
nz-range-picker {
width: 100%;
}
}

View File

@ -0,0 +1,148 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { STComponent, STColumn } from '@delon/abc/st';
import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
import { FreightAccountService } from '../../../services/freight-account.service';
@Component({
selector: 'app-expenses-payable',
templateUrl: './expenses-payable.component.html',
styleUrls: ['./expenses-payable.component.less']
})
export class ExpensesPayableComponent implements OnInit {
@ViewChild('st', { static: true })
st!: STComponent;
@ViewChild('sf', { static: false })
sf!: SFComponent;
schema!: SFSchema;
columns: STColumn[] = this.initST();
id = null;
data: any[] = [
{
id: 1,
description1: '',
description2: '',
description3: '',
num: null,
description5: ''
}
];
constructor(public service: FreightAccountService, private route: ActivatedRoute) {
this.id = route.snapshot.queryParams.id;
if (this.id) {
this.schema = this.initSF({ page2: '天津怡亚通物流科技有限公司', pag2e21: '茅台集团' });
} else {
this.schema = this.initSF();
}
}
ngOnInit(): void {}
addRow() {
this.data.push({
id: this.data.length + 1,
description1: '',
description2: '',
description3: '',
num: null,
description5: ''
});
this.st.reload();
}
goBack() {
history.go(-1);
}
private initSF(data?: any): SFSchema {
return {
properties: {
page2: {
type: 'string',
title: '网络货运人',
enum: [],
ui: {
widget: data ? 'text' : 'select',
placeholder: '请选择'
},
default: data?.page2 || ''
},
pag2e21: {
title: '应付对象',
type: 'string',
enum: [],
ui: {
widget: data ? 'text' : 'select',
placeholder: '请选择'
},
default: data?.pag2e21 || ''
},
dee: {
title: '',
type: 'string',
ui: {
widget: 'text'
},
default: ' '
},
createTi2me: {
title: '费用日期',
type: 'string',
ui: {
widget: 'date',
mode: 'range',
format: 'yyyy-MM-dd'
} as SFDateWidgetSchema,
default: data?.createTi2me || ''
},
pa2ge2: {
type: 'string',
title: '收票方式',
enum: [],
ui: {
widget: 'select',
placeholder: '请选择'
},
default: data?.pa2ge2 || ''
},
page: {
type: 'string',
title: '应付备注',
ui: {
placeholder: '请输入'
},
default: data?.page || ''
}
},
required: ['page2', 'pag2e21', 'createTi2me', 'pa2ge2']
};
}
private initST(): STColumn[] {
return [
{ title: '结算客户', render: 'description1', width: 150 },
{ title: '费用科目', render: 'description2', width: 120 },
{ title: '税率', render: 'description3', width: 120 },
{ title: '应付金额', render: 'num', width: 120 },
{ title: '备注', render: 'description5', width: 150 },
{
title: '操作',
fixed: 'right',
className: 'text-center',
width: 90,
buttons: [
{
text: '删除',
click: item => {
this.st.removeRow(item);
this.data = this.data.filter(i => i.id !== item.id);
}
}
]
}
];
}
}

View File

@ -0,0 +1,66 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2021-12-27 14:08:49
* @LastEditors : Shiming
* @LastEditTime : 2022-02-11 13:46:53
* @FilePath : \\tms-obc-web\\src\\app\\routes\\financial-management\\components\\cost-management\\expenses-receivable\\expenses-receivable.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<page-header-wrapper title="应收费用单" [logo]="logo">
<ng-template #logo>
<button nz-button nz-tooltip nzTooltipTitle="返回上一页" (click)="goBack()">
<i nz-icon nzType="left" nzTheme="outline"></i>
</button>
</ng-template>
</page-header-wrapper>
<nz-card [nzExtra]="cardTemplate" nzTitle="基本信息">
<ng-template #cardTemplate>
<button nz-button nzType="primary" [nzLoading]="service.http.loading">保存</button>
</ng-template>
<div nz-row nzGutter="8">
<div nz-col nzSpan="24">
<sf #sf [schema]="schema" [ui]="{ '*': { spanLabelFixed: 110,grid: { lg: 8, md: 12, sm: 12, xs: 24 } }}"
[button]="'none'"></sf>
</div>
</div>
<st #st [data]="data" [columns]="columns" [page]="{ show: false}" [loading]="service.http.loading" size="small"
[scroll]="{ y: '370px' }" class="mt-sm">
<ng-template st-row="description1" let-item let-index="index">
<nz-select [ngModel]="item.description" (ngModelChange)="st.setRow(index, { description: $event })"
style="width: 100%;">
<nz-option nzValue="曲丽丽" nzLabel="曲丽丽"></nz-option>
<nz-option nzValue="lucy" nzLabel="Lucy"></nz-option>
</nz-select>
</ng-template>
<ng-template st-row="description2" let-item let-index="index">
<nz-select [ngModel]="item.description" (ngModelChange)="st.setRow(index, { description: $event })"
style="width: 100%;">
<nz-option nzValue="曲丽丽" nzLabel="曲丽丽"></nz-option>
<nz-option nzValue="lucy" nzLabel="Lucy"></nz-option>
</nz-select>
</ng-template>
<ng-template st-row="description3" let-item let-index="index">
<nz-select [ngModel]="item.description" (ngModelChange)="st.setRow(index, { description: $event })"
style="width: 100%;">
<nz-option nzValue="曲丽丽" nzLabel="曲丽丽"></nz-option>
<nz-option nzValue="lucy" nzLabel="Lucy"></nz-option>
</nz-select>
</ng-template>
<ng-template st-row="num" let-item let-index="index">
<nz-input-number [ngModel]="item.num" (ngModelChange)="st.setRow(index, { num: $event })"
[nzMin]="0" style="width: 100%;"></nz-input-number>
</ng-template>
<ng-template st-row="description5" let-item let-index="index">
<input nz-input [ngModel]="item.description5"
(ngModelChange)="st.setRow(index, { description5: $event })" />
</ng-template>
</st>
<button nz-button nzType="dashed" nzBlock class="mt-md" (click)="addRow()"><i nz-icon nzType="plus"
nzTheme="outline"></i>添加</button>
</nz-card>

View File

@ -0,0 +1,13 @@
:host::ng-deep {
.content-box {
.ant-card-body {
padding-top: 14px;
}
}
nz-range-picker {
width: 100%;
}
}

Some files were not shown because too many files have changed in this diff Show More